@thetradeengineorg1/snova-shell-module 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/README.md +24 -0
  2. package/bundles/thetradeengineorg1-snova-shell-module.umd.js +13896 -0
  3. package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -0
  4. package/esm2015/lib/globaldependencies/components/componentbase.js +538 -0
  5. package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -0
  6. package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -0
  7. package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -0
  8. package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -0
  9. package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -0
  10. package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -0
  11. package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -0
  12. package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -0
  13. package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -0
  14. package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -0
  15. package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -0
  16. package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -0
  17. package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -0
  18. package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -0
  19. package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -0
  20. package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -0
  21. package/esm2015/lib/shell-components/components/Payments/account.component.js +50 -0
  22. package/esm2015/lib/shell-components/components/Payments/company-information.js +262 -0
  23. package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +138 -0
  24. package/esm2015/lib/shell-components/components/Payments/document.component.js +57 -0
  25. package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +32 -0
  26. package/esm2015/lib/shell-components/components/Payments/product-service.component.js +143 -0
  27. package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +152 -0
  28. package/esm2015/lib/shell-components/components/Payments/transactions.component.js +60 -0
  29. package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +250 -0
  30. package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +89 -0
  31. package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +90 -0
  32. package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +357 -0
  33. package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +85 -0
  34. package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +83 -0
  35. package/esm2015/lib/shell-components/components/header-side/header-side.component.js +1642 -0
  36. package/esm2015/lib/shell-components/components/header-top/header-top.component.js +93 -0
  37. package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +26 -0
  38. package/esm2015/lib/shell-components/components/menu/menu.component.js +2478 -0
  39. package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -0
  40. package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +73 -0
  41. package/esm2015/lib/shell-components/components/notifications/notifications.component.js +449 -0
  42. package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +33 -0
  43. package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +81 -0
  44. package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +43 -0
  45. package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +71 -0
  46. package/esm2015/lib/shell-components/constants/api-urls.js +1052 -0
  47. package/esm2015/lib/shell-components/constants/available-languages.js +25 -0
  48. package/esm2015/lib/shell-components/constants/channel-names.js +38 -0
  49. package/esm2015/lib/shell-components/constants/menu-categories.js +6 -0
  50. package/esm2015/lib/shell-components/constants/notification-routes.js +6 -0
  51. package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -0
  52. package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -0
  53. package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -0
  54. package/esm2015/lib/shell-components/models/AppNotification.js +17 -0
  55. package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -0
  56. package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -0
  57. package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -0
  58. package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -0
  59. package/esm2015/lib/shell-components/models/IBadge.js +2 -0
  60. package/esm2015/lib/shell-components/models/IChildItem.js +2 -0
  61. package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -0
  62. package/esm2015/lib/shell-components/models/IMenuItem.js +2 -0
  63. package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -0
  64. package/esm2015/lib/shell-components/models/IntroModel.js +3 -0
  65. package/esm2015/lib/shell-components/models/MessageDetails.js +3 -0
  66. package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -0
  67. package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -0
  68. package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -0
  69. package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -0
  70. package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -0
  71. package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -0
  72. package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -0
  73. package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -0
  74. package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -0
  75. package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -0
  76. package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -0
  77. package/esm2015/lib/shell-components/models/companieslist.model.js +3 -0
  78. package/esm2015/lib/shell-components/models/company-model.js +7 -0
  79. package/esm2015/lib/shell-components/models/company-payment-model.js +3 -0
  80. package/esm2015/lib/shell-components/models/dragedWidget.js +3 -0
  81. package/esm2015/lib/shell-components/models/employee-List.js +3 -0
  82. package/esm2015/lib/shell-components/models/employee.js +4 -0
  83. package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -0
  84. package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -0
  85. package/esm2015/lib/shell-components/models/export-data.module.js +8 -0
  86. package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -0
  87. package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -0
  88. package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -0
  89. package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -0
  90. package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -0
  91. package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -0
  92. package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -0
  93. package/esm2015/lib/shell-components/models/project.js +3 -0
  94. package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -0
  95. package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -0
  96. package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -0
  97. package/esm2015/lib/shell-components/models/softlabels-model.js +7 -0
  98. package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -0
  99. package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -0
  100. package/esm2015/lib/shell-components/models/store-model.js +3 -0
  101. package/esm2015/lib/shell-components/models/store-search-model.js +4 -0
  102. package/esm2015/lib/shell-components/models/themes.model.js +3 -0
  103. package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -0
  104. package/esm2015/lib/shell-components/models/user.js +8 -0
  105. package/esm2015/lib/shell-components/models/userStory.js +3 -0
  106. package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -0
  107. package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -0
  108. package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -0
  109. package/esm2015/lib/shell-components/models/validation.model.js +2 -0
  110. package/esm2015/lib/shell-components/models/widgetlist.js +6 -0
  111. package/esm2015/lib/shell-components/models/workspaceList.js +3 -0
  112. package/esm2015/lib/shell-components/services/authentication.service.js +96 -0
  113. package/esm2015/lib/shell-components/services/chat.service.js +67 -0
  114. package/esm2015/lib/shell-components/services/common-used.service.js +263 -0
  115. package/esm2015/lib/shell-components/services/feature.service.js +101 -0
  116. package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -0
  117. package/esm2015/lib/shell-components/services/layout.service.js +68 -0
  118. package/esm2015/lib/shell-components/services/payment.service.js +103 -0
  119. package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -0
  120. package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -0
  121. package/esm2015/lib/shell-components/services/signalr.service.js +113 -0
  122. package/esm2015/lib/shell-components/services/theme.service.js +161 -0
  123. package/esm2015/lib/shell-components/shell.module.js +436 -0
  124. package/esm2015/lib/shell-components/shell.routing.js +16 -0
  125. package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -0
  126. package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -0
  127. package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -0
  128. package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -0
  129. package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -0
  130. package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -0
  131. package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -0
  132. package/esm2015/lib/shell-components/store/effects/index.js +13 -0
  133. package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -0
  134. package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -0
  135. package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -0
  136. package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -0
  137. package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -0
  138. package/esm2015/lib/shell-components/store/reducers/index.js +80 -0
  139. package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -0
  140. package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -0
  141. package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -0
  142. package/esm2015/public-api.js +90 -0
  143. package/esm2015/store/reducers/index.js +47 -0
  144. package/esm2015/thetradeengineorg1-snova-shell-module.js +5 -0
  145. package/fesm2015/thetradeengineorg1-snova-shell-module.js +12808 -0
  146. package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -0
  147. package/lib/globaldependencies/components/componentbase.d.ts +455 -0
  148. package/lib/globaldependencies/constants/feature-ids.d.ts +448 -0
  149. package/lib/globaldependencies/constants/localstorage-properties.d.ts +37 -0
  150. package/lib/globaldependencies/helpers/dom.helper.d.ts +7 -0
  151. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +1 -0
  152. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +9 -0
  153. package/lib/globaldependencies/helpers/window.helper.d.ts +12 -0
  154. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +11 -0
  155. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +8 -0
  156. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +8 -0
  157. package/lib/globaldependencies/pipes/orderby-pipe.d.ts +9 -0
  158. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +8 -0
  159. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +11 -0
  160. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +8 -0
  161. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +8 -0
  162. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +8 -0
  163. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +8 -0
  164. package/lib/shell-components/components/Payments/account.component.d.ts +14 -0
  165. package/lib/shell-components/components/Payments/company-information.d.ts +62 -0
  166. package/lib/shell-components/components/Payments/company-plans.component.d.ts +47 -0
  167. package/lib/shell-components/components/Payments/document.component.d.ts +20 -0
  168. package/lib/shell-components/components/Payments/payment-method.component.d.ts +15 -0
  169. package/lib/shell-components/components/Payments/product-service.component.d.ts +48 -0
  170. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +37 -0
  171. package/lib/shell-components/components/Payments/transactions.component.d.ts +28 -0
  172. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +67 -0
  173. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +32 -0
  174. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +32 -0
  175. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +60 -0
  176. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +33 -0
  177. package/lib/shell-components/components/feed-time/feed-time.component.d.ts +27 -0
  178. package/lib/shell-components/components/header-side/header-side.component.d.ts +216 -0
  179. package/lib/shell-components/components/header-top/header-top.component.d.ts +40 -0
  180. package/lib/shell-components/components/lives/lives-welcome-page.d.ts +14 -0
  181. package/lib/shell-components/components/menu/menu.component.d.ts +220 -0
  182. package/lib/shell-components/components/menu/searchTask.enum.d.ts +8 -0
  183. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +27 -0
  184. package/lib/shell-components/components/notifications/notifications.component.d.ts +53 -0
  185. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +10 -0
  186. package/lib/shell-components/components/sidenav/side-bar.component.d.ts +23 -0
  187. package/lib/shell-components/components/sidenav/sidenav.component.d.ts +17 -0
  188. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +25 -0
  189. package/lib/shell-components/constants/api-urls.d.ts +1051 -0
  190. package/lib/shell-components/constants/available-languages.d.ts +7 -0
  191. package/lib/shell-components/constants/channel-names.d.ts +37 -0
  192. package/lib/shell-components/constants/menu-categories.d.ts +5 -0
  193. package/lib/shell-components/constants/notification-routes.d.ts +5 -0
  194. package/lib/shell-components/constants/notification-type-ids.d.ts +41 -0
  195. package/lib/shell-components/enum/recentSearchType.enum.d.ts +11 -0
  196. package/lib/shell-components/models/AppMenuItemModel.d.ts +12 -0
  197. package/lib/shell-components/models/AppNotification.d.ts +12 -0
  198. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +10 -0
  199. package/lib/shell-components/models/ChannelUpdateModel.d.ts +47 -0
  200. package/lib/shell-components/models/EmployeeStatusModel.d.ts +11 -0
  201. package/lib/shell-components/models/IAdjust-screen-options.d.ts +4 -0
  202. package/lib/shell-components/models/IBadge.d.ts +4 -0
  203. package/lib/shell-components/models/IChildItem.d.ts +7 -0
  204. package/lib/shell-components/models/ILayout-change-options.d.ts +4 -0
  205. package/lib/shell-components/models/IMenuItem.d.ts +14 -0
  206. package/lib/shell-components/models/IlayoutConf.d.ts +10 -0
  207. package/lib/shell-components/models/IntroModel.d.ts +3 -0
  208. package/lib/shell-components/models/MessageDetails.d.ts +55 -0
  209. package/lib/shell-components/models/MessageTypingDetails.d.ts +9 -0
  210. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +8 -0
  211. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +8 -0
  212. package/lib/shell-components/models/NotificationsOutPutModel.d.ts +41 -0
  213. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +10 -0
  214. package/lib/shell-components/models/RecentSearchModel.d.ts +14 -0
  215. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +9 -0
  216. package/lib/shell-components/models/ReportSubmittedNotification.d.ts +10 -0
  217. package/lib/shell-components/models/RoleUpdatedNotification.d.ts +7 -0
  218. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +8 -0
  219. package/lib/shell-components/models/archiveUserStoryModel.d.ts +7 -0
  220. package/lib/shell-components/models/companieslist.model.d.ts +8 -0
  221. package/lib/shell-components/models/company-model.d.ts +31 -0
  222. package/lib/shell-components/models/company-payment-model.d.ts +18 -0
  223. package/lib/shell-components/models/dragedWidget.d.ts +16 -0
  224. package/lib/shell-components/models/employee-List.d.ts +8 -0
  225. package/lib/shell-components/models/employee.d.ts +60 -0
  226. package/lib/shell-components/models/entityRoleFeature.d.ts +9 -0
  227. package/lib/shell-components/models/export-configuration-model.d.ts +8 -0
  228. package/lib/shell-components/models/export-data.module.d.ts +6 -0
  229. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +8 -0
  230. package/lib/shell-components/models/import-configuration-model.d.ts +3 -0
  231. package/lib/shell-components/models/initialStatusofUsers.d.ts +5 -0
  232. package/lib/shell-components/models/invoiceOutput-model.d.ts +9 -0
  233. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +7 -0
  234. package/lib/shell-components/models/multiChartsScheduling.d.ts +9 -0
  235. package/lib/shell-components/models/parkUserStoryInputModel.d.ts +7 -0
  236. package/lib/shell-components/models/project.d.ts +28 -0
  237. package/lib/shell-components/models/recentSearchApiModel.d.ts +6 -0
  238. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +10 -0
  239. package/lib/shell-components/models/shellModulesInfo.d.ts +16 -0
  240. package/lib/shell-components/models/softlabels-model.d.ts +66 -0
  241. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +7 -0
  242. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +7 -0
  243. package/lib/shell-components/models/store-model.d.ts +13 -0
  244. package/lib/shell-components/models/store-search-model.d.ts +7 -0
  245. package/lib/shell-components/models/themes.model.d.ts +9 -0
  246. package/lib/shell-components/models/timesheetenabledisable.d.ts +16 -0
  247. package/lib/shell-components/models/user.d.ts +40 -0
  248. package/lib/shell-components/models/userStory.d.ts +188 -0
  249. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +6 -0
  250. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +6 -0
  251. package/lib/shell-components/models/userstory-custom-fields.model.d.ts +6 -0
  252. package/lib/shell-components/models/validation.model.d.ts +5 -0
  253. package/lib/shell-components/models/widgetlist.d.ts +28 -0
  254. package/lib/shell-components/models/workspaceList.d.ts +19 -0
  255. package/lib/shell-components/services/authentication.service.d.ts +18 -0
  256. package/lib/shell-components/services/chat.service.d.ts +16 -0
  257. package/lib/shell-components/services/common-used.service.d.ts +45 -0
  258. package/lib/shell-components/services/feature.service.d.ts +19 -0
  259. package/lib/shell-components/services/google-analytics.service.d.ts +9 -0
  260. package/lib/shell-components/services/layout.service.d.ts +23 -0
  261. package/lib/shell-components/services/payment.service.d.ts +19 -0
  262. package/lib/shell-components/services/recentSearch.service.d.ts +16 -0
  263. package/lib/shell-components/services/shell.modules.service.d.ts +9 -0
  264. package/lib/shell-components/services/signalr.service.d.ts +25 -0
  265. package/lib/shell-components/services/theme.service.d.ts +14 -0
  266. package/lib/shell-components/shell.module.d.ts +117 -0
  267. package/lib/shell-components/shell.routing.d.ts +2 -0
  268. package/lib/shell-components/store/actions/authentication.actions.d.ts +327 -0
  269. package/lib/shell-components/store/actions/chat.actions.d.ts +399 -0
  270. package/lib/shell-components/store/actions/menuitems.actions.d.ts +51 -0
  271. package/lib/shell-components/store/actions/notification-validator.action.d.ts +25 -0
  272. package/lib/shell-components/store/actions/notifications.actions.d.ts +116 -0
  273. package/lib/shell-components/store/effects/authentication.effects.d.ts +54 -0
  274. package/lib/shell-components/store/effects/chat.effects.d.ts +30 -0
  275. package/lib/shell-components/store/effects/index.d.ts +1 -0
  276. package/lib/shell-components/store/effects/menuitems.effects.d.ts +17 -0
  277. package/lib/shell-components/store/effects/notification-validator.effects.d.ts +21 -0
  278. package/lib/shell-components/store/effects/notifications.effects.d.ts +23 -0
  279. package/lib/shell-components/store/reducers/authentication.reducers.d.ts +30 -0
  280. package/lib/shell-components/store/reducers/chat.reducers.d.ts +17 -0
  281. package/lib/shell-components/store/reducers/index.d.ts +59 -0
  282. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +11 -0
  283. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +5 -0
  284. package/lib/shell-components/store/reducers/notifications.reducers.d.ts +10 -0
  285. package/package.json +22 -0
  286. package/public-api.d.ts +80 -0
  287. package/store/reducers/index.d.ts +24 -0
  288. package/thetradeengineorg1-snova-shell-module.d.ts +5 -0
@@ -0,0 +1,2478 @@
1
+ import { Component, ViewChildren, ViewChild, Input, Output, EventEmitter, HostListener, Inject } from "@angular/core";
2
+ import { Subject } from "rxjs";
3
+ import { debounceTime, distinctUntilChanged } from "rxjs/operators";
4
+ import { select } from "@ngrx/store";
5
+ import * as sharedModuleReducers from "./../../store/reducers/index";
6
+ import { tap } from "rxjs/operators";
7
+ import { GetAllMenuItemsTriggered } from "../../store/actions/menuitems.actions";
8
+ import { NavigationEnd } from "@angular/router";
9
+ import * as moment from "moment";
10
+ import { SearchTaskType } from "./searchTask.enum";
11
+ import { FormGroup, FormControl, Validators } from '@angular/forms';
12
+ import * as _ from 'underscore';
13
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
14
+ import { EmployeeListModel } from '../../models/employee';
15
+ import { EmployeeListInput } from '../../models/employee-List';
16
+ import { CustomAppBaseComponent } from '../../../globaldependencies/components/componentbase';
17
+ import { WidgetList } from '../../models/widgetlist';
18
+ import { WorkspaceList } from '../../models/workspaceList';
19
+ import { WINDOW } from '../../../globaldependencies/helpers/window.helper';
20
+ import { MenuCategories } from '../../constants/menu-categories';
21
+ import { FeatureIds } from '../../../globaldependencies/constants/feature-ids';
22
+ import '../../../globaldependencies/helpers/fontawesome-icons';
23
+ import { RecentSearchType } from '../../enum/recentSearchType.enum';
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "@ngrx/store";
26
+ import * as i2 from "ngx-cookie-service";
27
+ import * as i3 from "@angular/router";
28
+ import * as i4 from "ngx-toastr";
29
+ import * as i5 from "@ngx-translate/core";
30
+ import * as i6 from "../../services/authentication.service";
31
+ import * as i7 from "@angular/material/dialog";
32
+ import * as i8 from "../../services/recentSearch.service";
33
+ import * as i9 from "@angular/common";
34
+ import * as i10 from "../../services/theme.service";
35
+ import * as i11 from "@ngrx/effects";
36
+ import * as i12 from "../../services/google-analytics.service";
37
+ import * as i13 from "../../services/common-used.service";
38
+ import * as i14 from "@angular/material/button";
39
+ import * as i15 from "@angular/material/icon";
40
+ import * as i16 from "@angular/material/menu";
41
+ import * as i17 from "@fortawesome/angular-fontawesome";
42
+ import * as i18 from "@angular/material/progress-bar";
43
+ import * as i19 from "@snovasys/snova-avatar";
44
+ import * as i20 from "@ncstate/sat-popover";
45
+ import * as i21 from "@angular/material/card";
46
+ import * as i22 from "@angular/material/form-field";
47
+ import * as i23 from "@angular/material/select";
48
+ import * as i24 from "@angular/material/core";
49
+ import * as i25 from "@angular/material/progress-spinner";
50
+ import * as i26 from "@angular/flex-layout/extended";
51
+ import * as i27 from "@angular/flex-layout/flex";
52
+ import * as i28 from "@angular/material/tooltip";
53
+ import * as i29 from "@angular/forms";
54
+ import * as i30 from "@angular/material/input";
55
+ import * as i31 from "../../../globaldependencies/pipes/softlabels.pipes";
56
+ import * as i32 from "../../../globaldependencies/pipes/highLightText.pipe";
57
+ import * as i33 from "../../../globaldependencies/pipes/removeSpecialCharacters.pipe";
58
+ import * as i34 from "../../../globaldependencies/pipes/fetchSizedAndCachedImage.pipe";
59
+ import * as i35 from "ngx-timeago";
60
+ /** @dynamic */
61
+ export class MenuComponent extends CustomAppBaseComponent {
62
+ constructor(store, cookieService, routes, toastr, translateService, authenticationService, route, dialog, rss, location, themeService, actionUpdates$, cdRef, window, googleAnalyticsService, commonService) {
63
+ super();
64
+ this.store = store;
65
+ this.cookieService = cookieService;
66
+ this.routes = routes;
67
+ this.toastr = toastr;
68
+ this.translateService = translateService;
69
+ this.authenticationService = authenticationService;
70
+ this.route = route;
71
+ this.dialog = dialog;
72
+ this.rss = rss;
73
+ this.location = location;
74
+ this.themeService = themeService;
75
+ this.actionUpdates$ = actionUpdates$;
76
+ this.cdRef = cdRef;
77
+ this.window = window;
78
+ this.googleAnalyticsService = googleAnalyticsService;
79
+ this.commonService = commonService;
80
+ this.isOpened = new EventEmitter();
81
+ this.openNewDashboard = new EventEmitter();
82
+ this.focus = false;
83
+ this.items = [];
84
+ this.menuItemName = "";
85
+ this.subLevels = [];
86
+ this.adminTools = [];
87
+ this.allsearches = [];
88
+ this.recentSearches = [];
89
+ this.projectRoleText = "Project role configuration";
90
+ this.disableWorkspace = false;
91
+ this.disableWorkspaceDelete = false;
92
+ this.disableWorkspacehide = false;
93
+ this.employeeList = [];
94
+ this.loadedEmployeeList = [];
95
+ this.selectedEmployeeIndex = null;
96
+ this.projectList = [];
97
+ this.ngDestroyed$ = new Subject();
98
+ this.userStoryList = [];
99
+ this.userStorySearchList = [];
100
+ this.goalSearchList = [];
101
+ this.selectedRoleIds = [];
102
+ this.delayTimeInput = new Subject();
103
+ this.loadingSearchMenuData = false;
104
+ //this.onFocus();
105
+ // let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
106
+ // this.cookieService.set(LocalStorageProperties.SearchClick, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
107
+ this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
108
+ this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
109
+ this.canAccess_feature_CanEditOtherEmployeeDetails = result;
110
+ });
111
+ this.initializeWorkspaceForm();
112
+ this.routes.events.subscribe(val => {
113
+ if (this.location.path() != "") {
114
+ this.url = this.location.path();
115
+ }
116
+ });
117
+ // this.widgetService.selectedWorkspace.subscribe(id => {
118
+ // this.selectedDashboard = id;
119
+ // });
120
+ // this.actionUpdates$
121
+ // .pipe(
122
+ // takeUntil(this.ngDestroyed$),
123
+ // ofType(AuthenticationActionTypes.GetCompanyThemeCompleted),
124
+ // tap(() => {
125
+ //this.themeModel$ = this.store.pipe(select(sharedModuleReducers.getThemeModel));
126
+ //this.themeModel$.subscribe(x => this.themeModel = x);
127
+ // this.getTheme();
128
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
129
+ this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
130
+ this.themeService.changeTheme(this.themeModel);
131
+ this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
132
+ this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
133
+ this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
134
+ var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
135
+ this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
136
+ this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
137
+ document.getElementById("shortcut-fav-icon").setAttribute("href", this.themeModel.companyMiniLogo);
138
+ this.themeBaseColor = localStorage.getItem('themeColor');
139
+ // // this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
140
+ // // if (this.themeModel && this.themeModel.companyThemeId !== "00000000-0000-0000-0000-000000000000") {
141
+ // // this.themeService.changeTheme(this.themeModel);
142
+ // // this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null);
143
+ // // this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null);
144
+ // // }
145
+ // // else {
146
+ // // var themeModel = new ThemeModel()
147
+ // // themeModel.companyThemeId = "0929D35A-3573-4B06-93FB-C7D46AAFA918";
148
+ // // // themeModel.companyMiniLogo = "assets/images/Logo-favicon.png";
149
+ // // // themeModel.companyMainLogo = "assets/images/Main-Logo.png";
150
+ // // this.themeModel = themeModel;
151
+ // // this.themeService.changeTheme(themeModel);
152
+ // // this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null);
153
+ // // this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null);
154
+ // // }
155
+ // // this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
156
+ // // this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
157
+ // // //this.changeFavIcon();
158
+ // // this.themeBaseColor = localStorage.getItem('themeColor');
159
+ //this.cdRef.detectChanges();
160
+ // })
161
+ // )
162
+ // .subscribe();
163
+ // this.actionUpdates$
164
+ // .pipe(
165
+ // takeUntil(this.ngDestroyed$),
166
+ // ofType(WorkspacesActionTypes.LoadWorkspaceByIdCompleted),
167
+ // tap((data: any) => {
168
+ // var workspacesList = data.searchWorkspacesSuccess;
169
+ // this.dashboardUpdateInProgress = false;
170
+ // // this.closeAddWorkspaceDialog();
171
+ // this.disableWorkspace = false;
172
+ // if (workspacesList.length > 0) {
173
+ // this.workspaces.push(workspacesList[0]);
174
+ // this.display = false;
175
+ // this.isOpened.emit(this.display);
176
+ // this.openNewDashboard.emit(workspacesList[0].workspaceId)
177
+ // }
178
+ // })
179
+ // ).subscribe();
180
+ //this.getAllProjects();
181
+ this.delayTimeInput.pipe(debounceTime(2000), distinctUntilChanged())
182
+ .subscribe(value => {
183
+ this.SearchItem(value);
184
+ });
185
+ }
186
+ set reloadAll(data) {
187
+ if (data) {
188
+ this.adminTools = [];
189
+ this.tools = [];
190
+ this.ngOnInit();
191
+ }
192
+ }
193
+ getTheme() {
194
+ this.authenticationService.getThemes().subscribe((response) => {
195
+ if (response.success) {
196
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
197
+ this.cookieService.set('CompanyTheme', JSON.stringify(response.data), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
198
+ this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
199
+ this.themeService.changeTheme(this.themeModel);
200
+ this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
201
+ this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
202
+ this.siteUrl = response.data.registrerSiteAddress;
203
+ this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
204
+ var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
205
+ this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
206
+ this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
207
+ if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
208
+ this.companyMainLogo = response.data.companyMainLogo;
209
+ }
210
+ if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
211
+ this.companyMiniLogo = response.data.companyMiniLogo;
212
+ }
213
+ document.getElementById("shortcut-fav-icon").setAttribute("href", this.themeModel.companyMiniLogo);
214
+ this.themeBaseColor = localStorage.getItem('themeColor');
215
+ this.cdRef.detectChanges();
216
+ }
217
+ });
218
+ }
219
+ keyOpenEvent() {
220
+ this.element.nativeElement.focus();
221
+ this.display = true;
222
+ this.searchByText = false;
223
+ this.searchById = false;
224
+ this.isOpened.emit(this.display);
225
+ this.onFocus();
226
+ }
227
+ keyCloseEvent() {
228
+ this.element.nativeElement.blur();
229
+ this.display = false;
230
+ this.searchText = '';
231
+ this.searchByText = false;
232
+ this.searchById = false;
233
+ this.isOpened.emit(this.display);
234
+ }
235
+ remoteSearchByText() {
236
+ this.searchById = false;
237
+ this.searchByText = true;
238
+ this.element.nativeElement.focus();
239
+ //this.display = true;
240
+ this.isOpened.emit(this.display);
241
+ }
242
+ remoteSearchById() {
243
+ this.searchByText = false;
244
+ this.searchById = true;
245
+ this.element.nativeElement.focus();
246
+ //this.display = true;
247
+ this.isOpened.emit(this.display);
248
+ }
249
+ convertToLocalTime(time) {
250
+ var utcDate = moment.utc(time).format();
251
+ var localDate = moment.utc(utcDate).local().format();
252
+ return localDate;
253
+ }
254
+ initializeWorkspaceForm() {
255
+ this.selectedRoleIds = null;
256
+ this.disableWorkspace = false;
257
+ this.disableWorkspacehide = false;
258
+ this.workspaceForm = new FormGroup({
259
+ workspaceName: new FormControl(null, Validators.compose([
260
+ Validators.required,
261
+ Validators.maxLength(50)
262
+ ])),
263
+ selectedRoles: new FormControl(null, Validators.compose([
264
+ Validators.required
265
+ ])),
266
+ description: new FormControl(null, Validators.compose([
267
+ Validators.maxLength(1000)
268
+ ])),
269
+ editRoleIds: new FormControl(null, []),
270
+ deleteRoleIds: new FormControl(null, [])
271
+ });
272
+ }
273
+ ngOnInit() {
274
+ super.ngOnInit();
275
+ this.defaultDashboardId = this.cookieService.check(LocalStorageProperties.DefaultDashboard) ? JSON.parse(this.cookieService.get(LocalStorageProperties.DefaultDashboard)) : null;
276
+ ;
277
+ //this.store.dispatch(new GetCompanyThemeTriggered());
278
+ this.adminTools = [];
279
+ // var dashboards = JSON.parse(localStorage.getItem(LocalStorageProperties.Dashboards));
280
+ // if (dashboards && dashboards != "null") {
281
+ // this.workspaces = this.workspacesForLoop = dashboards;
282
+ // }
283
+ // var menuItems = JSON.parse(localStorage.getItem(LocalStorageProperties.MenuItems))
284
+ // if (menuItems && menuItems != "null") {
285
+ // this.menuItem = menuItems;
286
+ // this.items = this.menuItem.filter(item => item.type != "dropDown");
287
+ // this.itemClicked = this.items[0];
288
+ // }
289
+ // var widgets = JSON.parse(localStorage.getItem(LocalStorageProperties.FavouriteWidgets));
290
+ // if (widgets && widgets != "null") {
291
+ // this.widgets = this.originalWidgets = widgets;
292
+ // }
293
+ // var recentSearches = JSON.parse(localStorage.getItem(LocalStorageProperties.RecentSearches));
294
+ // if (recentSearches && recentSearches != "null") {
295
+ // this.allsearches = this.recentSearches = recentSearches;
296
+ // }
297
+ // this.loadWidgetsList();
298
+ // this.loadWorkspacesList();
299
+ this.getSoftLabelConfigurations();
300
+ this.getCompanySettings();
301
+ this.menuItems$ = this.store.pipe(select(sharedModuleReducers.getCurrentActiveMenuCategoryMenuItems), tap(menuList => console.log(menuList)));
302
+ // this.menuItems$.subscribe(x => {
303
+ // var a = x;
304
+ // var b = this.menuItem.filter(item => item.type != "dropDown");
305
+ // //this.itemClicked = this.items[0];
306
+ // //this.menusfetchInProgress = false;
307
+ // });
308
+ // this.store.dispatch(new GetAllMenuItemsTriggered(MenuCategories.Main));
309
+ var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
310
+ this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
311
+ this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
312
+ if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
313
+ this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
314
+ }
315
+ if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
316
+ this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
317
+ }
318
+ if (document.getElementById('shortcut-fav-icon')) {
319
+ document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
320
+ }
321
+ //this.getRecentSearches();
322
+ this.selectedList = [];
323
+ // this.custapp = {
324
+ // name: "Custom applications",
325
+ // link: "/applications/custom-applications",
326
+ // permission: this.canAccess_feature_AddOrUpdateApplications$
327
+ // }
328
+ // this.forms = {
329
+ // name: "Forms",
330
+ // link: "/applications/view-forms",
331
+ // permission: this.canAccess_feature_ViewForms$
332
+ // }
333
+ // this.projectRoleConfiguration = {
334
+ // name: "Project role configuration",
335
+ // link: "/rolemanagement/entityrolemanagement",
336
+ // permission: this.canAccess_feature_ManageProjectRolePermissions$
337
+ // }
338
+ // this.roleConfiguration = {
339
+ // name: "Role configuration",
340
+ // link: "/rolemanagement/rolemanagement",
341
+ // permission: this.canAccess_feature_ViewRoles$
342
+ // }
343
+ // this.canAccess_feature_AddOrUpdateApplications$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_AddOrUpdateApplications }));
344
+ // this.canAccess_feature_AddOrUpdateApplications$.subscribe((result) => {
345
+ // this.canAccess_feature_AddOrUpdateApplications = result;
346
+ // if (result) {
347
+ // this.adminTools.some((flow) => flow.name == 'Custom applications') ? null : this.adminTools.push(this.custapp);
348
+ // }
349
+ // })
350
+ // this.canAccess_feature_AddOrUpdateForm$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_AddOrUpdateForm }));
351
+ // this.canAccess_feature_AddOrUpdateForm$.subscribe((result) => {
352
+ // this.canAccess_feature_AddOrUpdateForm = result;
353
+ // if (result) {
354
+ // this.adminTools.some((flow) => flow.name == 'Forms') ? null : this.adminTools.push(this.forms);
355
+ // }
356
+ // })
357
+ // this.canAccess_feature_ViewForms$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ViewForms })); // //this.route.url.subscribe((url) => this.url = url.toString());
358
+ // this.canAccess_feature_ViewForms$.subscribe((result) => {
359
+ // this.canAccess_feature_ViewForms = result;
360
+ // if (result) {
361
+ // this.adminTools.some((flow) => flow.name == 'Forms') ? null : this.adminTools.push(this.forms);
362
+ // }
363
+ // })
364
+ // this.canAccess_feature_ManageProjectRolePermissions$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ManageProjectRolePermissions }));
365
+ // this.canAccess_feature_ManageProjectRolePermissions$.subscribe((result) => {
366
+ // this.canAccess_feature_ManageProjectRolePermissions = result;
367
+ // if (result) {
368
+ // this.adminTools.some((flow) => flow.name == 'Project role configuration') ? null : this.adminTools.push(this.projectRoleConfiguration);
369
+ // }
370
+ // })
371
+ // this.canAccess_feature_ViewRoles$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ViewRoles }));
372
+ // this.canAccess_feature_ViewRoles$.subscribe((result) => {
373
+ // this.canAccess_feature_ViewRoles = result;
374
+ // if (result) {
375
+ // this.adminTools.some((flow) => flow.name == 'Role configuration') ? null : this.adminTools.push(this.roleConfiguration);
376
+ // }
377
+ // })
378
+ // this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
379
+ // this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
380
+ // this.canAccess_feature_CanEditOtherEmployeeDetails = result;
381
+ // if (result) {
382
+ // // this.getAllEmployees();
383
+ // }
384
+ // })
385
+ this.tools = this.adminTools;
386
+ //this.selectedRowIndex = 0;
387
+ //this.getAllEmployees();
388
+ // this.loadWidgetsList(null);
389
+ // this.loadWorkspacesList();
390
+ this.userStorySearchList = [];
391
+ this.goalSearchList = [];
392
+ // if(this.items.length>0) {
393
+ // this.selectedRowIndex = 0; this.itemClicked = this.items[0];
394
+ // } else if(this.tools.length>0) {
395
+ // this.t=0; this.itemClicked = this.tools[0];
396
+ // } else if(this.workspaces.length>0) {
397
+ // this.ws = 0; this.itemClicked =this.workspaces[0];
398
+ // }
399
+ this.SearchItem = _.debounce(this.SearchItem, 1000);
400
+ this.routes.events
401
+ .subscribe((event) => {
402
+ if (event instanceof NavigationEnd) {
403
+ this.routerActive();
404
+ }
405
+ });
406
+ }
407
+ openInfo(infoPopOver) {
408
+ infoPopOver.openPopover();
409
+ }
410
+ // getAllProjects() {
411
+ // const projectSearchResult = new ProjectSearchCriteriaInputModel();
412
+ // projectSearchResult.isArchived = false;
413
+ // this.commonService.searchProjects(projectSearchResult).subscribe((response: any) => {
414
+ // if (response.success == true) {
415
+ // if (response.data) {
416
+ // this.projectSearchResults = response.data;
417
+ // }
418
+ // }
419
+ // else {
420
+ // this.validationMessage = response.apiResponseMessages[0].message;
421
+ // this.projectSearchResults = [];
422
+ // this.toastr.error(this.validationMessage);
423
+ // }
424
+ // })
425
+ // }
426
+ getCompanySettings() {
427
+ let companySettingsModel = [];
428
+ this.companySettingsMOdel$ = this.store.pipe(select(sharedModuleReducers.getCompanySettings));
429
+ this.companySettingsMOdel$.subscribe((x) => companySettingsModel = x);
430
+ let bugBoardResult = companySettingsModel.filter(item => item.key.trim() == "EnableBugBoard");
431
+ if (bugBoardResult && bugBoardResult.length > 0) {
432
+ this.isEnableBugBoard = bugBoardResult[0].value == "1" ? true : false;
433
+ }
434
+ this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
435
+ this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
436
+ if (document.getElementById('shortcut-fav-icon')) {
437
+ document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
438
+ }
439
+ }
440
+ loadSearchData() {
441
+ var menuItems = JSON.parse(localStorage.getItem(LocalStorageProperties.MenuItems));
442
+ if (menuItems && menuItems != "null") {
443
+ this.menuItem = menuItems;
444
+ this.items = this.menuItem.filter(item => item.type != "dropDown");
445
+ this.itemClicked = this.items[0];
446
+ }
447
+ var widgets = JSON.parse(localStorage.getItem(LocalStorageProperties.FavouriteWidgets));
448
+ if (widgets && widgets != "null") {
449
+ this.widgets = this.originalWidgets = widgets;
450
+ }
451
+ var recentSearches = JSON.parse(localStorage.getItem(LocalStorageProperties.RecentSearches));
452
+ if (recentSearches && recentSearches != "null") {
453
+ this.allsearches = this.recentSearches = recentSearches;
454
+ }
455
+ }
456
+ translateapplicationname(item) {
457
+ if (item == null) {
458
+ return null;
459
+ }
460
+ var localvariable = item.trim();
461
+ var name = this.translateService.instant("APP." + localvariable);
462
+ if (name.indexOf("APP.") != -1) {
463
+ return item;
464
+ }
465
+ else {
466
+ return name;
467
+ }
468
+ }
469
+ onFocus() {
470
+ if (!this.searchById && !this.searchByText) {
471
+ var retrieveDashboards = true;
472
+ var dashboards = localStorage.getItem(LocalStorageProperties.Dashboards);
473
+ if (dashboards && dashboards != "null") {
474
+ retrieveDashboards = false;
475
+ this.workspacesForLoop = JSON.parse(dashboards);
476
+ if (this.searchText) {
477
+ this.workspaces = this.workspacesForLoop.filter(item => item.workspaceName
478
+ .toLowerCase()
479
+ .includes(this.searchText.toLowerCase()) !==
480
+ false);
481
+ }
482
+ else {
483
+ this.workspaces = this.workspacesForLoop;
484
+ }
485
+ }
486
+ if (!(this.cookieService.check(LocalStorageProperties.SearchClick) && JSON.parse(this.cookieService.get(LocalStorageProperties.SearchClick)) == true)) {
487
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
488
+ this.cookieService.set(LocalStorageProperties.SearchClick, JSON.stringify(true), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
489
+ // this.loadWidgetsList(null);
490
+ // this.loadWorkspacesList();
491
+ // this.getAllMenuItems();
492
+ this.loadingSearchMenuData = true;
493
+ this.rss.searchMenuData(retrieveDashboards)
494
+ .subscribe((res) => {
495
+ if (res.success && res.data) {
496
+ if (res.data.workspaces) {
497
+ this.workspaces = res.data.workspaces;
498
+ localStorage.setItem(LocalStorageProperties.Dashboards, JSON.stringify(this.workspaces));
499
+ this.workspacesForLoop = this.workspaces;
500
+ //this.defaultDashboard = this.workspaces.find(i => i.isDefault == true);
501
+ }
502
+ if (res.data.widgets) {
503
+ this.originalWidgets = res.data.widgets.sort((a, b) => a.widgetName.toLowerCase() > b.widgetName.toLowerCase() ? 1 : -1);
504
+ this.widgets = this.originalWidgets;
505
+ localStorage.setItem(LocalStorageProperties.FavouriteWidgets, JSON.stringify(this.widgets));
506
+ }
507
+ if (res.data.menuItems) {
508
+ // var applications = res.data.menuItems.filter(function (x) {
509
+ // return (
510
+ // x.menuCategory &&
511
+ // MenuCategories.Main &&
512
+ // x.menuCategory.toLowerCase() === MenuCategories.Main.toLowerCase()
513
+ // );
514
+ // })
515
+ this.menuItem = res.data.menuItems;
516
+ localStorage.setItem(LocalStorageProperties.MenuItems, JSON.stringify(this.menuItem));
517
+ this.items = this.menuItem.filter(item => item.type != "dropDown");
518
+ //this.itemClicked = this.items[0];
519
+ }
520
+ if (res.data.recentSearch) {
521
+ this.allsearches = res.data.recentSearch;
522
+ this.recentSearches = this.allsearches;
523
+ localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
524
+ }
525
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
526
+ this.cookieService.set(LocalStorageProperties.LoadFavouriteWidgets, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
527
+ this.cookieService.set(LocalStorageProperties.LoadRecentSearches, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
528
+ this.routerActive();
529
+ }
530
+ this.loadingSearchMenuData = false;
531
+ });
532
+ }
533
+ else {
534
+ this.loadSearchData();
535
+ }
536
+ // else {
537
+ // if (!(this.cookieService.check(LocalStorageProperties.LoadFavouriteWidgets) && JSON.parse(this.cookieService.get(LocalStorageProperties.LoadFavouriteWidgets)) == false)) {
538
+ // this.loadWidgetsList(null, true);
539
+ // let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
540
+ // this.cookieService.set(LocalStorageProperties.LoadFavouriteWidgets, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
541
+ // }
542
+ // if (!(this.cookieService.check(LocalStorageProperties.LoadRecentSearches) && JSON.parse(this.cookieService.get(LocalStorageProperties.LoadRecentSearches)) == false)) {
543
+ // this.getRecentSearches();
544
+ // let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
545
+ // this.cookieService.set(LocalStorageProperties.LoadRecentSearches, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
546
+ // }
547
+ // this.routerActive();
548
+ // }
549
+ this.routerActive();
550
+ }
551
+ this.display = true;
552
+ this.isOpened.emit(this.display);
553
+ }
554
+ routerActive() {
555
+ if (this.routes.url.includes("dashboard-management/dashboard") && this.routes.url.split("/")[3]) {
556
+ var dashboardId = this.routes.url.split("/")[3];
557
+ if (dashboardId && this.workspaces.length > 0) {
558
+ var index = this.workspaces.findIndex(i => i.workspaceId == dashboardId);
559
+ this.ws = index;
560
+ this.selectedRowIndex = this.wd = this.rs = null;
561
+ this.itemClicked = this.workspaces[this.ws];
562
+ }
563
+ }
564
+ else if (this.routes.url.includes("dashboard-management/widgets") && this.routes.url.split("/")[3]) {
565
+ var widgetId = this.routes.url.split("/")[3];
566
+ if (widgetId && this.widgets.length > 0) {
567
+ var index = this.widgets.findIndex(i => i.widgetId == widgetId);
568
+ if (index > 0) {
569
+ this.wd = index;
570
+ this.selectedRowIndex = this.ws = this.rs = null;
571
+ this.itemClicked = this.widgets[this.wd];
572
+ }
573
+ else if (this.recentSearches && this.recentSearches.length > 0) {
574
+ var indexRs = this.recentSearches.findIndex(i => i.itemId == widgetId);
575
+ this.rs = indexRs;
576
+ this.selectedRowIndex = this.ws = this.wd = null;
577
+ this.itemClicked = this.recentSearches[this.rs];
578
+ }
579
+ }
580
+ }
581
+ else if (this.items.length > 0) {
582
+ var index = this.items.findIndex(i => this.routes.url == "/" + i.state);
583
+ this.selectedRowIndex = index;
584
+ this.ws = this.wd = this.rs = null;
585
+ this.itemClicked = this.items[this.selectedRowIndex];
586
+ this.cdRef.detectChanges();
587
+ }
588
+ }
589
+ loadWorkspacesList() {
590
+ this.workspacesfetchInProgress = true;
591
+ var workspacelist = new WorkspaceList();
592
+ workspacelist.workspaceId = "null";
593
+ workspacelist.isHidden = false;
594
+ this.commonService.GetWorkspaceList(workspacelist).subscribe((result) => {
595
+ this.workspaces = result.data;
596
+ localStorage.setItem(LocalStorageProperties.Dashboards, JSON.stringify(result.data));
597
+ this.workspacesForLoop = this.workspaces;
598
+ this.defaultDashboard = this.workspaces.find(i => i.isDefault == true);
599
+ this.workspacesfetchInProgress = false;
600
+ });
601
+ // this.store.dispatch(new LoadWorkspacesListTriggered(this.workspacelist));
602
+ }
603
+ ;
604
+ openApps() {
605
+ this.routes.navigate(["app-store/widgets"]);
606
+ }
607
+ loadWidgetsList(searchText, store = false) {
608
+ this.widgetsfetchInProgress = true;
609
+ this.widget = new WidgetList();
610
+ this.widget.widgetId = "null";
611
+ this.widget.isArchived = false;
612
+ this.widget.pageNumber = null;
613
+ this.widget.pageSize = null;
614
+ this.widget.sortDirectionAsc = true;
615
+ this.widget.isFavouriteWidget = true;
616
+ if (searchText)
617
+ this.widget.searchText = searchText;
618
+ this.commonService.GetWidgetsBasedOnUser(this.widget).subscribe((result) => {
619
+ this.widgets = [];
620
+ if (result.success) {
621
+ this.originalWidgets = result.data.sort((a, b) => a.widgetName.toLowerCase() > b.widgetName.toLowerCase() ? 1 : -1);
622
+ this.widgets = this.originalWidgets;
623
+ if (store) {
624
+ localStorage.setItem(LocalStorageProperties.FavouriteWidgets, JSON.stringify(this.widgets));
625
+ }
626
+ this.widgetsfetchInProgress = false;
627
+ this.cdRef.detectChanges();
628
+ }
629
+ });
630
+ var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
631
+ this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
632
+ this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
633
+ // this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
634
+ // this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
635
+ if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
636
+ this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
637
+ }
638
+ if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
639
+ this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
640
+ }
641
+ if (document.getElementById('shortcut-fav-icon')) {
642
+ document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
643
+ }
644
+ }
645
+ getAllEmployees() {
646
+ this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
647
+ this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
648
+ this.canAccess_feature_CanEditOtherEmployeeDetails = result;
649
+ });
650
+ let employeeSpentTime = new EmployeeListInput();
651
+ employeeSpentTime.sortDirectionAsc = true;
652
+ employeeSpentTime.isActive = true;
653
+ // this.hrDashboarService.GetAllEmployees(employeeSpentTime).subscribe((result: any) => {
654
+ // if (result.success) {
655
+ // this.loadedEmployeeList = result.data;
656
+ // if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
657
+ // var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
658
+ // this.loadedEmployeeList = this.loadedEmployeeList.filter(x => (x.userId.toLowerCase() == currentUserId.toLowerCase()));
659
+ // }
660
+ // this.employeeList = this.loadedEmployeeList;
661
+ // }
662
+ // })
663
+ const employeeListSearchResult = new EmployeeListModel();
664
+ employeeListSearchResult.sortDirectionAsc = true;
665
+ this.commonService.getAllEmployees(employeeListSearchResult).subscribe((result) => {
666
+ if (result.success) {
667
+ this.loadedEmployeeList = result.data;
668
+ if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
669
+ var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
670
+ this.loadedEmployeeList = this.loadedEmployeeList.filter(x => (x.userId.toLowerCase() == currentUserId.toLowerCase()));
671
+ }
672
+ this.employeeList = this.loadedEmployeeList;
673
+ }
674
+ });
675
+ }
676
+ // ngAfterViewInit() {
677
+ // this.e = this.element.nativeElement;
678
+ // let outSideClick = this.e.addEventListener('blur',()=>{
679
+ // this.display = false;
680
+ // });
681
+ // }
682
+ OpenMenuItems(openMenuPopUp) {
683
+ openMenuPopUp.openPopover();
684
+ }
685
+ openLevel2Menu(link, event) {
686
+ this.stateLvl1 = link;
687
+ this.subLevels = event;
688
+ }
689
+ openLevel3Menu(link1, link2, event) {
690
+ this.level3Link1 = link1;
691
+ this.level3Link2 = link2;
692
+ this.subLevelsForLevel2 = event;
693
+ }
694
+ getAllMenuItems() {
695
+ this.menusfetchInProgress = true;
696
+ this.store.dispatch(new GetAllMenuItemsTriggered(MenuCategories.Main));
697
+ const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
698
+ this.defaultDashboardId = this.cookieService.check(LocalStorageProperties.DefaultDashboard) ? JSON.parse(this.cookieService.get(LocalStorageProperties.DefaultDashboard)) : null;
699
+ ;
700
+ if (this.defaultDashboardId && userReference != "null" && userReference != null) {
701
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + this.defaultDashboardId + "/form/" + userReference);
702
+ }
703
+ else if (this.defaultDashboardId) {
704
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + this.defaultDashboardId);
705
+ }
706
+ // this.routes.navigateByUrl("lives/welcome");
707
+ }
708
+ navigateToUrl(workspaceId) {
709
+ const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
710
+ if (userReference != "null" && userReference != null) {
711
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + workspaceId + "/form/" + userReference);
712
+ }
713
+ else {
714
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + workspaceId);
715
+ }
716
+ }
717
+ getSoftLabelConfigurations() {
718
+ this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
719
+ this.cdRef.markForCheck();
720
+ }
721
+ getSearchMenuItems() {
722
+ if (this.searchByText) {
723
+ this.searchByTextLoading = true;
724
+ this.rss.getSearchMenuItems({ searchText: this.searchText, searchUniqueId: null })
725
+ .subscribe((response) => {
726
+ if (response.success && response.data != null && response.data != undefined) {
727
+ if (response.data.length > 0) {
728
+ if (this.searchText) {
729
+ this.projectList = response.data.filter(us => us.itemType == SearchTaskType.Project);
730
+ this.userStorySearchList = response.data.filter(us => (us.itemType == SearchTaskType.workItemORBug) || (us.itemType == SearchTaskType.adhoc));
731
+ this.goalSearchList = response.data.filter(us => us.itemType == SearchTaskType.goal || (us.itemType == SearchTaskType.sprint));
732
+ const users = response.data.filter(us => us.itemType == SearchTaskType.Employee);
733
+ this.loadedEmployeeList = users;
734
+ if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
735
+ var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
736
+ this.loadedEmployeeList = this.loadedEmployeeList.filter((x) => (x.itemId.toLowerCase() == currentUserId.toLowerCase()));
737
+ }
738
+ this.employeeList = this.loadedEmployeeList;
739
+ if (this.projectList && this.projectList.length > 0) {
740
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = this.users = this.selectedEmployeeIndex = null;
741
+ this.projectIndex = 0;
742
+ this.itemClicked = this.projectList[0];
743
+ }
744
+ else if (this.userStorySearchList && this.userStorySearchList.length > 0) {
745
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = null;
746
+ this.users = 0;
747
+ this.itemClicked = this.userStorySearchList[0];
748
+ }
749
+ else if (this.goalSearchList && this.goalSearchList.length > 0) {
750
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = this.projectIndex = this.selectedEmployeeIndex = null;
751
+ this.goalIndex = 0;
752
+ this.itemClicked = this.goalSearchList[0];
753
+ }
754
+ else if (this.employeeList && this.employeeList.length > 0) {
755
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = this.projectIndex = this.goalIndex = null;
756
+ this.selectedEmployeeIndex = 0;
757
+ this.itemClicked = this.employeeList[0];
758
+ }
759
+ else {
760
+ this.users = this.goalIndex = this.projectIndex = this.selectedEmployeeIndex = null;
761
+ }
762
+ this.cdRef.detectChanges();
763
+ }
764
+ }
765
+ else {
766
+ this.userStorySearchList = [];
767
+ this.goalSearchList = [];
768
+ }
769
+ }
770
+ this.searchByTextLoading = false;
771
+ });
772
+ }
773
+ }
774
+ onProjectSelect(item, event) {
775
+ if (event.which == 1) {
776
+ this.searchText = '';
777
+ this.projectList = [];
778
+ this.InsertSearch(item.itemName, RecentSearchType.project, item.itemId);
779
+ this.routes.navigateByUrl("projects/projectstatus/" + item.itemId + "/active-goals");
780
+ }
781
+ else {
782
+ return;
783
+ }
784
+ }
785
+ SearchItem(event) {
786
+ this.userStorySearchList = [];
787
+ this.goalSearchList = [];
788
+ this.themeBaseColor = localStorage.getItem('themeColor');
789
+ var element = !!document.getElementById("style-1");
790
+ element ? document.getElementById("style-1").scrollTop = 0 : null;
791
+ var elem = !!document.getElementById("style-2");
792
+ elem ? document.getElementById("style-2").scrollTop = 0 : null;
793
+ var emp = !!document.getElementById("style-3");
794
+ emp ? document.getElementById("style-3").scrollTop = 0 : null;
795
+ var widget = !!document.getElementById("style-4");
796
+ widget ? document.getElementById("style-4").scrollTop = 0 : null;
797
+ //this.display = true;
798
+ this.isOpened.emit(this.display);
799
+ if (event.target.value) {
800
+ if (this.searchByText) {
801
+ return this.getSearchMenuItems();
802
+ }
803
+ else if (this.searchById) {
804
+ return;
805
+ }
806
+ this.items = this.menuItem.filter(item => item.menu.toLowerCase().includes(event.target.value.toLowerCase()) !==
807
+ false && item.type != "dropDown");
808
+ this.workspaces = this.workspacesForLoop.filter(item => item.workspaceName
809
+ .toLowerCase()
810
+ .includes(event.target.value.toLowerCase()) !==
811
+ false);
812
+ this.adminTools ? this.tools = this.adminTools.filter(item => item.name.toLowerCase().includes(event.target.value.toLowerCase()) !==
813
+ false) : null;
814
+ //this.loadWidgetsList(event.target.value);
815
+ this.originalWidgets ? this.widgets = this.originalWidgets.filter(item => item.widgetName.toLowerCase().includes(event.target.value.toLowerCase()) !==
816
+ false) : null;
817
+ this.employeeList = this.loadedEmployeeList.length > 0 ? (this.loadedEmployeeList.filter(x => ((x.fullName.toLowerCase().includes(event.target.value.toLowerCase()) !== false)
818
+ || (x.employeeNumber.toLowerCase().includes(event.target.value.toLowerCase()) !== false)
819
+ || (x.surName.toLowerCase().includes(event.target.value.toLowerCase()) !== false)))) : null;
820
+ // this.allsearches ? this.recentSearches = this.allsearches.filter(
821
+ // item =>
822
+ // item.recentSearch.toLowerCase().indexOf(event.target.value.toLowerCase()) !== -1
823
+ // ) : null;
824
+ this.allsearches ? this.recentSearches = this.allsearches.filter(item => item.recentSearch.toLowerCase().includes(event.target.value.toLowerCase()) !==
825
+ false) : null;
826
+ if (event.target.value && event.target.value.search('-') > 0) {
827
+ this.rss.searchGoalTasks(event.target.value).subscribe((response) => {
828
+ if (response.success && response.data != null && response.data != undefined) {
829
+ if (response.data.length > 0) {
830
+ if (this.searchText) {
831
+ this.userStorySearchList = response.data.filter(us => (us.type == SearchTaskType.workItemORBug) || (us.type == SearchTaskType.adhoc));
832
+ this.goalSearchList = response.data.filter(us => us.type == SearchTaskType.goal || (us.type == SearchTaskType.sprint));
833
+ if (!((this.items.length > 0 && this.items) || (this.tools && this.tools.length > 0) || (this.workspaces && this.workspaces.length > 0) || (this.widgets && this.widgets.length > 0))) {
834
+ if (this.userStorySearchList && this.userStorySearchList.length > 0) {
835
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = null;
836
+ this.users = 0;
837
+ this.itemClicked = this.userStorySearchList[0];
838
+ }
839
+ else if (this.goalSearchList && this.goalSearchList.length > 0) {
840
+ this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = null;
841
+ this.goalIndex = 0;
842
+ this.itemClicked = this.goalSearchList[0];
843
+ }
844
+ else {
845
+ this.users = this.goalIndex = null;
846
+ }
847
+ this.cdRef.detectChanges();
848
+ }
849
+ }
850
+ }
851
+ else {
852
+ this.userStorySearchList = [];
853
+ this.goalSearchList = [];
854
+ }
855
+ }
856
+ });
857
+ }
858
+ // const userStorySearchCriteriaTemp = new UserStorySearchCriteriaInputModel();
859
+ // userStorySearchCriteriaTemp.pageSize = 1000;
860
+ // userStorySearchCriteriaTemp.searchText = event.target.value;
861
+ // //.replace(/\s/g, "");
862
+ // // if (event.target.value.indexOf('-')) {
863
+ // this.userService.searchUserStories(userStorySearchCriteriaTemp).subscribe((response: any) => {
864
+ // this.userStorySearchList = [];
865
+ // let companySettingsModel = [];
866
+ // if (response.success && response.data != null && response.data != undefined && response.data.length > 0) {
867
+ // var userStoriesList = response.data;
868
+ // this.companySettingsMOdel$ = this.store.pipe(select(sharedModuleReducers.getCompanySettings));
869
+ // this.companySettingsMOdel$.subscribe((x) => companySettingsModel = x);
870
+ // let bugBoardResult = companySettingsModel.filter(item => item.key.trim() == "EnableBugBoard");
871
+ // if (bugBoardResult.length > 0) {
872
+ // this.isEnableBugBoard = bugBoardResult[0].value == "1" ? true : false;
873
+ // }
874
+ // if (!this.isEnableBugBoard) {
875
+ // userStoriesList = userStoriesList.map((x) => x.isBug == false);
876
+ // }
877
+ // this.userStorySearchList = userStoriesList.map(function (item) {
878
+ // return {
879
+ // goalId: item.goalId,
880
+ // goalName: item.goalName,
881
+ // goalShortName: item.goalShortName,
882
+ // goalUniqueName: item.goalUniqueName,
883
+ // projectId: item.projectId,
884
+ // projectName: item.projectName,
885
+ // sprintId: item.sprintId,
886
+ // sprintName: item.sprintName,
887
+ // userStoryId: item.userStoryId,
888
+ // userStoryName: item.userStoryName,
889
+ // userStoryStatusName: item.userStoryStatusName,
890
+ // userStoryTypeName: item.userStoryTypeName,
891
+ // userStoryUniqueName: item.userStoryUniqueName
892
+ // }
893
+ // });
894
+ // this.cdRef.detectChanges();
895
+ // }
896
+ // });
897
+ // // }
898
+ // let searchGoals = new GoalSearchCriteriaApiInputModel();
899
+ // searchGoals.searchText = event.target.value;
900
+ // //.replace(/\s/g, "");
901
+ // //if (event.target.value.indexOf('-')) {
902
+ // this.userService.searchGoals(searchGoals).subscribe((response: any) => {
903
+ // this.goalSearchList = [];
904
+ // if (response.success && response.data != null && response.data != undefined && response.data.length > 0) {
905
+ // this.goalSearchList = response.data.map(function (item) {
906
+ // return {
907
+ // goalId: item.goalId,
908
+ // goalName: item.goalName,
909
+ // goalShortName: item.goalShortName,
910
+ // goalUniqueName: item.goalUniqueName,
911
+ // projectId: item.projectId,
912
+ // projectName: item.projectName
913
+ // }
914
+ // });
915
+ // this.cdRef.detectChanges();
916
+ // }
917
+ // })
918
+ // //}
919
+ // if (!(this.items.length > 0) && !(this.employeeList.length > 0) && !(this.recentSearches.length > 0) && !(this.widgets.length > 0) && !(this.tools.length > 0) && !(this.workspaces.length > 0)) {
920
+ if (!(this.items.length > 0) && !(this.recentSearches.length > 0) && !(this.widgets.length > 0) && !(this.tools.length > 0) && !(this.workspaces.length > 0)) {
921
+ this.itemClicked = this.t = this.ws = this.wd = this.selectedRowIndex = this.selectedEmployeeIndex = this.rs = this.goalIndex = this.users = null;
922
+ }
923
+ if (this.items && this.items.length > 0) {
924
+ this.selectedRowIndex = 0;
925
+ this.wd = this.ws = this.rs = this.goalIndex = this.users = this.selectedEmployeeIndex = null;
926
+ this.t = null;
927
+ this.itemClicked = this.items[0];
928
+ }
929
+ else if (this.tools && this.tools.length > 0) {
930
+ this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
931
+ this.wd = this.ws = this.rs = null;
932
+ this.t = 0;
933
+ this.itemClicked = this.tools[0];
934
+ }
935
+ else if (this.workspaces &&
936
+ this.workspaces.length > 0) {
937
+ this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
938
+ this.wd = this.t = this.rs = null;
939
+ this.ws = 0;
940
+ this.itemClicked = this.workspaces[0];
941
+ }
942
+ else if (this.widgets &&
943
+ this.widgets.length > 0) {
944
+ this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
945
+ this.ws = this.t = this.rs = null;
946
+ this.wd = 0;
947
+ this.itemClicked = this.widgets[0];
948
+ }
949
+ else if (this.employeeList &&
950
+ this.employeeList.length > 0) {
951
+ this.selectedRowIndex = null;
952
+ this.ws = this.t = this.wd = this.rs = this.goalIndex = this.users = null;
953
+ this.selectedEmployeeIndex = 0;
954
+ this.itemClicked = this.employeeList[0];
955
+ }
956
+ else if (this.recentSearches &&
957
+ this.recentSearches.length > 0) {
958
+ this.selectedRowIndex = null;
959
+ this.ws = this.t = this.wd = this.users = this.goalIndex = null;
960
+ this.rs = 0;
961
+ this.itemClicked = this.recentSearches[0];
962
+ }
963
+ }
964
+ else {
965
+ if (this.menuItem) {
966
+ this.items = this.menuItem
967
+ .filter(item => item.type != "dropDown");
968
+ }
969
+ else {
970
+ this.items = [];
971
+ }
972
+ this.workspaces = this.workspacesForLoop;
973
+ this.tools = this.adminTools;
974
+ this.widgets = this.originalWidgets;
975
+ this.userStorySearchList = [];
976
+ this.goalSearchList = [];
977
+ this.projectList = [];
978
+ this.recentSearches = this.allsearches;
979
+ //this.employeeList = (this.loadedEmployeeList && this.loadedEmployeeList.length > 0) ? this.loadedEmployeeList : [];
980
+ this.employeeList = [];
981
+ // this.ws = this.wd = this.rs = this.t = this.users = this.goalIndex = null;
982
+ // this.selectedRowIndex = 0;
983
+ // this.itemClicked = this.items.length > 0 ? this.items[0] : null;
984
+ this.searchText == "" ? (this.searchText = undefined) : null;
985
+ }
986
+ this.cdRef.detectChanges();
987
+ }
988
+ closeSearch(event) {
989
+ this.searchText = '';
990
+ this.items = this.menuItem
991
+ .filter(item => item.type != "dropDown")
992
+ .sort((a, b) => (a.menu.toLowerCase() > b.menu.toLowerCase() ? 1 : -1));
993
+ this.workspaces = this.workspacesForLoop;
994
+ this.widgets = this.originalWidgets;
995
+ this.tools = this.adminTools;
996
+ this.recentSearches = this.allsearches;
997
+ this.ws = this.wd = this.rs = this.t = this.users = this.selectedEmployeeIndex = this.goalIndex = null;
998
+ this.selectedRowIndex = 0;
999
+ this.itemClicked = this.items[0];
1000
+ this.display = true;
1001
+ this.userStorySearchList = [];
1002
+ this.goalSearchList = [];
1003
+ this.projectList = [];
1004
+ this.element.nativeElement.focus();
1005
+ this.employeeList = this.loadedEmployeeList.length > 0 ? this.loadedEmployeeList : [];
1006
+ this.isOpened.emit(this.display);
1007
+ }
1008
+ navigate(event, item) {
1009
+ if (this.searchById) {
1010
+ this.searchByTextLoading = true;
1011
+ this.rss.getSearchMenuItems({ searchText: null, searchUniqueId: this.searchText })
1012
+ .subscribe((res) => {
1013
+ if (res.success) {
1014
+ if (res.data.length > 0) {
1015
+ this.redirectToRoute(res.data[0]);
1016
+ }
1017
+ else {
1018
+ this.toastr.warning('Given Id is not valid, please provide correct id to navigate');
1019
+ }
1020
+ }
1021
+ else if (!res.success) {
1022
+ this.toastr.error(res.apiResponseMessages[0].message);
1023
+ }
1024
+ this.searchByTextLoading = false;
1025
+ });
1026
+ }
1027
+ else if (item) {
1028
+ this.redirectToRoute(item);
1029
+ }
1030
+ }
1031
+ redirectToRoute(item) {
1032
+ var name;
1033
+ if (this.searchByText || this.searchById) {
1034
+ if (item.itemType && (item.itemType == SearchTaskType.workItemORBug) || (item.itemType == SearchTaskType.adhoc)) {
1035
+ this.searchText = '';
1036
+ this.element.nativeElement.blur();
1037
+ //this.InsertSearch(item.uniquenName);
1038
+ //if (this.projectSearchResults.filter(element => element.projectId == item.projectId).length > 0) {
1039
+ if (item.itemType == SearchTaskType.workItemORBug) {
1040
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.workItemOrBug, item.itemId);
1041
+ this.routes.navigate(["projects/workitem", item.itemUniqueName], { fragment: 'unique' });
1042
+ }
1043
+ else {
1044
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.adhoc, item.itemId);
1045
+ this.routes.navigate(["dashboard/adhoc-workitem", item.itemId]);
1046
+ }
1047
+ // }
1048
+ }
1049
+ else if (item.itemType && (item.itemType == SearchTaskType.goal || item.itemType == SearchTaskType.sprint)) {
1050
+ this.searchText = '';
1051
+ this.element.nativeElement.blur();
1052
+ //if (this.projectSearchResults.filter(element => element.projectId == item.projectId).length > 0) {
1053
+ if (item.itemType == SearchTaskType.goal) {
1054
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.goal, item.itemId);
1055
+ this.routes.navigate(["projects/goal", item.itemUniqueName], { fragment: 'unique' });
1056
+ }
1057
+ else {
1058
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.sprint, item.itemId);
1059
+ this.routes.navigate(["projects/sprint", item.itemUniqueName], { fragment: 'unique' });
1060
+ }
1061
+ // }
1062
+ }
1063
+ else if (item.itemType == SearchTaskType.Employee) {
1064
+ this.searchText = '';
1065
+ this.element.nativeElement.blur();
1066
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.employee, item.itemId);
1067
+ this.routes.navigateByUrl("/dashboard/profile/" + item.itemId + "/overview");
1068
+ }
1069
+ else if (item.itemType == SearchTaskType.Project) {
1070
+ this.searchText = '';
1071
+ this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.project, item.itemId);
1072
+ this.element.nativeElement.blur();
1073
+ this.routes.navigateByUrl("projects/projectstatus/" + item.itemId + "/active-goals");
1074
+ }
1075
+ }
1076
+ else if (item.menu) {
1077
+ this.searchText = '';
1078
+ this.element.nativeElement.blur();
1079
+ name = item.menu;
1080
+ this.routes.navigate([item.state]);
1081
+ this.InsertSearch(name, RecentSearchType.menu, item.id);
1082
+ }
1083
+ // else if (item.permission) {
1084
+ // this.searchText = '';
1085
+ // this.element.nativeElement.blur();
1086
+ // name = item.name;
1087
+ // this.InsertSearch(name, Rece);
1088
+ // this.routes.navigate([item.link]);
1089
+ // }
1090
+ else if (item.workspaceId) {
1091
+ this.searchText = '';
1092
+ this.element.nativeElement.blur();
1093
+ name = item.workspaceName;
1094
+ this.InsertSearch(name, RecentSearchType.dashboard, item.workspaceId);
1095
+ const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
1096
+ if (userReference != "null" && userReference != null) {
1097
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + item.workspaceId + "/form/" + userReference);
1098
+ }
1099
+ else {
1100
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + item.workspaceId);
1101
+ }
1102
+ }
1103
+ else if (item.widgetId) {
1104
+ this.searchText = '';
1105
+ this.element.nativeElement.blur();
1106
+ name = item.widgetName;
1107
+ this.InsertSearch(name, RecentSearchType.widget, item.widgetId);
1108
+ this.RedirectToApp(item);
1109
+ }
1110
+ else {
1111
+ this.SearchRecentItem(item, event);
1112
+ }
1113
+ }
1114
+ InsertSearch(name, recentSearchType, id) {
1115
+ this.rss.insertRecentSearch({ name: name, recentSearchType: recentSearchType, itemId: id }).subscribe((response) => {
1116
+ if (response.success) {
1117
+ // this.recentSearches.includes(name)
1118
+ // ? (this.recentSearches.splice(this.recentSearches.indexOf(name), 1),
1119
+ // this.recentSearches.splice(0, 0, name))
1120
+ // : this.recentSearches.unshift(name);
1121
+ this.getRecentSearches();
1122
+ }
1123
+ });
1124
+ }
1125
+ SearchRecentItem(search, event) {
1126
+ this.display = true;
1127
+ this.isOpened.emit(this.display);
1128
+ if (search.recentSearchType == RecentSearchType.menu) {
1129
+ var item = this.items.filter(item => item.menu.toLowerCase() == search.recentSearch.toLowerCase());
1130
+ item.length > 0 ? this.navigate(event, item[0]) : null;
1131
+ }
1132
+ else if (search.recentSearchType == RecentSearchType.dashboard) {
1133
+ this.searchText = '';
1134
+ this.element.nativeElement.blur();
1135
+ this.InsertSearch(search.recentSearch, RecentSearchType.dashboard, search.itemId);
1136
+ const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
1137
+ if (userReference != "null" && userReference != null) {
1138
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + search.itemId + "/form/" + userReference);
1139
+ }
1140
+ else {
1141
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + search.itemId);
1142
+ }
1143
+ }
1144
+ else if (search.recentSearchType == RecentSearchType.widget) {
1145
+ this.searchText = '';
1146
+ this.element.nativeElement.blur();
1147
+ this.InsertSearch(search.recentSearch, RecentSearchType.widget, search.itemId);
1148
+ this.routes.navigate(["dashboard-management/widgets", search.itemId]);
1149
+ }
1150
+ else if (search.recentSearchType == RecentSearchType.adhoc) {
1151
+ this.searchText = '';
1152
+ this.element.nativeElement.blur();
1153
+ this.InsertSearch(search.recentSearch, RecentSearchType.adhoc, search.itemId);
1154
+ this.routes.navigate(["dashboard/adhoc-workitem", search.itemId]);
1155
+ }
1156
+ else if (search.recentSearchType == RecentSearchType.workItemOrBug) {
1157
+ this.searchText = '';
1158
+ this.element.nativeElement.blur();
1159
+ this.InsertSearch(search.recentSearch, RecentSearchType.workItemOrBug, search.itemId);
1160
+ this.routes.navigate(["projects/workitem", search.itemUniqueName], { fragment: 'unique' });
1161
+ }
1162
+ else if (search.recentSearchType == RecentSearchType.goal) {
1163
+ this.searchText = '';
1164
+ this.element.nativeElement.blur();
1165
+ this.InsertSearch(search.recentSearch, RecentSearchType.goal, search.itemId);
1166
+ this.routes.navigate(["projects/goal", search.itemUniqueName], { fragment: 'unique' });
1167
+ }
1168
+ else if (search.recentSearchType == RecentSearchType.sprint) {
1169
+ this.searchText = '';
1170
+ this.element.nativeElement.blur();
1171
+ this.InsertSearch(search.recentSearch, RecentSearchType.sprint, search.itemId);
1172
+ this.routes.navigate(["projects/sprint", search.itemUniqueName], { fragment: 'unique' });
1173
+ }
1174
+ else if (search.recentSearchType == RecentSearchType.project) {
1175
+ this.searchText = '';
1176
+ this.element.nativeElement.blur();
1177
+ this.InsertSearch(search.recentSearch, RecentSearchType.project, search.itemId);
1178
+ this.routes.navigateByUrl("projects/projectstatus/" + search.itemId + "/active-goals");
1179
+ }
1180
+ else if (search.recentSearchType == RecentSearchType.employee) {
1181
+ this.searchText = '';
1182
+ this.element.nativeElement.blur();
1183
+ this.InsertSearch(search.recentSearch, RecentSearchType.employee, search.itemId);
1184
+ this.routes.navigateByUrl("/dashboard/profile/" + search.itemId + "/overview");
1185
+ }
1186
+ event.stopPropagation();
1187
+ event.preventDefault();
1188
+ }
1189
+ selectMenu(event, click) {
1190
+ if (click.which == 1 && event.workspaceId != undefined) {
1191
+ this.display = false;
1192
+ this.searchByText = false;
1193
+ this.searchById = false;
1194
+ this.isOpened.emit(this.display);
1195
+ this.searchText = '';
1196
+ const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
1197
+ if (userReference != "null" && userReference != null) {
1198
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + event.workspaceId + "/form/" + userReference);
1199
+ }
1200
+ else {
1201
+ this.routes.navigateByUrl("dashboard-management/dashboard/" + event.workspaceId);
1202
+ }
1203
+ this.selectedDashboard = event.workspaceId;
1204
+ this.element.nativeElement.blur();
1205
+ this.menuItemName = event.workspaceName;
1206
+ this.rss
1207
+ .insertRecentSearch({ name: event.workspaceName, recentSearchType: RecentSearchType.dashboard, itemId: event.workspaceId })
1208
+ .subscribe((response) => {
1209
+ if (response.success) {
1210
+ // this.recentSearches.includes(event.workspaceName)
1211
+ // ? (this.recentSearches.splice(
1212
+ // this.recentSearches.indexOf(event.workspaceName),
1213
+ // 1
1214
+ // ),
1215
+ // this.recentSearches.splice(0, 0, event.workspaceName))
1216
+ // : this.recentSearches.unshift(event.workspaceName);
1217
+ this.getRecentSearches();
1218
+ }
1219
+ });
1220
+ }
1221
+ else {
1222
+ return;
1223
+ }
1224
+ }
1225
+ selectEmployee(event, click) {
1226
+ if (click.which == 1) {
1227
+ this.display = false;
1228
+ this.searchByText = false;
1229
+ this.searchById = false;
1230
+ this.isOpened.emit(this.display);
1231
+ this.searchText = '';
1232
+ this.routes.navigateByUrl("/dashboard/profile/" + event.itemId + "/overview");
1233
+ this.selectedDashboard = event.workspaceId;
1234
+ this.selectedEmployee = event.itemId;
1235
+ this.element.nativeElement.blur();
1236
+ this.menuItemName = event.itemName;
1237
+ this.rss
1238
+ .insertRecentSearch({ name: event.itemName, recentSearchType: RecentSearchType.employee, itemId: event.itemId })
1239
+ .subscribe((response) => {
1240
+ if (response.success) {
1241
+ this.rss.getRecentSearch().subscribe((responseData) => {
1242
+ if (responseData.success) {
1243
+ this.allsearches = responseData.data;
1244
+ localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
1245
+ this.recentSearches = responseData.data;
1246
+ }
1247
+ });
1248
+ }
1249
+ });
1250
+ }
1251
+ else {
1252
+ return;
1253
+ }
1254
+ }
1255
+ selectAdimnTool(link, event, item) {
1256
+ if (event.which == 1) {
1257
+ this.display = false;
1258
+ this.searchByText = false;
1259
+ this.searchById = false;
1260
+ this.isOpened.emit(this.display);
1261
+ this.searchText = '';
1262
+ this.routes.navigate([link]);
1263
+ this.element.nativeElement.blur();
1264
+ this.rss.insertRecentSearch({ name: item.menu, recentSearchType: RecentSearchType.menu, itemId: item.id }).subscribe((response) => {
1265
+ if (response.success) {
1266
+ // this.recentSearches.includes(name)
1267
+ // ? (this.recentSearches.splice(this.recentSearches.indexOf(name), 1),
1268
+ // this.recentSearches.splice(0, 0, name))
1269
+ // : this.recentSearches.unshift(name);
1270
+ this.getRecentSearches();
1271
+ }
1272
+ });
1273
+ }
1274
+ else {
1275
+ return;
1276
+ }
1277
+ }
1278
+ OnSelect(widget, event) {
1279
+ if (event.which == 1) {
1280
+ this.searchText = '';
1281
+ this.RedirectToApp(widget);
1282
+ this.rss
1283
+ .insertRecentSearch({ name: widget.widgetName, recentSearchType: RecentSearchType.widget, itemId: widget.widgetId })
1284
+ .subscribe((response) => {
1285
+ if (response.success) {
1286
+ // this.recentSearches.includes(widget.widgetName)
1287
+ // ? (this.recentSearches.splice(
1288
+ // this.recentSearches.indexOf(widget.widgetName),
1289
+ // 1
1290
+ // ),
1291
+ // this.recentSearches.splice(0, 0, widget.widgetName))
1292
+ // : this.recentSearches.unshift(widget.widgetName);
1293
+ this.getRecentSearches();
1294
+ }
1295
+ });
1296
+ }
1297
+ else {
1298
+ return;
1299
+ }
1300
+ }
1301
+ getRecentSearches() {
1302
+ this.recentSearchesfetchInProgress = true;
1303
+ this.rss.getRecentSearch().subscribe((responseData) => {
1304
+ if (responseData.success) {
1305
+ this.allsearches = responseData.data;
1306
+ this.recentSearches = responseData.data;
1307
+ localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
1308
+ this.recentSearchesfetchInProgress = false;
1309
+ this.cdRef.detectChanges();
1310
+ }
1311
+ });
1312
+ }
1313
+ RedirectToApp(widget) {
1314
+ this.routes.navigate(["dashboard-management/widgets", widget.widgetId]);
1315
+ }
1316
+ OnGoalSelect(goal, event) {
1317
+ if (event.which == 1) {
1318
+ this.searchText = '';
1319
+ this.RedirectToGoal(goal);
1320
+ }
1321
+ else {
1322
+ return;
1323
+ }
1324
+ }
1325
+ RedirectToGoal(goal) {
1326
+ //if (this.projectSearchResults.filter(item => item.projectId == goal.projectId).length > 0) {
1327
+ if (goal.itemType == SearchTaskType.goal) {
1328
+ this.InsertSearch(goal.itemName, RecentSearchType.goal, goal.itemId);
1329
+ this.routes.navigate(["projects/goal", goal.itemUniqueName], { fragment: 'unique' });
1330
+ }
1331
+ else {
1332
+ this.InsertSearch(goal.itemName, RecentSearchType.sprint, goal.itemId);
1333
+ this.routes.navigate(["projects/sprint", goal.itemUniqueName], { fragment: 'unique' });
1334
+ }
1335
+ this.goalSearchList = [];
1336
+ this.display = true;
1337
+ this.isOpened.emit(this.display);
1338
+ }
1339
+ // }
1340
+ OnUserStorySelect(userStory, event) {
1341
+ if (event.which == 1) {
1342
+ this.searchText = '';
1343
+ this.RedirectToUserStory(userStory);
1344
+ }
1345
+ else {
1346
+ return;
1347
+ }
1348
+ }
1349
+ RedirectToUserStory(userStory) {
1350
+ //if (this.projectSearchResults.filter(item => item.projectId == userStory.projectId).length > 0) {
1351
+ if (userStory.itemType == SearchTaskType.workItemORBug) {
1352
+ this.InsertSearch(userStory.itemName, RecentSearchType.workItemOrBug, userStory.itemId);
1353
+ this.routes.navigate(["projects/workitem", userStory.itemUniqueName], { fragment: 'unique' });
1354
+ }
1355
+ else {
1356
+ this.InsertSearch(userStory.itemName, RecentSearchType.adhoc, userStory.itemId);
1357
+ this.routes.navigate(["dashboard/adhoc-workitem", userStory.itemId]);
1358
+ }
1359
+ this.userStorySearchList = [];
1360
+ this.display = true;
1361
+ this.isOpened.emit(this.display);
1362
+ }
1363
+ // }
1364
+ Set() {
1365
+ this.display = false;
1366
+ this.isOpened.emit(this.display);
1367
+ // if (
1368
+ // this.searchText == undefined ||
1369
+ // this.searchText == null ||
1370
+ // this.searchText === ""
1371
+ // ) {
1372
+ // this.ws = this.wd = this.rs = this.selectedEmployeeIndex = this.t = null;
1373
+ // this.selectedRowIndex = 0;
1374
+ // this.itemClicked = this.items[0];
1375
+ // }
1376
+ }
1377
+ arrowDownEventForSearchByText() {
1378
+ if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex < this.projectList.length - 1) {
1379
+ document.getElementById("style-7").scrollTop += 45;
1380
+ this.projectIndex++;
1381
+ this.itemClicked = this.projectList[this.projectIndex];
1382
+ }
1383
+ else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1384
+ document.getElementById("style-5").scrollTop = 0;
1385
+ this.selectedEmployeeIndex = this.projectIndex = this.goalIndex = null;
1386
+ this.users = 0;
1387
+ this.itemClicked = this.userStorySearchList[0];
1388
+ }
1389
+ else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1390
+ document.getElementById("style-6").scrollTop = 0;
1391
+ this.selectedEmployeeIndex = this.projectIndex = this.users = null;
1392
+ this.goalIndex = 0;
1393
+ this.itemClicked = this.goalSearchList[0];
1394
+ }
1395
+ else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.employeeList && this.employeeList.length > 0) {
1396
+ document.getElementById("style-4").scrollTop = 0;
1397
+ this.goalIndex = this.projectIndex = this.users = null;
1398
+ this.selectedEmployeeIndex = 0;
1399
+ this.itemClicked = this.employeeList[0];
1400
+ }
1401
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users < this.userStorySearchList.length - 1) {
1402
+ document.getElementById("style-5").scrollTop += 45;
1403
+ this.users++;
1404
+ this.itemClicked = this.userStorySearchList[this.users];
1405
+ }
1406
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users == this.userStorySearchList.length - 1
1407
+ && this.goalSearchList && this.goalSearchList.length > 0) {
1408
+ document.getElementById("style-6").scrollTop += 45;
1409
+ this.selectedEmployeeIndex = this.projectIndex = this.users = null;
1410
+ this.goalIndex = 0;
1411
+ this.itemClicked = this.goalSearchList[0];
1412
+ }
1413
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users == this.userStorySearchList.length - 1
1414
+ && this.employeeList && this.employeeList.length > 0) {
1415
+ document.getElementById("style-4").scrollTop = 0;
1416
+ this.goalIndex = this.projectIndex = this.users = null;
1417
+ this.selectedEmployeeIndex = 0;
1418
+ this.itemClicked = this.employeeList[0];
1419
+ }
1420
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex < this.goalSearchList.length - 1) {
1421
+ document.getElementById("style-6").scrollTop += 45;
1422
+ this.goalIndex++;
1423
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1424
+ }
1425
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex == this.goalSearchList.length - 1
1426
+ && this.employeeList && this.employeeList.length > 0) {
1427
+ document.getElementById("style-4").scrollTop = 0;
1428
+ this.goalIndex = this.projectIndex = this.users = null;
1429
+ this.selectedEmployeeIndex = 0;
1430
+ this.itemClicked = this.employeeList[0];
1431
+ }
1432
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.selectedEmployeeIndex < this.employeeList.length - 1) {
1433
+ document.getElementById("style-4").scrollTop += 45;
1434
+ this.selectedEmployeeIndex++;
1435
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1436
+ }
1437
+ }
1438
+ arrowDownEvent() {
1439
+ // if (
1440
+ // this.searchText != undefined ||
1441
+ // this.searchText != null ||
1442
+ // this.searchText === ""
1443
+ // ) {
1444
+ // return;
1445
+ // }
1446
+ if (this.searchByText && this.searchText) {
1447
+ this.arrowDownEventForSearchByText();
1448
+ }
1449
+ else if (this.itemClicked.menu &&
1450
+ this.selectedRowIndex < this.items.length - 1) {
1451
+ //this.menuElement.nativeElement.scrollBy(0, 100);
1452
+ document.getElementById("style-1").scrollTop += 45;
1453
+ this.selectedRowIndex++;
1454
+ this.itemClicked = this.items[this.selectedRowIndex];
1455
+ // this.highlight(nextrow);
1456
+ }
1457
+ else if (this.itemClicked.workspaceId &&
1458
+ this.ws < this.workspaces.length - 1) {
1459
+ this.ws++;
1460
+ document.getElementById("style-2").scrollTop += 41;
1461
+ this.itemClicked = this.workspaces[this.ws];
1462
+ // this.highlight(nextrow);
1463
+ }
1464
+ else if (this.itemClicked.widgetId && this.wd < this.widgets.length - 1) {
1465
+ document.getElementById("style-3").scrollTop += 48;
1466
+ this.wd++;
1467
+ this.itemClicked = this.widgets[this.wd];
1468
+ }
1469
+ else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex < this.employeeList.length - 1) {
1470
+ document.getElementById("style-4").scrollTop += 45;
1471
+ this.selectedEmployeeIndex++;
1472
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1473
+ // this.highlight(nextrow);
1474
+ }
1475
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users < this.userStorySearchList.length - 1) {
1476
+ document.getElementById("style-5").scrollTop += 45;
1477
+ this.users++;
1478
+ this.itemClicked = this.userStorySearchList[this.users];
1479
+ }
1480
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex < this.goalSearchList.length - 1) {
1481
+ document.getElementById("style-6").scrollTop += 45;
1482
+ this.goalIndex++;
1483
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1484
+ }
1485
+ else if (this.itemClicked.recentSearch && this.rs < 8) {
1486
+ this.rs++;
1487
+ this.itemClicked = this.recentSearches[this.rs];
1488
+ }
1489
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.workspaces && this.workspaces.length > 0) {
1490
+ document.getElementById("style-2").scrollTop = 0;
1491
+ this.t = null;
1492
+ this.wd = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1493
+ this.ws = 0;
1494
+ this.itemClicked = this.workspaces[0];
1495
+ }
1496
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.widgets && this.widgets.length > 0) {
1497
+ this.selectedRowIndex = null;
1498
+ document.getElementById("style-3").scrollTop = 0;
1499
+ this.t = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1500
+ this.wd = 0;
1501
+ this.itemClicked = this.widgets[0];
1502
+ }
1503
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.employeeList && this.employeeList.length > 0) {
1504
+ this.t = null;
1505
+ document.getElementById("style-4").scrollTop = 0;
1506
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
1507
+ this.selectedEmployeeIndex = 0;
1508
+ this.itemClicked = this.employeeList[0];
1509
+ }
1510
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1511
+ this.t = null;
1512
+ document.getElementById("style-5").scrollTop = 0;
1513
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
1514
+ this.users = 0;
1515
+ this.itemClicked = this.userStorySearchList[0];
1516
+ }
1517
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1518
+ this.t = null;
1519
+ document.getElementById("style-6").scrollTop = 0;
1520
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1521
+ this.goalIndex = 0;
1522
+ this.itemClicked = this.goalSearchList[0];
1523
+ }
1524
+ else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1525
+ this.t = null;
1526
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1527
+ this.rs = 0;
1528
+ this.itemClicked = this.recentSearches[0];
1529
+ }
1530
+ else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.widgets && this.widgets.length > 0) {
1531
+ this.selectedRowIndex = null;
1532
+ document.getElementById("style-3").scrollTop = 0;
1533
+ this.t = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1534
+ this.wd = 0;
1535
+ this.itemClicked = this.widgets[0];
1536
+ }
1537
+ else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.employeeList && this.employeeList.length > 0) {
1538
+ this.t = null;
1539
+ document.getElementById("style-4").scrollTop = 0;
1540
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
1541
+ this.selectedEmployeeIndex = 0;
1542
+ this.itemClicked = this.employeeList[0];
1543
+ }
1544
+ else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1545
+ this.t = null;
1546
+ document.getElementById("style-5").scrollTop = 0;
1547
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
1548
+ this.users = 0;
1549
+ this.itemClicked = this.userStorySearchList[0];
1550
+ }
1551
+ else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1552
+ this.t = null;
1553
+ document.getElementById("style-6").scrollTop = 0;
1554
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1555
+ this.goalIndex = 0;
1556
+ this.itemClicked = this.goalSearchList[0];
1557
+ }
1558
+ else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1559
+ this.t = null;
1560
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1561
+ this.rs = 0;
1562
+ this.itemClicked = this.recentSearches[0];
1563
+ }
1564
+ else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.employeeList && this.employeeList.length > 0) {
1565
+ this.t = null;
1566
+ document.getElementById("style-4").scrollTop = 0;
1567
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
1568
+ this.selectedEmployeeIndex = 0;
1569
+ this.itemClicked = this.employeeList[0];
1570
+ }
1571
+ else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1572
+ this.t = null;
1573
+ document.getElementById("style-5").scrollTop = 0;
1574
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
1575
+ this.users = 0;
1576
+ this.itemClicked = this.userStorySearchList[0];
1577
+ }
1578
+ else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1579
+ this.t = null;
1580
+ document.getElementById("style-6").scrollTop = 0;
1581
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1582
+ this.goalIndex = 0;
1583
+ this.itemClicked = this.goalSearchList[0];
1584
+ }
1585
+ else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1586
+ this.t = null;
1587
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1588
+ this.rs = 0;
1589
+ this.itemClicked = this.recentSearches[0];
1590
+ }
1591
+ else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1592
+ this.t = null;
1593
+ document.getElementById("style-5").scrollTop = 0;
1594
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
1595
+ this.users = 0;
1596
+ this.itemClicked = this.userStorySearchList[0];
1597
+ }
1598
+ else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1599
+ this.t = null;
1600
+ document.getElementById("style-6").scrollTop = 0;
1601
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1602
+ this.goalIndex = 0;
1603
+ this.itemClicked = this.goalSearchList[0];
1604
+ }
1605
+ else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1606
+ this.t = null;
1607
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1608
+ this.rs = 0;
1609
+ this.itemClicked = this.recentSearches[0];
1610
+ }
1611
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1612
+ this.users == this.userStorySearchList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
1613
+ this.t = null;
1614
+ document.getElementById("style-6").scrollTop = 0;
1615
+ this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1616
+ this.goalIndex = 0;
1617
+ this.itemClicked = this.goalSearchList[0];
1618
+ }
1619
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1620
+ this.users == this.userStorySearchList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1621
+ this.t = null;
1622
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1623
+ this.rs = 0;
1624
+ this.itemClicked = this.recentSearches[0];
1625
+ }
1626
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
1627
+ this.goalIndex == this.goalSearchList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1628
+ this.t = null;
1629
+ this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
1630
+ this.rs = 0;
1631
+ this.itemClicked = this.recentSearches[0];
1632
+ }
1633
+ // else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.widgets && this.widgets.length > 0) {
1634
+ // document.getElementById("style-4").scrollTop = 0;
1635
+ // this.t = null;
1636
+ // this.ws = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = null;
1637
+ // this.wd = 0;
1638
+ // this.itemClicked = this.widgets[0];
1639
+ // } else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.employeeList && this.employeeList.length > 0) {
1640
+ // document.getElementById("style-3").scrollTop = 0;
1641
+ // this.wd = null;
1642
+ // this.ws = this.rs = this.selectedRowIndex = null;
1643
+ // this.selectedEmployeeIndex = 0;
1644
+ // this.itemClicked = this.employeeList[0];
1645
+ // } else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1646
+ // this.wd = null;
1647
+ // this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
1648
+ // this.rs = 0;
1649
+ // this.itemClicked = this.recentSearches[0];
1650
+ // } else if (this.itemClicked.widgetId && this.wd == 8 && this.employeeList && this.employeeList.length > 0) {
1651
+ // document.getElementById("style-3").scrollTop = 0;
1652
+ // this.wd = null;
1653
+ // this.ws = this.rs = this.selectedRowIndex = null;
1654
+ // this.rs = null;
1655
+ // this.selectedEmployeeIndex = 0
1656
+ // this.itemClicked = this.employeeList[0];
1657
+ // }
1658
+ // else if (this.itemClicked.widgetId && this.wd == 8 && this.recentSearches && this.recentSearches.length > 0) {
1659
+ // this.wd = null;
1660
+ // this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
1661
+ // this.rs = 0;
1662
+ // this.itemClicked = this.recentSearches[0];
1663
+ // }
1664
+ // else if (this.itemClicked.fullName && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
1665
+ // this.wd = null;
1666
+ // this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
1667
+ // this.rs = 0;
1668
+ // this.itemClicked = this.recentSearches[0];
1669
+ // }
1670
+ // else {
1671
+ // if (this.rs !== null && this.rs !== undefined && this.recentSearches.length > 8 && this.rs < 8) {
1672
+ // this.rs++;
1673
+ // this.itemClicked = this.recentSearches[this.rs];
1674
+ // // this.highlight(nextrow);
1675
+ // }
1676
+ // else if (this.rs !== null && this.rs !== undefined && (this.recentSearches.length) - 1 > this.rs && this.rs < 8) {
1677
+ // this.rs++;
1678
+ // this.itemClicked = this.recentSearches[this.rs];
1679
+ // }
1680
+ // }
1681
+ }
1682
+ arrowUpEventForSearchByText() {
1683
+ if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex > 0) {
1684
+ this.projectIndex--;
1685
+ document.getElementById("style-7").scrollTop -= 45;
1686
+ this.itemClicked = this.projectList[this.projectIndex];
1687
+ }
1688
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.itemClicked.itemId == this.userStorySearchList[0].itemId && this.users == 0 && this.projectList && this.projectList.length > 0) {
1689
+ this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1690
+ this.projectIndex = this.projectList.length - 1;
1691
+ this.itemClicked = this.projectList[this.projectIndex];
1692
+ document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
1693
+ }
1694
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users > 0) {
1695
+ this.users--;
1696
+ document.getElementById("style-5").scrollTop -= 45;
1697
+ this.itemClicked = this.userStorySearchList[this.users];
1698
+ }
1699
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.itemClicked.itemId == this.goalSearchList[0].itemId && this.goalIndex == 0 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1700
+ this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
1701
+ this.users = this.userStorySearchList.length - 1;
1702
+ this.itemClicked = this.userStorySearchList[this.users];
1703
+ document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
1704
+ }
1705
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.itemClicked.itemId == this.goalSearchList[0].itemId && this.goalIndex == 0 && this.projectList && this.projectList.length > 0) {
1706
+ this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1707
+ this.projectIndex = this.projectList.length - 1;
1708
+ this.itemClicked = this.projectList[this.projectIndex];
1709
+ document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
1710
+ }
1711
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex > 0) {
1712
+ this.goalIndex--;
1713
+ document.getElementById("style-6").scrollTop -= 45;
1714
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1715
+ }
1716
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.goalSearchList && this.goalSearchList.length > 0) {
1717
+ this.projectIndex = this.selectedEmployeeIndex = this.users = null;
1718
+ this.goalIndex = this.goalSearchList.length - 1;
1719
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1720
+ document.getElementById("style-6").scrollTop = document.getElementById("style-6").scrollHeight;
1721
+ }
1722
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.userStorySearchList && this.userStorySearchList.length > 0) {
1723
+ this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
1724
+ this.users = this.userStorySearchList.length - 1;
1725
+ this.itemClicked = this.userStorySearchList[this.users];
1726
+ document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
1727
+ }
1728
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.projectList && this.projectList.length > 0) {
1729
+ this.selectedEmployeeIndex = this.users = this.goalIndex = null;
1730
+ this.projectIndex = this.projectList.length - 1;
1731
+ this.itemClicked = this.projectList[this.projectIndex];
1732
+ document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
1733
+ }
1734
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.selectedEmployeeIndex > 0) {
1735
+ this.selectedEmployeeIndex--;
1736
+ document.getElementById("style-4").scrollTop -= 45;
1737
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1738
+ }
1739
+ }
1740
+ arrowUpEvent() {
1741
+ // if (
1742
+ // this.searchText != undefined ||
1743
+ // this.searchText != null ||
1744
+ // this.searchText === ""
1745
+ // ) {
1746
+ // return;
1747
+ // }
1748
+ if (this.searchByText && this.searchText) {
1749
+ this.arrowUpEventForSearchByText();
1750
+ }
1751
+ //From menus
1752
+ else if (this.itemClicked.menu && this.selectedRowIndex > 0) {
1753
+ this.selectedRowIndex--;
1754
+ document.getElementById("style-1").scrollTop -= 45;
1755
+ this.itemClicked = this.items[this.selectedRowIndex];
1756
+ }
1757
+ //From workspaces
1758
+ else if (this.itemClicked.workspaceId &&
1759
+ this.itemClicked.workspaceId == this.workspaces[0].workspaceId && this.ws == 0 &&
1760
+ this.items && this.items.length > 0) {
1761
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = null;
1762
+ this.selectedRowIndex = this.items.length - 1;
1763
+ this.itemClicked = this.items[this.selectedRowIndex];
1764
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1765
+ }
1766
+ else if (this.itemClicked.workspaceId && this.ws > 0) {
1767
+ document.getElementById("style-2").scrollTop -= 41;
1768
+ this.ws--;
1769
+ this.itemClicked = this.workspaces[this.ws];
1770
+ }
1771
+ //From widgets
1772
+ else if (this.itemClicked.widgetId && this.wd > 0) {
1773
+ document.getElementById("style-3").scrollTop -= 48;
1774
+ this.wd--;
1775
+ this.itemClicked = this.widgets[this.wd];
1776
+ }
1777
+ else if (this.itemClicked.widgetId && this.itemClicked.widgetId == this.widgets[0].widgetId && this.wd == 0 &&
1778
+ this.workspaces && this.workspaces.length > 0) {
1779
+ this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1780
+ this.ws = this.workspaces.length - 1;
1781
+ this.itemClicked = this.workspaces[this.ws];
1782
+ document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1783
+ }
1784
+ else if (this.itemClicked.widgetId && this.itemClicked.widgetId == this.widgets[0].widgetId && this.wd == 0 &&
1785
+ this.items && this.items.length > 0) {
1786
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1787
+ this.selectedRowIndex = this.items.length - 1;
1788
+ this.itemClicked = this.items[this.selectedRowIndex];
1789
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1790
+ }
1791
+ //From Employees
1792
+ else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex > 0) {
1793
+ document.getElementById("style-4").scrollTop -= 45;
1794
+ this.selectedEmployeeIndex--;
1795
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1796
+ }
1797
+ else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
1798
+ this.widgets && this.widgets.length > 0) {
1799
+ this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1800
+ this.wd = this.widgets.length - 1;
1801
+ this.itemClicked = this.widgets[this.wd];
1802
+ document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
1803
+ }
1804
+ else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
1805
+ this.workspaces && this.workspaces.length > 0) {
1806
+ this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1807
+ this.ws = this.workspaces.length - 1;
1808
+ this.itemClicked = this.workspaces[this.ws];
1809
+ document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1810
+ }
1811
+ else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
1812
+ this.workspaces && this.workspaces.length > 0) {
1813
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1814
+ this.selectedRowIndex = this.items.length - 1;
1815
+ this.itemClicked = this.items[this.selectedRowIndex];
1816
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1817
+ }
1818
+ //From WI/Bug NEED TO DO
1819
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
1820
+ && this.users > 0) {
1821
+ document.getElementById("style-5").scrollTop -= 45;
1822
+ this.users--;
1823
+ this.itemClicked = this.userStorySearchList[this.users];
1824
+ }
1825
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1826
+ this.users == 0 && this.employeeList && this.employeeList.length > 0) {
1827
+ this.ws = this.t = this.selectedRowIndex = this.users = this.wd = this.goalIndex = this.rs = null;
1828
+ this.selectedEmployeeIndex = this.employeeList.length - 1;
1829
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1830
+ document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
1831
+ }
1832
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1833
+ this.users == 0 && this.widgets && this.widgets.length > 0) {
1834
+ this.selectedRowIndex = this.t = this.ws = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1835
+ this.wd = this.widgets.length - 1;
1836
+ this.itemClicked = this.widgets[this.wd];
1837
+ document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
1838
+ }
1839
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1840
+ this.users == 0 && this.workspaces && this.workspaces.length > 0) {
1841
+ this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1842
+ this.ws = this.workspaces.length - 1;
1843
+ this.itemClicked = this.workspaces[this.ws];
1844
+ document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1845
+ }
1846
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
1847
+ this.users == 0 && this.workspaces && this.workspaces.length > 0) {
1848
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1849
+ this.selectedRowIndex = this.items.length - 1;
1850
+ this.itemClicked = this.items[this.selectedRowIndex];
1851
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1852
+ }
1853
+ //From goal/sprint
1854
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
1855
+ && this.goalIndex > 0) {
1856
+ document.getElementById("style-6").scrollTop -= 45;
1857
+ this.goalIndex--;
1858
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1859
+ }
1860
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
1861
+ this.goalIndex == 0 && this.userStoryList && this.userStoryList.length > 0) {
1862
+ this.ws = this.t = this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.goalIndex = this.rs = null;
1863
+ this.users = this.employeeList.length - 1;
1864
+ this.itemClicked = this.userStoryList[this.users];
1865
+ document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
1866
+ }
1867
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
1868
+ this.goalIndex == 0 && this.employeeList && this.employeeList.length > 0) {
1869
+ this.ws = this.t = this.selectedRowIndex = this.users = this.wd = this.goalIndex = this.rs = null;
1870
+ this.selectedEmployeeIndex = this.employeeList.length - 1;
1871
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1872
+ document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
1873
+ }
1874
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
1875
+ this.goalIndex == 0 && this.widgets && this.widgets.length > 0) {
1876
+ this.selectedRowIndex = this.t = this.ws = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1877
+ this.wd = this.widgets.length - 1;
1878
+ this.itemClicked = this.widgets[this.wd];
1879
+ document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
1880
+ }
1881
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemTypetype == SearchTaskType.sprint) &&
1882
+ this.goalIndex == 0 && this.workspaces && this.workspaces.length > 0) {
1883
+ this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1884
+ this.ws = this.workspaces.length - 1;
1885
+ this.itemClicked = this.workspaces[this.ws];
1886
+ document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1887
+ }
1888
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
1889
+ this.goalIndex == 0 && this.workspaces && this.workspaces.length > 0) {
1890
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1891
+ this.selectedRowIndex = this.items.length - 1;
1892
+ this.itemClicked = this.items[this.selectedRowIndex];
1893
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1894
+ }
1895
+ //From recent searches
1896
+ else if (this.itemClicked.recentSearch && this.rs > 0) {
1897
+ this.rs--;
1898
+ this.itemClicked = this.recentSearches[this.rs];
1899
+ }
1900
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1901
+ this.goalSearchList && this.goalSearchList.length > 0) {
1902
+ this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.wd = this.rs = null;
1903
+ this.goalIndex = this.goalSearchList.length - 1;
1904
+ this.itemClicked = this.goalSearchList[this.goalIndex];
1905
+ document.getElementById("style-6").scrollTop = document.getElementById("style-6").scrollHeight;
1906
+ }
1907
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1908
+ this.userStoryList && this.userStoryList.length > 0) {
1909
+ this.ws = this.t = this.selectedRowIndex = this.wd = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1910
+ this.users = this.userStoryList.length - 1;
1911
+ this.itemClicked = this.userStoryList[this.users];
1912
+ document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
1913
+ }
1914
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1915
+ this.employeeList && this.employeeList.length > 0) {
1916
+ this.ws = this.t = this.selectedRowIndex = this.wd = this.wd = this.goalIndex = this.rs = null;
1917
+ this.selectedEmployeeIndex = this.employeeList.length - 1;
1918
+ this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1919
+ document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
1920
+ }
1921
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1922
+ this.widgets && this.widgets.length > 0) {
1923
+ this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1924
+ this.wd = this.widgets.length - 1;
1925
+ this.itemClicked = this.widgets[this.wd];
1926
+ document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
1927
+ }
1928
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1929
+ this.workspaces && this.workspaces.length > 0) {
1930
+ this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1931
+ this.ws = this.workspaces.length - 1;
1932
+ this.itemClicked = this.workspaces[this.ws];
1933
+ document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1934
+ }
1935
+ else if (this.itemClicked.recentSearch && this.rs == 0 &&
1936
+ this.workspaces && this.workspaces.length > 0) {
1937
+ this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
1938
+ this.selectedRowIndex = this.items.length - 1;
1939
+ this.itemClicked = this.items[this.selectedRowIndex];
1940
+ document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
1941
+ }
1942
+ // else if (this.itemClicked.recentSearch && this.rs == 0 && this.employeeList && this.employeeList.length > 0) {
1943
+ // document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
1944
+ // this.selectedEmployeeIndex = this.employeeList.length - 1;
1945
+ // this.rs = this.t = this.ws = this.wd = this.selectedRowIndex = null;
1946
+ // this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
1947
+ // } else if (this.itemClicked.recentSearch && this.rs == 0 && this.widgets && this.widgets.length > 0) {
1948
+ // this.wd = this.widgets.length - 1;
1949
+ // this.rs = this.selectedRowIndex = this.t = this.selectedEmployeeIndex = this.ws = null;
1950
+ // this.itemClicked = this.widgets[this.wd];
1951
+ // } else if (this.itemClicked.recentSearch && this.rs == 0 && this.workspaces && this.workspaces.length > 0) {
1952
+ // this.ws = this.workspaces.length - 1;
1953
+ // this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.wd = null;
1954
+ // this.itemClicked = this.workspaces[this.ws];
1955
+ // } else if (this.itemClicked.recentSearch && this.rs == 0 && this.tools && this.tools.length > 0) {
1956
+ // this.t = this.tools.length - 1;
1957
+ // this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.wd = null;
1958
+ // this.itemClicked = this.workspaces[this.t];
1959
+ // } else if (this.itemClicked.recentSearch && this.rs == 0 && this.items && this.items.length > 0) {
1960
+ // this.selectedRowIndex = this.items.length - 1;
1961
+ // this.rs = this.t = this.ws = this.selectedEmployeeIndex = this.wd = null;
1962
+ // this.itemClicked = this.items[this.t];
1963
+ // } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.widgets && this.widgets.length > 0) {
1964
+ // document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
1965
+ // this.wd = 8;
1966
+ // this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.ws = null;
1967
+ // this.itemClicked = this.widgets[this.wd];
1968
+ // } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.workspaces && this.workspaces.length > 0) {
1969
+ // this.ws = this.workspaces.length - 1;
1970
+ // this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.wd = null;
1971
+ // this.itemClicked = this.workspaces[this.ws];
1972
+ // } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.tools && this.tools.length > 0) {
1973
+ // this.t = this.tools.length - 1;
1974
+ // this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.wd = null;
1975
+ // this.itemClicked = this.workspaces[this.t];
1976
+ // } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.items && this.items.length > 0) {
1977
+ // this.selectedRowIndex = this.items.length - 1;
1978
+ // this.rs = this.t = this.ws = this.selectedEmployeeIndex = this.wd = null;
1979
+ // this.itemClicked = this.items[this.t];
1980
+ // } else if (this.itemClicked.widgetId && this.wd == 0 && this.workspaces && this.workspaces.length > 0) {
1981
+ // document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1982
+ // this.ws = this.workspaces.length - 1;
1983
+ // this.rs = this.selectedRowIndex = this.t = this.wd = null;
1984
+ // this.itemClicked = this.workspaces[this.ws];
1985
+ // document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
1986
+ // } else if (this.itemClicked.widgetId && this.wd == 0 && this.tools && this.tools.length > 0) {
1987
+ // this.t = this.tools.length - 1;
1988
+ // this.rs = this.selectedRowIndex = this.ws = this.wd = null;
1989
+ // this.itemClicked = this.workspaces[this.t];
1990
+ // } else if (this.itemClicked.widgetId && this.wd == 0 && this.items && this.items.length > 0) {
1991
+ // this.selectedRowIndex = this.items.length - 1;
1992
+ // this.rs = this.t = this.ws = this.wd = null;
1993
+ // this.itemClicked = this.items[this.t];
1994
+ // } else if (this.itemClicked.workspaceId && this.ws == 0 && this.tools && this.tools.length > 0) {
1995
+ // this.t = this.tools.length - 1;
1996
+ // this.rs = this.selectedRowIndex = this.ws = this.wd = null;
1997
+ // this.itemClicked = this.tools[this.t];
1998
+ // } else if (this.itemClicked.workspaceId && this.ws == 0 && this.items && this.items.length > 0) {
1999
+ // this.selectedRowIndex = this.items.length - 1;
2000
+ // this.rs = this.t = this.ws = this.wd = null;
2001
+ // this.itemClicked = this.items[this.selectedRowIndex];
2002
+ // } else if (this.itemClicked.permission && this.t == 0 && this.items && this.items.length > 0) {
2003
+ // this.selectedRowIndex = this.items.length - 1;
2004
+ // this.rs = this.t = this.ws = this.wd = null;
2005
+ // document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
2006
+ // this.itemClicked = this.items[this.selectedRowIndex];
2007
+ // } else {
2008
+ // if (this.rs !== null && this.rs !== undefined && this.rs > 0) {
2009
+ // this.rs--;
2010
+ // this.itemClicked = this.recentSearches[this.rs];
2011
+ // // this.highlight(nextrow);
2012
+ // }
2013
+ // }
2014
+ }
2015
+ arrowLeftEventForSearchByText() {
2016
+ if (this.itemClicked.itemType == SearchTaskType.Project) {
2017
+ return;
2018
+ }
2019
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.projectList && this.projectList.length > 0) {
2020
+ document.getElementById("style-7").scrollTop = 0;
2021
+ this.users = this.goalIndex = this.selectedEmployeeIndex = null;
2022
+ this.projectIndex = 0;
2023
+ this.itemClicked = this.projectList[0];
2024
+ }
2025
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.userStorySearchList && this.userStorySearchList.length > 0) {
2026
+ document.getElementById("style-5").scrollTop = 0;
2027
+ this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
2028
+ this.users = 0;
2029
+ this.itemClicked = this.userStorySearchList[0];
2030
+ }
2031
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.projectList && this.projectList.length > 0) {
2032
+ document.getElementById("style-7").scrollTop = 0;
2033
+ this.users = this.goalIndex = this.selectedEmployeeIndex = null;
2034
+ this.projectIndex = 0;
2035
+ this.itemClicked = this.projectList[0];
2036
+ }
2037
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.goalSearchList && this.goalSearchList.length > 0) {
2038
+ document.getElementById("style-6").scrollTop = 0;
2039
+ this.projectIndex = this.users = this.selectedEmployeeIndex = null;
2040
+ this.goalIndex = 0;
2041
+ this.itemClicked = this.goalSearchList[0];
2042
+ }
2043
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.userStorySearchList && this.userStorySearchList.length > 0) {
2044
+ document.getElementById("style-5").scrollTop = 0;
2045
+ this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
2046
+ this.users = 0;
2047
+ this.itemClicked = this.userStorySearchList[0];
2048
+ }
2049
+ else if (this.itemClicked.itemType == SearchTaskType.Employee && this.projectList && this.projectList.length > 0) {
2050
+ document.getElementById("style-7").scrollTop = 0;
2051
+ this.users = this.goalIndex = this.selectedEmployeeIndex = null;
2052
+ this.projectIndex = 0;
2053
+ this.itemClicked = this.projectList[0];
2054
+ }
2055
+ }
2056
+ arrowLeftEvent() {
2057
+ // if (
2058
+ // this.searchText != undefined ||
2059
+ // this.searchText != null ||
2060
+ // this.searchText === ""
2061
+ // ) {
2062
+ // return;
2063
+ // }
2064
+ if (this.searchByText && this.searchText) {
2065
+ this.arrowLeftEventForSearchByText();
2066
+ }
2067
+ else if (this.itemClicked.menu) {
2068
+ return;
2069
+ }
2070
+ //From workspaces
2071
+ else if (this.itemClicked.workspaceId && this.items && this.items.length > 0) {
2072
+ document.getElementById("style-1").scrollTop = 0;
2073
+ this.t = this.wd = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
2074
+ this.selectedRowIndex = 0;
2075
+ this.itemClicked = this.items[0];
2076
+ }
2077
+ //from widgets
2078
+ else if (this.itemClicked.widgetId && this.workspaces && this.workspaces.length > 0) {
2079
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2080
+ this.ws = 0;
2081
+ document.getElementById("style-2").scrollTop = 0;
2082
+ this.itemClicked = this.workspaces[0];
2083
+ }
2084
+ else if (this.itemClicked.widgetId && this.items && this.items.length > 0) {
2085
+ this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2086
+ this.selectedRowIndex = 0;
2087
+ document.getElementById("style-1").scrollTop = 0;
2088
+ this.itemClicked = this.items[0];
2089
+ }
2090
+ //From employees
2091
+ else if (this.itemClicked.employeeNumber && this.widgets && this.widgets.length > 0) {
2092
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2093
+ this.wd = 0;
2094
+ document.getElementById("style-3").scrollTop = 0;
2095
+ this.itemClicked = this.widgets[0];
2096
+ }
2097
+ else if (this.itemClicked.employeeNumber && this.workspaces && this.workspaces.length > 0) {
2098
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2099
+ this.ws = 0;
2100
+ document.getElementById("style-2").scrollTop = 0;
2101
+ this.itemClicked = this.workspaces[0];
2102
+ }
2103
+ else if (this.itemClicked.employeeNumber && this.items && this.items.length > 0) {
2104
+ this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2105
+ this.selectedRowIndex = 0;
2106
+ document.getElementById("style-1").scrollTop = 0;
2107
+ this.itemClicked = this.items[0];
2108
+ }
2109
+ //From WI/Bug
2110
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2111
+ && this.employeeList && this.employeeList.length > 0) {
2112
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2113
+ this.selectedEmployeeIndex = 0;
2114
+ document.getElementById("style-4").scrollTop = 0;
2115
+ this.itemClicked = this.employeeList[0];
2116
+ }
2117
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2118
+ && this.widgets && this.widgets.length > 0) {
2119
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2120
+ this.wd = 0;
2121
+ document.getElementById("style-3").scrollTop = 0;
2122
+ this.itemClicked = this.widgets[0];
2123
+ }
2124
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2125
+ && this.workspaces && this.workspaces.length > 0) {
2126
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2127
+ this.ws = 0;
2128
+ document.getElementById("style-2").scrollTop = 0;
2129
+ this.itemClicked = this.workspaces[0];
2130
+ }
2131
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2132
+ && this.items && this.items.length > 0) {
2133
+ this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2134
+ this.selectedRowIndex = 0;
2135
+ document.getElementById("style-1").scrollTop = 0;
2136
+ this.itemClicked = this.items[0];
2137
+ }
2138
+ //From Goal/Sprint
2139
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
2140
+ && this.userStoryList && this.userStoryList.length > 0) {
2141
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.goalIndex = null;
2142
+ this.users = 0;
2143
+ document.getElementById("style-5").scrollTop = 0;
2144
+ this.itemClicked = this.userStoryList[0];
2145
+ }
2146
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
2147
+ && this.employeeList && this.employeeList.length > 0) {
2148
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2149
+ this.selectedEmployeeIndex = 0;
2150
+ document.getElementById("style-4").scrollTop = 0;
2151
+ this.itemClicked = this.employeeList[0];
2152
+ }
2153
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
2154
+ && this.widgets && this.widgets.length > 0) {
2155
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2156
+ this.wd = 0;
2157
+ document.getElementById("style-3").scrollTop = 0;
2158
+ this.itemClicked = this.widgets[0];
2159
+ }
2160
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
2161
+ && this.workspaces && this.workspaces.length > 0) {
2162
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2163
+ this.ws = 0;
2164
+ document.getElementById("style-2").scrollTop = 0;
2165
+ this.itemClicked = this.workspaces[0];
2166
+ }
2167
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
2168
+ && this.items && this.items.length > 0) {
2169
+ this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2170
+ this.selectedRowIndex = 0;
2171
+ document.getElementById("style-1").scrollTop = 0;
2172
+ this.itemClicked = this.items[0];
2173
+ }
2174
+ //From recent searches
2175
+ else if (this.itemClicked.recentSearch
2176
+ && this.goalSearchList && this.goalSearchList.length > 0) {
2177
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.users = null;
2178
+ this.goalIndex = 0;
2179
+ document.getElementById("style-6").scrollTop = 0;
2180
+ this.itemClicked = this.goalSearchList[0];
2181
+ }
2182
+ else if (this.itemClicked.recentSearch
2183
+ && this.userStoryList && this.userStoryList.length > 0) {
2184
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.goalIndex = null;
2185
+ this.users = 0;
2186
+ document.getElementById("style-5").scrollTop = 0;
2187
+ this.itemClicked = this.userStoryList[0];
2188
+ }
2189
+ else if (this.itemClicked.recentSearch
2190
+ && this.employeeList && this.employeeList.length > 0) {
2191
+ this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2192
+ this.selectedEmployeeIndex = 0;
2193
+ document.getElementById("style-4").scrollTop = 0;
2194
+ this.itemClicked = this.employeeList[0];
2195
+ }
2196
+ else if (this.itemClicked.recentSearch
2197
+ && this.widgets && this.widgets.length > 0) {
2198
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
2199
+ this.wd = 0;
2200
+ document.getElementById("style-3").scrollTop = 0;
2201
+ this.itemClicked = this.widgets[0];
2202
+ }
2203
+ else if (this.itemClicked.recentSearch
2204
+ && this.workspaces && this.workspaces.length > 0) {
2205
+ this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2206
+ this.ws = 0;
2207
+ document.getElementById("style-2").scrollTop = 0;
2208
+ this.itemClicked = this.workspaces[0];
2209
+ }
2210
+ else if (this.itemClicked.recentSearch
2211
+ && this.items && this.items.length > 0) {
2212
+ this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
2213
+ this.selectedRowIndex = 0;
2214
+ document.getElementById("style-1").scrollTop = 0;
2215
+ this.itemClicked = this.items[0];
2216
+ }
2217
+ }
2218
+ arrowRightEventForSearchByText() {
2219
+ if (this.itemClicked.itemType == SearchTaskType.Project && this.userStorySearchList && this.userStorySearchList.length > 0) {
2220
+ this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
2221
+ this.users = 0;
2222
+ document.getElementById("style-5").scrollTop = 0;
2223
+ this.itemClicked = this.userStorySearchList[0];
2224
+ }
2225
+ else if (this.itemClicked.itemType == SearchTaskType.Project && this.goalSearchList && this.goalSearchList.length > 0) {
2226
+ this.projectIndex = this.users = this.selectedEmployeeIndex = null;
2227
+ this.goalIndex = 0;
2228
+ document.getElementById("style-6").scrollTop = 0;
2229
+ this.itemClicked = this.goalSearchList[0];
2230
+ }
2231
+ else if (this.itemClicked.itemType == SearchTaskType.Project && this.employeeList && this.employeeList.length > 0) {
2232
+ this.projectIndex = this.users = this.goalIndex = null;
2233
+ this.selectedEmployeeIndex = 0;
2234
+ document.getElementById("style-4").scrollTop = 0;
2235
+ this.itemClicked = this.employeeList[0];
2236
+ }
2237
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.goalSearchList && this.goalSearchList.length > 0) {
2238
+ this.projectIndex = this.users = this.selectedEmployeeIndex = null;
2239
+ this.goalIndex = 0;
2240
+ document.getElementById("style-6").scrollTop = 0;
2241
+ this.itemClicked = this.goalSearchList[0];
2242
+ }
2243
+ else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.employeeList && this.employeeList.length > 0) {
2244
+ this.projectIndex = this.users = this.goalIndex = null;
2245
+ this.selectedEmployeeIndex = 0;
2246
+ document.getElementById("style-4").scrollTop = 0;
2247
+ this.itemClicked = this.employeeList[0];
2248
+ this.itemClicked = this.goalSearchList[0];
2249
+ }
2250
+ else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.employeeList && this.employeeList.length > 0) {
2251
+ this.projectIndex = this.users = this.goalIndex = null;
2252
+ this.selectedEmployeeIndex = 0;
2253
+ this.itemClicked = this.employeeList[0];
2254
+ }
2255
+ }
2256
+ arrowRightEvent() {
2257
+ // if (
2258
+ // this.searchText == undefined ||
2259
+ // this.searchText == null ||
2260
+ // this.searchText === ""
2261
+ // ) {
2262
+ // return;
2263
+ // }
2264
+ if (this.searchByText && this.searchText) {
2265
+ this.arrowRightEventForSearchByText();
2266
+ }
2267
+ else if (this.itemClicked.recentSearch) {
2268
+ return;
2269
+ }
2270
+ //From menus
2271
+ else if (this.itemClicked.menu && this.workspaces && this.workspaces.length > 0) {
2272
+ this.t = null;
2273
+ document.getElementById("style-2").scrollTop = 0;
2274
+ this.wd = this.selectedRowIndex = this.selectedEmployeeIndex = this.rs = this.users = this.goalIndex = null;
2275
+ this.ws = 0;
2276
+ this.itemClicked = this.workspaces[0];
2277
+ }
2278
+ else if (this.itemClicked.menu && this.widgets && this.widgets.length > 0) {
2279
+ this.wd = 0;
2280
+ document.getElementById("style-3").scrollTop = 0;
2281
+ this.ws = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.users = this.goalIndex = null;
2282
+ this.itemClicked = this.widgets[0];
2283
+ }
2284
+ else if (this.itemClicked.menu && this.employeeList && this.employeeList.length > 0) {
2285
+ this.selectedEmployeeIndex = 0;
2286
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
2287
+ this.itemClicked = this.employeeList[0];
2288
+ }
2289
+ else if (this.itemClicked.menu && this.userStorySearchList && this.userStorySearchList.length > 0) {
2290
+ this.users = 0;
2291
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
2292
+ this.itemClicked = this.userStorySearchList[0];
2293
+ }
2294
+ else if (this.itemClicked.menu && this.goalSearchList && this.goalSearchList.length > 0) {
2295
+ this.goalIndex = 0;
2296
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
2297
+ this.itemClicked = this.goalSearchList[0];
2298
+ }
2299
+ else if (this.itemClicked.menu && this.recentSearches && this.recentSearches.length > 0) {
2300
+ this.rs = 0;
2301
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2302
+ this.itemClicked = this.recentSearches[0];
2303
+ }
2304
+ //From workspaces
2305
+ else if (this.itemClicked.workspaceId && this.widgets && this.widgets.length > 0) {
2306
+ this.wd = 0;
2307
+ document.getElementById("style-3").scrollTop = 0;
2308
+ this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2309
+ this.itemClicked = this.widgets[0];
2310
+ }
2311
+ else if (this.itemClicked.workspaceId && this.employeeList && this.employeeList.length > 0) {
2312
+ this.selectedEmployeeIndex = 0;
2313
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
2314
+ this.itemClicked = this.employeeList[0];
2315
+ }
2316
+ else if (this.itemClicked.workspaceId && this.userStorySearchList && this.userStorySearchList.length > 0) {
2317
+ this.users = 0;
2318
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
2319
+ this.itemClicked = this.userStorySearchList[0];
2320
+ }
2321
+ else if (this.itemClicked.workspaceId && this.goalSearchList && this.goalSearchList.length > 0) {
2322
+ this.goalIndex = 0;
2323
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
2324
+ this.itemClicked = this.goalSearchList[0];
2325
+ }
2326
+ else if (this.itemClicked.workspaceId && this.recentSearches && this.recentSearches.length > 0) {
2327
+ this.rs = 0;
2328
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2329
+ this.itemClicked = this.recentSearches[0];
2330
+ }
2331
+ //From widgets
2332
+ else if (this.itemClicked.widgetId && this.employeeList && this.employeeList.length > 0) {
2333
+ this.selectedEmployeeIndex = 0;
2334
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
2335
+ this.itemClicked = this.employeeList[0];
2336
+ }
2337
+ else if (this.itemClicked.widgetId && this.userStorySearchList && this.userStorySearchList.length > 0) {
2338
+ this.users = 0;
2339
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
2340
+ this.itemClicked = this.userStorySearchList[0];
2341
+ }
2342
+ else if (this.itemClicked.widgetId && this.goalSearchList && this.goalSearchList.length > 0) {
2343
+ this.goalIndex = 0;
2344
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
2345
+ this.itemClicked = this.goalSearchList[0];
2346
+ }
2347
+ else if (this.itemClicked.widgetId && this.recentSearches && this.recentSearches.length > 0) {
2348
+ this.rs = 0;
2349
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2350
+ this.itemClicked = this.recentSearches[0];
2351
+ }
2352
+ //From Employees
2353
+ else if (this.itemClicked.employeeNumber && this.userStorySearchList && this.userStorySearchList.length > 0) {
2354
+ this.users = 0;
2355
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
2356
+ this.itemClicked = this.userStorySearchList[0];
2357
+ }
2358
+ else if (this.itemClicked.employeeNumber && this.goalSearchList && this.goalSearchList.length > 0) {
2359
+ this.goalIndex = 0;
2360
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
2361
+ this.itemClicked = this.goalSearchList[0];
2362
+ }
2363
+ else if (this.itemClicked.employeeNumber && this.recentSearches && this.recentSearches.length > 0) {
2364
+ this.rs = 0;
2365
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2366
+ this.itemClicked = this.recentSearches[0];
2367
+ }
2368
+ //From WI/Bug
2369
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2370
+ && this.goalSearchList && this.goalSearchList.length > 0) {
2371
+ this.goalIndex = 0;
2372
+ this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
2373
+ this.itemClicked = this.goalSearchList[0];
2374
+ }
2375
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
2376
+ && this.recentSearches && this.recentSearches.length > 0) {
2377
+ this.rs = 0;
2378
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2379
+ this.itemClicked = this.recentSearches[0];
2380
+ }
2381
+ //From Goal/Sprint
2382
+ else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.sprint || this.itemClicked.itemType == SearchTaskType.goal)
2383
+ && this.recentSearches && this.recentSearches.length > 0) {
2384
+ this.rs = 0;
2385
+ this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
2386
+ this.itemClicked = this.recentSearches[0];
2387
+ }
2388
+ }
2389
+ openWorkspaceForm() {
2390
+ this.addWorkSpacePopOver.open();
2391
+ this.display = true;
2392
+ this.isOpened.emit(this.display);
2393
+ this.getAllRoles();
2394
+ }
2395
+ getAllRoles() {
2396
+ this.commonService.GetallRoles().subscribe((responseData) => {
2397
+ this.rolesDropDown = responseData.data;
2398
+ this.rolesDropDown.forEach((p) => {
2399
+ const id = p.roleId.toLowerCase();
2400
+ p.roleId = id;
2401
+ });
2402
+ });
2403
+ }
2404
+ ngOnDestroy() {
2405
+ this.ngDestroyed$.next();
2406
+ this.ngDestroyed$.complete();
2407
+ }
2408
+ compareSelectedRolesFn() { }
2409
+ compareEditSelectedRolesFn() { }
2410
+ compareDeleteSelectedRolesFn() { }
2411
+ upsertWorkspace() { }
2412
+ toggleAllRolesSelected() { }
2413
+ toggleEditAllRolesSelected() { }
2414
+ toggleDeleteAllRolesSelected() { }
2415
+ closeAddWorkspaceDialog() { }
2416
+ }
2417
+ MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: MenuComponent, deps: [{ token: i1.Store }, { token: i2.CookieService }, { token: i3.Router }, { token: i4.ToastrService }, { token: i5.TranslateService }, { token: i6.AuthenticationService }, { token: i3.ActivatedRoute }, { token: i7.MatDialog }, { token: i8.RecentSearchService }, { token: i9.Location }, { token: i10.ThemeService }, { token: i11.Actions }, { token: i0.ChangeDetectorRef }, { token: WINDOW }, { token: i12.GoogleAnalyticsService }, { token: i13.CommonService }], target: i0.ɵɵFactoryTarget.Component });
2418
+ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: MenuComponent, selector: "app-menu", inputs: { reloadAll: ["reload", "reloadAll"] }, outputs: { isOpened: "isOpened", openNewDashboard: "openNewDashboard" }, host: { listeners: { "document:keydown.control.q": "keyOpenEvent()", "document:keydown.control.m": "keyCloseEvent()", "document:keydown.control.b": "remoteSearchByText()", "document:keydown.control.y": "remoteSearchById()" } }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }, { propertyName: "element", first: true, predicate: ["element"], descendants: true }, { propertyName: "workspaceElement", first: true, predicate: ["workspaceElement"], descendants: true }, { propertyName: "menuElement", first: true, predicate: ["menuElement"], descendants: true }, { propertyName: "addWorkSpacePopOver", first: true, predicate: ["addWorkspace"], descendants: true }, { propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "allEditSelected", first: true, predicate: ["allEditSelected"], descendants: true }, { propertyName: "allDeleteSelected", first: true, predicate: ["allDeleteSelected"], descendants: true }, { propertyName: "infoPopOver", first: true, predicate: ["infoPopOver"], descendants: true }, { propertyName: "openMenuPopOver", predicate: ["openMenuPopUp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<button type=\"submit\" class=\"visibles\" mat-icon-button [matMenuTriggerFor]=\"menus\" fxHide.gt-xs fxShow>\r\n <mat-icon class=\"newMenu\">menu</mat-icon>\r\n</button>\r\n<div fxFlex class=\"newLogo default-bg top-logo-bg newminilogo zoom-image-hover\" fxHide.gt-xs fxShow>\r\n <img src=\"{{companyMiniLogo}}\" alt=\"\" id=\"mini-logo-topbar\" style=\"width:30px; height:30px;\"\r\n (click)=\"getAllMenuItems()\" />\r\n</div>\r\n<div fxFlex class=\"newLogo top-logo-bg apps-button zoom-image-hover\" style=\"left: 0px;\" fxHide fxShow.gt-xs>\r\n <img src=\"{{companyMainLogo}}\" style=\"cursor: pointer;left: 20px;left: 20px;position: relative;\" id=\"main-logo-topbar\"\r\n class=\"img-height-main-logo-topbar\" (click)=\"getAllMenuItems()\" />\r\n</div>\r\n\r\n<!-- \r\n<mat-menu #menus=\"matMenu\" class=\"filter-panel\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let item of(menuItems$ | async)\">\r\n <div *ngIf=\"item.type === 'dropDown'\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"levelTwoMenu\" (mouseover)=\"openLevel2Menu(item.state,item.sub)\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"item.type == 'link'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<mat-menu #levelTwoMenu=\"matMenu\">\r\n <div *ngFor=\"let itemLvl2 of subLevels\">\r\n <div *ngIf=\"itemLvl2.type === 'dropDown'\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"levelThreeMenu\"\r\n (mouseover)=\"openLevel3Menu(stateLvl1,itemLvl2.state,item.sub)\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"itemLvl2.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ itemLvl2.state }}\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"itemLvl2.type == 'link'\">\r\n <button mat-menu-item routerLink=\"/{{stateLvl1}}/{{ itemLvl2.state }}\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<mat-menu #levelThreeMenu=\"matMenu\">\r\n <div *ngFor=\"let itemLvl3 of subLevelsForLevel2\">\r\n <button mat-menu-item routerLink=\"/{{ level3Link1 }}/{{ level3Link2 }}/{{itemLvl3.state}}\">\r\n {{ itemLvl3.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n</mat-menu> -->\r\n\r\n<mat-menu #menus=\"matMenu\" yPosition=\"below\" class=\"filter-panel\" (click)=\"$event.stopPropagation()\"\r\n style=\"height:auto\">\r\n <div *ngFor=\"let item of items\">\r\n <div *ngIf=\"item.type == 'link' || item.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\" (click)=\"selectMenu(item,$event)\"\r\n routerLinkActive=\"item-active\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n\r\n<div style=\"position: relative;\r\nleft: 90%\" class=\"store-icom mat-icon-button\" *ngIf=\"canAccess_feature_DragApps\"\r\n [ngClass]=\"this.routes.url.includes('/app-store/widgets') ? 'icon_active_class' : ''\">\r\n <fa-icon icon=\"store\" style=\"font-size: 20px !important;\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{ 'APP.APPSTORE' | translate}}\" (click)=\"openApps()\"\r\n class=\"mat-color-accent cursor-pointer theme-navbar-icon-color\"></fa-icon>\r\n</div>\r\n\r\n<div class=\"SearchBox dropdown\" style=\"position: absolute !important;\">\r\n <span class=\"mat-color-accent input-group-addon\" *ngIf=\"searchByText\">@ &nbsp;</span>\r\n <span class=\"mat-color-accent input-group-addon\" *ngIf=\"searchById\"># &nbsp;</span>\r\n <input type=\"text\" class=\"SearchBox-input dropbtn\" placeholder=\"{{ 'APP.STARTHEREORCLICKCONTROL+Q' | translate}}\"\r\n [class.hide-placeholder]=\"searchByText || searchById\" autocomplete=\"off\" #element [(ngModel)]=\"searchText\"\r\n (input)=\"SearchItem($event)\" (click)=\"SearchItem($event)\" (focus)=\"onFocus()\" (blur)=\"Set();\"\r\n (keydown.enter)=\"navigate($event, itemClicked)\" (keydown.arrowdown)=\"arrowDownEvent()\"\r\n (keydown.arrowup)=\"arrowUpEvent()\" (keydown.arrowleft)=\"arrowLeftEvent()\" (keydown.arrowright)=\"arrowRightEvent()\">\r\n\r\n <button class=\"SearchBox-button\">\r\n <span class=\"close_icon_search\">\r\n <span *ngIf=\"!searchText\"></span>\r\n <mat-icon *ngIf=\"searchText\" class=\"icon-button mr-05\" aria-hidden=\"false\" (click)=\"closeSearch($event)\"\r\n style=\"cursor:pointer\">\r\n close</mat-icon>\r\n </span>\r\n <mat-icon class=\"SearchBox-icon icon-color mt-lg-n2 mr-05 info-class\" [satPopoverAnchorFor]=\"p\"\r\n #infoPopOver=\"satPopoverAnchor\" color=\"primary\" (click)=\"openInfo(infoPopOver)\">info</mat-icon>\r\n <mat-icon class=\"SearchBox-icon icon-color mt-lg-n2\" color=\"primary\">search</mat-icon>\r\n </button>\r\n <div class=\"dropdown-content\" [ngClass]=\"{'d-block' : display, 'd-none' : !display}\">\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\"\r\n *ngIf=\"loadingSearchMenuData || recentSearchesfetchInProgress || widgetsfetchInProgress\">\r\n </mat-progress-bar>\r\n <div class=\"row rowselect\">\r\n <div class=\"column columnselect-next pl-05\" *ngIf=\"items && (items.length>0) && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.APPLICATIONS' | translate}}</div>\r\n <div id=\"style-1\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <ng-container *ngIf=\"items && items.length>0\">\r\n <div *ngFor=\"let item of items; let i = index;\"\r\n [style.background-color]=\"selectedRowIndex == i ? themeBaseColor : 'white'\">\r\n <div *ngIf=\"item.type == 'link' || item.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\"\r\n [ngClass]=\"selectedRowIndex == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"selectAdimnTool(item.state, $event, item)\" routerLinkActive=\"item-active\"\r\n [routerLinkActiveOptions]=\"{exact:\r\n true}\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{ translateapplicationname(item.menu | softLabelsPipe : softLabels)}}\">\r\n <mat-icon class=\"icon-color\" [ngClass]=\"selectedRowIndex == i ? 'color-text' : 'color-text1'\">\r\n {{ item.icon }}</mat-icon><span\r\n [innerHTML]=\"translateapplicationname(item.menu) | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column pl-05\" *ngIf=\"!(searchById || searchByText)\">\r\n\r\n <div class=\"columnselect-next ml-0\" *ngIf=\"workspaces && (workspaces.length>0)\">\r\n <div class=\"in-header\">{{ 'SHELL.DASHBOARDS' | translate}}\r\n <fa-icon icon=\"plus-square\"\r\n *ngIf=\"canAccess_feature_AddDashboard\" matTooltip=\"{{ 'APP.ADDDASHBOARD' | translate}}\"\r\n (click)=\"initializeWorkspaceForm();openWorkspaceForm();\" class=\"mat-color-accent cursor-pointer\"\r\n [satPopoverAnchorFor]=\"addWorkspace\">\r\n </fa-icon> \r\n </div>\r\n <div id=\"style-2\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <ng-container *ngIf=\"workspaces && workspaces.length>0\">\r\n <div *ngFor=\"let wc of workspaces; let i = index\"\r\n [style.background-color]=\"ws == i ? themeBaseColor : 'white'\" class=\"scroll\" #workspaceElement>\r\n <button mat-menu-item (mousedown)=\"selectMenu(wc,$event)\"\r\n [ngClass]=\"ws == i ? 'color-text' : 'color-text1'\" (click)=\"navigateToUrl(wc.workspaceId)\"\r\n routerLink=\"/dashboard-management/dashboard/{{ wc.workspaceId }}\" routerLinkActive=\"item-active\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{wc.workspaceName}}\">\r\n <span [innerHTML]=\"wc.workspaceName | highLightText : searchText \"></span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\" *ngIf=\"widgets && widgets.length>0 && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.FAVOURITEAPPS' | translate}}</div>\r\n <div style=\"background-color: white !important; height: 445px !important; overflow: auto;\" id=\"style-3\">\r\n <div *ngFor=\"let widget of widgets; let i = index\"\r\n [style.background-color]=\"wd == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" routerLink=\"/dashboard-management/widgets/{{ widget.widgetId }}\"\r\n [ngClass]=\"wd == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnSelect(widget,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{widget.widgetName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"widget.widgetName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"columnselect-next ml-0\" *ngIf=\"projectList && projectList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\">Projects</div>\r\n <div class=\"scroll\" id=\"style-7\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let project of projectList; let i = index\"\r\n [style.background-color]=\"projectIndex == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"projectIndex == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"onProjectSelect(project,$event)\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{project.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"project.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"columnselect-next ml-0\"\r\n *ngIf=\"userStorySearchList && userStorySearchList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\" *ngIf=\"isEnableBugBoard\">{{ 'SHELL.WIBUG' | translate}}</div>\r\n <div class=\"in-header\" *ngIf=\"!isEnableBugBoard\">{{ 'SHELL.WI'| translate}}</div>\r\n <div class=\"scroll\" id=\"style-5\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let userStory of userStorySearchList; let i = index\"\r\n [style.background-color]=\"users == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"users == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnUserStorySelect(userStory,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{userStory.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"userStory.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"columnselect-next ml-0\"\r\n *ngIf=\"goalSearchList && goalSearchList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\">{{ 'SHELL.GOALSPRINT' | translate }}</div>\r\n <div class=\"scroll\" id=\"style-6\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let goal of goalSearchList; let i = index\"\r\n [style.background-color]=\"goalIndex == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"goalIndex == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnGoalSelect(goal,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{goal.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"goal.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\"\r\n *ngIf=\"(employeeList && employeeList.length > 0) && searchText && searchByText\">\r\n <div class=\"in-header\">Employees</div>\r\n <div id=\"style-4\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let employee of employeeList; let i = index\" style=\"background-color: white;\"\r\n [style.background-color]=\"selectedEmployeeIndex == i ? themeBaseColor : 'white'\" #workspaceElement>\r\n <button mat-menu-item (mousedown)=\"selectEmployee(employee,$event)\"\r\n [ngClass]=\"selectedEmployeeIndex == i ? 'color-text' : 'color-text1'\"\r\n routerLink=\"/dashboard/profile/{{ employee.itemId }}/overview\" routerLinkActive=\"item-active\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{employee.itemName}}\">\r\n <div fxLayout=\"row\">\r\n <app-avatar [name]=\"employee.itemName | removeSpecialCharacters\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ employee.itemName }}\" [src]=\"employee.profileImage | fetchSizedAndCachedImage: '20':''\"\r\n [isRound]=\"true\" size=\"20\" (click)=\"profilePage(employee.userId);$event.stopPropagation();\">\r\n </app-avatar> \r\n <div class=\"ml-05\">\r\n <span [innerHTML]=\"employee.itemName | highLightText : searchText\"></span>\r\n \r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\"\r\n *ngIf=\"recentSearches && (recentSearches.length>0) && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.RECENTSEARCHS' | translate}}</div>\r\n <div style=\"background-color: white !important; height: 445px !important\">\r\n <div *ngFor=\"let search of recentSearches | slice:0:9 let i = index\"\r\n [style.background-color]=\"rs == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item [ngClass]=\"rs == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"searchText=search.recentSearch;SearchRecentItem(search,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{search.recentSearch | softLabelsPipe : softLabels}} \r\n ({{ convertToLocalTime(search.createdDateTime) | timeago }})\">\r\n <span [innerHTML]=\"search.recentSearch | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n ({{ convertToLocalTime(search.createdDateTime) | timeago }})\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"text-center in-header \" *ngIf=\"!searchText && searchById\">\r\n Please enter unique id and click enter for navigating to corresping page\r\n </div>\r\n \r\n <div class=\"text-center in-header \" *ngIf=\"!searchText && searchByText\" >\r\n Please enter text to retreive data by filtering\r\n </div> -->\r\n \r\n\r\n <sat-popover backdropClass=\"backdrop-color\" hasBackdrop #addWorkspace verticalAlign=\"below\" horizontalAlign=\"end\"\r\n [interactiveClose]=\"false\">\r\n <mat-card class=\"filter-data p-0\">\r\n <mat-card-title class=\"text-center\">\r\n <div class=\"card-title-text mat-bg-primary p-05 mb-1\">\r\n {{ 'APP.ADDDASHBOARDTITLE' | translate }}\r\n </div>\r\n </mat-card-title>\r\n <mat-card-content>\r\n <form [formGroup]=\"workspaceForm\" novalidate (submit)=\"workspaceForm.valid && upsertWorkspace()\">\r\n <div class=\"card-content\">\r\n <mat-form-field class=\"full-width\">\r\n <input matInput placeholder=\"{{ 'HRMANAGAMENT.NAME' | translate}}*\" formControlName=\"workspaceName\" />\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('workspaceName').hasError('required') && workspaceForm.get('workspaceName').touched \">\r\n {{ 'APP.DASHBOARDNAMEREQUIRED' | translate }}\r\n </mat-error>\r\n <mat-error *ngIf=\"workspaceForm.get('workspaceName').hasError('maxlength')\">\r\n {{ 'APP.DASHBOARDNAMELENGTHEXCEED' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <textarea matInput formControlName=\"description\" rows=\"2\"\r\n placeholder=\"{{ 'COMPANYSETTINGS.DESCRIPTION' | translate }}\"></textarea>\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('description').hasError('maxlength') && workspaceForm.get('description').touched\">\r\n {{ 'APP.CUSTOMAPPDESCRIPTIONMAXLENGTHERROR' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\" (click)=\"$event.stopPropagation();\">\r\n <mat-select formControlName=\"selectedRoles\" [compareWith]=\"compareSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.VIEWROLES' | translate }}\" multiple required>\r\n <mat-option #allSelected (click)=\"toggleAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"roles.roleId\" *ngFor=\"let roles of rolesDropDown\" #allSelected\r\n (click)=\"toggleRolesPerOne(allSelected.value)\">\r\n {{ roles.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('selectedRoles').hasError('required') && workspaceForm.get('selectedRoles').touched\">\r\n {{ 'APP.SELECTANYROLE' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <mat-select formControlName=\"editRoleIds\" [compareWith]=\"compareEditSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.EDITROLES' | translate }}\" multiple>\r\n <mat-option #allEditSelected (click)=\"toggleEditAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"role.roleId\" *ngFor=\"let role of rolesDropDown\" #allEditSelected\r\n (click)=\"toggleEditRolesPerOne()\">\r\n {{ role.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <mat-select formControlName=\"deleteRoleIds\" [compareWith]=\"compareDeleteSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.DELETEROLES' | translate }}\" multiple>\r\n <mat-option #allDeleteSelected (click)=\"toggleDeleteAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"role.roleId\" *ngFor=\"let role of rolesDropDown\" #allDeleteSelected\r\n (click)=\"toggleDeleteRolesPerOne()\">\r\n {{ role.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"text-center\">\r\n <button class=\"mr-1\" mat-button mat-raised-button color=\"primary\" type=\"button\" (click)=\"upsertWorkspace()\"\r\n [disabled]=\"!workspaceForm.valid\">\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" *ngIf=\"dashboardUpdateInProgress\">\r\n </mat-progress-bar>\r\n <fa-icon class=\"mr-05\" icon=\"plus\"></fa-icon> {{ 'SAVE' | translate }}\r\n </button>\r\n <button mat-button mat-raised-button type=\"button\" (click)=\"closeAddWorkspaceDialog()\">\r\n <fa-icon class=\"mr-05\" icon=\"times\"></fa-icon> {{ 'CANCEL' | translate }}\r\n </button>\r\n </div>\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n </sat-popover>\r\n\r\n\r\n <sat-popover #p hasBackdrop [interactiveClose]=\"true\" verticalAlign=\"above\">\r\n <div class=\"tooltip-wrapper\">\r\n <table>\r\n <tr>\r\n <td>Ctrl + Q: </td>\r\n <td>&nbsp;</td>\r\n <td> {{ 'SHELL.TOOPENSEARCHMENU' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + B: </td>\r\n <td>&nbsp;</td>\r\n <td> {{ 'SHELL.TOOPENGOALSANDUSERS' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + Y: </td>\r\n <td>&nbsp;</td>\r\n <td> {{ 'SHELL.TOSEARCHBYID' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + M: </td>\r\n <td>&nbsp;</td>\r\n <td> {{ 'SHELL.TOCLOSEMENU' | translate}}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </sat-popover>\r\n\r\n <mat-spinner *ngIf=\"searchByTextLoading && display\" class=\"spinner-class\" [diameter]=\"100\"></mat-spinner>", components: [{ type: i14.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i16.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i16.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i17.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "listItem", "rotate", "fixedWidth", "transform"] }, { type: i18.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i19.SnovasysAvatarComponent, selector: "app-avatar", inputs: ["avatarClass", "name", "src", "isRound", "size"] }, { type: i20.SatPopover, selector: "sat-popover", inputs: ["backdropClass", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }, { type: i21.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i22.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i23.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i24.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i25.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i26.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i16.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i27.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i3.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["routerLink", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i26.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i28.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i29.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i29.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i29.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i20.SatPopoverAnchor, selector: "[satPopoverAnchorFor]", inputs: ["satPopoverAnchorFor"], outputs: ["popoverOpened", "popoverClosed"], exportAs: ["satPopoverAnchor"] }, { type: i27.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i27.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i21.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i21.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i29.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i29.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i29.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i30.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i29.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i22.MatError, selector: "mat-error", inputs: ["id"] }, { type: i29.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }], pipes: { "softLabelsPipe": i31.SoftLabelPipe, "translate": i5.TranslatePipe, "highLightText": i32.HighLightTextPipe, "removeSpecialCharacters": i33.RemoveSpecialCharactersPipe, "fetchSizedAndCachedImage": i34.FetchSizedAndCachedImagePipe, "slice": i9.SlicePipe, "timeago": i35.TimeagoPipe } });
2419
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: MenuComponent, decorators: [{
2420
+ type: Component,
2421
+ args: [{
2422
+ selector: "app-menu",
2423
+ templateUrl: "./menu.component.html"
2424
+ }]
2425
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.CookieService }, { type: i3.Router }, { type: i4.ToastrService }, { type: i5.TranslateService }, { type: i6.AuthenticationService }, { type: i3.ActivatedRoute }, { type: i7.MatDialog }, { type: i8.RecentSearchService }, { type: i9.Location }, { type: i10.ThemeService }, { type: i11.Actions }, { type: i0.ChangeDetectorRef }, { type: Window, decorators: [{
2426
+ type: Inject,
2427
+ args: [WINDOW]
2428
+ }] }, { type: i12.GoogleAnalyticsService }, { type: i13.CommonService }]; }, propDecorators: { openMenuPopOver: [{
2429
+ type: ViewChildren,
2430
+ args: ["openMenuPopUp"]
2431
+ }], menuTrigger: [{
2432
+ type: ViewChild,
2433
+ args: ["menuTrigger"]
2434
+ }], element: [{
2435
+ type: ViewChild,
2436
+ args: ["element"]
2437
+ }], workspaceElement: [{
2438
+ type: ViewChild,
2439
+ args: ["workspaceElement"]
2440
+ }], menuElement: [{
2441
+ type: ViewChild,
2442
+ args: ["menuElement"]
2443
+ }], addWorkSpacePopOver: [{
2444
+ type: ViewChild,
2445
+ args: ["addWorkspace"]
2446
+ }], allSelected: [{
2447
+ type: ViewChild,
2448
+ args: ["allSelected"]
2449
+ }], allEditSelected: [{
2450
+ type: ViewChild,
2451
+ args: ["allEditSelected"]
2452
+ }], allDeleteSelected: [{
2453
+ type: ViewChild,
2454
+ args: ["allDeleteSelected"]
2455
+ }], infoPopOver: [{
2456
+ type: ViewChild,
2457
+ args: ['infoPopOver']
2458
+ }], isOpened: [{
2459
+ type: Output
2460
+ }], openNewDashboard: [{
2461
+ type: Output
2462
+ }], reloadAll: [{
2463
+ type: Input,
2464
+ args: ["reload"]
2465
+ }], keyOpenEvent: [{
2466
+ type: HostListener,
2467
+ args: ['document:keydown.control.q', []]
2468
+ }], keyCloseEvent: [{
2469
+ type: HostListener,
2470
+ args: ['document:keydown.control.m', []]
2471
+ }], remoteSearchByText: [{
2472
+ type: HostListener,
2473
+ args: ['document:keydown.control.b', []]
2474
+ }], remoteSearchById: [{
2475
+ type: HostListener,
2476
+ args: ['document:keydown.control.y', []]
2477
+ }] } });
2478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXNCLFlBQVksRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFLLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFtQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQVMsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLE9BQU8sS0FBSyxvQkFBb0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFJakYsT0FBTyxFQUEwQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU14RSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUdqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFFaEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFJOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFJM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMvRSxPQUFPLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTXBFLGVBQWU7QUFPZixNQUFNLE9BQU8sYUFBYyxTQUFRLHNCQUFzQjtJQWtIdkQsWUFDVSxLQUFtQixFQUNuQixhQUE0QixFQUM3QixNQUFjLEVBQ2IsTUFBcUIsRUFDckIsZ0JBQWtDLEVBQ25DLHFCQUE0QyxFQUMzQyxLQUFxQixFQUN0QixNQUFpQixFQUNoQixHQUF3QixFQUN4QixRQUFrQixFQUNsQixZQUEwQixFQUMxQixjQUF1QixFQUN2QixLQUF3QixFQUNSLE1BQWMsRUFDOUIsc0JBQThDLEVBQzlDLGFBQTRCO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBakJBLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNuQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzNDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIsUUFBRyxHQUFILEdBQUcsQ0FBcUI7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUNSLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXJINUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUd4RCxVQUFLLEdBQVksS0FBSyxDQUFDO1FBS3ZCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQVMxQixjQUFTLEdBQWEsRUFBRSxDQUFDO1FBWXpCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFRckIsZ0JBQVcsR0FBd0IsRUFBRSxDQUFDO1FBQ3RDLG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztRQUN6QyxvQkFBZSxHQUFXLDRCQUE0QixDQUFDO1FBWXZELHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBTTdCLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBSXpCLHVCQUFrQixHQUF3QixFQUFFLENBQUM7UUFDN0MsMEJBQXFCLEdBQVcsSUFBSSxDQUFDO1FBR3JDLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBV2YsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUM5QixtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUV6QixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQU0vQixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFNcEMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBdUJyQyxpQkFBaUI7UUFFakIsMEZBQTBGO1FBQzFGLG1LQUFtSztRQUNuSyxJQUFJLENBQUMsOENBQThDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxTCxJQUFJLENBQUMsOENBQThDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyw2Q0FBNkMsR0FBRyxNQUFNLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCx5REFBeUQ7UUFDekQsaUNBQWlDO1FBQ2pDLE1BQU07UUFDTixzQkFBc0I7UUFDdEIsV0FBVztRQUNYLG9DQUFvQztRQUNwQyxrRUFBa0U7UUFDbEUsa0JBQWtCO1FBQ2xCLGlGQUFpRjtRQUNqRix1REFBdUQ7UUFDdkQsbUJBQW1CO1FBQ25CLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5SyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5SyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUV2SCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBRXBHLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xNLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRWxNLFFBQVEsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELDZIQUE2SDtRQUM3SCx5R0FBeUc7UUFDekcsdURBQXVEO1FBQ3ZELDhHQUE4RztRQUM5Ryw4R0FBOEc7UUFDOUcsT0FBTztRQUNQLFlBQVk7UUFDWix5Q0FBeUM7UUFDekMsMkVBQTJFO1FBQzNFLHlFQUF5RTtRQUN6RSxzRUFBc0U7UUFDdEUscUNBQXFDO1FBQ3JDLGtEQUFrRDtRQUNsRCw4R0FBOEc7UUFDOUcsOEdBQThHO1FBQzlHLE9BQU87UUFDUCw0RkFBNEY7UUFDNUYsNEZBQTRGO1FBQzVGLDZCQUE2QjtRQUM3QiwrREFBK0Q7UUFDL0QsNkJBQTZCO1FBQzdCLE9BQU87UUFDUCxJQUFJO1FBQ0osZ0JBQWdCO1FBR2hCLHNCQUFzQjtRQUN0QixXQUFXO1FBQ1gsb0NBQW9DO1FBQ3BDLGdFQUFnRTtRQUNoRSwyQkFBMkI7UUFDM0IsMkRBQTJEO1FBQzNELGdEQUFnRDtRQUNoRCwyQ0FBMkM7UUFDM0MsdUNBQXVDO1FBQ3ZDLHlDQUF5QztRQUN6QyxtREFBbUQ7UUFDbkQsZ0NBQWdDO1FBQ2hDLDRDQUE0QztRQUM1QyxvRUFBb0U7UUFDcEUsVUFBVTtRQUVWLFNBQVM7UUFDVCxtQkFBbUI7UUFFbkIsd0JBQXdCO1FBRXhCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2xCLG9CQUFvQixFQUFFLENBQUM7YUFDdEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFUCxDQUFDO0lBN0lELElBQ0ksU0FBUyxDQUFDLElBQWE7UUFDekIsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBd0lELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDakUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNwQixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN2SCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5SyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDOUssSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2dCQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFdkgsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFFcEcsSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ2xNLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUVsTSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksU0FBUyxFQUFFO29CQUNuRyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2lCQUN0RDtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksU0FBUyxFQUFFO29CQUNuRyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2lCQUN0RDtnQkFDRCxRQUFRLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBR0QsYUFBYTtRQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBR0Qsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUdELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUk7UUFDckIsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDakMsYUFBYSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksRUFDakMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDakIsVUFBVSxDQUFDLFFBQVE7Z0JBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2FBQ3pCLENBQUMsQ0FDSDtZQUNELGFBQWEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQ2pDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pCLFVBQVUsQ0FBQyxRQUFRO2FBQ3BCLENBQUMsQ0FDSDtZQUNELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQy9CLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pCLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2FBQzNCLENBQUMsQ0FDSDtZQUNELFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLGFBQWEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQUEsQ0FBQztRQUVsTCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsd0ZBQXdGO1FBQ3hGLDRDQUE0QztRQUM1QywyREFBMkQ7UUFDM0QsSUFBSTtRQUNKLHFGQUFxRjtRQUNyRiwwQ0FBMEM7UUFDMUMsK0JBQStCO1FBQy9CLHdFQUF3RTtRQUN4RSxzQ0FBc0M7UUFDdEMsSUFBSTtRQUNKLDJGQUEyRjtRQUMzRixzQ0FBc0M7UUFDdEMsbURBQW1EO1FBQ25ELElBQUk7UUFDSixnR0FBZ0c7UUFDaEcsb0RBQW9EO1FBQ3BELDZEQUE2RDtRQUM3RCxJQUFJO1FBQ0osMEJBQTBCO1FBQzFCLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMvQixNQUFNLENBQUMsb0JBQW9CLENBQUMscUNBQXFDLENBQUMsRUFDbEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN2QyxDQUFDO1FBQ0YsbUNBQW1DO1FBQ25DLGVBQWU7UUFDZixtRUFBbUU7UUFFbkUsd0NBQXdDO1FBQ3hDLHlDQUF5QztRQUN6QyxNQUFNO1FBRU4sMEVBQTBFO1FBRTFFLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFcEcsSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDbE0sSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFbE0sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLFNBQVMsRUFBRTtZQUNuRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3ZGO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLFNBQVMsRUFBRTtZQUNuRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3ZGO1FBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3pGO1FBQ0QsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXZCLG1CQUFtQjtRQUNuQixpQ0FBaUM7UUFDakMsK0NBQStDO1FBQy9DLGdFQUFnRTtRQUNoRSxJQUFJO1FBQ0osaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixzQ0FBc0M7UUFDdEMsa0RBQWtEO1FBQ2xELElBQUk7UUFDSixvQ0FBb0M7UUFDcEMsd0NBQXdDO1FBQ3hDLGtEQUFrRDtRQUNsRCxxRUFBcUU7UUFDckUsSUFBSTtRQUNKLDZCQUE2QjtRQUM3QixnQ0FBZ0M7UUFDaEMsNENBQTRDO1FBQzVDLGtEQUFrRDtRQUNsRCxJQUFJO1FBQ0oscUxBQXFMO1FBQ3JMLDBFQUEwRTtRQUMxRSw2REFBNkQ7UUFDN0Qsa0JBQWtCO1FBQ2xCLHNIQUFzSDtRQUN0SCxNQUFNO1FBQ04sS0FBSztRQUNMLHFLQUFxSztRQUNySyxrRUFBa0U7UUFDbEUscURBQXFEO1FBQ3JELGtCQUFrQjtRQUNsQixzR0FBc0c7UUFDdEcsTUFBTTtRQUNOLEtBQUs7UUFDTCwrTkFBK047UUFDL04sNERBQTREO1FBQzVELCtDQUErQztRQUMvQyxrQkFBa0I7UUFDbEIsc0dBQXNHO1FBQ3RHLE1BQU07UUFDTixLQUFLO1FBQ0wsK0xBQStMO1FBQy9MLCtFQUErRTtRQUMvRSxrRUFBa0U7UUFDbEUsa0JBQWtCO1FBQ2xCLDhJQUE4STtRQUM5SSxNQUFNO1FBQ04sS0FBSztRQUNMLHlKQUF5SjtRQUN6Siw0REFBNEQ7UUFDNUQsK0NBQStDO1FBQy9DLGtCQUFrQjtRQUNsQiwrSEFBK0g7UUFDL0gsTUFBTTtRQUNOLEtBQUs7UUFDTCw2TEFBNkw7UUFDN0wsNEVBQTRFO1FBQzVFLGlFQUFpRTtRQUNqRSxrQkFBa0I7UUFDbEIsZ0NBQWdDO1FBQ2hDLE1BQU07UUFDTixLQUFLO1FBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzdCLDRCQUE0QjtRQUM1Qix5QkFBeUI7UUFDekIsOEJBQThCO1FBQzlCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLDRCQUE0QjtRQUM1QixpRUFBaUU7UUFDakUsbUNBQW1DO1FBQ25DLGdEQUFnRDtRQUNoRCx3Q0FBd0M7UUFDeEMsdURBQXVEO1FBQ3ZELE1BQU07UUFFTixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07YUFDZixTQUFTLENBQ1IsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNiLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQVc7UUFDbEIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsdUVBQXVFO0lBQ3ZFLDRDQUE0QztJQUM1QywwRkFBMEY7SUFDMUYsc0NBQXNDO0lBQ3RDLDZCQUE2QjtJQUM3QixxREFBcUQ7SUFDckQsVUFBVTtJQUNWLFFBQVE7SUFDUixhQUFhO0lBQ2IsMEVBQTBFO0lBQzFFLHdDQUF3QztJQUN4QyxtREFBbUQ7SUFDbkQsUUFBUTtJQUNSLE9BQU87SUFDUCxJQUFJO0lBRUosa0JBQWtCO1FBQ2hCLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksY0FBYyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksZ0JBQWdCLENBQUMsQ0FBQztRQUM5RixJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDbE0sSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFbE0sSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3pGO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNsRixJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLE1BQU0sRUFBRTtZQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUNELHdCQUF3QixDQUFDLElBQUk7UUFDM0IsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDakUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFDSTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxQyxJQUFJLGtCQUFrQixHQUFZLElBQUksQ0FBQztZQUN2QyxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3RDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUM3QyxJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxhQUFhO3lCQUNmLFdBQVcsRUFBRTt5QkFDYixRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDMUMsS0FBSyxDQUNSLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7aUJBQzFDO2FBQ0Y7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7Z0JBQ3JKLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMvSiw4QkFBOEI7Z0JBQzlCLDZCQUE2QjtnQkFDN0IsMEJBQTBCO2dCQUUxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztxQkFDeEMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3RCLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO3dCQUMzQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFOzRCQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDOzRCQUN0QyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRCQUN6RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs0QkFDekMseUVBQXlFO3lCQUMxRTt3QkFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFOzRCQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNwRCxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pFLENBQUM7NEJBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDOzRCQUNwQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7eUJBQzdGO3dCQUNELElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7NEJBQ3RCLDhEQUE4RDs0QkFDOUQsYUFBYTs0QkFDYix3QkFBd0I7NEJBQ3hCLDZCQUE2Qjs0QkFDN0IseUVBQXlFOzRCQUN6RSxPQUFPOzRCQUNQLEtBQUs7NEJBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzs0QkFDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDdEYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUM7NEJBQ25FLG1DQUFtQzt5QkFDcEM7d0JBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTs0QkFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDOzRCQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO3lCQUMvRjt3QkFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDdkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUN6SyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ3ZLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztxQkFDckI7b0JBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDckMsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7WUFDRCxTQUFTO1lBQ1QsZ0xBQWdMO1lBQ2hMLHdDQUF3QztZQUN4Qyw4RkFBOEY7WUFDOUYsZ0xBQWdMO1lBQ2hMLE1BQU07WUFDTiw0S0FBNEs7WUFDNUssZ0NBQWdDO1lBQ2hDLDhGQUE4RjtZQUM5Riw4S0FBOEs7WUFDOUssTUFBTTtZQUNOLHlCQUF5QjtZQUN6QixJQUFJO1lBQ0osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDN0M7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BHLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztvQkFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDMUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDaEUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFBO29CQUN0RSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7b0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pEO2FBQ0Y7U0FDRjthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQ25DLGFBQWEsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzlCLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsNEVBQTRFO0lBQzlFLENBQUM7SUFBQSxDQUFDO0lBRUYsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBVSxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ3ZDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLFVBQVU7WUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDOUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQy9DLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakUsQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxFQUFFO29CQUNULFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDN0Y7Z0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztnQkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUM1QjtRQUVILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUVwRyxJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNsTSxJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNsTSx5RkFBeUY7UUFDekYseUZBQXlGO1FBRXpGLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUU7WUFDbkcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2RjtRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUU7WUFDbkcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN2RjtRQUVELElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ2hELFFBQVEsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN6RjtJQUNILENBQUM7SUFHRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLDhDQUE4QyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUwsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRSxJQUFJLENBQUMsNkNBQTZDLEdBQUcsTUFBTSxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDaEQsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEMseUZBQXlGO1FBQ3pGLDBCQUEwQjtRQUMxQiw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLDBGQUEwRjtRQUMxRixnSUFBZ0k7UUFDaEksUUFBUTtRQUNSLG1EQUFtRDtRQUNuRCxNQUFNO1FBQ04sS0FBSztRQUVMLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pELHdCQUF3QixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3JGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFO29CQUN6RCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDeEg7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDN0M7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxzQkFBc0I7SUFDdEIseUNBQXlDO0lBQ3pDLDZEQUE2RDtJQUM3RCw0QkFBNEI7SUFDNUIsTUFBTTtJQUNOLElBQUk7SUFFSixhQUFhLENBQUMsYUFBYTtRQUN6QixhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFBQSxDQUFDO1FBQ2xMLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLGFBQWEsSUFBSSxNQUFNLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtZQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1NBQ25IO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDeEY7UUFDRCw4Q0FBOEM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxXQUFXO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxhQUFhLElBQUksTUFBTSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsV0FBVyxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQztTQUN2RzthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsV0FBVyxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQy9FLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzQixJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7b0JBQzNFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7NEJBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDckYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQzlJLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUMvSCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUNqRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDOzRCQUNoQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsRUFBRTtnQ0FDekQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0NBQ2pGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzs2QkFDL0g7NEJBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7NEJBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQ25ELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dDQUMvSCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQ0FDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUN4QztpQ0FDSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQ0FDeEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2dDQUNsSCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztnQ0FDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDaEQ7aUNBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQ0FDaEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0NBQ2xJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dDQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQzNDO2lDQUFNLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0NBQzVELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQ0FDdEgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQ0FDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUN6QztpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDOzZCQUNyRjs0QkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO3lCQUM1QjtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO3dCQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztxQkFDMUI7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQTtTQUNMO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUN6QixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUM7U0FDdEY7YUFBTTtZQUNMLE9BQU87U0FDUjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksT0FBTyxHQUNULENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEUsSUFBSSxJQUFJLEdBQ04sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzlELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakUsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUNsQztpQkFDSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQy9CLElBQUksQ0FBQyxFQUFFLENBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2xFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FDbkMsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FDN0MsSUFBSSxDQUFDLEVBQUUsQ0FDTCxJQUFJLENBQUMsYUFBYTtpQkFDZixXQUFXLEVBQUU7aUJBQ2IsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QyxLQUFLLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQ25ELElBQUksQ0FBQyxFQUFFLENBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2xFLEtBQUssQ0FDUixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVCwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FDL0QsSUFBSSxDQUFDLEVBQUUsQ0FDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEUsS0FBSyxDQUNSLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM3RixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUM7bUJBQzNFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUM7bUJBQ3JGLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUNuRixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNWLG9FQUFvRTtZQUNwRSxZQUFZO1lBQ1osdUZBQXVGO1lBQ3ZGLFlBQVk7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM5RCxJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxRSxLQUFLLENBQ1IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRVQsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO29CQUN2RSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7d0JBQzNFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0NBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dDQUN0SSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQ0FDdkgsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0NBQ3JMLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dDQUNuRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt3Q0FDckYsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7d0NBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7cUNBQ2hEO3lDQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0NBQ2hFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO3dDQUNqRixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzt3Q0FDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUMzQzt5Q0FBTTt3Q0FDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3FDQUNwQztvQ0FDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lDQUM1Qjs2QkFDRjt5QkFDRjs2QkFBTTs0QkFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDOzRCQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQzt5QkFDMUI7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7YUFDSDtZQUlELGlGQUFpRjtZQUNqRixpREFBaUQ7WUFDakQsaUVBQWlFO1lBQ2pFLDJCQUEyQjtZQUUzQiw2Q0FBNkM7WUFDN0MscUdBQXFHO1lBRXJHLHVDQUF1QztZQUN2Qyx1Q0FBdUM7WUFFdkMsbUhBQW1IO1lBQ25ILCtDQUErQztZQUMvQyx5R0FBeUc7WUFDekcsaUZBQWlGO1lBQ2pGLHlHQUF5RztZQUN6RywyQ0FBMkM7WUFDM0MsbUZBQW1GO1lBQ25GLFlBQVk7WUFDWix3Q0FBd0M7WUFDeEMsNEVBQTRFO1lBQzVFLFlBQVk7WUFFWiwyRUFBMkU7WUFDM0UscUJBQXFCO1lBQ3JCLG1DQUFtQztZQUNuQyx1Q0FBdUM7WUFDdkMsaURBQWlEO1lBQ2pELG1EQUFtRDtZQUNuRCx5Q0FBeUM7WUFDekMsNkNBQTZDO1lBQzdDLHVDQUF1QztZQUN2QywyQ0FBMkM7WUFDM0MsNkNBQTZDO1lBQzdDLGlEQUFpRDtZQUNqRCw2REFBNkQ7WUFDN0QseURBQXlEO1lBQ3pELDREQUE0RDtZQUM1RCxjQUFjO1lBQ2QsY0FBYztZQUVkLHNDQUFzQztZQUN0QyxVQUFVO1lBQ1YsVUFBVTtZQUNWLFFBQVE7WUFFUiw2REFBNkQ7WUFDN0QsaURBQWlEO1lBQ2pELDJCQUEyQjtZQUMzQiw2Q0FBNkM7WUFDN0MsNkVBQTZFO1lBQzdFLGdDQUFnQztZQUVoQyxpSEFBaUg7WUFDakgsa0VBQWtFO1lBQ2xFLG1CQUFtQjtZQUNuQixpQ0FBaUM7WUFDakMscUNBQXFDO1lBQ3JDLCtDQUErQztZQUMvQyxpREFBaUQ7WUFDakQsdUNBQXVDO1lBQ3ZDLDBDQUEwQztZQUMxQyxZQUFZO1lBQ1osWUFBWTtZQUVaLG9DQUFvQztZQUNwQyxRQUFRO1lBRVIsT0FBTztZQUNQLE1BQU07WUFFTixxTUFBcU07WUFDck0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM1SixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO2FBQ2xKO1lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQzlGLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQztpQkFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDbkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDMUI7Z0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUN4RixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztpQkFBTSxJQUNMLElBQUksQ0FBQyxPQUFPO2dCQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdkI7Z0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUN4RixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFBTSxJQUNMLElBQUksQ0FBQyxZQUFZO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzVCO2dCQUNBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDMUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFNLElBQ0wsSUFBSSxDQUFDLGNBQWM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDOUI7Z0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDaEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUTtxQkFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQzthQUM1QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzthQUNqQjtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdkMscUhBQXFIO1lBQ3JILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLDZFQUE2RTtZQUM3RSw2QkFBNkI7WUFDN0IsbUVBQW1FO1lBQ25FLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM5RDtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUTthQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQzthQUN2QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN2RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJO1FBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7aUJBQy9FLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNuQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO3FCQUNyRjtpQkFDRjtxQkFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFDSSxJQUFJLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQUk7UUFDbEIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMvRyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLHNDQUFzQztnQkFDdEMsb0dBQW9HO2dCQUNwRyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRTtvQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3RILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQzFGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxJQUFJO2FBQ0w7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1RyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLG9HQUFvRztnQkFDcEcsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDdEY7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9HLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQ3hGO2dCQUNELElBQUk7YUFDTDtpQkFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRTtnQkFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ3ZCLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUNsRCxDQUFDO2FBQ0g7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUM7YUFDdEY7U0FDRjthQUVJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFDRCw4QkFBOEI7UUFDOUIsMEJBQTBCO1FBQzFCLHVDQUF1QztRQUN2QyxzQkFBc0I7UUFDdEIsbUNBQW1DO1FBQ25DLHVDQUF1QztRQUN2QyxLQUFLO2FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEUsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRixJQUFJLGFBQWEsSUFBSSxNQUFNLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7YUFDNUc7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2pGO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO2FBQ0k7WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUdELFlBQVksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtRQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUN0SCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BCLHFDQUFxQztnQkFDckMseUVBQXlFO2dCQUN6RSw4Q0FBOEM7Z0JBQzlDLHlDQUF5QztnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFFO1lBQ3BELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUMxQixJQUFJLENBQUMsRUFBRSxDQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FDL0QsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO1NBQ3ZEO2FBQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkYsSUFBSSxhQUFhLElBQUksTUFBTSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDO2FBQ3pHO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM5RTtTQUNGO2FBQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQzdELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNsQixDQUFDLDhCQUE4QixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FDaEQsQ0FBQztTQUNIO2FBQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM1RjthQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUN4RjthQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUM3RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzFGO2FBQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFO1lBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUM7U0FDeEY7YUFBTSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ3ZCLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUNwRCxDQUFDO1NBQ0g7UUFDRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDckIsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRTtZQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRixJQUFJLGFBQWEsSUFBSSxNQUFNLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUM7YUFDN0c7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUNBQWlDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHO2lCQUNMLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQzFILFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzQixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ3BCLG9EQUFvRDtvQkFDcEQsbUNBQW1DO29CQUNuQywwREFBMEQ7b0JBQzFELFVBQVU7b0JBQ1YsU0FBUztvQkFDVCw2REFBNkQ7b0JBQzdELHdEQUF3RDtvQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzFCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0wsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSztRQUN6QixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDdkIscUJBQXFCLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQ25ELENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUc7aUJBQ0wsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDL0csU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7d0JBQ3pELElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTs0QkFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDOzRCQUNyQyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUM5RixJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7eUJBQ3pDO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0gsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUk7UUFDL0IsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNySSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQ3BCLHFDQUFxQztvQkFDckMseUVBQXlFO29CQUN6RSw4Q0FBOEM7b0JBQzlDLHlDQUF5QztvQkFDekMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7aUJBQzFCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUdELFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSztRQUNwQixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUc7aUJBQ0wsa0JBQWtCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDbkgsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDcEIsa0RBQWtEO29CQUNsRCxtQ0FBbUM7b0JBQ25DLHdEQUF3RDtvQkFDeEQsVUFBVTtvQkFDVixTQUFTO29CQUNULDJEQUEyRDtvQkFDM0Qsc0RBQXNEO29CQUN0RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztpQkFDMUI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDTCxPQUFPO1NBQ1I7SUFDSCxDQUFDO0lBR0QsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUN4QyxZQUFZLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUM5RixJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzVCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQU07UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ2xCLENBQUMsOEJBQThCLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUlELFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUN0QixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNMLE9BQU87U0FDUjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBSTtRQUNqQiw4RkFBOEY7UUFDOUYsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDdEY7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDeEY7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELEtBQUs7SUFFTCxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsS0FBSztRQUNoQyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyQzthQUFNO1lBQ0wsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQVM7UUFDM0IsbUdBQW1HO1FBQ25HLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxFQUFFO1lBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDL0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSTtJQUVKLEdBQUc7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTztRQUNQLG9DQUFvQztRQUNwQywrQkFBK0I7UUFDL0IsMkJBQTJCO1FBQzNCLE1BQU07UUFDTiw4RUFBOEU7UUFDOUUsK0JBQStCO1FBQy9CLHNDQUFzQztRQUN0QyxJQUFJO0lBQ04sQ0FBQztJQUNELDZCQUE2QjtRQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3hEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyTCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzSyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZLLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvSyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO2VBQzNLLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUM7ZUFDM0ssSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0SyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEQ7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDO2VBQ2xLLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1SCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztJQUNELGNBQWM7UUFDWixPQUFPO1FBQ1Asb0NBQW9DO1FBQ3BDLCtCQUErQjtRQUMvQiwyQkFBMkI7UUFDM0IsTUFBTTtRQUNOLFlBQVk7UUFDWixJQUFJO1FBQ0osSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDeEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDdEM7YUFDSSxJQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM3QztZQUNBLGtEQUFrRDtZQUNsRCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JELDJCQUEyQjtTQUM1QjthQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQzVCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNwQztZQUNBLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLDJCQUEyQjtTQUM1QjthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNqRSwyQkFBMkI7U0FDNUI7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1TSxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25NLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4RDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuSSxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzVHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzdGLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbEcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JKLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsSCxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0ksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzdGLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNySSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNkLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkosSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvSCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNkLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0ksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25JLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25JLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNkLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbEgsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqSyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNkLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDOUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQztZQUN0SixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ3RKLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzlJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBR0QsK0hBQStIO1FBQy9ILHNEQUFzRDtRQUN0RCxtQkFBbUI7UUFDbkIsbUZBQW1GO1FBQ25GLGlCQUFpQjtRQUNqQix3Q0FBd0M7UUFDeEMsMklBQTJJO1FBQzNJLHNEQUFzRDtRQUN0RCxvQkFBb0I7UUFDcEIsc0RBQXNEO1FBQ3RELG9DQUFvQztRQUNwQyw2Q0FBNkM7UUFDN0MsK0lBQStJO1FBQy9JLG9CQUFvQjtRQUNwQixtRkFBbUY7UUFDbkYsaUJBQWlCO1FBQ2pCLCtDQUErQztRQUMvQywrR0FBK0c7UUFDL0csc0RBQXNEO1FBQ3RELG9CQUFvQjtRQUNwQixzREFBc0Q7UUFDdEQsb0JBQW9CO1FBQ3BCLG1DQUFtQztRQUNuQyw2Q0FBNkM7UUFDN0MsSUFBSTtRQUNKLGlIQUFpSDtRQUNqSCxvQkFBb0I7UUFDcEIsbUZBQW1GO1FBQ25GLGlCQUFpQjtRQUNqQiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUNKLCtKQUErSjtRQUMvSixvQkFBb0I7UUFDcEIsbUZBQW1GO1FBQ25GLGlCQUFpQjtRQUNqQiwrQ0FBK0M7UUFDL0MsSUFBSTtRQUNKLFNBQVM7UUFDVCxzR0FBc0c7UUFDdEcsaUJBQWlCO1FBQ2pCLHVEQUF1RDtRQUN2RCxrQ0FBa0M7UUFDbEMsTUFBTTtRQUNOLHVIQUF1SDtRQUN2SCxpQkFBaUI7UUFDakIsdURBQXVEO1FBQ3ZELE1BQU07UUFDTixJQUFJO0lBR04sQ0FBQztJQUNELDJCQUEyQjtRQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3hEO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbFEsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDaEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUM3SSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6USxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUN2RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6UCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ3pJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4RDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ25FLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvTSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFDRCxZQUFZO1FBQ1YsT0FBTztRQUNQLG9DQUFvQztRQUNwQywrQkFBK0I7UUFDL0IsMkJBQTJCO1FBQzNCLE1BQU07UUFDTixZQUFZO1FBQ1osS0FBSztRQUNMLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3BDO1FBQ0QsWUFBWTthQUNQLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsaUJBQWlCO2FBQ1osSUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQzlFLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNuQztZQUNBLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzdGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUN0RCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM3QztRQUNELGtCQUFrQjthQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDakQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUMzRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQzNHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDdkcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7UUFDRCxtQkFBbUI7YUFDZCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUU7WUFDMUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUM7WUFDckosSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDO1lBQ3JKLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQztZQUNySixJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO1FBQ0QsaUNBQWlDO2FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7ZUFDakosSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDbkIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6RDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDdEosSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNsRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNqRSxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDdEosSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ3RKLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQztZQUN0SixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO1FBQ0Qsa0JBQWtCO2FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztlQUN6SSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtZQUN2QixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzlJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNsSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUM5SSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxRSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2pFLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUM5SSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDbEosSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzlJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDdkcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7UUFDRCxzQkFBc0I7YUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDdEQsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzlHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDbEgsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ3RELElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDL0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDakUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDaEc7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQztZQUN0RCxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hHO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztZQUN2RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyRCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNoRztRQUdELGlIQUFpSDtRQUNqSCxvR0FBb0c7UUFDcEcsK0RBQStEO1FBQy9ELHlFQUF5RTtRQUN6RSxzRUFBc0U7UUFDdEUseUdBQXlHO1FBQ3pHLHVDQUF1QztRQUN2Qyw0RkFBNEY7UUFDNUYsOENBQThDO1FBQzlDLCtHQUErRztRQUMvRywwQ0FBMEM7UUFDMUMsNEZBQTRGO1FBQzVGLGlEQUFpRDtRQUNqRCxxR0FBcUc7UUFDckcsb0NBQW9DO1FBQ3BDLDZGQUE2RjtRQUM3RixnREFBZ0Q7UUFDaEQscUdBQXFHO1FBQ3JHLG1EQUFtRDtRQUNuRCw4RUFBOEU7UUFDOUUsMkNBQTJDO1FBQzNDLHdIQUF3SDtRQUN4SCxvR0FBb0c7UUFDcEcsaUJBQWlCO1FBQ2pCLDRGQUE0RjtRQUM1Riw4Q0FBOEM7UUFDOUMsOEhBQThIO1FBQzlILDBDQUEwQztRQUMxQyw0RkFBNEY7UUFDNUYsaURBQWlEO1FBQ2pELG9IQUFvSDtRQUNwSCxvQ0FBb0M7UUFDcEMsNkZBQTZGO1FBQzdGLGdEQUFnRDtRQUNoRCxvSEFBb0g7UUFDcEgsbURBQW1EO1FBQ25ELDhFQUE4RTtRQUM5RSwyQ0FBMkM7UUFDM0MsMkdBQTJHO1FBQzNHLG9HQUFvRztRQUNwRywwQ0FBMEM7UUFDMUMsK0RBQStEO1FBQy9ELGlEQUFpRDtRQUNqRCxvR0FBb0c7UUFDcEcsaUdBQWlHO1FBQ2pHLG9DQUFvQztRQUNwQyxnRUFBZ0U7UUFDaEUsZ0RBQWdEO1FBQ2hELGlHQUFpRztRQUNqRyxtREFBbUQ7UUFDbkQsaURBQWlEO1FBQ2pELDJDQUEyQztRQUMzQyxvR0FBb0c7UUFDcEcsb0NBQW9DO1FBQ3BDLGdFQUFnRTtRQUNoRSwyQ0FBMkM7UUFDM0Msb0dBQW9HO1FBQ3BHLG1EQUFtRDtRQUNuRCxpREFBaUQ7UUFDakQsMERBQTBEO1FBQzFELGtHQUFrRztRQUNsRyxtREFBbUQ7UUFDbkQsaURBQWlEO1FBQ2pELG9HQUFvRztRQUNwRywwREFBMEQ7UUFDMUQsV0FBVztRQUNYLG9FQUFvRTtRQUNwRSxpQkFBaUI7UUFDakIsdURBQXVEO1FBQ3ZELGtDQUFrQztRQUNsQyxNQUFNO1FBQ04sSUFBSTtJQUNOLENBQUM7SUFDRCw2QkFBNkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFO1lBQ3ZELE9BQU87U0FDUjthQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1SyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7WUFDL0QsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0TCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7WUFDdEUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0SyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUE7WUFDL0QsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hILFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQTtZQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xJLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQTtZQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xILFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQTtZQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBQ0QsY0FBYztRQUNaLE9BQU87UUFDUCxvQ0FBb0M7UUFDcEMsK0JBQStCO1FBQy9CLDJCQUEyQjtRQUMzQixNQUFNO1FBQ04sWUFBWTtRQUNaLElBQUk7UUFDSixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztTQUN0QzthQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsT0FBTztTQUNSO1FBQ0QsaUJBQWlCO2FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1RSxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN2RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELGNBQWM7YUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25GLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNFLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsZ0JBQWdCO2FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELGFBQWE7YUFDUixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDO2VBQ2pKLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbEcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQztlQUNqSixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQztlQUNuSixJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQztlQUNuSixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELGtCQUFrQjthQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7ZUFDekksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQzthQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7ZUFDekksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFDSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO2VBQ3pJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO2VBQzNJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO2VBQzNJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUMxQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0Qsc0JBQXNCO2FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2VBQ2pDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM5RyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7ZUFDakMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQzthQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2VBQ2pDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDbEcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO2FBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7ZUFDakMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2VBQ25DLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTtlQUNuQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDMUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFDRCw4QkFBOEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUN2RSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNmLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2SCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25ILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEwsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoTCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN4SyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBQ0QsZUFBZTtRQUNiLE9BQU87UUFDUCxvQ0FBb0M7UUFDcEMsK0JBQStCO1FBQy9CLDJCQUEyQjtRQUMzQixNQUFNO1FBQ04sWUFBWTtRQUNaLEtBQUs7UUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUN2QzthQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7WUFDdEMsT0FBTztTQUNSO1FBQ0QsWUFBWTthQUNQLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0UsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZCxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM1RyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0UsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25HLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6RixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDOUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6RixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxpQkFBaUI7YUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hGLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1osUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsY0FBYzthQUNULElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2xILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDOUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RixJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7UUFDRCxnQkFBZ0I7YUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNsSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsYUFBYTthQUNSLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7ZUFDakosSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQzlHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUM7ZUFDbkosSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNDO1FBQ0Qsa0JBQWtCO2FBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQztlQUN6SSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNySCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQWlCLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxzQkFBc0IsS0FBSyxDQUFDO0lBQzVCLDBCQUEwQixLQUFLLENBQUM7SUFDaEMsNEJBQTRCLEtBQUssQ0FBQztJQUNsQyxlQUFlLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsS0FBSyxDQUFDO0lBQzVCLDBCQUEwQixLQUFLLENBQUM7SUFDaEMsNEJBQTRCLEtBQUssQ0FBQztJQUNsQyx1QkFBdUIsS0FBSyxDQUFDOzswR0EvNUVsQixhQUFhLG9ZQWdJZCxNQUFNOzhGQWhJTCxhQUFhLDYyQ0MxRDFCLGlrc0JBNFgyRzsyRkRsVTlGLGFBQWE7a0JBTHpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFdBQVcsRUFBRSx1QkFBdUI7aUJBQ3JDOytaQWtJbUMsTUFBTTswQkFBckMsTUFBTTsyQkFBQyxNQUFNOytHQTdIZSxlQUFlO3NCQUE3QyxZQUFZO3VCQUFDLGVBQWU7Z0JBQ0gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDVyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNILFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRyxtQkFBbUI7c0JBQTdDLFNBQVM7dUJBQUMsY0FBYztnQkFDUyxXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2MsZUFBZTtzQkFBcEQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1ksaUJBQWlCO3NCQUF4RCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDSixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2QsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBd0VILFNBQVM7c0JBRFosS0FBSzt1QkFBQyxRQUFRO2dCQThLZixZQUFZO3NCQURYLFlBQVk7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRTtnQkFXOUMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLDRCQUE0QixFQUFFLEVBQUU7Z0JBVzlDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFO2dCQVU5QyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIENoYW5nZURldGVjdG9yUmVmLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFN0b3JlLCBzZWxlY3QgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcclxuLy8gaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiYXBwL3NoYXJlZC9zdG9yZS9yZWR1Y2Vycy9tZW51aXRlbXMucmVkdWNlcnNcIjtcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0ICogYXMgc2hhcmVkTW9kdWxlUmVkdWNlcnMgZnJvbSBcIi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEdldEFsbE1lbnVJdGVtc1RyaWdnZXJlZCB9IGZyb20gXCIuLi8uLi9zdG9yZS9hY3Rpb25zL21lbnVpdGVtcy5hY3Rpb25zXCI7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XHJcbmltcG9ydCB7IFJlY2VudFNlYXJjaFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcmVjZW50U2VhcmNoLnNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcywgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBvZlR5cGUsIEFjdGlvbnMgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBTZWFyY2hUYXNrVHlwZSB9IGZyb20gXCIuL3NlYXJjaFRhc2suZW51bVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYXRQb3BvdmVyIH0gZnJvbSAnQG5jc3RhdGUvc2F0LXBvcG92ZXInO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLXVzZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvY29uc3RhbnRzL2xvY2Fsc3RvcmFnZS1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHsgRW1wbG95ZWVMaXN0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW1wbG95ZWUnO1xyXG5pbXBvcnQgeyBFbXBsb3llZUxpc3RJbnB1dCB9IGZyb20gJy4uLy4uL21vZGVscy9lbXBsb3llZS1MaXN0JztcclxuaW1wb3J0IHsgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb21wb25lbnRzL2NvbXBvbmVudGJhc2UnO1xyXG5pbXBvcnQgeyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc29mdGxhYmVscy1tb2RlbCc7XHJcbmltcG9ydCB7IElNZW51SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9JTWVudUl0ZW0nO1xyXG5pbXBvcnQgeyBVc2VyU3RvcnkgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlclN0b3J5JztcclxuaW1wb3J0IHsgV2lkZ2V0TGlzdCB9IGZyb20gJy4uLy4uL21vZGVscy93aWRnZXRsaXN0JztcclxuaW1wb3J0IHsgRHJhZ2VkV2lkZ2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RyYWdlZFdpZGdldCc7XHJcbmltcG9ydCB7IFdvcmtzcGFjZUxpc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya3NwYWNlTGlzdCc7XHJcbmltcG9ydCB7IFJlY2VudFNlYXJjaE1vZGVsLCBTZWFyY2hUYXNrVHlwZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JlY2VudFNlYXJjaE1vZGVsJztcclxuaW1wb3J0IHsgVGhlbWVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy90aGVtZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy93aW5kb3cuaGVscGVyJztcclxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEdvb2dsZUFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nb29nbGUtYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9qZWN0U2VhcmNoQ3JpdGVyaWFJbnB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Byb2plY3RTZWFyY2hDcml0ZXJpYUlucHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBNZW51Q2F0ZWdvcmllcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9tZW51LWNhdGVnb3JpZXMnO1xyXG5pbXBvcnQgeyBGZWF0dXJlSWRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbnN0YW50cy9mZWF0dXJlLWlkcyc7XHJcbmltcG9ydCAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvZm9udGF3ZXNvbWUtaWNvbnMnO1xyXG5pbXBvcnQgeyBSZWNlbnRTZWFyY2hUeXBlIH0gZnJvbSAnLi4vLi4vZW51bS9yZWNlbnRTZWFyY2hUeXBlLmVudW0nO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSBcIm5neC10b2FzdHJcIjtcclxuaW1wb3J0IHsgdHJpZ2dlciwgc3R5bGUsIGFuaW1hdGUsIHRyYW5zaXRpb24gfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG4vKiogQGR5bmFtaWMgKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1tZW51XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9tZW51LmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgW3g6IHN0cmluZ106IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcIm9wZW5NZW51UG9wVXBcIikgb3Blbk1lbnVQb3BPdmVyO1xyXG4gIEBWaWV3Q2hpbGQoXCJtZW51VHJpZ2dlclwiKSBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XHJcbiAgQFZpZXdDaGlsZChcImVsZW1lbnRcIikgZWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwid29ya3NwYWNlRWxlbWVudFwiKSB3b3Jrc3BhY2VFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtZW51RWxlbWVudFwiKSBtZW51RWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiYWRkV29ya3NwYWNlXCIpIGFkZFdvcmtTcGFjZVBvcE92ZXI6IFNhdFBvcG92ZXI7XHJcbiAgQFZpZXdDaGlsZChcImFsbFNlbGVjdGVkXCIpIHByaXZhdGUgYWxsU2VsZWN0ZWQ6IE1hdE9wdGlvbjtcclxuICBAVmlld0NoaWxkKFwiYWxsRWRpdFNlbGVjdGVkXCIpIHByaXZhdGUgYWxsRWRpdFNlbGVjdGVkOiBNYXRPcHRpb247XHJcbiAgQFZpZXdDaGlsZChcImFsbERlbGV0ZVNlbGVjdGVkXCIpIHByaXZhdGUgYWxsRGVsZXRlU2VsZWN0ZWQ6IE1hdE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdpbmZvUG9wT3ZlcicpIGluZm9Qb3BPdmVyOiBUZW1wbGF0ZVJlZjxhbnk+XHJcbiAgQE91dHB1dCgpIGlzT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9wZW5OZXdEYXNoYm9hcmQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBlOiBFbGVtZW50O1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICBmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG4gIHB1YmxpYyBtZW51SXRlbXMkOiBPYnNlcnZhYmxlPElNZW51SXRlbVtdPjtcclxuICB1c2VyU3Rvcmllc0xpc3QkOiBPYnNlcnZhYmxlPFVzZXJTdG9yeVtdPjtcclxuICBtZW51SXRlbTogSU1lbnVJdGVtW107XHJcbiAgaXRlbXMgPSBbXTtcclxuICBtZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgd2lkZ2V0czogV2lkZ2V0TGlzdFtdO1xyXG4gIG9yaWdpbmFsV2lkZ2V0czogV2lkZ2V0TGlzdFtdO1xyXG4gIHNlbGVjdGVkTGlzdDogRHJhZ2VkV2lkZ2V0W107XHJcbiAgd2lkZ2V0OiBXaWRnZXRMaXN0O1xyXG4gIHNlbGVjdGVkQXBwczogYW55O1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkRGFzaGJvYXJkOiBhbnk7XHJcbiAgZGVmYXVsdERhc2hib2FyZDogYW55O1xyXG4gIHN1YkxldmVsczogc3RyaW5nW10gPSBbXTtcclxuICBzdGF0ZUx2bDE6IHN0cmluZztcclxuICBsZXZlbDNMaW5rMTogc3RyaW5nO1xyXG4gIGxldmVsM0xpbmsyOiBzdHJpbmc7XHJcbiAgc3ViTGV2ZWxzRm9yTGV2ZWwyOiBzdHJpbmc7XHJcbiAgY29tcGFueU1haW5Mb2dvOiBzdHJpbmc7XHJcbiAgY29tcGFueU1pbmlMb2dvOiBzdHJpbmc7XHJcbiAgcm9sZXNEcm9wRG93bjogYW55W107XHJcbiAgd29ya3NwYWNlc0xpc3QkOiBPYnNlcnZhYmxlPFdvcmtzcGFjZUxpc3RbXT47XHJcbiAgd29ya3NwYWNlczogV29ya3NwYWNlTGlzdFtdO1xyXG4gIHdvcmtzcGFjZXNGb3JMb29wOiBhbnk7XHJcbiAgZGlzcGxheTogYm9vbGVhbjtcclxuICBhZG1pblRvb2xzOiBhbnkgPSBbXTtcclxuICB0b29sczogYW55O1xyXG4gIHNlbGVjdGVkUm93SW5kZXg6IGFueTtcclxuICBpdGVtQ2xpY2tlZDogYW55O1xyXG4gIHQ6IGFueTtcclxuICB3ZDogYW55O1xyXG4gIHdzOiBhbnk7XHJcbiAgcnM6IGFueTtcclxuICBhbGxzZWFyY2hlczogUmVjZW50U2VhcmNoTW9kZWxbXSA9IFtdO1xyXG4gIHJlY2VudFNlYXJjaGVzOiBSZWNlbnRTZWFyY2hNb2RlbFtdID0gW107XHJcbiAgcHJvamVjdFJvbGVUZXh0OiBzdHJpbmcgPSBcIlByb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uXCI7XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVBcHBsaWNhdGlvbnM6IEJvb2xlYW47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVGb3JtOiBCb29sZWFuO1xyXG4gIGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdGb3JtczogQm9vbGVhbjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9NYW5hZ2VQcm9qZWN0Um9sZVBlcm1pc3Npb25zOiBCb29sZWFuO1xyXG4gIGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlczogQm9vbGVhbjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQ6IE9ic2VydmFibGU8Qm9vbGVhbj47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVGb3JtJDogT2JzZXJ2YWJsZTxCb29sZWFuPjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkOiBPYnNlcnZhYmxlPEJvb2xlYW4+XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyQ6IE9ic2VydmFibGU8Qm9vbGVhbj5cclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMkOiBPYnNlcnZhYmxlPEJvb2xlYW4+O1xyXG4gIGNvbXBhbnlTZXR0aW5nc01PZGVsJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgZGlzYWJsZVdvcmtzcGFjZSA9IGZhbHNlO1xyXG4gIGRpc2FibGVXb3Jrc3BhY2VEZWxldGUgPSBmYWxzZTtcclxuICBkaXNhYmxlV29ya3NwYWNlaGlkZSA9IGZhbHNlO1xyXG4gIGZvcm1zOiBhbnk7XHJcbiAgY3VzdGFwcDogYW55O1xyXG4gIHByb2plY3RSb2xlQ29uZmlndXJhdGlvbjogYW55O1xyXG4gIHJvbGVDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgdGhlbWVNb2RlbDogVGhlbWVNb2RlbDtcclxuICBlbXBsb3llZUxpc3Q6IGFueVtdID0gW107XHJcbiAgdGhlbWVNb2RlbCQ6IE9ic2VydmFibGU8VGhlbWVNb2RlbD47XHJcbiAgdGhlbWVCYXNlQ29sb3I6IHN0cmluZztcclxuICBzZWxlY3RlZEVtcGxveWVlOiBzdHJpbmc7XHJcbiAgbG9hZGVkRW1wbG95ZWVMaXN0OiBFbXBsb3llZUxpc3RNb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRFbXBsb3llZUluZGV4OiBudW1iZXIgPSBudWxsO1xyXG4gIHZpZXdFbXBsb3llZVBlcm1pc3Npb246IGJvb2xlYW47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzOiBCb29sZWFuO1xyXG4gIHByb2plY3RMaXN0OiBhbnkgPSBbXTtcclxuICBwcm9qZWN0SW5kZXg6IGFueTtcclxuICBzZWFyY2hCeVRleHRMb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dChcInJlbG9hZFwiKVxyXG4gIHNldCByZWxvYWRBbGwoZGF0YTogYm9vbGVhbikge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5hZG1pblRvb2xzID0gW107XHJcbiAgICAgIHRoaXMudG9vbHMgPSBbXTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgbmdEZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcclxuICB1c2VyU3RvcnlMaXN0OiBhbnkgPSBbXTtcclxuICB1c2VyU3RvcnlTZWFyY2hMaXN0OiBhbnkgPSBbXTtcclxuICBnb2FsU2VhcmNoTGlzdDogYW55ID0gW107XHJcbiAgaXNFbmFibGVCdWdCb2FyZDogYm9vbGVhbjtcclxuICBzZWxlY3RlZFJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgZGFzaGJvYXJkVXBkYXRlSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICB1c2VyczogYW55O1xyXG4gIGdvYWxJbmRleDogYW55O1xyXG4gIHdvcmtzcGFjZUZvcm06IEZvcm1Hcm91cDtcclxuICBwcm9qZWN0U2VhcmNoUmVzdWx0czogYW55O1xyXG4gIGRlbGF5VGltZUlucHV0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIG1lbnVzZmV0Y2hJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIHdvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgd2lkZ2V0c2ZldGNoSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICByZWNlbnRTZWFyY2hlc2ZldGNoSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICBzZWFyY2hUYXNrczogU2VhcmNoVGFza1R5cGVNb2RlbDtcclxuICBsb2FkaW5nU2VhcmNoTWVudURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWZhdWx0RGFzaGJvYXJkSWQ6IHN0cmluZztcclxuICBzZWFyY2hCeUlkOiBib29sZWFuO1xyXG4gIHNlYXJjaEJ5VGV4dDogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPFN0YXRlPixcclxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHB1YmxpYyByb3V0ZXM6IFJvdXRlcixcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJzczogUmVjZW50U2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uVXBkYXRlcyQ6IEFjdGlvbnMsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIHdpbmRvdzogV2luZG93LFxyXG4gICAgcHJpdmF0ZSBnb29nbGVBbmFseXRpY3NTZXJ2aWNlOiBHb29nbGVBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy90aGlzLm9uRm9jdXMoKTtcclxuXHJcbiAgICAvLyBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIC8vIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyB9KSk7XHJcbiAgICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdvcmtzcGFjZUZvcm0oKTtcclxuICAgIHRoaXMucm91dGVzLmV2ZW50cy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHRoaXMubG9jYXRpb24ucGF0aCgpICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnVybCA9IHRoaXMubG9jYXRpb24ucGF0aCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMud2lkZ2V0U2VydmljZS5zZWxlY3RlZFdvcmtzcGFjZS5zdWJzY3JpYmUoaWQgPT4ge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRGFzaGJvYXJkID0gaWQ7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgIC8vICAgLnBpcGUoXHJcbiAgICAvLyAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgIC8vICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5HZXRDb21wYW55VGhlbWVDb21wbGV0ZWQpLFxyXG4gICAgLy8gICAgIHRhcCgoKSA9PiB7XHJcbiAgICAvL3RoaXMudGhlbWVNb2RlbCQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldFRoZW1lTW9kZWwpKTtcclxuICAgIC8vdGhpcy50aGVtZU1vZGVsJC5zdWJzY3JpYmUoeCA9PiB0aGlzLnRoZW1lTW9kZWwgPSB4KTtcclxuICAgIC8vIHRoaXMuZ2V0VGhlbWUoKTtcclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgdGhpcy50aGVtZVNlcnZpY2UuY2hhbmdlVGhlbWUodGhpcy50aGVtZU1vZGVsKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28sIHRoaXMudGhlbWVNb2RlbC5jb21wYW55TWFpbkxvZ28sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG5cclxuICAgIHZhciBjb21wYW55U2V0dGluZ3NNb2RlbCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikgIT0gbnVsbCA/IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikudmFsdWUgOiB0aGlzLmNvbXBhbnlNYWluTG9nbztcclxuICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2hvcnRjdXQtZmF2LWljb25cIikuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvKTtcclxuICAgIHRoaXMudGhlbWVCYXNlQ29sb3IgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWVDb2xvcicpO1xyXG4gICAgLy8gLy8gdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgLy8gLy8gaWYgKHRoaXMudGhlbWVNb2RlbCAmJiB0aGlzLnRoZW1lTW9kZWwuY29tcGFueVRoZW1lSWQgIT09IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIpIHtcclxuICAgIC8vIC8vICAgdGhpcy50aGVtZVNlcnZpY2UuY2hhbmdlVGhlbWUodGhpcy50aGVtZU1vZGVsKTtcclxuICAgIC8vIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbywgbnVsbCk7XHJcbiAgICAvLyAvLyAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWluaUxvZ28sIHRoaXMudGhlbWVNb2RlbC5jb21wYW55TWluaUxvZ28sIG51bGwpO1xyXG4gICAgLy8gLy8gfVxyXG4gICAgLy8gLy8gZWxzZSB7XHJcbiAgICAvLyAvLyAgIHZhciB0aGVtZU1vZGVsID0gbmV3IFRoZW1lTW9kZWwoKVxyXG4gICAgLy8gLy8gICB0aGVtZU1vZGVsLmNvbXBhbnlUaGVtZUlkID0gXCIwOTI5RDM1QS0zNTczLTRCMDYtOTNGQi1DN0Q0NkFBRkE5MThcIjtcclxuICAgIC8vIC8vICAgLy8gdGhlbWVNb2RlbC5jb21wYW55TWluaUxvZ28gPSBcImFzc2V0cy9pbWFnZXMvTG9nby1mYXZpY29uLnBuZ1wiO1xyXG4gICAgLy8gLy8gICAvLyB0aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbyA9IFwiYXNzZXRzL2ltYWdlcy9NYWluLUxvZ28ucG5nXCI7XHJcbiAgICAvLyAvLyAgIHRoaXMudGhlbWVNb2RlbCA9IHRoZW1lTW9kZWw7XHJcbiAgICAvLyAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLmNoYW5nZVRoZW1lKHRoZW1lTW9kZWwpO1xyXG4gICAgLy8gLy8gICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1haW5Mb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1haW5Mb2dvLCBudWxsKTtcclxuICAgIC8vIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNaW5pTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNaW5pTG9nbywgbnVsbCk7XHJcbiAgICAvLyAvLyB9XHJcbiAgICAvLyAvLyB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgLy8gLy8gdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuICAgIC8vIC8vIC8vdGhpcy5jaGFuZ2VGYXZJY29uKCk7XHJcbiAgICAvLyAvLyB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgIC8vdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyApXHJcbiAgICAvLyAuc3Vic2NyaWJlKCk7XHJcblxyXG5cclxuICAgIC8vIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgIC8vICAgLnBpcGUoXHJcbiAgICAvLyAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgIC8vICAgICBvZlR5cGUoV29ya3NwYWNlc0FjdGlvblR5cGVzLkxvYWRXb3Jrc3BhY2VCeUlkQ29tcGxldGVkKSxcclxuICAgIC8vICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgdmFyIHdvcmtzcGFjZXNMaXN0ID0gZGF0YS5zZWFyY2hXb3Jrc3BhY2VzU3VjY2VzcztcclxuICAgIC8vICAgICAgIHRoaXMuZGFzaGJvYXJkVXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgLy8gdGhpcy5jbG9zZUFkZFdvcmtzcGFjZURpYWxvZygpO1xyXG4gICAgLy8gICAgICAgdGhpcy5kaXNhYmxlV29ya3NwYWNlID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICBpZiAod29ya3NwYWNlc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLndvcmtzcGFjZXMucHVzaCh3b3Jrc3BhY2VzTGlzdFswXSk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZGlzcGxheSA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgIC8vICAgICAgICAgdGhpcy5vcGVuTmV3RGFzaGJvYXJkLmVtaXQod29ya3NwYWNlc0xpc3RbMF0ud29ya3NwYWNlSWQpXHJcbiAgICAvLyAgICAgICB9XHJcblxyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgLy90aGlzLmdldEFsbFByb2plY3RzKCk7XHJcblxyXG4gICAgdGhpcy5kZWxheVRpbWVJbnB1dC5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMjAwMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuU2VhcmNoSXRlbSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFRoZW1lKCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuZ2V0VGhlbWVzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnQ29tcGFueVRoZW1lJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLmNoYW5nZVRoZW1lKHRoaXMudGhlbWVNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgIHRoaXMuc2l0ZVVybCA9IHJlc3BvbnNlLmRhdGEucmVnaXN0cmVyU2l0ZUFkZHJlc3M7XHJcbiAgICAgICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG5cclxuICAgICAgICB2YXIgY29tcGFueVNldHRpbmdzTW9kZWwgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVNldHRpbmdzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55TWFpbkxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5jb21wYW55TWFpbkxvZ28gPSByZXNwb25zZS5kYXRhLmNvbXBhbnlNYWluTG9nbztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFueU1pbmlMb2dvID09IFwiXCIgfHwgdGhpcy5jb21wYW55TWluaUxvZ28gPT0gbnVsbCB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gcmVzcG9uc2UuZGF0YS5jb21wYW55TWluaUxvZ287XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2hvcnRjdXQtZmF2LWljb25cIikuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvKTtcclxuICAgICAgICB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmNvbnRyb2wucScsIFtdKVxyXG4gIGtleU9wZW5FdmVudCgpIHtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoQnlJZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICB0aGlzLm9uRm9jdXMoKVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLm0nLCBbXSlcclxuICBrZXlDbG9zZUV2ZW50KCkge1xyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJ5SWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLmInLCBbXSlcclxuICByZW1vdGVTZWFyY2hCeVRleHQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEJ5SWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gdHJ1ZVxyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIC8vdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLnknLCBbXSlcclxuICByZW1vdGVTZWFyY2hCeUlkKCkge1xyXG4gICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZVxyXG4gICAgdGhpcy5zZWFyY2hCeUlkID0gdHJ1ZTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAvL3RoaXMuZGlzcGxheSA9IHRydWU7XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0xvY2FsVGltZSh0aW1lKSB7XHJcbiAgICB2YXIgdXRjRGF0ZSA9IG1vbWVudC51dGModGltZSkuZm9ybWF0KCk7XHJcbiAgICB2YXIgbG9jYWxEYXRlID0gbW9tZW50LnV0Yyh1dGNEYXRlKS5sb2NhbCgpLmZvcm1hdCgpO1xyXG4gICAgcmV0dXJuIGxvY2FsRGF0ZTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVXb3Jrc3BhY2VGb3JtKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJZHMgPSBudWxsO1xyXG4gICAgdGhpcy5kaXNhYmxlV29ya3NwYWNlID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc2FibGVXb3Jrc3BhY2VoaWRlID0gZmFsc2U7XHJcbiAgICB0aGlzLndvcmtzcGFjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgd29ya3NwYWNlTmFtZTogbmV3IEZvcm1Db250cm9sKG51bGwsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MClcclxuICAgICAgICBdKVxyXG4gICAgICApLFxyXG4gICAgICBzZWxlY3RlZFJvbGVzOiBuZXcgRm9ybUNvbnRyb2wobnVsbCxcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIF0pXHJcbiAgICAgICksXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2wobnVsbCxcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwMClcclxuICAgICAgICBdKVxyXG4gICAgICApLFxyXG4gICAgICBlZGl0Um9sZUlkczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtdKSxcclxuICAgICAgZGVsZXRlUm9sZUlkczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtdKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7O1xyXG5cclxuICAgIC8vdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkKCkpO1xyXG4gICAgdGhpcy5hZG1pblRvb2xzID0gW107XHJcbiAgICAvLyB2YXIgZGFzaGJvYXJkcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EYXNoYm9hcmRzKSk7XHJcbiAgICAvLyBpZiAoZGFzaGJvYXJkcyAmJiBkYXNoYm9hcmRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAvLyAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3AgPSBkYXNoYm9hcmRzO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdmFyIG1lbnVJdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5NZW51SXRlbXMpKVxyXG4gICAgLy8gaWYgKG1lbnVJdGVtcyAmJiBtZW51SXRlbXMgIT0gXCJudWxsXCIpIHtcclxuICAgIC8vICAgdGhpcy5tZW51SXRlbSA9IG1lbnVJdGVtcztcclxuICAgIC8vICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW0uZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdmFyIHdpZGdldHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRmF2b3VyaXRlV2lkZ2V0cykpO1xyXG4gICAgLy8gaWYgKHdpZGdldHMgJiYgd2lkZ2V0cyAhPSBcIm51bGxcIikge1xyXG4gICAgLy8gICB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cyA9IHdpZGdldHM7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB2YXIgcmVjZW50U2VhcmNoZXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuUmVjZW50U2VhcmNoZXMpKTtcclxuICAgIC8vIGlmIChyZWNlbnRTZWFyY2hlcyAmJiByZWNlbnRTZWFyY2hlcyAhPSBcIm51bGxcIikge1xyXG4gICAgLy8gICB0aGlzLmFsbHNlYXJjaGVzID0gdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlY2VudFNlYXJjaGVzO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5sb2FkV2lkZ2V0c0xpc3QoKTtcclxuICAgIC8vICB0aGlzLmxvYWRXb3Jrc3BhY2VzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRTb2Z0TGFiZWxDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5nZXRDb21wYW55U2V0dGluZ3MoKTtcclxuICAgIHRoaXMubWVudUl0ZW1zJCA9IHRoaXMuc3RvcmUucGlwZShcclxuICAgICAgc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldEN1cnJlbnRBY3RpdmVNZW51Q2F0ZWdvcnlNZW51SXRlbXMpLFxyXG4gICAgICB0YXAobWVudUxpc3QgPT4gY29uc29sZS5sb2cobWVudUxpc3QpKVxyXG4gICAgKTtcclxuICAgIC8vIHRoaXMubWVudUl0ZW1zJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAvLyAgIHZhciBhID0geDtcclxuICAgIC8vICAgdmFyIGIgPSB0aGlzLm1lbnVJdGVtLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPSBcImRyb3BEb3duXCIpO1xyXG5cclxuICAgIC8vICAgLy90aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIC8vICAgLy90aGlzLm1lbnVzZmV0Y2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBHZXRBbGxNZW51SXRlbXNUcmlnZ2VyZWQoTWVudUNhdGVnb3JpZXMuTWFpbikpO1xyXG5cclxuICAgIHZhciBjb21wYW55U2V0dGluZ3NNb2RlbCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikgIT0gbnVsbCA/IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikudmFsdWUgOiB0aGlzLmNvbXBhbnlNYWluTG9nbztcclxuICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBcIlwiIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IG51bGwgfHwgdGhpcy5jb21wYW55TWFpbkxvZ28gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb21wYW55TWluaUxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1pbmlMb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWluaUxvZ28pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvcnRjdXQtZmF2LWljb24nKSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvcnRjdXQtZmF2LWljb24nKS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHRoaXMuY29tcGFueU1pbmlMb2dvKTtcclxuICAgIH1cclxuICAgIC8vdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcclxuXHJcbiAgICAvLyB0aGlzLmN1c3RhcHAgPSB7XHJcbiAgICAvLyAgIG5hbWU6IFwiQ3VzdG9tIGFwcGxpY2F0aW9uc1wiLFxyXG4gICAgLy8gICBsaW5rOiBcIi9hcHBsaWNhdGlvbnMvY3VzdG9tLWFwcGxpY2F0aW9uc1wiLFxyXG4gICAgLy8gICBwZXJtaXNzaW9uOiB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0FkZE9yVXBkYXRlQXBwbGljYXRpb25zJFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5mb3JtcyA9IHtcclxuICAgIC8vICAgbmFtZTogXCJGb3Jtc1wiLFxyXG4gICAgLy8gICBsaW5rOiBcIi9hcHBsaWNhdGlvbnMvdmlldy1mb3Jtc1wiLFxyXG4gICAgLy8gICBwZXJtaXNzaW9uOiB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdGb3JtcyRcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMucHJvamVjdFJvbGVDb25maWd1cmF0aW9uID0ge1xyXG4gICAgLy8gICBuYW1lOiBcIlByb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAvLyAgIGxpbms6IFwiL3JvbGVtYW5hZ2VtZW50L2VudGl0eXJvbGVtYW5hZ2VtZW50XCIsXHJcbiAgICAvLyAgIHBlcm1pc3Npb246IHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyRcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMucm9sZUNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAvLyAgIG5hbWU6IFwiUm9sZSBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAvLyAgIGxpbms6IFwiL3JvbGVtYW5hZ2VtZW50L3JvbGVtYW5hZ2VtZW50XCIsXHJcbiAgICAvLyAgIHBlcm1pc3Npb246IHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfVmlld1JvbGVzJFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmRvZXNVc2VySGF2ZVBlcm1pc3Npb24sIHsgZmVhdHVyZUlkOiBGZWF0dXJlSWRzLkZlYXR1cmVfQWRkT3JVcGRhdGVBcHBsaWNhdGlvbnMgfSkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRtaW5Ub29scy5zb21lKChmbG93KSA9PiBmbG93Lm5hbWUgPT0gJ0N1c3RvbSBhcHBsaWNhdGlvbnMnKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLmN1c3RhcHApO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUZvcm0kID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0FkZE9yVXBkYXRlRm9ybSB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0FkZE9yVXBkYXRlRm9ybSQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUZvcm0gPSByZXN1bHQ7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICB0aGlzLmFkbWluVG9vbHMuc29tZSgoZmxvdykgPT4gZmxvdy5uYW1lID09ICdGb3JtcycpID8gbnVsbCA6IHRoaXMuYWRtaW5Ub29scy5wdXNoKHRoaXMuZm9ybXMpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX1ZpZXdGb3JtcyB9KSk7ICAgIC8vIC8vdGhpcy5yb3V0ZS51cmwuc3Vic2NyaWJlKCh1cmwpID0+IHRoaXMudXJsID0gdXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfVmlld0Zvcm1zID0gcmVzdWx0O1xyXG4gICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgdGhpcy5hZG1pblRvb2xzLnNvbWUoKGZsb3cpID0+IGZsb3cubmFtZSA9PSAnRm9ybXMnKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLmZvcm1zKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIC8vIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmRvZXNVc2VySGF2ZVBlcm1pc3Npb24sIHsgZmVhdHVyZUlkOiBGZWF0dXJlSWRzLkZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX01hbmFnZVByb2plY3RSb2xlUGVybWlzc2lvbnMkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRtaW5Ub29scy5zb21lKChmbG93KSA9PiBmbG93Lm5hbWUgPT0gJ1Byb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uJykgPyBudWxsIDogdGhpcy5hZG1pblRvb2xzLnB1c2godGhpcy5wcm9qZWN0Um9sZUNvbmZpZ3VyYXRpb24pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX1ZpZXdSb2xlcyB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlcyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMgPSByZXN1bHQ7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICB0aGlzLmFkbWluVG9vbHMuc29tZSgoZmxvdykgPT4gZmxvdy5uYW1lID09ICdSb2xlIGNvbmZpZ3VyYXRpb24nKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLnJvbGVDb25maWd1cmF0aW9uKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIC8vIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZG9lc1VzZXJIYXZlUGVybWlzc2lvbiwgeyBmZWF0dXJlSWQ6IEZlYXR1cmVJZHMuRmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMgfSkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgLy8gdGhpcy5nZXRBbGxFbXBsb3llZXMoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIHRoaXMudG9vbHMgPSB0aGlzLmFkbWluVG9vbHM7XHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAvL3RoaXMuZ2V0QWxsRW1wbG95ZWVzKCk7XHJcbiAgICAvLyB0aGlzLmxvYWRXaWRnZXRzTGlzdChudWxsKTtcclxuICAgIC8vIHRoaXMubG9hZFdvcmtzcGFjZXNMaXN0KCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgIHRoaXMuZ29hbFNlYXJjaExpc3QgPSBbXTtcclxuICAgIC8vIGlmKHRoaXMuaXRlbXMubGVuZ3RoPjApIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDsgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYodGhpcy50b29scy5sZW5ndGg+MCkge1xyXG4gICAgLy8gICB0aGlzLnQ9MDsgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudG9vbHNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYodGhpcy53b3Jrc3BhY2VzLmxlbmd0aD4wKSB7XHJcbiAgICAvLyAgIHRoaXMud3MgPSAwOyB0aGlzLml0ZW1DbGlja2VkID10aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICAvLyB9ICBcclxuXHJcbiAgICB0aGlzLlNlYXJjaEl0ZW0gPSBfLmRlYm91bmNlKHRoaXMuU2VhcmNoSXRlbSwgMTAwMCk7XHJcbiAgICB0aGlzLnJvdXRlcy5ldmVudHNcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkluZm8oaW5mb1BvcE92ZXIpIHtcclxuICAgIGluZm9Qb3BPdmVyLm9wZW5Qb3BvdmVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRBbGxQcm9qZWN0cygpIHtcclxuICAvLyAgIGNvbnN0IHByb2plY3RTZWFyY2hSZXN1bHQgPSBuZXcgUHJvamVjdFNlYXJjaENyaXRlcmlhSW5wdXRNb2RlbCgpO1xyXG4gIC8vICAgcHJvamVjdFNlYXJjaFJlc3VsdC5pc0FyY2hpdmVkID0gZmFsc2U7XHJcbiAgLy8gICB0aGlzLmNvbW1vblNlcnZpY2Uuc2VhcmNoUHJvamVjdHMocHJvamVjdFNlYXJjaFJlc3VsdCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChyZXNwb25zZS5zdWNjZXNzID09IHRydWUpIHtcclxuICAvLyAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xyXG4gIC8vICAgICAgICAgdGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSByZXNwb25zZS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2U7XHJcbiAgLy8gICAgICAgdGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cyA9IFtdO1xyXG4gIC8vICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0Q29tcGFueVNldHRpbmdzKCkge1xyXG4gICAgbGV0IGNvbXBhbnlTZXR0aW5nc01vZGVsID0gW107XHJcbiAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0Q29tcGFueVNldHRpbmdzKSk7XHJcbiAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJC5zdWJzY3JpYmUoKHgpID0+IGNvbXBhbnlTZXR0aW5nc01vZGVsID0geCk7XHJcbiAgICBsZXQgYnVnQm9hcmRSZXN1bHQgPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maWx0ZXIoaXRlbSA9PiBpdGVtLmtleS50cmltKCkgPT0gXCJFbmFibGVCdWdCb2FyZFwiKTtcclxuICAgIGlmIChidWdCb2FyZFJlc3VsdCAmJiBidWdCb2FyZFJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaXNFbmFibGVCdWdCb2FyZCA9IGJ1Z0JvYXJkUmVzdWx0WzBdLnZhbHVlID09IFwiMVwiID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpICE9IG51bGwgPyBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpLnZhbHVlIDogdGhpcy5jb21wYW55TWluaUxvZ287XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9ydGN1dC1mYXYtaWNvbicpKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9ydGN1dC1mYXYtaWNvbicpLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdGhpcy5jb21wYW55TWluaUxvZ28pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFNlYXJjaERhdGEoKSB7XHJcbiAgICB2YXIgbWVudUl0ZW1zID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLk1lbnVJdGVtcykpXHJcbiAgICBpZiAobWVudUl0ZW1zICYmIG1lbnVJdGVtcyAhPSBcIm51bGxcIikge1xyXG4gICAgICB0aGlzLm1lbnVJdGVtID0gbWVudUl0ZW1zO1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5tZW51SXRlbS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT0gXCJkcm9wRG93blwiKTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICB9XHJcbiAgICB2YXIgd2lkZ2V0cyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5GYXZvdXJpdGVXaWRnZXRzKSk7XHJcbiAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzID0gd2lkZ2V0cztcclxuICAgIH1cclxuICAgIHZhciByZWNlbnRTZWFyY2hlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWNlbnRTZWFyY2hlcykpO1xyXG4gICAgaWYgKHJlY2VudFNlYXJjaGVzICYmIHJlY2VudFNlYXJjaGVzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgIHRoaXMuYWxsc2VhcmNoZXMgPSB0aGlzLnJlY2VudFNlYXJjaGVzID0gcmVjZW50U2VhcmNoZXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRyYW5zbGF0ZWFwcGxpY2F0aW9ubmFtZShpdGVtKSB7XHJcbiAgICBpZiAoaXRlbSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmFyIGxvY2FsdmFyaWFibGUgPSBpdGVtLnRyaW0oKTtcclxuICAgIHZhciBuYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJBUFAuXCIgKyBsb2NhbHZhcmlhYmxlKTtcclxuICAgIGlmIChuYW1lLmluZGV4T2YoXCJBUFAuXCIpICE9IC0xKSB7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hCeUlkICYmICF0aGlzLnNlYXJjaEJ5VGV4dCkge1xyXG4gICAgICB2YXIgcmV0cmlldmVEYXNoYm9hcmRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgdmFyIGRhc2hib2FyZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRhc2hib2FyZHMpO1xyXG4gICAgICBpZiAoZGFzaGJvYXJkcyAmJiBkYXNoYm9hcmRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgICAgcmV0cmlldmVEYXNoYm9hcmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53b3Jrc3BhY2VzRm9yTG9vcCA9IEpTT04ucGFyc2UoZGFzaGJvYXJkcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgdGhpcy53b3Jrc3BhY2VzID0gdGhpcy53b3Jrc3BhY2VzRm9yTG9vcC5maWx0ZXIoXHJcbiAgICAgICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgICAgICBpdGVtLndvcmtzcGFjZU5hbWVcclxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndvcmtzcGFjZXMgPSB0aGlzLndvcmtzcGFjZXNGb3JMb29wO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoISh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaykgJiYgSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuU2VhcmNoQ2xpY2spKSA9PSB0cnVlKSkge1xyXG4gICAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgSlNPTi5zdHJpbmdpZnkodHJ1ZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkV2lkZ2V0c0xpc3QobnVsbCk7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkV29ya3NwYWNlc0xpc3QoKTtcclxuICAgICAgICAvLyB0aGlzLmdldEFsbE1lbnVJdGVtcygpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmdTZWFyY2hNZW51RGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yc3Muc2VhcmNoTWVudURhdGEocmV0cmlldmVEYXNoYm9hcmRzKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzICYmIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLndvcmtzcGFjZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud29ya3NwYWNlcyA9IHJlcy5kYXRhLndvcmtzcGFjZXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRhc2hib2FyZHMsIEpTT04uc3RyaW5naWZ5KHRoaXMud29ya3NwYWNlcykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3Jrc3BhY2VzRm9yTG9vcCA9IHRoaXMud29ya3NwYWNlcztcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0RGFzaGJvYXJkID0gdGhpcy53b3Jrc3BhY2VzLmZpbmQoaSA9PiBpLmlzRGVmYXVsdCA9PSB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLndpZGdldHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxXaWRnZXRzID0gcmVzLmRhdGEud2lkZ2V0cy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgICAgICAgICAgICBhLndpZGdldE5hbWUudG9Mb3dlckNhc2UoKSA+IGIud2lkZ2V0TmFtZS50b0xvd2VyQ2FzZSgpID8gMSA6IC0xXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy5vcmlnaW5hbFdpZGdldHM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkZhdm91cml0ZVdpZGdldHMsIEpTT04uc3RyaW5naWZ5KHRoaXMud2lkZ2V0cykpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubWVudUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgYXBwbGljYXRpb25zID0gcmVzLmRhdGEubWVudUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHgubWVudUNhdGVnb3J5ICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgTWVudUNhdGVnb3JpZXMuTWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHgubWVudUNhdGVnb3J5LnRvTG93ZXJDYXNlKCkgPT09IE1lbnVDYXRlZ29yaWVzLk1haW4udG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLy8gICApO1xyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW0gPSByZXMuZGF0YS5tZW51SXRlbXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLk1lbnVJdGVtcywgSlNPTi5zdHJpbmdpZnkodGhpcy5tZW51SXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW0uZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucmVjZW50U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbHNlYXJjaGVzID0gcmVzLmRhdGEucmVjZW50U2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHRoaXMuYWxsc2VhcmNoZXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlJlY2VudFNlYXJjaGVzLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFsbHNlYXJjaGVzKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkRmF2b3VyaXRlV2lkZ2V0cywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaE1lbnVEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRTZWFyY2hEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgaWYgKCEodGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuTG9hZEZhdm91cml0ZVdpZGdldHMpICYmIEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRGYXZvdXJpdGVXaWRnZXRzKSkgPT0gZmFsc2UpKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmxvYWRXaWRnZXRzTGlzdChudWxsLCB0cnVlKTtcclxuICAgICAgLy8gICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAvLyAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRGYXZvdXJpdGVXaWRnZXRzLCBKU09OLnN0cmluZ2lmeShmYWxzZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmICghKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRSZWNlbnRTZWFyY2hlcykgJiYgSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuTG9hZFJlY2VudFNlYXJjaGVzKSkgPT0gZmFsc2UpKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmdldFJlY2VudFNlYXJjaGVzKCk7XHJcbiAgICAgIC8vICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICAgdGhpcy5yb3V0ZXJBY3RpdmUoKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgcm91dGVyQWN0aXZlKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGVzLnVybC5pbmNsdWRlcyhcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZFwiKSAmJiB0aGlzLnJvdXRlcy51cmwuc3BsaXQoXCIvXCIpWzNdKSB7XHJcbiAgICAgIHZhciBkYXNoYm9hcmRJZCA9IHRoaXMucm91dGVzLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgIGlmIChkYXNoYm9hcmRJZCAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMud29ya3NwYWNlcy5maW5kSW5kZXgoaSA9PiBpLndvcmtzcGFjZUlkID09IGRhc2hib2FyZElkKTtcclxuICAgICAgICB0aGlzLndzID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5yb3V0ZXMudXJsLmluY2x1ZGVzKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvd2lkZ2V0c1wiKSAmJiB0aGlzLnJvdXRlcy51cmwuc3BsaXQoXCIvXCIpWzNdKSB7XHJcbiAgICAgIHZhciB3aWRnZXRJZCA9IHRoaXMucm91dGVzLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgIGlmICh3aWRnZXRJZCAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMud2lkZ2V0cy5maW5kSW5kZXgoaSA9PiBpLndpZGdldElkID09IHdpZGdldElkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLndkID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndzID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWNlbnRTZWFyY2hlcyAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBpbmRleFJzID0gdGhpcy5yZWNlbnRTZWFyY2hlcy5maW5kSW5kZXgoaSA9PiBpLml0ZW1JZCA9PSB3aWRnZXRJZClcclxuICAgICAgICAgIHRoaXMucnMgPSBpbmRleFJzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbdGhpcy5yc107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpID0+IHRoaXMucm91dGVzLnVybCA9PSBcIi9cIiArIGkuc3RhdGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkV29ya3NwYWNlc0xpc3QoKSB7XHJcbiAgICB0aGlzLndvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgdmFyIHdvcmtzcGFjZWxpc3QgPSBuZXcgV29ya3NwYWNlTGlzdCgpO1xyXG4gICAgd29ya3NwYWNlbGlzdC53b3Jrc3BhY2VJZCA9IFwibnVsbFwiO1xyXG4gICAgd29ya3NwYWNlbGlzdC5pc0hpZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLkdldFdvcmtzcGFjZUxpc3Qod29ya3NwYWNlbGlzdCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXMgPSByZXN1bHQuZGF0YTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EYXNoYm9hcmRzLCBKU09OLnN0cmluZ2lmeShyZXN1bHQuZGF0YSkpO1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXNGb3JMb29wID0gdGhpcy53b3Jrc3BhY2VzO1xyXG4gICAgICB0aGlzLmRlZmF1bHREYXNoYm9hcmQgPSB0aGlzLndvcmtzcGFjZXMuZmluZChpID0+IGkuaXNEZWZhdWx0ID09IHRydWUpO1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZFdvcmtzcGFjZXNMaXN0VHJpZ2dlcmVkKHRoaXMud29ya3NwYWNlbGlzdCkpO1xyXG4gIH07XHJcblxyXG4gIG9wZW5BcHBzKCkge1xyXG4gICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wiYXBwLXN0b3JlL3dpZGdldHNcIl0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFdpZGdldHNMaXN0KHNlYXJjaFRleHQsIHN0b3JlID0gZmFsc2UpIHtcclxuICAgIHRoaXMud2lkZ2V0c2ZldGNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLndpZGdldCA9IG5ldyBXaWRnZXRMaXN0KCk7XHJcbiAgICB0aGlzLndpZGdldC53aWRnZXRJZCA9IFwibnVsbFwiO1xyXG4gICAgdGhpcy53aWRnZXQuaXNBcmNoaXZlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy53aWRnZXQucGFnZU51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLndpZGdldC5wYWdlU2l6ZSA9IG51bGw7XHJcbiAgICB0aGlzLndpZGdldC5zb3J0RGlyZWN0aW9uQXNjID0gdHJ1ZTtcclxuICAgIHRoaXMud2lkZ2V0LmlzRmF2b3VyaXRlV2lkZ2V0ID0gdHJ1ZTtcclxuICAgIGlmIChzZWFyY2hUZXh0KVxyXG4gICAgICB0aGlzLndpZGdldC5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcclxuXHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuR2V0V2lkZ2V0c0Jhc2VkT25Vc2VyKHRoaXMud2lkZ2V0KS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IFtdO1xyXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsV2lkZ2V0cyA9IHJlc3VsdC5kYXRhLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgICBhLndpZGdldE5hbWUudG9Mb3dlckNhc2UoKSA+IGIud2lkZ2V0TmFtZS50b0xvd2VyQ2FzZSgpID8gMSA6IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cztcclxuICAgICAgICBpZiAoc3RvcmUpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRmF2b3VyaXRlV2lkZ2V0cywgSlNPTi5zdHJpbmdpZnkodGhpcy53aWRnZXRzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2lkZ2V0c2ZldGNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIGNvbXBhbnlTZXR0aW5nc01vZGVsID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncykpO1xyXG5cclxuICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpICE9IG51bGwgPyBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpLnZhbHVlIDogdGhpcy5jb21wYW55TWluaUxvZ287XHJcbiAgICAvLyB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgLy8gdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wYW55TWFpbkxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29tcGFueU1pbmlMb2dvID09IFwiXCIgfHwgdGhpcy5jb21wYW55TWluaUxvZ28gPT0gbnVsbCB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3J0Y3V0LWZhdi1pY29uJykpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3J0Y3V0LWZhdi1pY29uJykuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLmNvbXBhbnlNaW5pTG9nbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWxsRW1wbG95ZWVzKCkge1xyXG4gICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyB9KSk7XHJcbiAgICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICAgIGxldCBlbXBsb3llZVNwZW50VGltZSA9IG5ldyBFbXBsb3llZUxpc3RJbnB1dCgpO1xyXG4gICAgZW1wbG95ZWVTcGVudFRpbWUuc29ydERpcmVjdGlvbkFzYyA9IHRydWU7XHJcbiAgICBlbXBsb3llZVNwZW50VGltZS5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLmhyRGFzaGJvYXJTZXJ2aWNlLkdldEFsbEVtcGxveWVlcyhlbXBsb3llZVNwZW50VGltZSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgIC8vICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHJlc3VsdC5kYXRhO1xyXG4gICAgLy8gICAgIGlmICghKHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzKSkge1xyXG4gICAgLy8gICAgICAgdmFyIGN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAvLyAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0LmZpbHRlcih4ID0+ICh4LnVzZXJJZC50b0xvd2VyQ2FzZSgpID09IGN1cnJlbnRVc2VySWQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLmVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0O1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG5cclxuICAgIGNvbnN0IGVtcGxveWVlTGlzdFNlYXJjaFJlc3VsdCA9IG5ldyBFbXBsb3llZUxpc3RNb2RlbCgpO1xyXG4gICAgZW1wbG95ZWVMaXN0U2VhcmNoUmVzdWx0LnNvcnREaXJlY3Rpb25Bc2MgPSB0cnVlO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLmdldEFsbEVtcGxveWVlcyhlbXBsb3llZUxpc3RTZWFyY2hSZXN1bHQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICBpZiAoISh0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscykpIHtcclxuICAgICAgICAgIHZhciBjdXJyZW50VXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgPSB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdC5maWx0ZXIoeCA9PiAoeC51c2VySWQudG9Mb3dlckNhc2UoKSA9PSBjdXJyZW50VXNlcklkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUxpc3QgPSB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIC8vICAgdGhpcy5lID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgLy8gICBsZXQgb3V0U2lkZUNsaWNrID0gIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywoKT0+e1xyXG4gIC8vICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIE9wZW5NZW51SXRlbXMob3Blbk1lbnVQb3BVcCkge1xyXG4gICAgb3Blbk1lbnVQb3BVcC5vcGVuUG9wb3ZlcigpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkxldmVsMk1lbnUobGluaywgZXZlbnQpIHtcclxuICAgIHRoaXMuc3RhdGVMdmwxID0gbGluaztcclxuICAgIHRoaXMuc3ViTGV2ZWxzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBvcGVuTGV2ZWwzTWVudShsaW5rMSwgbGluazIsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmxldmVsM0xpbmsxID0gbGluazE7XHJcbiAgICB0aGlzLmxldmVsM0xpbmsyID0gbGluazI7XHJcbiAgICB0aGlzLnN1YkxldmVsc0ZvckxldmVsMiA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTWVudUl0ZW1zKCkge1xyXG4gICAgdGhpcy5tZW51c2ZldGNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBHZXRBbGxNZW51SXRlbXNUcmlnZ2VyZWQoTWVudUNhdGVnb3JpZXMuTWFpbikpO1xyXG4gICAgY29uc3QgdXNlclJlZmVyZW5jZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlclJlZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZGVmYXVsdERhc2hib2FyZElkID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRGVmYXVsdERhc2hib2FyZCkgPyBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSkgOiBudWxsOztcclxuICAgIGlmICh0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCAmJiB1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgKyBcIi9mb3JtL1wiICsgdXNlclJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdERhc2hib2FyZElkKSB7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwibGl2ZXMvd2VsY29tZVwiKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Vcmwod29ya3NwYWNlSWQpIHtcclxuICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICBpZiAodXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHdvcmtzcGFjZUlkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHdvcmtzcGFjZUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNvZnRMYWJlbENvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgdGhpcy5zb2Z0TGFiZWxzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU29mdExhYmVscycpKTtcclxuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hNZW51SXRlbXMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCeVRleHQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yc3MuZ2V0U2VhcmNoTWVudUl0ZW1zKHsgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hUZXh0LCBzZWFyY2hVbmlxdWVJZDogbnVsbCB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgIT0gbnVsbCAmJiByZXNwb25zZS5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0TGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+IHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gcmVzcG9uc2UuZGF0YS5maWx0ZXIodXMgPT4gKHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHx8ICh1cy5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+IHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgKHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcnMgPSByZXNwb25zZS5kYXRhLmZpbHRlcih1cyA9PiB1cy5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHVzZXJzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0LmZpbHRlcigoeDogYW55KSA9PiAoeC5pdGVtSWQudG9Mb3dlckNhc2UoKSA9PSBjdXJyZW50VXNlcklkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3Q7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0TGlzdCAmJiB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy51c2VycyA9IHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblByb2plY3RTZWxlY3QoaXRlbSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudC53aGljaCA9PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLnByb2plY3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUucHJvamVjdCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwicHJvamVjdHMvcHJvamVjdHN0YXR1cy9cIiArIGl0ZW0uaXRlbUlkICsgXCIvYWN0aXZlLWdvYWxzXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2VhcmNoSXRlbShldmVudCkge1xyXG4gICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgIHZhciBlbGVtZW50ID1cclxuICAgICAgISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIik7XHJcbiAgICBlbGVtZW50ID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDAgOiBudWxsO1xyXG4gICAgdmFyIGVsZW0gPVxyXG4gICAgICAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKTtcclxuICAgIGVsZW0gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICB2YXIgZW1wID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIik7XHJcbiAgICBlbXAgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICB2YXIgd2lkZ2V0ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIik7XHJcbiAgICB3aWRnZXQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICAvL3RoaXMuZGlzcGxheSA9IHRydWU7XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoQnlUZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VhcmNoTWVudUl0ZW1zKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zZWFyY2hCeUlkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm1lbnVJdGVtLmZpbHRlcihcclxuICAgICAgICBpdGVtID0+XHJcbiAgICAgICAgICBpdGVtLm1lbnUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKSkgIT09XHJcbiAgICAgICAgICBmYWxzZSAmJiBpdGVtLnR5cGUgIT0gXCJkcm9wRG93blwiXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3AuZmlsdGVyKFxyXG4gICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgIGl0ZW0ud29ya3NwYWNlTmFtZVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5hZG1pblRvb2xzID8gdGhpcy50b29scyA9IHRoaXMuYWRtaW5Ub29scy5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIC8vdGhpcy5sb2FkV2lkZ2V0c0xpc3QoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgdGhpcy5vcmlnaW5hbFdpZGdldHMgPyB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cy5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbS53aWRnZXROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QubGVuZ3RoID4gMCA/ICh0aGlzLmxvYWRlZEVtcGxveWVlTGlzdC5maWx0ZXIoeCA9PlxyXG4gICAgICAoKHguZnVsbE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IGZhbHNlKVxyXG4gICAgICAgIHx8ICh4LmVtcGxveWVlTnVtYmVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSBmYWxzZSlcclxuICAgICAgICB8fCAoeC5zdXJOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSBmYWxzZSkpXHJcbiAgICAgICkpIDogbnVsbDtcclxuICAgICAgLy8gdGhpcy5hbGxzZWFyY2hlcyA/IHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzLmZpbHRlcihcclxuICAgICAgLy8gICBpdGVtID0+XHJcbiAgICAgIC8vICAgICBpdGVtLnJlY2VudFNlYXJjaC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxyXG4gICAgICAvLyApIDogbnVsbDtcclxuICAgICAgdGhpcy5hbGxzZWFyY2hlcyA/IHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzLmZpbHRlcihcclxuICAgICAgICBpdGVtID0+XHJcbiAgICAgICAgICBpdGVtLnJlY2VudFNlYXJjaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT1cclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICkgOiBudWxsO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSAmJiBldmVudC50YXJnZXQudmFsdWUuc2VhcmNoKCctJykgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yc3Muc2VhcmNoR29hbFRhc2tzKGV2ZW50LnRhcmdldC52YWx1ZSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhICE9IG51bGwgJiYgcmVzcG9uc2UuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHx8ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gcmVzcG9uc2UuZGF0YS5maWx0ZXIodXMgPT4gdXMudHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoKHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zKSB8fCAodGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHx8ICh0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHx8ICh0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAvLyAgIGNvbnN0IHVzZXJTdG9yeVNlYXJjaENyaXRlcmlhVGVtcCA9IG5ldyBVc2VyU3RvcnlTZWFyY2hDcml0ZXJpYUlucHV0TW9kZWwoKTtcclxuICAgICAgLy8gICB1c2VyU3RvcnlTZWFyY2hDcml0ZXJpYVRlbXAucGFnZVNpemUgPSAxMDAwO1xyXG4gICAgICAvLyAgIHVzZXJTdG9yeVNlYXJjaENyaXRlcmlhVGVtcC5zZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAvLyAgIC8vLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcclxuXHJcbiAgICAgIC8vICAvLyBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlLmluZGV4T2YoJy0nKSkge1xyXG4gICAgICAvLyAgICAgdGhpcy51c2VyU2VydmljZS5zZWFyY2hVc2VyU3Rvcmllcyh1c2VyU3RvcnlTZWFyY2hDcml0ZXJpYVRlbXApLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgLy8gICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgIC8vICAgICAgIGxldCBjb21wYW55U2V0dGluZ3NNb2RlbCA9IFtdO1xyXG5cclxuICAgICAgLy8gICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSAhPSBudWxsICYmIHJlc3BvbnNlLmRhdGEgIT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgICAgIHZhciB1c2VyU3Rvcmllc0xpc3QgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAvLyAgICAgICAgIHRoaXMuY29tcGFueVNldHRpbmdzTU9kZWwkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXRDb21wYW55U2V0dGluZ3MpKTtcclxuICAgICAgLy8gICAgICAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJC5zdWJzY3JpYmUoKHgpID0+IGNvbXBhbnlTZXR0aW5nc01vZGVsID0geCk7XHJcbiAgICAgIC8vICAgICAgICAgbGV0IGJ1Z0JvYXJkUmVzdWx0ID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmlsdGVyKGl0ZW0gPT4gaXRlbS5rZXkudHJpbSgpID09IFwiRW5hYmxlQnVnQm9hcmRcIik7XHJcbiAgICAgIC8vICAgICAgICAgaWYgKGJ1Z0JvYXJkUmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuaXNFbmFibGVCdWdCb2FyZCA9IGJ1Z0JvYXJkUmVzdWx0WzBdLnZhbHVlID09IFwiMVwiID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAvLyAgICAgICAgIH1cclxuICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVCdWdCb2FyZCkge1xyXG4gICAgICAvLyAgICAgICAgICAgdXNlclN0b3JpZXNMaXN0ID0gdXNlclN0b3JpZXNMaXN0Lm1hcCgoeCkgPT4geC5pc0J1ZyA9PSBmYWxzZSk7XHJcbiAgICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgICAgLy8gICAgICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSB1c2VyU3Rvcmllc0xpc3QubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsSWQ6IGl0ZW0uZ29hbElkLFxyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsTmFtZTogaXRlbS5nb2FsTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgZ29hbFNob3J0TmFtZTogaXRlbS5nb2FsU2hvcnROYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsVW5pcXVlTmFtZTogaXRlbS5nb2FsVW5pcXVlTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgcHJvamVjdElkOiBpdGVtLnByb2plY3RJZCxcclxuICAgICAgLy8gICAgICAgICAgICAgcHJvamVjdE5hbWU6IGl0ZW0ucHJvamVjdE5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHNwcmludElkOiBpdGVtLnNwcmludElkLFxyXG4gICAgICAvLyAgICAgICAgICAgICBzcHJpbnROYW1lOiBpdGVtLnNwcmludE5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeUlkOiBpdGVtLnVzZXJTdG9yeUlkLFxyXG4gICAgICAvLyAgICAgICAgICAgICB1c2VyU3RvcnlOYW1lOiBpdGVtLnVzZXJTdG9yeU5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeVN0YXR1c05hbWU6IGl0ZW0udXNlclN0b3J5U3RhdHVzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgdXNlclN0b3J5VHlwZU5hbWU6IGl0ZW0udXNlclN0b3J5VHlwZU5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeVVuaXF1ZU5hbWU6IGl0ZW0udXNlclN0b3J5VW5pcXVlTmFtZVxyXG4gICAgICAvLyAgICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfSk7XHJcbiAgICAgIC8vICAvLyB9XHJcblxyXG4gICAgICAvLyAgIGxldCBzZWFyY2hHb2FscyA9IG5ldyBHb2FsU2VhcmNoQ3JpdGVyaWFBcGlJbnB1dE1vZGVsKCk7XHJcbiAgICAgIC8vICAgc2VhcmNoR29hbHMuc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgLy8gICAvLy5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICAgIC8vICAgLy9pZiAoZXZlbnQudGFyZ2V0LnZhbHVlLmluZGV4T2YoJy0nKSkge1xyXG4gICAgICAvLyAgIHRoaXMudXNlclNlcnZpY2Uuc2VhcmNoR29hbHMoc2VhcmNoR29hbHMpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG5cclxuICAgICAgLy8gICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgIT0gbnVsbCAmJiByZXNwb25zZS5kYXRhICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIC8vICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxJZDogaXRlbS5nb2FsSWQsXHJcbiAgICAgIC8vICAgICAgICAgICBnb2FsTmFtZTogaXRlbS5nb2FsTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxTaG9ydE5hbWU6IGl0ZW0uZ29hbFNob3J0TmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxVbmlxdWVOYW1lOiBpdGVtLmdvYWxVbmlxdWVOYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgcHJvamVjdElkOiBpdGVtLnByb2plY3RJZCxcclxuICAgICAgLy8gICAgICAgICAgIHByb2plY3ROYW1lOiBpdGVtLnByb2plY3ROYW1lXHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICB9KTtcclxuXHJcbiAgICAgIC8vICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgLy8gICB9KVxyXG4gICAgICAvLyAvL31cclxuXHJcbiAgICAgIC8vIGlmICghKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSAmJiAhKHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLndpZGdldHMubGVuZ3RoID4gMCkgJiYgISh0aGlzLnRvb2xzLmxlbmd0aCA+IDApICYmICEodGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgIGlmICghKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApICYmICEodGhpcy53aWRnZXRzLmxlbmd0aCA+IDApICYmICEodGhpcy50b29scy5sZW5ndGggPiAwKSAmJiAhKHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMud2QgPSB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudG9vbHMgJiYgdGhpcy50b29scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud2QgPSB0aGlzLndzID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50ID0gMDtcclxuICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy50b29sc1swXTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLndvcmtzcGFjZXMgJiZcclxuICAgICAgICB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy53aWRnZXRzICYmXHJcbiAgICAgICAgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgICB0aGlzLndkID0gMDtcclxuICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ICYmXHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzICYmXHJcbiAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5tZW51SXRlbSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm1lbnVJdGVtXHJcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3A7XHJcbiAgICAgIHRoaXMudG9vbHMgPSB0aGlzLmFkbWluVG9vbHM7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzO1xyXG4gICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnByb2plY3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzO1xyXG4gICAgICAvL3RoaXMuZW1wbG95ZWVMaXN0ID0gKHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0ICYmIHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApID8gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgOiBbXTtcclxuICAgICAgdGhpcy5lbXBsb3llZUxpc3QgPSBbXTtcclxuICAgICAgLy8gdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgLy8gdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXMubGVuZ3RoID4gMCA/IHRoaXMuaXRlbXNbMF0gOiBudWxsO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPT0gXCJcIiA/ICh0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWFyY2goZXZlbnQpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW1cclxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPSBcImRyb3BEb3duXCIpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5tZW51LnRvTG93ZXJDYXNlKCkgPiBiLm1lbnUudG9Mb3dlckNhc2UoKSA/IDEgOiAtMSkpO1xyXG4gICAgdGhpcy53b3Jrc3BhY2VzID0gdGhpcy53b3Jrc3BhY2VzRm9yTG9vcDtcclxuICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzO1xyXG4gICAgdGhpcy50b29scyA9IHRoaXMuYWRtaW5Ub29scztcclxuICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzO1xyXG4gICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5wcm9qZWN0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QubGVuZ3RoID4gMCA/IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0IDogW107XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlKGV2ZW50LCBpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCeUlkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucnNzLmdldFNlYXJjaE1lbnVJdGVtcyh7IHNlYXJjaFRleHQ6IG51bGwsIHNlYXJjaFVuaXF1ZUlkOiB0aGlzLnNlYXJjaFRleHQgfSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvUm91dGUocmVzLmRhdGFbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ0dpdmVuIElkIGlzIG5vdCB2YWxpZCwgcGxlYXNlIHByb3ZpZGUgY29ycmVjdCBpZCB0byBuYXZpZ2F0ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXMuYXBpUmVzcG9uc2VNZXNzYWdlc1swXS5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXRlbSkge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0VG9Sb3V0ZShpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9Sb3V0ZShpdGVtKSB7XHJcbiAgICB2YXIgbmFtZTtcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCB8fCB0aGlzLnNlYXJjaEJ5SWQpIHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgJiYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZykgfHwgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgIC8vdGhpcy5JbnNlcnRTZWFyY2goaXRlbS51bmlxdWVuTmFtZSk7XHJcbiAgICAgICAgLy9pZiAodGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cy5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LnByb2plY3RJZCA9PSBpdGVtLnByb2plY3RJZCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHtcclxuICAgICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLndvcmtJdGVtT3JCdWcsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtXCIsIGl0ZW0uaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuYWRob2MsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcImRhc2hib2FyZC9hZGhvYy13b3JraXRlbVwiLCBpdGVtLml0ZW1JZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSAmJiAoaXRlbS5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQucHJvamVjdElkID09IGl0ZW0ucHJvamVjdElkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCkge1xyXG4gICAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvZ29hbFwiLCBpdGVtLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLnNwcmludCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvc3ByaW50XCIsIGl0ZW0uaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgICAgXCIvZGFzaGJvYXJkL3Byb2ZpbGUvXCIgKyBpdGVtLml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLnByb2plY3QsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBpdGVtLml0ZW1JZCArIFwiL2FjdGl2ZS1nb2Fsc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGl0ZW0ubWVudSkge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICBuYW1lID0gaXRlbS5tZW51O1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbaXRlbS5zdGF0ZV0pO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChuYW1lLCBSZWNlbnRTZWFyY2hUeXBlLm1lbnUsIGl0ZW0uaWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZWxzZSBpZiAoaXRlbS5wZXJtaXNzaW9uKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgLy8gICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAvLyAgIG5hbWUgPSBpdGVtLm5hbWU7XHJcbiAgICAvLyAgIHRoaXMuSW5zZXJ0U2VhcmNoKG5hbWUsIFJlY2UpO1xyXG4gICAgLy8gICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbaXRlbS5saW5rXSk7XHJcbiAgICAvLyB9IFxyXG4gICAgZWxzZSBpZiAoaXRlbS53b3Jrc3BhY2VJZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICBuYW1lID0gaXRlbS53b3Jrc3BhY2VOYW1lO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChuYW1lLCBSZWNlbnRTZWFyY2hUeXBlLmRhc2hib2FyZCwgaXRlbS53b3Jrc3BhY2VJZCk7XHJcbiAgICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICAgIGlmICh1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBpdGVtLndvcmtzcGFjZUlkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBpdGVtLndvcmtzcGFjZUlkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpdGVtLndpZGdldElkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIG5hbWUgPSBpdGVtLndpZGdldE5hbWU7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKG5hbWUsIFJlY2VudFNlYXJjaFR5cGUud2lkZ2V0LCBpdGVtLndpZGdldElkKTtcclxuICAgICAgdGhpcy5SZWRpcmVjdFRvQXBwKGl0ZW0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VhcmNoUmVjZW50SXRlbShpdGVtLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgSW5zZXJ0U2VhcmNoKG5hbWUsIHJlY2VudFNlYXJjaFR5cGUsIGlkKSB7XHJcbiAgICB0aGlzLnJzcy5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiBuYW1lLCByZWNlbnRTZWFyY2hUeXBlOiByZWNlbnRTZWFyY2hUeXBlLCBpdGVtSWQ6IGlkIH0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIC8vIHRoaXMucmVjZW50U2VhcmNoZXMuaW5jbHVkZXMobmFtZSlcclxuICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKHRoaXMucmVjZW50U2VhcmNoZXMuaW5kZXhPZihuYW1lKSwgMSksXHJcbiAgICAgICAgLy8gICAgIHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKDAsIDAsIG5hbWUpKVxyXG4gICAgICAgIC8vICAgOiB0aGlzLnJlY2VudFNlYXJjaGVzLnVuc2hpZnQobmFtZSk7XHJcbiAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFNlYXJjaFJlY2VudEl0ZW0oc2VhcmNoLCBldmVudCkge1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUubWVudSkge1xyXG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgIGl0ZW0ubWVudS50b0xvd2VyQ2FzZSgpID09IHNlYXJjaC5yZWNlbnRTZWFyY2gudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgICBpdGVtLmxlbmd0aCA+IDAgPyB0aGlzLm5hdmlnYXRlKGV2ZW50LCBpdGVtWzBdKSA6IG51bGxcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS5kYXNoYm9hcmQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5kYXNoYm9hcmQsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgICBpZiAodXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgc2VhcmNoLml0ZW1JZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS53aWRnZXQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS53aWRnZXQsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShcclxuICAgICAgICBbXCJkYXNoYm9hcmQtbWFuYWdlbWVudC93aWRnZXRzXCIsIHNlYXJjaC5pdGVtSWRdXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUuYWRob2MpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5hZGhvYywgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcImRhc2hib2FyZC9hZGhvYy13b3JraXRlbVwiLCBzZWFyY2guaXRlbUlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUud29ya0l0ZW1PckJ1Zykge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChzZWFyY2gucmVjZW50U2VhcmNoLCBSZWNlbnRTZWFyY2hUeXBlLndvcmtJdGVtT3JCdWcsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbVwiLCBzZWFyY2guaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS5nb2FsKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL2dvYWxcIiwgc2VhcmNoLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUuc3ByaW50KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuc3ByaW50LCBzZWFyY2guaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvc3ByaW50XCIsIHNlYXJjaC5pdGVtVW5pcXVlTmFtZV0sIHsgZnJhZ21lbnQ6ICd1bmlxdWUnIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2gucmVjZW50U2VhcmNoVHlwZSA9PSBSZWNlbnRTZWFyY2hUeXBlLnByb2plY3QpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5wcm9qZWN0LCBzZWFyY2guaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBzZWFyY2guaXRlbUlkICsgXCIvYWN0aXZlLWdvYWxzXCIpO1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2gucmVjZW50U2VhcmNoVHlwZSA9PSBSZWNlbnRTZWFyY2hUeXBlLmVtcGxveWVlKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgIFwiL2Rhc2hib2FyZC9wcm9maWxlL1wiICsgc2VhcmNoLml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE1lbnUoZXZlbnQsIGNsaWNrKSB7XHJcbiAgICBpZiAoY2xpY2sud2hpY2ggPT0gMSAmJiBldmVudC53b3Jrc3BhY2VJZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlJZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICAgIGlmICh1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBldmVudC53b3Jrc3BhY2VJZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgZXZlbnQud29ya3NwYWNlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXNoYm9hcmQgPSBldmVudC53b3Jrc3BhY2VJZDtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLm1lbnVJdGVtTmFtZSA9IGV2ZW50LndvcmtzcGFjZU5hbWU7XHJcbiAgICAgIHRoaXMucnNzXHJcbiAgICAgICAgLmluc2VydFJlY2VudFNlYXJjaCh7IG5hbWU6IGV2ZW50LndvcmtzcGFjZU5hbWUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUuZGFzaGJvYXJkLCBpdGVtSWQ6IGV2ZW50LndvcmtzcGFjZUlkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmNsdWRlcyhldmVudC53b3Jrc3BhY2VOYW1lKVxyXG4gICAgICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKFxyXG4gICAgICAgICAgICAvLyAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzLmluZGV4T2YoZXZlbnQud29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICAgIC8vICAgICAgIDFcclxuICAgICAgICAgICAgLy8gICAgICksXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJlY2VudFNlYXJjaGVzLnNwbGljZSgwLCAwLCBldmVudC53b3Jrc3BhY2VOYW1lKSlcclxuICAgICAgICAgICAgLy8gICA6IHRoaXMucmVjZW50U2VhcmNoZXMudW5zaGlmdChldmVudC53b3Jrc3BhY2VOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0RW1wbG95ZWUoZXZlbnQsIGNsaWNrKSB7XHJcbiAgICBpZiAoY2xpY2sud2hpY2ggPT0gMSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeUlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcclxuICAgICAgICBcIi9kYXNoYm9hcmQvcHJvZmlsZS9cIiArIGV2ZW50Lml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhc2hib2FyZCA9IGV2ZW50LndvcmtzcGFjZUlkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWUgPSBldmVudC5pdGVtSWQ7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5tZW51SXRlbU5hbWUgPSBldmVudC5pdGVtTmFtZTtcclxuICAgICAgdGhpcy5yc3NcclxuICAgICAgICAuaW5zZXJ0UmVjZW50U2VhcmNoKHsgbmFtZTogZXZlbnQuaXRlbU5hbWUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIGl0ZW1JZDogZXZlbnQuaXRlbUlkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yc3MuZ2V0UmVjZW50U2VhcmNoKCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxzZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWNlbnRTZWFyY2hlcywgSlNPTi5zdHJpbmdpZnkodGhpcy5hbGxzZWFyY2hlcykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWRpbW5Ub29sKGxpbmssIGV2ZW50LCBpdGVtKSB7XHJcbiAgICBpZiAoZXZlbnQud2hpY2ggPT0gMSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeUlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW2xpbmtdKTtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLnJzcy5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiBpdGVtLm1lbnUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUubWVudSwgaXRlbUlkOiBpdGVtLmlkIH0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLnJlY2VudFNlYXJjaGVzLmluY2x1ZGVzKG5hbWUpXHJcbiAgICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKHRoaXMucmVjZW50U2VhcmNoZXMuaW5kZXhPZihuYW1lKSwgMSksXHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5zcGxpY2UoMCwgMCwgbmFtZSkpXHJcbiAgICAgICAgICAvLyAgIDogdGhpcy5yZWNlbnRTZWFyY2hlcy51bnNoaWZ0KG5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgT25TZWxlY3Qod2lkZ2V0LCBldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LndoaWNoID09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuUmVkaXJlY3RUb0FwcCh3aWRnZXQpO1xyXG4gICAgICB0aGlzLnJzc1xyXG4gICAgICAgIC5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiB3aWRnZXQud2lkZ2V0TmFtZSwgcmVjZW50U2VhcmNoVHlwZTogUmVjZW50U2VhcmNoVHlwZS53aWRnZXQsIGl0ZW1JZDogd2lkZ2V0LndpZGdldElkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmNsdWRlcyh3aWRnZXQud2lkZ2V0TmFtZSlcclxuICAgICAgICAgICAgLy8gICA/ICh0aGlzLnJlY2VudFNlYXJjaGVzLnNwbGljZShcclxuICAgICAgICAgICAgLy8gICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmRleE9mKHdpZGdldC53aWRnZXROYW1lKSxcclxuICAgICAgICAgICAgLy8gICAgICAgMVxyXG4gICAgICAgICAgICAvLyAgICAgKSxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKDAsIDAsIHdpZGdldC53aWRnZXROYW1lKSlcclxuICAgICAgICAgICAgLy8gICA6IHRoaXMucmVjZW50U2VhcmNoZXMudW5zaGlmdCh3aWRnZXQud2lkZ2V0TmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hlcygpIHtcclxuICAgIHRoaXMucmVjZW50U2VhcmNoZXNmZXRjaEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgdGhpcy5yc3MuZ2V0UmVjZW50U2VhcmNoKCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLmFsbHNlYXJjaGVzID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KHRoaXMuYWxsc2VhcmNoZXMpKTtcclxuICAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzZmV0Y2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVkaXJlY3RUb0FwcCh3aWRnZXQpIHtcclxuICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFxyXG4gICAgICBbXCJkYXNoYm9hcmQtbWFuYWdlbWVudC93aWRnZXRzXCIsIHdpZGdldC53aWRnZXRJZF1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIE9uR29hbFNlbGVjdChnb2FsLCBldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LndoaWNoID09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuUmVkaXJlY3RUb0dvYWwoZ29hbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBSZWRpcmVjdFRvR29hbChnb2FsKSB7XHJcbiAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvamVjdElkID09IGdvYWwucHJvamVjdElkKS5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAoZ29hbC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsKSB7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGdvYWwuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgZ29hbC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsXCIsIGdvYWwuaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGdvYWwuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuc3ByaW50LCBnb2FsLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3NwcmludFwiLCBnb2FsLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgfVxyXG4gIC8vICB9XHJcblxyXG4gIE9uVXNlclN0b3J5U2VsZWN0KHVzZXJTdG9yeSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudC53aGljaCA9PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLlJlZGlyZWN0VG9Vc2VyU3RvcnkodXNlclN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFJlZGlyZWN0VG9Vc2VyU3RvcnkodXNlclN0b3J5KSB7XHJcbiAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvamVjdElkID09IHVzZXJTdG9yeS5wcm9qZWN0SWQpLmxlbmd0aCA+IDApIHtcclxuICAgIGlmICh1c2VyU3RvcnkuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1Zykge1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaCh1c2VyU3RvcnkuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUud29ya0l0ZW1PckJ1ZywgdXNlclN0b3J5Lml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtXCIsIHVzZXJTdG9yeS5pdGVtVW5pcXVlTmFtZV0sIHsgZnJhZ21lbnQ6ICd1bmlxdWUnIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2godXNlclN0b3J5Lml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLmFkaG9jLCB1c2VyU3RvcnkuaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wiZGFzaGJvYXJkL2FkaG9jLXdvcmtpdGVtXCIsIHVzZXJTdG9yeS5pdGVtSWRdKTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuICAvLyB9XHJcblxyXG4gIFNldCgpIHtcclxuICAgIHRoaXMuZGlzcGxheSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnQgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgYXJyb3dEb3duRXZlbnRGb3JTZWFyY2hCeVRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMucHJvamVjdEluZGV4IDwgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgKz0gNDU7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4Kys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMucHJvamVjdEluZGV4ID09IHRoaXMucHJvamVjdExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QgJiYgdGhpcy5wcm9qZWN0SW5kZXggPT0gdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnByb2plY3RJbmRleCA9PSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDEgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJiB0aGlzLnVzZXJzIDwgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy51c2VycysrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPT0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPT0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5nb2FsSW5kZXggPCB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5nb2FsSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLmdvYWxJbmRleCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA8IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgIH1cclxuICB9XHJcbiAgYXJyb3dEb3duRXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoQnlUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICB0aGlzLmFycm93RG93bkV2ZW50Rm9yU2VhcmNoQnlUZXh0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxyXG4gICAgKSB7XHJcbiAgICAgIC8vdGhpcy5tZW51RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KDAsIDEwMCk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgKz0gNDU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiZcclxuICAgICAgdGhpcy53cyA8IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxXHJcbiAgICApIHtcclxuICAgICAgdGhpcy53cysrO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wICs9IDQxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkIDwgdGhpcy53aWRnZXRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCArPSA0ODtcclxuICAgICAgdGhpcy53ZCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4IDwgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wICs9IDQ1O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPCB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoIC0gMSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wICs9IDQ1O1xyXG4gICAgICB0aGlzLnVzZXJzKys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbdGhpcy51c2Vyc107XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5nb2FsSW5kZXggPCB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5nb2FsSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzIDwgOCkge1xyXG4gICAgICB0aGlzLnJzKys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID09IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1swXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PSB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnNlbGVjdGVkUm93SW5kZXggPT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID09IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PSB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnNlbGVjdGVkUm93SW5kZXggPT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1swXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDEgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkID09IHRoaXMud2lkZ2V0cy5sZW5ndGggLSAxICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDEgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDEgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJlxyXG4gICAgICB0aGlzLnVzZXJzID09IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggLSAxICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiZcclxuICAgICAgdGhpcy51c2VycyA9PSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpICYmXHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID09IHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDEgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLnQgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53ZCA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gOCAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnJzID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwXHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSA4ICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLnJzICE9PSBudWxsICYmIHRoaXMucnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDggJiYgdGhpcy5ycyA8IDgpIHtcclxuICAgIC8vICAgICB0aGlzLnJzKys7XHJcbiAgICAvLyAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbdGhpcy5yc107XHJcbiAgICAvLyAgICAgLy8gdGhpcy5oaWdobGlnaHQobmV4dHJvdyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZWxzZSBpZiAodGhpcy5ycyAhPT0gbnVsbCAmJiB0aGlzLnJzICE9PSB1bmRlZmluZWQgJiYgKHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoKSAtIDEgPiB0aGlzLnJzICYmIHRoaXMucnMgPCA4KSB7XHJcbiAgICAvLyAgICAgdGhpcy5ycysrO1xyXG4gICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICB9XHJcbiAgYXJyb3dVcEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnByb2plY3RJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXgtLTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCAtPSA0NTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbdGhpcy5wcm9qZWN0SW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMuaXRlbUNsaWNrZWQuaXRlbUlkID09IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXS5pdGVtSWQgJiYgdGhpcy51c2VycyA9PSAwICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiYgdGhpcy51c2VycyA+IDApIHtcclxuICAgICAgdGhpcy51c2Vycy0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdLml0ZW1JZCAmJiB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbdGhpcy51c2Vyc107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdLml0ZW1JZCAmJiB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpICYmIHRoaXMuZ29hbEluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLmdvYWxJbmRleC0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUgJiYgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtSWQgPT0gdGhpcy5lbXBsb3llZUxpc3RbMF0uaXRlbUlkICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5pdGVtSWQgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5pdGVtSWQgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5wcm9qZWN0TGlzdFt0aGlzLnByb2plY3RJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLkVtcGxveWVlICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleC0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgfVxyXG4gIH1cclxuICBhcnJvd1VwRXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfSBcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd1VwRXZlbnRGb3JTZWFyY2hCeVRleHQoKTtcclxuICAgIH1cclxuICAgIC8vRnJvbSBtZW51c1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4LS07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgLT0gNDU7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gd29ya3NwYWNlc1xyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiZcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCA9PSB0aGlzLndvcmtzcGFjZXNbMF0ud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSAwICYmXHJcbiAgICAgIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCAtPSA0MTtcclxuICAgICAgdGhpcy53cy0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHdpZGdldHMgICAgXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgLT0gNDg7XHJcbiAgICAgIHRoaXMud2QtLTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLml0ZW1DbGlja2VkLndpZGdldElkID09IHRoaXMud2lkZ2V0c1swXS53aWRnZXRJZCAmJiB0aGlzLndkID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgPT0gdGhpcy53aWRnZXRzWzBdLndpZGdldElkICYmIHRoaXMud2QgPT0gMCAmJlxyXG4gICAgICB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy53ZCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gRW1wbG95ZWVzICAgXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleC0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgPT0gdGhpcy5lbXBsb3llZUxpc3RbMF0uZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJlxyXG4gICAgICB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5lbXBsb3llZU51bWJlciAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmXHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyID09IHRoaXMuZW1wbG95ZWVMaXN0WzBdLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuICAgIC8vRnJvbSBXSS9CdWcgICAgICAgICBORUVEIFRPIERPIFxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMudXNlcnMgPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgLT0gNDU7XHJcbiAgICAgIHRoaXMudXNlcnMtLTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFt0aGlzLnVzZXJzXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmXHJcbiAgICAgIHRoaXMudXNlcnMgPT0gMCAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy53ZCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJlxyXG4gICAgICB0aGlzLnVzZXJzID09IDAgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbdGhpcy53ZF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiZcclxuICAgICAgdGhpcy51c2VycyA9PSAwICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmXHJcbiAgICAgIHRoaXMudXNlcnMgPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIGdvYWwvc3ByaW50XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMuZ29hbEluZGV4ID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLmdvYWxJbmRleC0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJlxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJlxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMud2lkZ2V0cy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGV0eXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53ZCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1t0aGlzLndzXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHJlY2VudCBzZWFyY2hlc1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA+IDApIHtcclxuICAgICAgdGhpcy5ycy0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5yZWNlbnRTZWFyY2hlc1t0aGlzLnJzXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmXHJcbiAgICAgIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy51c2VyU3RvcnlMaXN0ICYmIHRoaXMudXNlclN0b3J5TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeUxpc3RbdGhpcy51c2Vyc107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFt0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbdGhpcy53ZF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy50ID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoICYmIHRoaXMucnMgPT0gMCAmJiB0aGlzLnRvb2xzICYmIHRoaXMudG9vbHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnQgPSB0aGlzLnRvb2xzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiYgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMudF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZnVsbE5hbWUgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMud2QgPSA4O1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmZ1bGxOYW1lICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy50XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMudF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSAwICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy50XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy50b29sc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gMCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucGVybWlzc2lvbiAmJiB0aGlzLnQgPT0gMCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgaWYgKHRoaXMucnMgIT09IG51bGwgJiYgdGhpcy5ycyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucnMgPiAwKSB7XHJcbiAgICAvLyAgICAgdGhpcy5ycy0tO1xyXG4gICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgLy8gICAgIC8vIHRoaXMuaGlnaGxpZ2h0KG5leHRyb3cpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGFycm93TGVmdEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IG51bGxcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5wcm9qZWN0TGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbFxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLkVtcGxveWVlICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbFxyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbMF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFycm93TGVmdEV2ZW50KCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLnNlYXJjaFRleHQgIT0gdW5kZWZpbmVkIHx8XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsIHx8XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PT0gXCJcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd0xlZnRFdmVudEZvclNlYXJjaEJ5VGV4dCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vRnJvbSB3b3Jrc3BhY2VzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9mcm9tIHdpZGdldHNcclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gZW1wbG95ZWVzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIFdJL0J1Z1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYylcclxuICAgICAgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKVxyXG4gICAgICAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIH1cclxuICAgIC8vRnJvbSBHb2FsL1NwcmludFxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KVxyXG4gICAgICAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5TGlzdFswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludClcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHJlY2VudCBzZWFyY2hlc1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2hcclxuICAgICAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaFxyXG4gICAgICAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5TGlzdFswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoXHJcbiAgICAgICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2hcclxuICAgICAgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoXHJcbiAgICAgICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaFxyXG4gICAgICAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIH1cclxuICB9XHJcbiAgYXJyb3dSaWdodEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gIH1cclxuICBhcnJvd1JpZ2h0RXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfSBcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd1JpZ2h0RXZlbnRGb3JTZWFyY2hCeVRleHQoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vRnJvbSBtZW51c1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMud3MgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2QgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHdvcmtzcGFjZXNcclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2QgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcyAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5yZWNlbnRTZWFyY2hlc1swXTtcclxuICAgIH1cclxuICAgIC8vRnJvbSB3aWRnZXRzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gRW1wbG95ZWVzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIFdJL0J1Z1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKVxyXG4gICAgICAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIEdvYWwvU3ByaW50XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwpXHJcbiAgICAgICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuV29ya3NwYWNlRm9ybSgpIHtcclxuICAgIHRoaXMuYWRkV29ya1NwYWNlUG9wT3Zlci5vcGVuKCk7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICB0aGlzLmdldEFsbFJvbGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxSb2xlcygpIHtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZS5HZXRhbGxSb2xlcygpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yb2xlc0Ryb3BEb3duID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgIHRoaXMucm9sZXNEcm9wRG93bi5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBwLnJvbGVJZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHAucm9sZUlkID0gaWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubmdEZXN0cm95ZWQkLm5leHQoKTtcclxuICAgIHRoaXMubmdEZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlU2VsZWN0ZWRSb2xlc0ZuKCkgeyB9XHJcbiAgY29tcGFyZUVkaXRTZWxlY3RlZFJvbGVzRm4oKSB7IH1cclxuICBjb21wYXJlRGVsZXRlU2VsZWN0ZWRSb2xlc0ZuKCkgeyB9XHJcbiAgdXBzZXJ0V29ya3NwYWNlKCkgeyB9XHJcbiAgdG9nZ2xlQWxsUm9sZXNTZWxlY3RlZCgpIHsgfVxyXG4gIHRvZ2dsZUVkaXRBbGxSb2xlc1NlbGVjdGVkKCkgeyB9XHJcbiAgdG9nZ2xlRGVsZXRlQWxsUm9sZXNTZWxlY3RlZCgpIHsgfVxyXG4gIGNsb3NlQWRkV29ya3NwYWNlRGlhbG9nKCkgeyB9XHJcbn1cclxuIiwiPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJ2aXNpYmxlc1wiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudXNcIiBmeEhpZGUuZ3QteHMgZnhTaG93PlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cIm5ld01lbnVcIj5tZW51PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcbjxkaXYgZnhGbGV4IGNsYXNzPVwibmV3TG9nbyBkZWZhdWx0LWJnIHRvcC1sb2dvLWJnIG5ld21pbmlsb2dvIHpvb20taW1hZ2UtaG92ZXJcIiBmeEhpZGUuZ3QteHMgZnhTaG93PlxyXG4gIDxpbWcgc3JjPVwie3tjb21wYW55TWluaUxvZ299fVwiIGFsdD1cIlwiIGlkPVwibWluaS1sb2dvLXRvcGJhclwiIHN0eWxlPVwid2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7XCJcclxuICAgIChjbGljayk9XCJnZXRBbGxNZW51SXRlbXMoKVwiIC8+XHJcbjwvZGl2PlxyXG48ZGl2IGZ4RmxleCBjbGFzcz1cIm5ld0xvZ28gIHRvcC1sb2dvLWJnIGFwcHMtYnV0dG9uIHpvb20taW1hZ2UtaG92ZXJcIiBzdHlsZT1cImxlZnQ6IDBweDtcIiBmeEhpZGUgZnhTaG93Lmd0LXhzPlxyXG4gIDxpbWcgc3JjPVwie3tjb21wYW55TWFpbkxvZ299fVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO2xlZnQ6IDIwcHg7bGVmdDogMjBweDtwb3NpdGlvbjogcmVsYXRpdmU7XCIgaWQ9XCJtYWluLWxvZ28tdG9wYmFyXCJcclxuICAgIGNsYXNzPVwiaW1nLWhlaWdodC1tYWluLWxvZ28tdG9wYmFyXCIgKGNsaWNrKT1cImdldEFsbE1lbnVJdGVtcygpXCIgLz5cclxuPC9kaXY+XHJcblxyXG48IS0tIFxyXG48bWF0LW1lbnUgI21lbnVzPVwibWF0TWVudVwiIGNsYXNzPVwiZmlsdGVyLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YobWVudUl0ZW1zJCB8IGFzeW5jKVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Ryb3BEb3duJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxldmVsVHdvTWVudVwiIChtb3VzZW92ZXIpPVwib3BlbkxldmVsMk1lbnUoaXRlbS5zdGF0ZSxpdGVtLnN1YilcIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj57eyBpdGVtLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnbGluaydcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgaXRlbS5zdGF0ZSB9fVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj57eyBpdGVtLmljb24gfX08L21hdC1pY29uPnt7IGl0ZW0ubWVudSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48bWF0LW1lbnUgI2xldmVsVHdvTWVudT1cIm1hdE1lbnVcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtTHZsMiBvZiBzdWJMZXZlbHNcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtTHZsMi50eXBlID09PSAnZHJvcERvd24nXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGV2ZWxUaHJlZU1lbnVcIlxyXG4gICAgICAgIChtb3VzZW92ZXIpPVwib3BlbkxldmVsM01lbnUoc3RhdGVMdmwxLGl0ZW1MdmwyLnN0YXRlLGl0ZW0uc3ViKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1MdmwyLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW1MdmwyLnR5cGUgPT0gJ2FwcGxpY2F0aW9ubGluaydcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgaXRlbUx2bDIuc3RhdGUgfX1cIj5cclxuICAgICAgICB7eyBpdGVtTHZsMi5tZW51IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtTHZsMi50eXBlID09ICdsaW5rJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97e3N0YXRlTHZsMX19L3t7IGl0ZW1MdmwyLnN0YXRlIH19XCI+XHJcbiAgICAgICAge3sgaXRlbUx2bDIubWVudSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48bWF0LW1lbnUgI2xldmVsVGhyZWVNZW51PVwibWF0TWVudVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW1MdmwzIG9mIHN1YkxldmVsc0ZvckxldmVsMlwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgbGV2ZWwzTGluazEgfX0ve3sgbGV2ZWwzTGluazIgfX0ve3tpdGVtTHZsMy5zdGF0ZX19XCI+XHJcbiAgICAgIHt7IGl0ZW1MdmwzLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+IC0tPlxyXG5cclxuPG1hdC1tZW51ICNtZW51cz1cIm1hdE1lbnVcIiB5UG9zaXRpb249XCJiZWxvd1wiIGNsYXNzPVwiZmlsdGVyLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgc3R5bGU9XCJoZWlnaHQ6YXV0b1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2xpbmsnIHx8IGl0ZW0udHlwZSA9PSAnYXBwbGljYXRpb25saW5rJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97eyBpdGVtLnN0YXRlIH19XCIgKGNsaWNrKT1cInNlbGVjdE1lbnUoaXRlbSwkZXZlbnQpXCJcclxuICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj57eyBpdGVtLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L21hdC1tZW51PlxyXG5cclxuXHJcbjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XHJcbmxlZnQ6IDkwJVwiIGNsYXNzPVwic3RvcmUtaWNvbSBtYXQtaWNvbi1idXR0b25cIiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX0RyYWdBcHBzXCJcclxuICBbbmdDbGFzc109XCJ0aGlzLnJvdXRlcy51cmwuaW5jbHVkZXMoJy9hcHAtc3RvcmUvd2lkZ2V0cycpID8gJ2ljb25fYWN0aXZlX2NsYXNzJyA6ICcnXCI+XHJcbiAgPGZhLWljb24gaWNvbj1cInN0b3JlXCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCJcclxuICAgIG1hdFRvb2x0aXA9XCJ7eyAnQVBQLkFQUFNUT1JFJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cIm9wZW5BcHBzKClcIlxyXG4gICAgY2xhc3M9XCJtYXQtY29sb3ItYWNjZW50IGN1cnNvci1wb2ludGVyIHRoZW1lLW5hdmJhci1pY29uLWNvbG9yXCI+PC9mYS1pY29uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJTZWFyY2hCb3ggZHJvcGRvd25cIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1wiPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWNvbG9yLWFjY2VudCBpbnB1dC1ncm91cC1hZGRvblwiICpuZ0lmPVwic2VhcmNoQnlUZXh0XCI+QCAmbmJzcDs8L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJtYXQtY29sb3ItYWNjZW50IGlucHV0LWdyb3VwLWFkZG9uXCIgKm5nSWY9XCJzZWFyY2hCeUlkXCI+IyAmbmJzcDs8L3NwYW4+XHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJTZWFyY2hCb3gtaW5wdXQgZHJvcGJ0blwiIHBsYWNlaG9sZGVyPVwie3sgJ0FQUC5TVEFSVEhFUkVPUkNMSUNLQ09OVFJPTCtRJyB8IHRyYW5zbGF0ZX19XCJcclxuICAgIFtjbGFzcy5oaWRlLXBsYWNlaG9sZGVyXT1cInNlYXJjaEJ5VGV4dCB8fCBzZWFyY2hCeUlkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgI2VsZW1lbnQgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcclxuICAgIChpbnB1dCk9XCJTZWFyY2hJdGVtKCRldmVudClcIiAoY2xpY2spPVwiU2VhcmNoSXRlbSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIlNldCgpO1wiXHJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJuYXZpZ2F0ZSgkZXZlbnQsIGl0ZW1DbGlja2VkKVwiIChrZXlkb3duLmFycm93ZG93bik9XCJhcnJvd0Rvd25FdmVudCgpXCJcclxuICAgIChrZXlkb3duLmFycm93dXApPVwiYXJyb3dVcEV2ZW50KClcIiAoa2V5ZG93bi5hcnJvd2xlZnQpPVwiYXJyb3dMZWZ0RXZlbnQoKVwiIChrZXlkb3duLmFycm93cmlnaHQpPVwiYXJyb3dSaWdodEV2ZW50KClcIj5cclxuXHJcbiAgPGJ1dHRvbiBjbGFzcz1cIlNlYXJjaEJveC1idXR0b25cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY2xvc2VfaWNvbl9zZWFyY2hcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGV4dFwiIGNsYXNzPVwiaWNvbi1idXR0b24gbXItMDVcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKCRldmVudClcIlxyXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIj5cclxuICAgICAgICBjbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJTZWFyY2hCb3gtaWNvbiBpY29uLWNvbG9yIG10LWxnLW4yIG1yLTA1IGluZm8tY2xhc3NcIiBbc2F0UG9wb3ZlckFuY2hvckZvcl09XCJwXCJcclxuICAgICAgI2luZm9Qb3BPdmVyPVwic2F0UG9wb3ZlckFuY2hvclwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvcGVuSW5mbyhpbmZvUG9wT3ZlcilcIj5pbmZvPC9tYXQtaWNvbj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIlNlYXJjaEJveC1pY29uIGljb24tY29sb3IgbXQtbGctbjJcIiBjb2xvcj1cInByaW1hcnlcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCIgW25nQ2xhc3NdPVwieydkLWJsb2NrJyA6IGRpc3BsYXksICAnZC1ub25lJyA6ICFkaXNwbGF5fVwiPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAqbmdJZj1cImxvYWRpbmdTZWFyY2hNZW51RGF0YSB8fCByZWNlbnRTZWFyY2hlc2ZldGNoSW5Qcm9ncmVzcyB8fCB3aWRnZXRzZmV0Y2hJblByb2dyZXNzXCI+XHJcbiAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHJvd3NlbGVjdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbnNlbGVjdC1uZXh0IHBsLTA1XCIgKm5nSWY9XCJpdGVtcyAmJiAoaXRlbXMubGVuZ3RoPjApICYmICEoc2VhcmNoQnlJZCB8fCBzZWFyY2hCeVRleHQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluLWhlYWRlclwiPnt7ICdTSEVMTC5BUFBMSUNBVElPTlMnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGlkPVwic3R5bGUtMVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsgaGVpZ2h0OiA0NDVweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcyAmJiBpdGVtcy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRSb3dJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnbGluaycgfHwgaXRlbS50eXBlID09ICdhcHBsaWNhdGlvbmxpbmsnXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97eyBpdGVtLnN0YXRlIH19XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRSb3dJbmRleCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0QWRpbW5Ub29sKGl0ZW0uc3RhdGUsICRldmVudCwgaXRlbSlcIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRydWV9XCIgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyB0cmFuc2xhdGVhcHBsaWNhdGlvbm5hbWUoaXRlbS5tZW51IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tY29sb3JcIiBbbmdDbGFzc109XCJzZWxlY3RlZFJvd0luZGV4ID09IGkgPyAnY29sb3ItdGV4dCcgOiAnY29sb3ItdGV4dDEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidHJhbnNsYXRlYXBwbGljYXRpb25uYW1lKGl0ZW0ubWVudSkgfCAgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzIHwgaGlnaExpZ2h0VGV4dCA6IHNlYXJjaFRleHRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIHBsLTA1XCIgKm5nSWY9XCIhKHNlYXJjaEJ5SWQgfHwgc2VhcmNoQnlUZXh0KVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc2VsZWN0LW5leHQgbWwtMFwiICpuZ0lmPVwid29ya3NwYWNlcyAmJiAod29ya3NwYWNlcy5sZW5ndGg+MClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuREFTSEJPQVJEUycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwicGx1cy1zcXVhcmVcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQWNjZXNzX2ZlYXR1cmVfQWRkRGFzaGJvYXJkXCIgbWF0VG9vbHRpcD1cInt7ICdBUFAuQUREREFTSEJPQVJEJyB8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5pdGlhbGl6ZVdvcmtzcGFjZUZvcm0oKTtvcGVuV29ya3NwYWNlRm9ybSgpO1wiIGNsYXNzPVwibWF0LWNvbG9yLWFjY2VudCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwiYWRkV29ya3NwYWNlXCI+XHJcbiAgICAgICAgICAgIDwvZmEtaWNvbj4gXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJzdHlsZS0yXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid29ya3NwYWNlcyAmJiB3b3Jrc3BhY2VzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2Mgb2Ygd29ya3NwYWNlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3cyA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCIgY2xhc3M9XCJzY3JvbGxcIiAjd29ya3NwYWNlRWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAobW91c2Vkb3duKT1cInNlbGVjdE1lbnUod2MsJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndzID09IGkgPyAnY29sb3ItdGV4dCcgOiAnY29sb3ItdGV4dDEnXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9Vcmwod2Mud29ya3NwYWNlSWQpXCJcclxuICAgICAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9kYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQve3sgd2Mud29ya3NwYWNlSWQgfX1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCIgbWF0VG9vbHRpcD1cInt7d2Mud29ya3NwYWNlTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwid2Mud29ya3NwYWNlTmFtZSB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0IFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uc2VsZWN0LWFwcHMgbWwtMFwiICpuZ0lmPVwid2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aD4wICAmJiAhKHNlYXJjaEJ5SWQgfHwgc2VhcmNoQnlUZXh0KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuRkFWT1VSSVRFQVBQUycgfCB0cmFuc2xhdGV9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiIGlkPVwic3R5bGUtM1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHdpZGdldHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgICAgdHJ1ZX1cIiByb3V0ZXJMaW5rPVwiL2Rhc2hib2FyZC1tYW5hZ2VtZW50L3dpZGdldHMve3sgd2lkZ2V0LndpZGdldElkIH19XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3ZCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiIChtb3VzZWRvd24pPVwiT25TZWxlY3Qod2lkZ2V0LCRldmVudClcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3t3aWRnZXQud2lkZ2V0TmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJ3aWRnZXQud2lkZ2V0TmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zZWxlY3QtbmV4dCBtbC0wXCIgKm5nSWY9XCJwcm9qZWN0TGlzdCAmJiBwcm9qZWN0TGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj5Qcm9qZWN0czwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxcIiBpZD1cInN0eWxlLTdcIlxyXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvamVjdCBvZiBwcm9qZWN0TGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInByb2plY3RJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgdHJ1ZX1cIiBbbmdDbGFzc109XCJwcm9qZWN0SW5kZXggPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9qZWN0U2VsZWN0KHByb2plY3QsJGV2ZW50KVwiIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Byb2plY3QuaXRlbU5hbWUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwicHJvamVjdC5pdGVtTmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zZWxlY3QtbmV4dCBtbC0wXCJcclxuICAgICAgICAqbmdJZj1cInVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIiAqbmdJZj1cImlzRW5hYmxlQnVnQm9hcmRcIj57eyAnU0hFTEwuV0lCVUcnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW4taGVhZGVyXCIgKm5nSWY9XCIhaXNFbmFibGVCdWdCb2FyZFwiPnt7ICdTSEVMTC5XSSd8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbFwiIGlkPVwic3R5bGUtNVwiXHJcbiAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB1c2VyU3Rvcnkgb2YgdXNlclN0b3J5U2VhcmNoTGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInVzZXJzID09IGkgPyB0aGVtZUJhc2VDb2xvciA6ICd3aGl0ZSdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbmtBY3RpdmU9XCJpdGVtLWFjdGl2ZVwiIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7ZXhhY3Q6XHJcbiAgICAgICAgIHRydWV9XCIgW25nQ2xhc3NdPVwidXNlcnMgPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIiAobW91c2Vkb3duKT1cIk9uVXNlclN0b3J5U2VsZWN0KHVzZXJTdG9yeSwkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCIgbWF0VG9vbHRpcD1cInt7dXNlclN0b3J5Lml0ZW1OYW1lIHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInVzZXJTdG9yeS5pdGVtTmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc2VsZWN0LW5leHQgbWwtMFwiXHJcbiAgICAgICAgKm5nSWY9XCJnb2FsU2VhcmNoTGlzdCAmJiBnb2FsU2VhcmNoTGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuR09BTFNQUklOVCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsXCIgaWQ9XCJzdHlsZS02XCJcclxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsgaGVpZ2h0OiA0NDVweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdvYWwgb2YgZ29hbFNlYXJjaExpc3Q7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnb2FsSW5kZXggPT0gaSA/IHRoZW1lQmFzZUNvbG9yIDogJ3doaXRlJ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGlua0FjdGl2ZT1cIml0ZW0tYWN0aXZlXCIgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntleGFjdDpcclxuICAgICAgICAgdHJ1ZX1cIiBbbmdDbGFzc109XCJnb2FsSW5kZXggPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIiAobW91c2Vkb3duKT1cIk9uR29hbFNlbGVjdChnb2FsLCRldmVudClcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3tnb2FsLml0ZW1OYW1lIHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImdvYWwuaXRlbU5hbWUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHMgfCBoaWdoTGlnaHRUZXh0IDogc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbnNlbGVjdC1hcHBzIG1sLTBcIlxyXG4gICAgICAgICpuZ0lmPVwiKGVtcGxveWVlTGlzdCAmJiBlbXBsb3llZUxpc3QubGVuZ3RoID4gMCkgJiYgc2VhcmNoVGV4dCAmJiBzZWFyY2hCeVRleHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW4taGVhZGVyXCI+RW1wbG95ZWVzPC9kaXY+XHJcbiAgICAgICAgPGRpdiBpZD1cInN0eWxlLTRcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbXBsb3llZSBvZiBlbXBsb3llZUxpc3Q7IGxldCBpID0gaW5kZXhcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCIgI3dvcmtzcGFjZUVsZW1lbnQ+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAobW91c2Vkb3duKT1cInNlbGVjdEVtcGxveWVlKGVtcGxveWVlLCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9kYXNoYm9hcmQvcHJvZmlsZS97eyBlbXBsb3llZS5pdGVtSWQgfX0vb3ZlcnZpZXdcIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3tlbXBsb3llZS5pdGVtTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1hdmF0YXIgW25hbWVdPVwiZW1wbG95ZWUuaXRlbU5hbWUgfCByZW1vdmVTcGVjaWFsQ2hhcmFjdGVyc1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgZW1wbG95ZWUuaXRlbU5hbWUgfX1cIiBbc3JjXT1cImVtcGxveWVlLnByb2ZpbGVJbWFnZSB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzIwJzonJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc1JvdW5kXT1cInRydWVcIiBzaXplPVwiMjBcIiAoY2xpY2spPVwicHJvZmlsZVBhZ2UoZW1wbG95ZWUudXNlcklkKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1hdmF0YXI+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTA1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZW1wbG95ZWUuaXRlbU5hbWUgfCBoaWdoTGlnaHRUZXh0IDogc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5zZWxlY3QtYXBwcyBtbC0wXCJcclxuICAgICAgICAqbmdJZj1cInJlY2VudFNlYXJjaGVzICYmIChyZWNlbnRTZWFyY2hlcy5sZW5ndGg+MCkgICYmICEoc2VhcmNoQnlJZCB8fCBzZWFyY2hCeVRleHQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluLWhlYWRlclwiPnt7ICdTSEVMTC5SRUNFTlRTRUFSQ0hTJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VhcmNoIG9mIHJlY2VudFNlYXJjaGVzIHwgc2xpY2U6MDo5IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJycyA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbbmdDbGFzc109XCJycyA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJzZWFyY2hUZXh0PXNlYXJjaC5yZWNlbnRTZWFyY2g7U2VhcmNoUmVjZW50SXRlbShzZWFyY2gsJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiIG1hdFRvb2x0aXA9XCJ7e3NlYXJjaC5yZWNlbnRTZWFyY2ggfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fSBcclxuICAgICAgICAgICh7eyBjb252ZXJ0VG9Mb2NhbFRpbWUoc2VhcmNoLmNyZWF0ZWREYXRlVGltZSkgfCB0aW1lYWdvIH19KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2VhcmNoLnJlY2VudFNlYXJjaCB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICh7eyBjb252ZXJ0VG9Mb2NhbFRpbWUoc2VhcmNoLmNyZWF0ZWREYXRlVGltZSkgfCB0aW1lYWdvIH19KVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGluLWhlYWRlciBcIiAqbmdJZj1cIiFzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5SWRcIj5cclxuICAgICAgUGxlYXNlIGVudGVyIHVuaXF1ZSBpZCBhbmQgY2xpY2sgZW50ZXIgZm9yIG5hdmlnYXRpbmcgdG8gY29ycmVzcGluZyBwYWdlXHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGluLWhlYWRlciBcIiAqbmdJZj1cIiFzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiID5cclxuICAgIFBsZWFzZSBlbnRlciB0ZXh0IHRvIHJldHJlaXZlIGRhdGEgYnkgZmlsdGVyaW5nXHJcbiAgPC9kaXY+IC0tPlxyXG4gIFxyXG5cclxuICA8c2F0LXBvcG92ZXIgYmFja2Ryb3BDbGFzcz1cImJhY2tkcm9wLWNvbG9yXCIgaGFzQmFja2Ryb3AgI2FkZFdvcmtzcGFjZSB2ZXJ0aWNhbEFsaWduPVwiYmVsb3dcIiBob3Jpem9udGFsQWxpZ249XCJlbmRcIlxyXG4gICAgW2ludGVyYWN0aXZlQ2xvc2VdPVwiZmFsc2VcIj5cclxuICAgIDxtYXQtY2FyZCBjbGFzcz1cImZpbHRlci1kYXRhIHAtMFwiPlxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlLXRleHQgbWF0LWJnLXByaW1hcnkgcC0wNSBtYi0xXCI+XHJcbiAgICAgICAgICB7eyAnQVBQLkFERERBU0hCT0FSRFRJVExFJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIndvcmtzcGFjZUZvcm1cIiBub3ZhbGlkYXRlIChzdWJtaXQpPVwid29ya3NwYWNlRm9ybS52YWxpZCAmJiB1cHNlcnRXb3Jrc3BhY2UoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3sgJ0hSTUFOQUdBTUVOVC5OQU1FJyB8IHRyYW5zbGF0ZX19KlwiIGZvcm1Db250cm9sTmFtZT1cIndvcmtzcGFjZU5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3dvcmtzcGFjZU5hbWUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB3b3Jrc3BhY2VGb3JtLmdldCgnd29ya3NwYWNlTmFtZScpLnRvdWNoZWQgXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnQVBQLkRBU0hCT0FSRE5BTUVSRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3dvcmtzcGFjZU5hbWUnKS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuREFTSEJPQVJETkFNRUxFTkdUSEVYQ0VFRCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIHJvd3M9XCIyXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0NPTVBBTllTRVRUSU5HUy5ERVNDUklQVElPTicgfCB0cmFuc2xhdGUgfX1cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJykuaGFzRXJyb3IoJ21heGxlbmd0aCcpICYmIHdvcmtzcGFjZUZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuQ1VTVE9NQVBQREVTQ1JJUFRJT05NQVhMRU5HVEhFUlJPUicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRSb2xlc1wiIFtjb21wYXJlV2l0aF09XCJjb21wYXJlU2VsZWN0ZWRSb2xlc0ZuXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1dJREdFVFMuVklFV1JPTEVTJyB8IHRyYW5zbGF0ZSB9fVwiIG11bHRpcGxlIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gI2FsbFNlbGVjdGVkIChjbGljayk9XCJ0b2dnbGVBbGxSb2xlc1NlbGVjdGVkKClcIiBbdmFsdWVdPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyAnUEVSTUlTU0lPTk1BTkFHRU1FTlQuU0VMRUNUQUxMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJyb2xlcy5yb2xlSWRcIiAqbmdGb3I9XCJsZXQgcm9sZXMgb2Ygcm9sZXNEcm9wRG93blwiICNhbGxTZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm9sZXNQZXJPbmUoYWxsU2VsZWN0ZWQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGVzLnJvbGVOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3NlbGVjdGVkUm9sZXMnKS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB3b3Jrc3BhY2VGb3JtLmdldCgnc2VsZWN0ZWRSb2xlcycpLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuU0VMRUNUQU5ZUk9MRScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImVkaXRSb2xlSWRzXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVFZGl0U2VsZWN0ZWRSb2xlc0ZuXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1dJREdFVFMuRURJVFJPTEVTJyB8IHRyYW5zbGF0ZSB9fVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gI2FsbEVkaXRTZWxlY3RlZCAoY2xpY2spPVwidG9nZ2xlRWRpdEFsbFJvbGVzU2VsZWN0ZWQoKVwiIFt2YWx1ZV09XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICdQRVJNSVNTSU9OTUFOQUdFTUVOVC5TRUxFQ1RBTEwnIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInJvbGUucm9sZUlkXCIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNEcm9wRG93blwiICNhbGxFZGl0U2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRSb2xlc1Blck9uZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGUucm9sZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkZWxldGVSb2xlSWRzXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVEZWxldGVTZWxlY3RlZFJvbGVzRm5cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnV0lER0VUUy5ERUxFVEVST0xFUycgfCB0cmFuc2xhdGUgfX1cIiBtdWx0aXBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICNhbGxEZWxldGVTZWxlY3RlZCAoY2xpY2spPVwidG9nZ2xlRGVsZXRlQWxsUm9sZXNTZWxlY3RlZCgpXCIgW3ZhbHVlXT1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAge3sgJ1BFUk1JU1NJT05NQU5BR0VNRU5ULlNFTEVDVEFMTCcgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicm9sZS5yb2xlSWRcIiAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc0Ryb3BEb3duXCIgI2FsbERlbGV0ZVNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZWxldGVSb2xlc1Blck9uZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGUucm9sZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMVwiIG1hdC1idXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ1cHNlcnRXb3Jrc3BhY2UoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF3b3Jrc3BhY2VGb3JtLnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImRhc2hib2FyZFVwZGF0ZUluUHJvZ3Jlc3NcIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJtci0wNVwiIGljb249XCJwbHVzXCI+PC9mYS1pY29uPiB7eyAnU0FWRScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlQWRkV29ya3NwYWNlRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cIm1yLTA1XCIgaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPiB7eyAnQ0FOQ0VMJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICA8L3NhdC1wb3BvdmVyPlxyXG5cclxuXHJcbiAgPHNhdC1wb3BvdmVyICNwIGhhc0JhY2tkcm9wIFtpbnRlcmFjdGl2ZUNsb3NlXT1cInRydWVcIiB2ZXJ0aWNhbEFsaWduPVwiYWJvdmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLXdyYXBwZXJcIj5cclxuICAgICAgPHRhYmxlPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZD5DdHJsICsgUTogPC90ZD5cclxuICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPlxyXG4gICAgICAgICAgPHRkPiB7eyAnU0hFTEwuVE9PUEVOU0VBUkNITUVOVScgfCB0cmFuc2xhdGV9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQ+Q3RybCArIEI6IDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD5cclxuICAgICAgICAgIDx0ZD4ge3sgJ1NIRUxMLlRPT1BFTkdPQUxTQU5EVVNFUlMnIHwgdHJhbnNsYXRlfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPkN0cmwgKyBZOiA8L3RkPlxyXG4gICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgICA8dGQ+IHt7ICdTSEVMTC5UT1NFQVJDSEJZSUQnIHwgdHJhbnNsYXRlfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPkN0cmwgKyBNOiA8L3RkPlxyXG4gICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgICA8dGQ+IHt7ICdTSEVMTC5UT0NMT1NFTUVOVScgfCB0cmFuc2xhdGV9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvc2F0LXBvcG92ZXI+XHJcblxyXG4gIDxtYXQtc3Bpbm5lciAqbmdJZj1cInNlYXJjaEJ5VGV4dExvYWRpbmcgJiYgZGlzcGxheVwiIGNsYXNzPVwic3Bpbm5lci1jbGFzc1wiIFtkaWFtZXRlcl09XCIxMDBcIj48L21hdC1zcGlubmVyPiJdfQ==