@tuki-io/tuki-widgets 0.0.134 → 0.0.136

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 (825) hide show
  1. package/README.md +9 -10
  2. package/contact-center/cc-readiness/cc-readiness.module.d.ts +19 -0
  3. package/contact-center/cc-readiness/cc-readiness.service.d.ts +12 -0
  4. package/contact-center/cc-readiness/components/card/card.component.d.ts +6 -0
  5. package/contact-center/cc-readiness/types/cc-readiness.d.ts +20 -0
  6. package/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.d.ts +52 -0
  7. package/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.d.ts +26 -0
  8. package/contact-center/index.d.ts +5 -0
  9. package/contact-center/public-api.d.ts +3 -0
  10. package/contact-center/shared/api.endpoints.d.ts +6 -0
  11. package/contact-center/shared/api.service.d.ts +20 -0
  12. package/contact-center/shared/material.module.d.ts +15 -0
  13. package/contact-center/shared/shared.module.d.ts +10 -0
  14. package/di2mt/api/api.endpoints.d.ts +31 -0
  15. package/di2mt/index.d.ts +5 -0
  16. package/di2mt/public-api.d.ts +13 -0
  17. package/di2mt/shared/components/card/card.component.d.ts +6 -0
  18. package/di2mt/shared/components/chart-card/chart-card.component.d.ts +23 -0
  19. package/di2mt/shared/components/stat-card/stat-card.component.d.ts +14 -0
  20. package/di2mt/shared/components/status-list-card/status-list-card.component.d.ts +15 -0
  21. package/di2mt/shared/components/summary-card/summary-card.component.d.ts +9 -0
  22. package/di2mt/shared/components/table-filters/table-filters.component.d.ts +14 -0
  23. package/di2mt/shared/constants/app.constants.d.ts +74 -0
  24. package/di2mt/shared/material.module.d.ts +15 -0
  25. package/di2mt/shared/services/api.service.d.ts +20 -0
  26. package/di2mt/shared/shared.module.d.ts +16 -0
  27. package/di2mt/shared/types/constants.d.ts +15 -0
  28. package/di2mt/shared/types/data-table.d.ts +5 -0
  29. package/di2mt/shared/types/table/filter.d.ts +16 -0
  30. package/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.d.ts +11 -0
  31. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.d.ts +69 -0
  32. package/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +15 -0
  33. package/di2mt/widgets/site-upgrade/site-upgrade.service.d.ts +84 -0
  34. package/di2mt/widgets/site-upgrade/types/user-upgrade.d.ts +26 -0
  35. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.d.ts +19 -0
  36. package/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.d.ts +19 -0
  37. package/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.d.ts +18 -0
  38. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.d.ts +19 -0
  39. package/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.d.ts +19 -0
  40. package/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.d.ts +15 -0
  41. package/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.d.ts +18 -0
  42. package/di2mt/widgets/upgrade-overview/types/upgrade-overview.d.ts +56 -0
  43. package/di2mt/widgets/upgrade-overview/upgrade-overview.module.d.ts +15 -0
  44. package/di2mt/widgets/upgrade-overview/upgrade-overview.service.d.ts +17 -0
  45. package/di2mt/widgets/user-upgrade/types/user-upgrade.d.ts +32 -0
  46. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.d.ts +79 -0
  47. package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +16 -0
  48. package/di2mt/widgets/user-upgrade/user-upgrade.service.d.ts +41 -0
  49. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +71 -0
  50. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +35 -0
  51. package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +13 -0
  52. package/esm2020/contact-center/cc-readiness/types/cc-readiness.mjs +5 -0
  53. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +187 -0
  54. package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +47 -0
  55. package/esm2020/contact-center/public-api.mjs +4 -0
  56. package/esm2020/contact-center/shared/api.endpoints.mjs +7 -0
  57. package/esm2020/contact-center/shared/api.service.mjs +86 -0
  58. package/esm2020/contact-center/shared/material.module.mjs +76 -0
  59. package/esm2020/contact-center/shared/shared.module.mjs +33 -0
  60. package/esm2020/contact-center/tuki-io-tuki-widgets-contact-center.mjs +5 -0
  61. package/esm2020/di2mt/api/api.endpoints.mjs +32 -0
  62. package/esm2020/di2mt/public-api.mjs +24 -0
  63. package/esm2020/di2mt/shared/components/card/card.component.mjs +13 -0
  64. package/esm2020/di2mt/shared/components/chart-card/chart-card.component.mjs +66 -0
  65. package/esm2020/di2mt/shared/components/stat-card/stat-card.component.mjs +47 -0
  66. package/esm2020/di2mt/shared/components/status-list-card/status-list-card.component.mjs +43 -0
  67. package/esm2020/di2mt/shared/components/summary-card/summary-card.component.mjs +36 -0
  68. package/esm2020/di2mt/shared/components/table-filters/table-filters.component.mjs +37 -0
  69. package/esm2020/di2mt/shared/constants/app.constants.mjs +95 -0
  70. package/esm2020/di2mt/shared/material.module.mjs +76 -0
  71. package/esm2020/di2mt/shared/services/api.service.mjs +86 -0
  72. package/esm2020/di2mt/shared/shared.module.mjs +63 -0
  73. package/esm2020/di2mt/shared/types/constants.mjs +20 -0
  74. package/esm2020/di2mt/shared/types/data-table.mjs +2 -0
  75. package/esm2020/di2mt/shared/types/table/filter.mjs +2 -0
  76. package/esm2020/di2mt/tuki-io-tuki-widgets-di2mt.mjs +5 -0
  77. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +38 -0
  78. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +433 -0
  79. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +53 -0
  80. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.service.mjs +92 -0
  81. package/esm2020/di2mt/widgets/site-upgrade/types/user-upgrade.mjs +3 -0
  82. package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.mjs +64 -0
  83. package/esm2020/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.mjs +64 -0
  84. package/esm2020/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.mjs +83 -0
  85. package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.mjs +45 -0
  86. package/esm2020/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.mjs +45 -0
  87. package/esm2020/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.mjs +86 -0
  88. package/esm2020/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.mjs +74 -0
  89. package/esm2020/di2mt/widgets/upgrade-overview/types/upgrade-overview.mjs +2 -0
  90. package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.module.mjs +59 -0
  91. package/esm2020/di2mt/widgets/upgrade-overview/upgrade-overview.service.mjs +82 -0
  92. package/esm2020/di2mt/widgets/user-upgrade/types/user-upgrade.mjs +3 -0
  93. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +376 -0
  94. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +59 -0
  95. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.service.mjs +80 -0
  96. package/esm2020/lib/widgets.component.mjs +22 -0
  97. package/esm2020/lib/widgets.module.mjs +21 -0
  98. package/esm2020/lib/widgets.service.mjs +14 -0
  99. package/esm2020/public-api.mjs +7 -0
  100. package/esm2020/tuki-io-tuki-widgets.mjs +5 -0
  101. package/esm2020/user-device-manage/public-api.mjs +9 -0
  102. package/esm2020/user-device-manage/src/app.constants.mjs +97 -0
  103. package/esm2020/user-device-manage/src/classes/device.mjs +85 -0
  104. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +34 -0
  105. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +2 -0
  106. package/esm2020/user-device-manage/src/classes/line-association.mjs +121 -0
  107. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +10 -0
  108. package/esm2020/user-device-manage/src/classes/line-directory.mjs +27 -0
  109. package/esm2020/user-device-manage/src/classes/line.mjs +18 -0
  110. package/esm2020/user-device-manage/src/classes/notification.mjs +32 -0
  111. package/esm2020/user-device-manage/src/classes/recording-options.mjs +7 -0
  112. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +111 -0
  113. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +21 -0
  114. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +32 -0
  115. package/esm2020/user-device-manage/src/classes/types.mjs +24 -0
  116. package/esm2020/user-device-manage/src/common-functions.mjs +19 -0
  117. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +34 -0
  118. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +31 -0
  119. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +16 -0
  120. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +64 -0
  121. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +179 -0
  122. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +43 -0
  123. package/esm2020/user-device-manage/src/device-list/device-list.component.mjs +24 -0
  124. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +141 -0
  125. package/esm2020/user-device-manage/src/environments/environment.mjs +11 -0
  126. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +36 -0
  127. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +74 -0
  128. package/esm2020/user-device-manage/src/material.module.mjs +192 -0
  129. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +35 -0
  130. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +26 -0
  131. package/esm2020/user-device-manage/src/services/api.service.mjs +79 -0
  132. package/esm2020/user-device-manage/src/services/device.service.mjs +83 -0
  133. package/esm2020/user-device-manage/src/services/dns.service.mjs +104 -0
  134. package/esm2020/user-device-manage/src/services/line.service.mjs +76 -0
  135. package/esm2020/user-device-manage/src/services/notification.service.mjs +62 -0
  136. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +25 -0
  137. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +70 -0
  138. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +197 -0
  139. package/esm2020/user-device-manage/src/services/user.service.mjs +311 -0
  140. package/esm2020/user-device-manage/src/services/utils.service.mjs +87 -0
  141. package/esm2020/user-device-manage/src/services/validation.service.mjs +760 -0
  142. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +13 -0
  143. package/esm2020/user-device-manage/src/user-device-manage.module.mjs +116 -0
  144. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +14 -0
  145. package/esm2020/user-device-manage/tuki-io-tuki-widgets-user-device-manage.mjs +5 -0
  146. package/esm2020/user-manage/public-api.mjs +7 -0
  147. package/esm2020/user-manage/src/app.constants.mjs +54 -0
  148. package/esm2020/user-manage/src/classes/device.mjs +37 -0
  149. package/esm2020/user-manage/src/classes/line-association-interface.mjs +2 -0
  150. package/esm2020/user-manage/src/classes/line-association.mjs +110 -0
  151. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +10 -0
  152. package/esm2020/user-manage/src/classes/line-directory.mjs +28 -0
  153. package/esm2020/user-manage/src/classes/line.mjs +18 -0
  154. package/esm2020/user-manage/src/classes/notification.mjs +32 -0
  155. package/esm2020/user-manage/src/classes/pagination.mjs +8 -0
  156. package/esm2020/user-manage/src/classes/recording-options.mjs +7 -0
  157. package/esm2020/user-manage/src/classes/simplified-user.mjs +109 -0
  158. package/esm2020/user-manage/src/classes/table-data.mjs +2 -0
  159. package/esm2020/user-manage/src/classes/translation-pattern.mjs +32 -0
  160. package/esm2020/user-manage/src/classes/user-list.mjs +10 -0
  161. package/esm2020/user-manage/src/common-functions.mjs +19 -0
  162. package/esm2020/user-manage/src/device-list/device-list.component.mjs +26 -0
  163. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +33 -0
  164. package/esm2020/user-manage/src/environments/environment.mjs +11 -0
  165. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +36 -0
  166. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +81 -0
  167. package/esm2020/user-manage/src/material.module.mjs +188 -0
  168. package/esm2020/user-manage/src/notifications/notification.component.mjs +35 -0
  169. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +25 -0
  170. package/esm2020/user-manage/src/services/api.service.mjs +79 -0
  171. package/esm2020/user-manage/src/services/dns.service.mjs +110 -0
  172. package/esm2020/user-manage/src/services/line.service.mjs +34 -0
  173. package/esm2020/user-manage/src/services/notification.service.mjs +62 -0
  174. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +25 -0
  175. package/esm2020/user-manage/src/services/site-settings.service.mjs +36 -0
  176. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +197 -0
  177. package/esm2020/user-manage/src/services/user.service.mjs +249 -0
  178. package/esm2020/user-manage/src/services/users-search.service.mjs +50 -0
  179. package/esm2020/user-manage/src/services/utils.service.mjs +73 -0
  180. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +65 -0
  181. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +75 -0
  182. package/esm2020/user-manage/src/user-info/user-info.component.mjs +23 -0
  183. package/esm2020/user-manage/src/user-manage-widget.component.mjs +219 -0
  184. package/esm2020/user-manage/src/user-manage.module.mjs +102 -0
  185. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +14 -0
  186. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +43 -0
  187. package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +5 -0
  188. package/esm2020/users-list/public-api.mjs +9 -0
  189. package/esm2020/users-list/src/app.constants.mjs +54 -0
  190. package/esm2020/users-list/src/classes/app-location.mjs +32 -0
  191. package/esm2020/users-list/src/classes/device.mjs +7 -0
  192. package/esm2020/users-list/src/classes/line.mjs +18 -0
  193. package/esm2020/users-list/src/classes/move-user.mjs +178 -0
  194. package/esm2020/users-list/src/classes/notification.mjs +31 -0
  195. package/esm2020/users-list/src/classes/pagination.mjs +8 -0
  196. package/esm2020/users-list/src/classes/simlified-user.mjs +50 -0
  197. package/esm2020/users-list/src/classes/table-data.mjs +2 -0
  198. package/esm2020/users-list/src/classes/user-list.mjs +14 -0
  199. package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +25 -0
  200. package/esm2020/users-list/src/material.module.mjs +216 -0
  201. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +38 -0
  202. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +23 -0
  203. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +189 -0
  204. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +38 -0
  205. package/esm2020/users-list/src/services/api-webex.service.mjs +18 -0
  206. package/esm2020/users-list/src/services/api.service.mjs +78 -0
  207. package/esm2020/users-list/src/services/dns.service.mjs +120 -0
  208. package/esm2020/users-list/src/services/events-communication.service.mjs +14 -0
  209. package/esm2020/users-list/src/services/move-user.service.mjs +53 -0
  210. package/esm2020/users-list/src/services/notification.service.mjs +62 -0
  211. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +25 -0
  212. package/esm2020/users-list/src/services/site-settings.service.mjs +27 -0
  213. package/esm2020/users-list/src/services/user.service.mjs +142 -0
  214. package/esm2020/users-list/src/services/users-search.service.mjs +141 -0
  215. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +34 -0
  216. package/esm2020/users-list/src/users-list.component.mjs +339 -0
  217. package/esm2020/users-list/src/users-list.module.mjs +95 -0
  218. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +14 -0
  219. package/esm2020/users-list/src/utils/common-functions.mjs +32 -0
  220. package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +43 -0
  221. package/esm2020/users-list/src/utils/utils.service.mjs +73 -0
  222. package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +5 -0
  223. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +433 -0
  224. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -0
  225. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +2220 -0
  226. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -0
  227. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +3378 -0
  228. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -0
  229. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +2222 -0
  230. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -0
  231. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +2098 -0
  232. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -0
  233. package/fesm2015/tuki-io-tuki-widgets.mjs +63 -0
  234. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -0
  235. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +430 -0
  236. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -0
  237. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +2204 -0
  238. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -0
  239. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +3357 -0
  240. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -0
  241. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +2208 -0
  242. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -0
  243. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +2074 -0
  244. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -0
  245. package/fesm2020/tuki-io-tuki-widgets.mjs +63 -0
  246. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -0
  247. package/index.d.ts +5 -0
  248. package/lib/widgets.component.d.ts +8 -0
  249. package/lib/widgets.module.d.ts +7 -0
  250. package/lib/widgets.service.d.ts +6 -0
  251. package/package.json +73 -49
  252. package/public-api.d.ts +3 -0
  253. package/user-device-manage/index.d.ts +5 -0
  254. package/user-device-manage/src/app.constants.d.ts +76 -0
  255. package/user-device-manage/src/classes/device.d.ts +233 -0
  256. package/user-device-manage/src/classes/deviceProfile.d.ts +24 -0
  257. package/user-device-manage/src/classes/line-association-interface.d.ts +45 -0
  258. package/user-device-manage/src/classes/line-association.d.ts +62 -0
  259. package/user-device-manage/src/classes/line-call-info-display.d.ts +11 -0
  260. package/user-device-manage/src/classes/line-directory.d.ts +15 -0
  261. package/user-device-manage/src/classes/line.d.ts +140 -0
  262. package/user-device-manage/src/classes/notification.d.ts +18 -0
  263. package/user-device-manage/src/classes/recording-options.d.ts +5 -0
  264. package/user-device-manage/src/classes/simplified-user.d.ts +52 -0
  265. package/user-device-manage/src/classes/site-defaults.d.ts +146 -0
  266. package/user-device-manage/src/classes/translation-pattern.d.ts +19 -0
  267. package/user-device-manage/src/classes/types.d.ts +19 -0
  268. package/user-device-manage/src/common-functions.d.ts +1 -0
  269. package/user-device-manage/src/confirm-dialog/info-dialog.component.d.ts +20 -0
  270. package/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.d.ts +15 -0
  271. package/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.d.ts +7 -0
  272. package/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.d.ts +24 -0
  273. package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +89 -0
  274. package/user-device-manage/src/device-info/device-info.component.d.ts +15 -0
  275. package/user-device-manage/src/device-list/device-list.component.d.ts +11 -0
  276. package/user-device-manage/src/device-manage-widget.component.d.ts +54 -0
  277. package/user-device-manage/src/environments/environment.d.ts +9 -0
  278. package/user-device-manage/src/interseptors/auth.interceptor.d.ts +9 -0
  279. package/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +35 -0
  280. package/user-device-manage/src/material.module.d.ts +29 -0
  281. package/user-device-manage/src/notifications/notification.component.d.ts +19 -0
  282. package/user-device-manage/src/pipes/mac-address.pipe.d.ts +7 -0
  283. package/user-device-manage/src/services/api.service.d.ts +20 -0
  284. package/user-device-manage/src/services/device.service.d.ts +21 -0
  285. package/user-device-manage/src/services/dns.service.d.ts +14 -0
  286. package/user-device-manage/src/services/line.service.d.ts +33 -0
  287. package/user-device-manage/src/services/notification.service.d.ts +18 -0
  288. package/user-device-manage/src/services/removeKynFromIBM.service.d.ts +8 -0
  289. package/user-device-manage/src/services/site-settings.service.d.ts +25 -0
  290. package/user-device-manage/src/services/sorting-utils.service.d.ts +26 -0
  291. package/user-device-manage/src/services/user.service.d.ts +61 -0
  292. package/user-device-manage/src/services/utils.service.d.ts +10 -0
  293. package/user-device-manage/src/services/validation.service.d.ts +165 -0
  294. package/user-device-manage/src/shared/tk-page-section/page-section.component.d.ts +6 -0
  295. package/user-device-manage/src/user-device-manage.module.d.ts +25 -0
  296. package/user-device-manage/src/utils/app-loader/app-loader.d.ts +6 -0
  297. package/user-manage/index.d.ts +5 -0
  298. package/user-manage/src/app.constants.d.ts +33 -0
  299. package/user-manage/src/classes/device.d.ts +203 -0
  300. package/user-manage/src/classes/line-association-interface.d.ts +41 -0
  301. package/user-manage/src/classes/line-association.d.ts +55 -0
  302. package/user-manage/src/classes/line-call-info-display.d.ts +11 -0
  303. package/user-manage/src/classes/line-directory.d.ts +17 -0
  304. package/user-manage/src/classes/line.d.ts +141 -0
  305. package/user-manage/src/classes/notification.d.ts +18 -0
  306. package/user-manage/src/classes/pagination.d.ts +13 -0
  307. package/user-manage/src/classes/recording-options.d.ts +5 -0
  308. package/user-manage/src/classes/simplified-user.d.ts +50 -0
  309. package/user-manage/src/classes/table-data.d.ts +5 -0
  310. package/user-manage/src/classes/translation-pattern.d.ts +18 -0
  311. package/user-manage/src/classes/user-list.d.ts +34 -0
  312. package/user-manage/src/common-functions.d.ts +1 -0
  313. package/user-manage/src/device-list/device-list.component.d.ts +11 -0
  314. package/user-manage/src/device-list/device-row/device-row.component.d.ts +12 -0
  315. package/user-manage/src/environments/environment.d.ts +9 -0
  316. package/user-manage/src/interseptors/auth.interceptor.d.ts +9 -0
  317. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +37 -0
  318. package/user-manage/src/material.module.d.ts +28 -0
  319. package/user-manage/src/notifications/notification.component.d.ts +19 -0
  320. package/user-manage/src/removeKynFromIBM.service.d.ts +8 -0
  321. package/user-manage/src/services/api.service.d.ts +21 -0
  322. package/user-manage/src/services/dns.service.d.ts +14 -0
  323. package/user-manage/src/services/line.service.d.ts +17 -0
  324. package/user-manage/src/services/notification.service.d.ts +18 -0
  325. package/user-manage/src/services/removeKynFromIBM.service.d.ts +8 -0
  326. package/user-manage/src/services/site-settings.service.d.ts +9 -0
  327. package/user-manage/src/services/sorting-utils.service.d.ts +26 -0
  328. package/user-manage/src/services/user.service.d.ts +45 -0
  329. package/user-manage/src/services/users-search.service.d.ts +25 -0
  330. package/user-manage/src/services/utils.service.d.ts +9 -0
  331. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +24 -0
  332. package/user-manage/src/user-calling/user-calling.component.d.ts +30 -0
  333. package/user-manage/src/user-info/user-info.component.d.ts +10 -0
  334. package/user-manage/src/user-manage-widget.component.d.ts +45 -0
  335. package/user-manage/src/user-manage.module.d.ts +22 -0
  336. package/user-manage/src/utils/app-loader/app-loader.d.ts +6 -0
  337. package/user-manage/src/utils/pagination/pagination.component.d.ts +18 -0
  338. package/users-list/index.d.ts +5 -0
  339. package/users-list/src/app.constants.d.ts +36 -0
  340. package/users-list/src/classes/app-location.d.ts +17 -0
  341. package/users-list/src/classes/device.d.ts +224 -0
  342. package/users-list/src/classes/line.d.ts +140 -0
  343. package/users-list/src/classes/move-user.d.ts +85 -0
  344. package/users-list/src/classes/notification.d.ts +18 -0
  345. package/users-list/src/classes/pagination.d.ts +13 -0
  346. package/users-list/src/classes/simlified-user.d.ts +25 -0
  347. package/users-list/src/classes/table-data.d.ts +5 -0
  348. package/users-list/src/classes/user-list.d.ts +36 -0
  349. package/users-list/src/components/table-toolbar/table-toolbar.component.d.ts +10 -0
  350. package/users-list/src/material.module.d.ts +32 -0
  351. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.d.ts +21 -0
  352. package/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.d.ts +12 -0
  353. package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +55 -0
  354. package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +17 -0
  355. package/users-list/src/services/api-webex.service.d.ts +8 -0
  356. package/users-list/src/services/api.service.d.ts +21 -0
  357. package/users-list/src/services/dns.service.d.ts +18 -0
  358. package/users-list/src/services/events-communication.service.d.ts +8 -0
  359. package/users-list/src/services/move-user.service.d.ts +17 -0
  360. package/users-list/src/services/notification.service.d.ts +18 -0
  361. package/users-list/src/services/removeKynFromIBM.service.d.ts +8 -0
  362. package/users-list/src/services/site-settings.service.d.ts +11 -0
  363. package/users-list/src/services/user.service.d.ts +35 -0
  364. package/users-list/src/services/users-search.service.d.ts +37 -0
  365. package/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.d.ts +20 -0
  366. package/users-list/src/users-list.component.d.ts +62 -0
  367. package/users-list/src/users-list.module.d.ts +19 -0
  368. package/users-list/src/utils/app-loader/app-loader.d.ts +6 -0
  369. package/users-list/src/utils/common-functions.d.ts +2 -0
  370. package/users-list/src/utils/pagination/pagination.component.d.ts +18 -0
  371. package/users-list/src/utils/utils.service.d.ts +9 -0
  372. package/.editorconfig +0 -16
  373. package/.hintrc +0 -14
  374. package/.vscode/extensions.json +0 -4
  375. package/.vscode/launch.json +0 -20
  376. package/.vscode/tasks.json +0 -42
  377. package/angular.json +0 -141
  378. package/projects/tuki/widgets/README.md +0 -24
  379. package/projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.module.ts +0 -44
  380. package/projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.service.spec.ts +0 -16
  381. package/projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.service.ts +0 -33
  382. package/projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.html +0 -11
  383. package/projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.scss +0 -48
  384. package/projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.ts +0 -10
  385. package/projects/tuki/widgets/contact-center/cc-readiness/types/cc-readiness.ts +0 -34
  386. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.html +0 -74
  387. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.scss +0 -177
  388. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.spec.ts +0 -35
  389. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.ts +0 -237
  390. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.html +0 -19
  391. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.scss +0 -38
  392. package/projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.ts +0 -57
  393. package/projects/tuki/widgets/contact-center/ng-package.json +0 -7
  394. package/projects/tuki/widgets/contact-center/public-api.ts +0 -6
  395. package/projects/tuki/widgets/contact-center/shared/api.endpoints.ts +0 -6
  396. package/projects/tuki/widgets/contact-center/shared/api.service.ts +0 -91
  397. package/projects/tuki/widgets/contact-center/shared/assets/icons/applications.svg +0 -6
  398. package/projects/tuki/widgets/contact-center/shared/assets/icons/audioPrompts.svg +0 -4
  399. package/projects/tuki/widgets/contact-center/shared/assets/icons/contactServiceQueues.svg +0 -3
  400. package/projects/tuki/widgets/contact-center/shared/assets/icons/phonebooks.svg +0 -6
  401. package/projects/tuki/widgets/contact-center/shared/assets/icons/resourceGroups.svg +0 -6
  402. package/projects/tuki/widgets/contact-center/shared/assets/icons/resources.svg +0 -3
  403. package/projects/tuki/widgets/contact-center/shared/assets/icons/scripts.svg +0 -12
  404. package/projects/tuki/widgets/contact-center/shared/assets/icons/skills.svg +0 -3
  405. package/projects/tuki/widgets/contact-center/shared/assets/icons/teams.svg +0 -3
  406. package/projects/tuki/widgets/contact-center/shared/assets/icons/triggers.svg +0 -4
  407. package/projects/tuki/widgets/contact-center/shared/assets/icons/wrapUpCodes.svg +0 -3
  408. package/projects/tuki/widgets/contact-center/shared/assets/icons/xml.svg +0 -6
  409. package/projects/tuki/widgets/contact-center/shared/material.module.ts +0 -36
  410. package/projects/tuki/widgets/contact-center/shared/shared.module.ts +0 -20
  411. package/projects/tuki/widgets/contact-center/shared/styles/tuki-widgets-theme.scss +0 -13
  412. package/projects/tuki/widgets/contact-center/shared/styles/variables.scss +0 -94
  413. package/projects/tuki/widgets/di2mt/api/api.endpoints.ts +0 -31
  414. package/projects/tuki/widgets/di2mt/assets/icons/already_upgraded.png +0 -0
  415. package/projects/tuki/widgets/di2mt/assets/icons/check2_icon.png +0 -0
  416. package/projects/tuki/widgets/di2mt/assets/icons/check_icon.png +0 -0
  417. package/projects/tuki/widgets/di2mt/assets/icons/details_d_icon.svg +0 -3
  418. package/projects/tuki/widgets/di2mt/assets/icons/expand_icon.png +0 -0
  419. package/projects/tuki/widgets/di2mt/assets/icons/icon_play.svg +0 -3
  420. package/projects/tuki/widgets/di2mt/assets/icons/issue_icon.png +0 -0
  421. package/projects/tuki/widgets/di2mt/assets/icons/menu_icon.png +0 -0
  422. package/projects/tuki/widgets/di2mt/assets/icons/ready_to_upgrade.png +0 -0
  423. package/projects/tuki/widgets/di2mt/assets/icons/search_icon.png +0 -0
  424. package/projects/tuki/widgets/di2mt/assets/icons/site.png +0 -0
  425. package/projects/tuki/widgets/di2mt/assets/icons/user.png +0 -0
  426. package/projects/tuki/widgets/di2mt/assets/icons/warning_icon.png +0 -0
  427. package/projects/tuki/widgets/di2mt/ng-package.json +0 -7
  428. package/projects/tuki/widgets/di2mt/public-api.ts +0 -27
  429. package/projects/tuki/widgets/di2mt/shared/components/card/card.component.html +0 -11
  430. package/projects/tuki/widgets/di2mt/shared/components/card/card.component.scss +0 -48
  431. package/projects/tuki/widgets/di2mt/shared/components/card/card.component.ts +0 -10
  432. package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.html +0 -15
  433. package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.scss +0 -38
  434. package/projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.ts +0 -76
  435. package/projects/tuki/widgets/di2mt/shared/components/index.ts +0 -6
  436. package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.html +0 -43
  437. package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.scss +0 -74
  438. package/projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.ts +0 -44
  439. package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.html +0 -57
  440. package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.scss +0 -187
  441. package/projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.ts +0 -41
  442. package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.html +0 -12
  443. package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.scss +0 -78
  444. package/projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.ts +0 -27
  445. package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.html +0 -28
  446. package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.scss +0 -245
  447. package/projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.ts +0 -28
  448. package/projects/tuki/widgets/di2mt/shared/constants/app.constants.ts +0 -96
  449. package/projects/tuki/widgets/di2mt/shared/material.module.ts +0 -36
  450. package/projects/tuki/widgets/di2mt/shared/services/api.service.ts +0 -91
  451. package/projects/tuki/widgets/di2mt/shared/shared.module.ts +0 -39
  452. package/projects/tuki/widgets/di2mt/shared/types/constants.ts +0 -22
  453. package/projects/tuki/widgets/di2mt/shared/types/data-table.ts +0 -5
  454. package/projects/tuki/widgets/di2mt/shared/types/table/filter.ts +0 -14
  455. package/projects/tuki/widgets/di2mt/styles/tuki-widgets-theme.scss +0 -13
  456. package/projects/tuki/widgets/di2mt/styles/variables.scss +0 -94
  457. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.html +0 -6
  458. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.scss +0 -45
  459. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.ts +0 -27
  460. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html +0 -160
  461. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.scss +0 -460
  462. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts +0 -506
  463. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.module.ts +0 -33
  464. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.service.ts +0 -172
  465. package/projects/tuki/widgets/di2mt/widgets/site-upgrade/types/user-upgrade.ts +0 -27
  466. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts +0 -52
  467. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts +0 -53
  468. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts +0 -82
  469. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html +0 -7
  470. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.scss +0 -0
  471. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts +0 -45
  472. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html +0 -7
  473. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.scss +0 -0
  474. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts +0 -45
  475. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts +0 -81
  476. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts +0 -70
  477. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/types/upgrade-overview.ts +0 -58
  478. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts +0 -42
  479. package/projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts +0 -95
  480. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/types/user-upgrade.ts +0 -35
  481. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html +0 -204
  482. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.scss +0 -462
  483. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts +0 -438
  484. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.module.ts +0 -34
  485. package/projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.service.ts +0 -137
  486. package/projects/tuki/widgets/karma.conf.js +0 -44
  487. package/projects/tuki/widgets/ng-package.json +0 -10
  488. package/projects/tuki/widgets/package.json +0 -13
  489. package/projects/tuki/widgets/src/lib/widgets.component.spec.ts +0 -23
  490. package/projects/tuki/widgets/src/lib/widgets.component.ts +0 -20
  491. package/projects/tuki/widgets/src/lib/widgets.module.ts +0 -16
  492. package/projects/tuki/widgets/src/lib/widgets.service.spec.ts +0 -16
  493. package/projects/tuki/widgets/src/lib/widgets.service.ts +0 -9
  494. package/projects/tuki/widgets/src/public-api.ts +0 -7
  495. package/projects/tuki/widgets/src/test.ts +0 -27
  496. package/projects/tuki/widgets/styles.scss +0 -558
  497. package/projects/tuki/widgets/tsconfig.lib.json +0 -37
  498. package/projects/tuki/widgets/tsconfig.lib.prod.json +0 -10
  499. package/projects/tuki/widgets/tsconfig.spec.json +0 -17
  500. package/projects/tuki/widgets/user-device-manage/ng-package.json +0 -7
  501. package/projects/tuki/widgets/user-device-manage/src/app.constants.ts +0 -98
  502. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-down-bold.svg +0 -1
  503. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-left.svg +0 -5
  504. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-right-regular.svg +0 -1
  505. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-right.svg +0 -5
  506. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cancel-regular.svg +0 -1
  507. package/projects/tuki/widgets/user-device-manage/src/assets/icons/check-circle-regular.svg +0 -1
  508. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cisco.svg +0 -8
  509. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cisco_7841.png +0 -0
  510. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cisco_8841.png +0 -0
  511. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cisco_8851.png +0 -0
  512. package/projects/tuki/widgets/user-device-manage/src/assets/icons/cisco_9861.png +0 -0
  513. package/projects/tuki/widgets/user-device-manage/src/assets/icons/close_icon_x.svg +0 -3
  514. package/projects/tuki/widgets/user-device-manage/src/assets/icons/delete_icon.svg +0 -5
  515. package/projects/tuki/widgets/user-device-manage/src/assets/icons/dragger-vertical-icon.svg +0 -3
  516. package/projects/tuki/widgets/user-device-manage/src/assets/icons/icon_user.svg +0 -1
  517. package/projects/tuki/widgets/user-device-manage/src/assets/icons/info-circle-regular.svg +0 -1
  518. package/projects/tuki/widgets/user-device-manage/src/assets/icons/people-regular.svg +0 -1
  519. package/projects/tuki/widgets/user-device-manage/src/assets/icons/plus-regular.svg +0 -1
  520. package/projects/tuki/widgets/user-device-manage/src/assets/icons/settings-light.svg +0 -1
  521. package/projects/tuki/widgets/user-device-manage/src/assets/icons/settings-regular.svg +0 -1
  522. package/projects/tuki/widgets/user-device-manage/src/assets/icons/vartical_divider_icon.svg +0 -3
  523. package/projects/tuki/widgets/user-device-manage/src/assets/icons/warning-regular.svg +0 -1
  524. package/projects/tuki/widgets/user-device-manage/src/assets/info-circle-bold.svg +0 -1
  525. package/projects/tuki/widgets/user-device-manage/src/classes/device.ts +0 -292
  526. package/projects/tuki/widgets/user-device-manage/src/classes/deviceProfile.ts +0 -60
  527. package/projects/tuki/widgets/user-device-manage/src/classes/line-association-interface.ts +0 -50
  528. package/projects/tuki/widgets/user-device-manage/src/classes/line-association.ts +0 -177
  529. package/projects/tuki/widgets/user-device-manage/src/classes/line-call-info-display.ts +0 -21
  530. package/projects/tuki/widgets/user-device-manage/src/classes/line-directory.ts +0 -41
  531. package/projects/tuki/widgets/user-device-manage/src/classes/line.ts +0 -144
  532. package/projects/tuki/widgets/user-device-manage/src/classes/notification.ts +0 -40
  533. package/projects/tuki/widgets/user-device-manage/src/classes/recording-options.ts +0 -6
  534. package/projects/tuki/widgets/user-device-manage/src/classes/simplified-user.ts +0 -169
  535. package/projects/tuki/widgets/user-device-manage/src/classes/site-defaults.ts +0 -167
  536. package/projects/tuki/widgets/user-device-manage/src/classes/translation-pattern.ts +0 -50
  537. package/projects/tuki/widgets/user-device-manage/src/classes/types.ts +0 -19
  538. package/projects/tuki/widgets/user-device-manage/src/classes/user-interface.ts +0 -225
  539. package/projects/tuki/widgets/user-device-manage/src/classes/user.ts +0 -8
  540. package/projects/tuki/widgets/user-device-manage/src/common-functions.ts +0 -16
  541. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.html +0 -14
  542. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.scss +0 -80
  543. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.ts +0 -35
  544. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html +0 -21
  545. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.scss +0 -97
  546. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts +0 -28
  547. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html +0 -6
  548. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.scss +0 -20
  549. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts +0 -13
  550. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html +0 -6
  551. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.scss +0 -4
  552. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts +0 -63
  553. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.html +0 -241
  554. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.scss +0 -500
  555. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.ts +0 -194
  556. package/projects/tuki/widgets/user-device-manage/src/device-info/device-info.component.html +0 -52
  557. package/projects/tuki/widgets/user-device-manage/src/device-info/device-info.component.scss +0 -219
  558. package/projects/tuki/widgets/user-device-manage/src/device-info/device-info.component.ts +0 -38
  559. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.html +0 -27
  560. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.scss +0 -131
  561. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.ts +0 -25
  562. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.html +0 -281
  563. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.scss +0 -766
  564. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.ts +0 -142
  565. package/projects/tuki/widgets/user-device-manage/src/environments/environment.prod.ts +0 -9
  566. package/projects/tuki/widgets/user-device-manage/src/environments/environment.ts +0 -10
  567. package/projects/tuki/widgets/user-device-manage/src/interseptors/auth.interceptor.ts +0 -35
  568. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html +0 -67
  569. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.scss +0 -98
  570. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts +0 -81
  571. package/projects/tuki/widgets/user-device-manage/src/material.module.ts +0 -87
  572. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.html +0 -33
  573. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.scss +0 -84
  574. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.ts +0 -46
  575. package/projects/tuki/widgets/user-device-manage/src/pipes/mac-address.pipe.ts +0 -24
  576. package/projects/tuki/widgets/user-device-manage/src/removeKynFromIBM.service.ts +0 -25
  577. package/projects/tuki/widgets/user-device-manage/src/services/api.service.ts +0 -87
  578. package/projects/tuki/widgets/user-device-manage/src/services/common-functions.ts +0 -17
  579. package/projects/tuki/widgets/user-device-manage/src/services/device.service.ts +0 -95
  580. package/projects/tuki/widgets/user-device-manage/src/services/dns.service.ts +0 -111
  581. package/projects/tuki/widgets/user-device-manage/src/services/line.service.ts +0 -89
  582. package/projects/tuki/widgets/user-device-manage/src/services/notification.service.ts +0 -68
  583. package/projects/tuki/widgets/user-device-manage/src/services/removeKynFromIBM.service.ts +0 -25
  584. package/projects/tuki/widgets/user-device-manage/src/services/site-settings.service.ts +0 -82
  585. package/projects/tuki/widgets/user-device-manage/src/services/sorting-utils.service.ts +0 -203
  586. package/projects/tuki/widgets/user-device-manage/src/services/user.service.ts +0 -360
  587. package/projects/tuki/widgets/user-device-manage/src/services/utils.service.ts +0 -87
  588. package/projects/tuki/widgets/user-device-manage/src/services/validation.service.ts +0 -829
  589. package/projects/tuki/widgets/user-device-manage/src/shared/tk-page-section/page-section.component.html +0 -13
  590. package/projects/tuki/widgets/user-device-manage/src/shared/tk-page-section/page-section.component.scss +0 -48
  591. package/projects/tuki/widgets/user-device-manage/src/shared/tk-page-section/page-section.component.spec.ts +0 -23
  592. package/projects/tuki/widgets/user-device-manage/src/shared/tk-page-section/page-section.component.ts +0 -10
  593. package/projects/tuki/widgets/user-device-manage/src/styles/_variables.scss +0 -90
  594. package/projects/tuki/widgets/user-device-manage/src/styles/form.scss +0 -284
  595. package/projects/tuki/widgets/user-device-manage/src/styles/icons.scss +0 -33
  596. package/projects/tuki/widgets/user-device-manage/src/styles/styles.scss +0 -127
  597. package/projects/tuki/widgets/user-device-manage/src/styles/tables.scss +0 -30
  598. package/projects/tuki/widgets/user-device-manage/src/user-device-manage.module.ts +0 -79
  599. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.html +0 -7
  600. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.scss +0 -11
  601. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.ts +0 -13
  602. package/projects/tuki/widgets/user-manage/ng-package.json +0 -7
  603. package/projects/tuki/widgets/user-manage/src/app.constants.ts +0 -54
  604. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-down-bold.svg +0 -1
  605. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-left.svg +0 -5
  606. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-right-bold.svg +0 -1
  607. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-right.svg +0 -5
  608. package/projects/tuki/widgets/user-manage/src/assets/icons/cisco_7841.png +0 -0
  609. package/projects/tuki/widgets/user-manage/src/assets/icons/cisco_8841.png +0 -0
  610. package/projects/tuki/widgets/user-manage/src/assets/icons/cisco_8851.png +0 -0
  611. package/projects/tuki/widgets/user-manage/src/assets/icons/cisco_9861.png +0 -0
  612. package/projects/tuki/widgets/user-manage/src/assets/icons/delete_icon.svg +0 -5
  613. package/projects/tuki/widgets/user-manage/src/assets/icons/dragger-vertical-icon.svg +0 -3
  614. package/projects/tuki/widgets/user-manage/src/assets/icons/icon_user.svg +0 -1
  615. package/projects/tuki/widgets/user-manage/src/assets/icons/info-circle-bold.svg +0 -1
  616. package/projects/tuki/widgets/user-manage/src/assets/icons/people-regular.svg +0 -1
  617. package/projects/tuki/widgets/user-manage/src/assets/icons/settings-light.svg +0 -1
  618. package/projects/tuki/widgets/user-manage/src/assets/icons/vartical_divider_icon.svg +0 -3
  619. package/projects/tuki/widgets/user-manage/src/classes/device.ts +0 -232
  620. package/projects/tuki/widgets/user-manage/src/classes/line-association-interface.ts +0 -44
  621. package/projects/tuki/widgets/user-manage/src/classes/line-association.ts +0 -161
  622. package/projects/tuki/widgets/user-manage/src/classes/line-call-info-display.ts +0 -21
  623. package/projects/tuki/widgets/user-manage/src/classes/line-directory.ts +0 -44
  624. package/projects/tuki/widgets/user-manage/src/classes/line.ts +0 -145
  625. package/projects/tuki/widgets/user-manage/src/classes/notification.ts +0 -39
  626. package/projects/tuki/widgets/user-manage/src/classes/pagination.ts +0 -18
  627. package/projects/tuki/widgets/user-manage/src/classes/recording-options.ts +0 -6
  628. package/projects/tuki/widgets/user-manage/src/classes/simplified-user.ts +0 -165
  629. package/projects/tuki/widgets/user-manage/src/classes/table-data.ts +0 -6
  630. package/projects/tuki/widgets/user-manage/src/classes/translation-pattern.ts +0 -49
  631. package/projects/tuki/widgets/user-manage/src/classes/user-interface.ts +0 -225
  632. package/projects/tuki/widgets/user-manage/src/classes/user-list.ts +0 -42
  633. package/projects/tuki/widgets/user-manage/src/classes/user.ts +0 -8
  634. package/projects/tuki/widgets/user-manage/src/common-functions.ts +0 -16
  635. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.html +0 -32
  636. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.scss +0 -305
  637. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.ts +0 -26
  638. package/projects/tuki/widgets/user-manage/src/device-list/device-row/device-row.component.html +0 -13
  639. package/projects/tuki/widgets/user-manage/src/device-list/device-row/device-row.component.scss +0 -154
  640. package/projects/tuki/widgets/user-manage/src/device-list/device-row/device-row.component.ts +0 -34
  641. package/projects/tuki/widgets/user-manage/src/environments/environment.prod.ts +0 -9
  642. package/projects/tuki/widgets/user-manage/src/environments/environment.ts +0 -10
  643. package/projects/tuki/widgets/user-manage/src/interseptors/auth.interceptor.ts +0 -35
  644. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.html +0 -68
  645. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.scss +0 -125
  646. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.ts +0 -93
  647. package/projects/tuki/widgets/user-manage/src/material.module.ts +0 -85
  648. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.html +0 -33
  649. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.scss +0 -84
  650. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.ts +0 -46
  651. package/projects/tuki/widgets/user-manage/src/removeKynFromIBM.service.ts +0 -25
  652. package/projects/tuki/widgets/user-manage/src/services/api.service.ts +0 -90
  653. package/projects/tuki/widgets/user-manage/src/services/dns.service.ts +0 -116
  654. package/projects/tuki/widgets/user-manage/src/services/line.service.ts +0 -31
  655. package/projects/tuki/widgets/user-manage/src/services/notification.service.ts +0 -68
  656. package/projects/tuki/widgets/user-manage/src/services/removeKynFromIBM.service.ts +0 -25
  657. package/projects/tuki/widgets/user-manage/src/services/site-settings.service.ts +0 -35
  658. package/projects/tuki/widgets/user-manage/src/services/sorting-utils.service.ts +0 -203
  659. package/projects/tuki/widgets/user-manage/src/services/user.service.ts +0 -288
  660. package/projects/tuki/widgets/user-manage/src/services/users-search.service.ts +0 -59
  661. package/projects/tuki/widgets/user-manage/src/services/utils.service.ts +0 -71
  662. package/projects/tuki/widgets/user-manage/src/styles/_variables.scss +0 -93
  663. package/projects/tuki/widgets/user-manage/src/styles/form.scss +0 -231
  664. package/projects/tuki/widgets/user-manage/src/styles/icons.scss +0 -41
  665. package/projects/tuki/widgets/user-manage/src/styles/styles.scss +0 -128
  666. package/projects/tuki/widgets/user-manage/src/styles/tables.scss +0 -30
  667. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.html +0 -10
  668. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.scss +0 -444
  669. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.ts +0 -63
  670. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.html +0 -97
  671. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.scss +0 -444
  672. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.ts +0 -89
  673. package/projects/tuki/widgets/user-manage/src/user-details/notification.service.ts +0 -68
  674. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.html +0 -37
  675. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.scss +0 -121
  676. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.ts +0 -19
  677. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.html +0 -313
  678. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.scss +0 -638
  679. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.ts +0 -222
  680. package/projects/tuki/widgets/user-manage/src/user-manage.module.ts +0 -65
  681. package/projects/tuki/widgets/user-manage/src/user-summary/user-summary.component.html +0 -64
  682. package/projects/tuki/widgets/user-manage/src/user-summary/user-summary.component.scss +0 -17
  683. package/projects/tuki/widgets/user-manage/src/user-summary/user-summary.component.ts +0 -8
  684. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.html +0 -7
  685. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.scss +0 -11
  686. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.ts +0 -13
  687. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.html +0 -26
  688. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.scss +0 -41
  689. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.ts +0 -41
  690. package/projects/tuki/widgets/users-list/ng-package.json +0 -7
  691. package/projects/tuki/widgets/users-list/src/app.constants.ts +0 -54
  692. package/projects/tuki/widgets/users-list/src/assets/icons/close_icon_modal.svg +0 -3
  693. package/projects/tuki/widgets/users-list/src/assets/icons/cogs.svg +0 -8
  694. package/projects/tuki/widgets/users-list/src/assets/icons/copy-regular.svg +0 -1
  695. package/projects/tuki/widgets/users-list/src/assets/icons/icon_user.svg +0 -1
  696. package/projects/tuki/widgets/users-list/src/assets/icons/info-circle-regular.svg +0 -1
  697. package/projects/tuki/widgets/users-list/src/assets/icons/info.svg +0 -5
  698. package/projects/tuki/widgets/users-list/src/assets/icons/move_user_to_another_location.svg +0 -14
  699. package/projects/tuki/widgets/users-list/src/assets/icons/mt.svg +0 -3
  700. package/projects/tuki/widgets/users-list/src/assets/icons/settings-regular.svg +0 -1
  701. package/projects/tuki/widgets/users-list/src/assets/icons/webex.svg +0 -7
  702. package/projects/tuki/widgets/users-list/src/assets/icons/webex_logo_icon.svg +0 -305
  703. package/projects/tuki/widgets/users-list/src/assets/icons/white-close-icon.svg +0 -3
  704. package/projects/tuki/widgets/users-list/src/classes/app-location.ts +0 -36
  705. package/projects/tuki/widgets/users-list/src/classes/device.ts +0 -225
  706. package/projects/tuki/widgets/users-list/src/classes/line.ts +0 -144
  707. package/projects/tuki/widgets/users-list/src/classes/move-user.ts +0 -225
  708. package/projects/tuki/widgets/users-list/src/classes/notification.ts +0 -38
  709. package/projects/tuki/widgets/users-list/src/classes/pagination.ts +0 -18
  710. package/projects/tuki/widgets/users-list/src/classes/simlified-user.ts +0 -74
  711. package/projects/tuki/widgets/users-list/src/classes/table-data.ts +0 -6
  712. package/projects/tuki/widgets/users-list/src/classes/user-interface.ts +0 -225
  713. package/projects/tuki/widgets/users-list/src/classes/user-list.ts +0 -47
  714. package/projects/tuki/widgets/users-list/src/classes/user.ts +0 -8
  715. package/projects/tuki/widgets/users-list/src/components/table-toolbar/table-toolbar.component.html +0 -39
  716. package/projects/tuki/widgets/users-list/src/components/table-toolbar/table-toolbar.component.scss +0 -41
  717. package/projects/tuki/widgets/users-list/src/components/table-toolbar/table-toolbar.component.ts +0 -21
  718. package/projects/tuki/widgets/users-list/src/material.module.ts +0 -97
  719. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.html +0 -37
  720. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.scss +0 -129
  721. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.ts +0 -46
  722. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.html +0 -31
  723. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.scss +0 -20
  724. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.ts +0 -26
  725. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.html +0 -222
  726. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.scss +0 -249
  727. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.ts +0 -206
  728. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.html +0 -12
  729. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.scss +0 -41
  730. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.ts +0 -36
  731. package/projects/tuki/widgets/users-list/src/services/api-webex.service.ts +0 -14
  732. package/projects/tuki/widgets/users-list/src/services/api.service.ts +0 -90
  733. package/projects/tuki/widgets/users-list/src/services/dns.service.ts +0 -128
  734. package/projects/tuki/widgets/users-list/src/services/events-communication.service.ts +0 -11
  735. package/projects/tuki/widgets/users-list/src/services/move-user.service.ts +0 -59
  736. package/projects/tuki/widgets/users-list/src/services/notification.service.ts +0 -68
  737. package/projects/tuki/widgets/users-list/src/services/removeKynFromIBM.service.ts +0 -25
  738. package/projects/tuki/widgets/users-list/src/services/site-settings.service.ts +0 -26
  739. package/projects/tuki/widgets/users-list/src/services/user.service.ts +0 -159
  740. package/projects/tuki/widgets/users-list/src/services/users-search.service.ts +0 -160
  741. package/projects/tuki/widgets/users-list/src/styles/styles.scss +0 -639
  742. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.html +0 -15
  743. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.scss +0 -103
  744. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.ts +0 -35
  745. package/projects/tuki/widgets/users-list/src/users-list.component.css +0 -4
  746. package/projects/tuki/widgets/users-list/src/users-list.component.css.map +0 -1
  747. package/projects/tuki/widgets/users-list/src/users-list.component.html +0 -261
  748. package/projects/tuki/widgets/users-list/src/users-list.component.scss +0 -629
  749. package/projects/tuki/widgets/users-list/src/users-list.component.ts +0 -410
  750. package/projects/tuki/widgets/users-list/src/users-list.module.ts +0 -65
  751. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css +0 -11
  752. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css.map +0 -1
  753. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.html +0 -7
  754. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.scss +0 -17
  755. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.ts +0 -13
  756. package/projects/tuki/widgets/users-list/src/utils/common-functions.ts +0 -32
  757. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.html +0 -33
  758. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.scss +0 -84
  759. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.ts +0 -46
  760. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css +0 -45
  761. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css.map +0 -1
  762. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.html +0 -26
  763. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.scss +0 -41
  764. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.ts +0 -41
  765. package/projects/tuki/widgets/users-list/src/utils/utils.service.ts +0 -71
  766. package/projects/widgets-playground/src/app/app.component.html +0 -130
  767. package/projects/widgets-playground/src/app/app.component.scss +0 -16
  768. package/projects/widgets-playground/src/app/app.component.spec.ts +0 -31
  769. package/projects/widgets-playground/src/app/app.component.ts +0 -31
  770. package/projects/widgets-playground/src/app/app.module.ts +0 -45
  771. package/projects/widgets-playground/src/assets/.gitkeep +0 -0
  772. package/projects/widgets-playground/src/assets/icons/already_upgraded.png +0 -0
  773. package/projects/widgets-playground/src/assets/icons/applications copy.svg +0 -6
  774. package/projects/widgets-playground/src/assets/icons/applications.svg +0 -6
  775. package/projects/widgets-playground/src/assets/icons/arrow-down-bold.svg +0 -1
  776. package/projects/widgets-playground/src/assets/icons/audio-prompts.svg +0 -4
  777. package/projects/widgets-playground/src/assets/icons/audioPrompts.svg +0 -4
  778. package/projects/widgets-playground/src/assets/icons/check2_icon.png +0 -0
  779. package/projects/widgets-playground/src/assets/icons/check_icon.png +0 -0
  780. package/projects/widgets-playground/src/assets/icons/contactServiceQueues.svg +0 -3
  781. package/projects/widgets-playground/src/assets/icons/copy-regular.svg +0 -1
  782. package/projects/widgets-playground/src/assets/icons/csqs.svg +0 -3
  783. package/projects/widgets-playground/src/assets/icons/expand_icon.png +0 -0
  784. package/projects/widgets-playground/src/assets/icons/info-circle-regular.svg +0 -1
  785. package/projects/widgets-playground/src/assets/icons/issue_icon.png +0 -0
  786. package/projects/widgets-playground/src/assets/icons/menu_icon.png +0 -0
  787. package/projects/widgets-playground/src/assets/icons/mt.svg +0 -3
  788. package/projects/widgets-playground/src/assets/icons/phone-books.svg +0 -6
  789. package/projects/widgets-playground/src/assets/icons/phonebooks.svg +0 -6
  790. package/projects/widgets-playground/src/assets/icons/ready_to_upgrade.png +0 -0
  791. package/projects/widgets-playground/src/assets/icons/resource-group.svg +0 -6
  792. package/projects/widgets-playground/src/assets/icons/resource.svg +0 -3
  793. package/projects/widgets-playground/src/assets/icons/resourceGroups.svg +0 -6
  794. package/projects/widgets-playground/src/assets/icons/resources.svg +0 -3
  795. package/projects/widgets-playground/src/assets/icons/scripts copy.svg +0 -12
  796. package/projects/widgets-playground/src/assets/icons/scripts.svg +0 -12
  797. package/projects/widgets-playground/src/assets/icons/search_icon.png +0 -0
  798. package/projects/widgets-playground/src/assets/icons/settings-regular.svg +0 -1
  799. package/projects/widgets-playground/src/assets/icons/site.png +0 -0
  800. package/projects/widgets-playground/src/assets/icons/skills copy.svg +0 -3
  801. package/projects/widgets-playground/src/assets/icons/skills.svg +0 -3
  802. package/projects/widgets-playground/src/assets/icons/teams copy.svg +0 -3
  803. package/projects/widgets-playground/src/assets/icons/teams.svg +0 -3
  804. package/projects/widgets-playground/src/assets/icons/triggers copy.svg +0 -4
  805. package/projects/widgets-playground/src/assets/icons/triggers.svg +0 -4
  806. package/projects/widgets-playground/src/assets/icons/user.png +0 -0
  807. package/projects/widgets-playground/src/assets/icons/warning_icon.png +0 -0
  808. package/projects/widgets-playground/src/assets/icons/webex.svg +0 -7
  809. package/projects/widgets-playground/src/assets/icons/webex_logo_icon.svg +0 -305
  810. package/projects/widgets-playground/src/assets/icons/wrapUpCodes.svg +0 -3
  811. package/projects/widgets-playground/src/assets/icons/wrapup-codes.svg +0 -3
  812. package/projects/widgets-playground/src/assets/icons/xml copy.svg +0 -6
  813. package/projects/widgets-playground/src/assets/icons/xml.svg +0 -6
  814. package/projects/widgets-playground/src/favicon.ico +0 -0
  815. package/projects/widgets-playground/src/index.html +0 -13
  816. package/projects/widgets-playground/src/main.ts +0 -7
  817. package/projects/widgets-playground/src/styles.scss +0 -24
  818. package/projects/widgets-playground/tsconfig.app.json +0 -14
  819. package/projects/widgets-playground/tsconfig.spec.json +0 -14
  820. package/proxy.conf.js +0 -23
  821. package/tsconfig.json +0 -46
  822. /package/{projects/tuki/widgets/di2mt → di2mt}/README.md +0 -0
  823. /package/{projects/tuki/widgets/user-device-manage/public-api.ts → user-device-manage/public-api.d.ts} +0 -0
  824. /package/{projects/tuki/widgets/user-manage/public-api.ts → user-manage/public-api.d.ts} +0 -0
  825. /package/{projects/tuki/widgets/users-list/public-api.ts → users-list/public-api.d.ts} +0 -0
@@ -0,0 +1,376 @@
1
+ import { SelectionModel } from "@angular/cdk/collections";
2
+ import { Component, inject, Input } from "@angular/core";
3
+ import { MatTableDataSource } from "@angular/material/table";
4
+ import { Subject, Subscription } from "rxjs";
5
+ import { takeUntil } from "rxjs";
6
+ import { FILTER_KEY_MAP, UserUpgradeService } from "../user-upgrade.service";
7
+ import { DEPENDENCIES_STATUS, STATUS_ENTRIES } from "../../../shared/types/constants";
8
+ import { APIService } from "../../../shared/services/api.service";
9
+ import { PAGINATION_SIZE_OPTIONS } from "../../../shared/constants/app.constants";
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "@angular/material/table";
13
+ import * as i3 from "@angular/material/checkbox";
14
+ import * as i4 from "@angular/material/button";
15
+ import * as i5 from "../../../shared/components/summary-card/summary-card.component";
16
+ import * as i6 from "../../../shared/components/table-filters/table-filters.component";
17
+ import * as i7 from "@angular/material/progress-spinner";
18
+ import * as i8 from "@angular/material/paginator";
19
+ export class UserUpgradeDataTableComponent {
20
+ constructor() {
21
+ this.destroy$ = new Subject();
22
+ this.userUpgradeService = inject(UserUpgradeService);
23
+ this.apiService = inject(APIService);
24
+ this.STATUS_ENTRIES = STATUS_ENTRIES;
25
+ this.DEPENDENCIES_STATUS = DEPENDENCIES_STATUS;
26
+ this.dataPending = false;
27
+ this.displayedColumns = ['select', 'user', 'site', 'device', 'dialPlanStatus', 'dependencies', 'userUpgradeStatus', 'userUpgradeLoader'];
28
+ this.selection = new SelectionModel(true, []);
29
+ this.filters = [];
30
+ this.pagination = new PaginationDataDto();
31
+ this.users = [];
32
+ this.subscriptions = new Subscription();
33
+ this.statusCounts = {};
34
+ this.activeFilters = {};
35
+ this.pageSizeOptions = PAGINATION_SIZE_OPTIONS;
36
+ }
37
+ ngOnInit() {
38
+ this.dataPending = true;
39
+ this.apiService.token = this.token;
40
+ this.userUpgradeService.customerId = this.customerId;
41
+ const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, this.activeFilters)
42
+ .pipe(takeUntil(this.destroy$))
43
+ .subscribe((results) => {
44
+ const records = results.content;
45
+ records.forEach(record => {
46
+ record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);
47
+ });
48
+ this.data = new MatTableDataSource(records);
49
+ this.pagination.total = results.totalElements;
50
+ this.dataPending = false;
51
+ this.setupCustomFilter();
52
+ this.initializeFilters(records);
53
+ });
54
+ this.subscriptions.add(subsc1);
55
+ const subsc2 = this.userUpgradeService.getUserUpgradeStatusCounts()
56
+ .pipe(takeUntil(this.destroy$))
57
+ .subscribe((statusCounts) => {
58
+ this.statusCounts['Ready'] = statusCounts['READY'] || 0;
59
+ this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;
60
+ this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;
61
+ this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;
62
+ });
63
+ this.subscriptions.add(subsc2);
64
+ }
65
+ ngOnDestroy() {
66
+ this.destroy$.next();
67
+ this.destroy$.complete();
68
+ this.dataPending = false;
69
+ if (this.subscriptions) {
70
+ this.subscriptions.unsubscribe();
71
+ }
72
+ }
73
+ onMultipleDevices(user) {
74
+ user.showDevices = !user.showDevices;
75
+ }
76
+ pageEvent(event) {
77
+ this.pagination.pageIndex = event.pageIndex;
78
+ this.pagination.pageSize = event.pageSize;
79
+ this.getData();
80
+ }
81
+ getSiteUpgradeStatusClass(status) {
82
+ switch (status.toLowerCase()) {
83
+ case 'ready':
84
+ return 'status-ready';
85
+ case 'partial ready':
86
+ return 'partial-ready';
87
+ case 'completed':
88
+ return 'completed';
89
+ case 'failed':
90
+ return 'failed';
91
+ case 'not ready':
92
+ return 'not-ready';
93
+ default:
94
+ return 'not-ready';
95
+ }
96
+ }
97
+ changePerPageNumber(pageSizeEvent) {
98
+ this.pagination.pageSize = pageSizeEvent.value;
99
+ this.pagination.pageIndex = 0;
100
+ this.getData();
101
+ }
102
+ getData(params) {
103
+ this.dataPending = true;
104
+ const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, params || {})
105
+ .pipe(takeUntil(this.destroy$))
106
+ .subscribe((result) => {
107
+ const records = result.content;
108
+ records.forEach(record => {
109
+ record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);
110
+ });
111
+ this.data = new MatTableDataSource(records);
112
+ this.pagination.total = result.totalElements;
113
+ this.dataPending = false;
114
+ });
115
+ this.subscriptions.add(subsc1);
116
+ }
117
+ initializeFilters(records) {
118
+ if (!records?.length) {
119
+ this.filters = [];
120
+ return;
121
+ }
122
+ // Extract unique sites (skip empty/null)
123
+ const uniqueSites = [
124
+ ...new Set(records
125
+ .map(record => record.siteName?.trim())
126
+ .filter((site) => !!site))
127
+ ];
128
+ const siteOptions = uniqueSites.map(site => ({
129
+ label: site,
130
+ value: site.toLowerCase().replace(/\s+/g, '-')
131
+ }));
132
+ // Extract unique statuses (skip empty/null)
133
+ const uniqueStatuses = [
134
+ ...new Set(records
135
+ .map(record => record.upgradeStatus?.trim())
136
+ .filter((status) => !!status))
137
+ ];
138
+ const statusOptions = uniqueStatuses.map(status => ({
139
+ label: STATUS_ENTRIES[status],
140
+ value: status.toLowerCase().replace(/\s+/g, '-')
141
+ }));
142
+ this.filters = [
143
+ {
144
+ id: 'userName',
145
+ type: 'search',
146
+ columnKey: 'User',
147
+ placeholder: 'Search users...',
148
+ options: []
149
+ }
150
+ ];
151
+ if (siteOptions.length) {
152
+ this.filters.push({
153
+ id: 'sites',
154
+ type: 'select',
155
+ columnKey: 'Site',
156
+ placeholder: 'Sites',
157
+ options: siteOptions
158
+ });
159
+ }
160
+ if (statusOptions.length) {
161
+ this.filters.push({
162
+ id: 'status',
163
+ type: 'select',
164
+ columnKey: 'User Upgrade Status',
165
+ placeholder: 'Upgrade Status',
166
+ options: statusOptions
167
+ });
168
+ }
169
+ }
170
+ /** Whether the number of selected elements matches the total number of rows. */
171
+ isAllSelected() {
172
+ const numSelected = this.selection.selected.length;
173
+ const numRows = this.data?.data.length ?? 0;
174
+ return numSelected === numRows;
175
+ }
176
+ /** Selects all rows if they are not all selected; otherwise clear selection. */
177
+ masterToggle() {
178
+ // this.isAllSelected() ?
179
+ // this.selection.clear() :
180
+ // this.data?.data.forEach(row => this.selection.select(row));
181
+ if (this.isAllSelected()) {
182
+ this.selection.clear();
183
+ }
184
+ else {
185
+ this.data?.data.forEach(row => {
186
+ if (row.upgradeStatus === 'READY') {
187
+ this.selection.select(row);
188
+ }
189
+ });
190
+ }
191
+ }
192
+ upgradeUser(user) {
193
+ if (user?.upgradeStatus === 'READY')
194
+ user.pending = true;
195
+ this.userUpgradeService.collectUsers([user])
196
+ .pipe(takeUntil(this.destroy$))
197
+ .subscribe(() => {
198
+ this.userUpgradeService.bulkUpgrade([user])
199
+ .pipe(takeUntil(this.destroy$))
200
+ .subscribe(() => {
201
+ this.updateUsersStatusAfterUpgrade([user]);
202
+ });
203
+ });
204
+ }
205
+ updateUsersStatusAfterUpgrade(users) {
206
+ this.userUpgradeService.getUsersUpgradeStatuses(users)
207
+ .pipe(takeUntil(this.destroy$))
208
+ .subscribe((upgradedStatuses) => {
209
+ upgradedStatuses.forEach(statusItem => {
210
+ const ind = this.getUserIndex(statusItem.userId);
211
+ if (ind > -1) {
212
+ this.data.data[ind].upgradeStatus = statusItem.upgradeStatus;
213
+ this.data.data[ind].pending = false;
214
+ }
215
+ });
216
+ this.dataPending = false;
217
+ });
218
+ }
219
+ getUserIndex(userId) {
220
+ return this.data.data.findIndex((record) => record.userId === userId);
221
+ }
222
+ upgradeSelectedUsers() {
223
+ if (this.selection.selected && this.selection.selected.length) {
224
+ this.dataPending = true;
225
+ this.userUpgradeService.collectUsers(this.selection.selected)
226
+ .pipe(takeUntil(this.destroy$))
227
+ .subscribe(() => {
228
+ this.userUpgradeService.bulkUpgrade(this.selection.selected)
229
+ .pipe(takeUntil(this.destroy$))
230
+ .subscribe(() => {
231
+ this.updateUsersStatusAfterUpgrade(this.selection.selected);
232
+ });
233
+ });
234
+ }
235
+ this.userUpgradeService.bulkUpgrade(this.selection.selected);
236
+ }
237
+ getFilterValue(input) {
238
+ if (input && input.value !== undefined)
239
+ return input.value; // e.g. {value,label}
240
+ if (input && input.target)
241
+ return input.target.value; // DOM event
242
+ return input; // plain value
243
+ }
244
+ isEmptyFilter(v) {
245
+ if (v === undefined || v === null)
246
+ return true;
247
+ if (typeof v === 'string') {
248
+ const s = v.trim().toLowerCase();
249
+ return s === '' || s === 'all';
250
+ }
251
+ return false;
252
+ }
253
+ onFilter(filterEvent) {
254
+ const rawKey = filterEvent.key;
255
+ const serverKey = FILTER_KEY_MAP[rawKey];
256
+ const value = this.getFilterValue(filterEvent.value);
257
+ const next = { ...this.activeFilters };
258
+ if (this.isEmptyFilter(value)) {
259
+ delete next[serverKey];
260
+ }
261
+ else {
262
+ // normalize to string for API (trim)
263
+ next[serverKey] = typeof value === 'string' ? value.trim() : String(value);
264
+ }
265
+ this.activeFilters = next;
266
+ this.pagination.pageIndex = 0;
267
+ // quick fix for demo
268
+ if (this.activeFilters['upgradeStatus']) {
269
+ this.activeFilters['upgradeStatus'] = this.activeFilters['upgradeStatus']?.toUpperCase();
270
+ }
271
+ this.getData(this.activeFilters);
272
+ }
273
+ /*onFilter(filterEvent: { key: string, value: any }) {
274
+ const {key, value} = filterEvent;
275
+
276
+ let filterValue: any;
277
+ if (value && value.value !== undefined) {
278
+ filterValue = value.value;
279
+ } else if (value && value.target) {
280
+ filterValue = value.target.value;
281
+ } else {
282
+ filterValue = value;
283
+ }
284
+
285
+ // Handle "All" option or empty values - remove the filter
286
+ if (filterValue === 'all' || !filterValue || filterValue === '') {
287
+ delete this.activeFilters[key];
288
+ } else {
289
+ this.activeFilters[key] = filterValue;
290
+ }
291
+
292
+ this.applyFilters();
293
+ }*/
294
+ setupCustomFilter() {
295
+ this.data.filterPredicate = (data, filter) => {
296
+ const filters = JSON.parse(filter || '{}');
297
+ for (const [key, value] of Object.entries(filters)) {
298
+ if (!value)
299
+ continue;
300
+ switch (key) {
301
+ case 'User':
302
+ const searchTerm = value.toLowerCase();
303
+ if (!data.userName.toLowerCase().includes(searchTerm)) {
304
+ return false;
305
+ }
306
+ break;
307
+ case 'Site':
308
+ if (data.siteName !== this.getSiteNameFromValue(value)) {
309
+ return false;
310
+ }
311
+ break;
312
+ case 'User Upgrade Status':
313
+ if (!this.matchesUpgradeStatus(data.upgradeStatus, value)) {
314
+ return false;
315
+ }
316
+ break;
317
+ }
318
+ }
319
+ return true;
320
+ };
321
+ }
322
+ applyFilters() {
323
+ this.data.filter = JSON.stringify(this.activeFilters);
324
+ }
325
+ get filteredDataCount() {
326
+ return this.data?.filteredData?.length || 0;
327
+ }
328
+ getSiteNameFromValue(value) {
329
+ // Since we're now using actual site names, just convert back from slug format
330
+ return value.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
331
+ }
332
+ matchesUpgradeStatus(status, filterValue) {
333
+ // Handle direct status matching for cleaner implementation
334
+ return status.toLowerCase().replace(/\s+/g, '-') === filterValue.toLowerCase();
335
+ }
336
+ getStatusClass(status) {
337
+ switch (status.toLowerCase()) {
338
+ case 'ready':
339
+ return 'ready';
340
+ case 'not ready':
341
+ return 'not-ready';
342
+ case 'partial ready':
343
+ return 'partial-ready';
344
+ case 'completed':
345
+ return 'completed';
346
+ case 'failed':
347
+ return 'failed';
348
+ default:
349
+ return 'not-ready';
350
+ }
351
+ }
352
+ }
353
+ UserUpgradeDataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
354
+ UserUpgradeDataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserUpgradeDataTableComponent, selector: "tk-user-upgrade-data-table", inputs: { token: "token", customerId: "customerId" }, ngImport: i0, template: "<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"70\"\r\n strokeWidth=\"3\"\r\n ></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th class=\"device-td\" mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devicesWithExtensions; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.deviceName || device }}</span>\r\n <span class=\"device-model\">\r\n {{ device.extensions?.length ? 'Ext: ' + device.extensions.join(\", \") : 'No Extension' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div class=\"multiple-dev-link\" *ngIf=\"element.devicesWithExtensions?.length > 1; else oneDevice\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <ng-template #oneDevice>\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devicesWithExtensions[0].deviceName}}</span>\r\n </div>\r\n <div class=\"device-model one-dev-extensions\">\r\n {{ element.devicesWithExtensions[0].extensions?.length ?\r\n 'Ext: ' + element.devicesWithExtensions[0].extensions?.join(\", \") : 'No Extension' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">\u2014</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\";.app-pagination{display:flex;flex-direction:column;align-items:stretch}.app-pagination .page-indexes-box,.app-pagination .per-page-block{justify-self:center}.app-pagination mat-select{width:100px}.overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff6;z-index:200}.mat-progress-spinner{position:absolute;top:50%;left:50%;margin-top:-20px;margin-left:-25px;width:50px;height:40px;text-align:center;font-size:10px}.mat-progress-spinner-td{position:relative}#userUpgradeDataTable .flex-container{padding:0!important}.multiple-dev-link{margin:0 0 0 13px}:host ::ng-deep .mat-cell{border-bottom:1px solid #d6d6d6;font-family:Inter,sans-serif!important}:host ::ng-deep .mat-header-cell{border-bottom:1px solid #afafaf;font-family:Inter,sans-serif!important}:host ::ng-deep .progress-spinner-td{position:relative}:host ::ng-deep #userUpgradeDataTable .mat-progress-spinner-td .mat-progress-spinner{top:28%;left:0;margin:0}.wrapper{display:flex;flex-direction:column;gap:1rem}.user-upgrade-status-wrapper{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem;align-items:stretch}.user-upgrade-table{width:100%;background:white;border-radius:8px;overflow:hidden;font-size:14px}.user-upgrade-table .mat-header-row{font-size:12px;height:35px}.user-upgrade-table .mat-cell{border-bottom:1px solid #d6d6d6}.user-upgrade-table .mat-header-cell{border-bottom:1px solid #afafaf}.user-upgrade-table .mat-row{transition:background-color .2s ease}.user-upgrade-table .mat-row:hover{background-color:#f8f9fa}.user-upgrade-table .mat-row.selected-row{background-color:#08599c1a}.user-upgrade-table .user-info .user-name{font-weight:500;color:#212121}.user-upgrade-table .user-info .user-email{font-size:12px;color:#757575}.user-upgrade-table .site-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .site-info .site-indicator{width:8px;height:8px;border-radius:50%;background-color:#737480}.user-upgrade-table .device-info .device-name-wrapper{display:flex;align-items:center;gap:5px}.user-upgrade-table .device-info .device-name-wrapper .device-name{font-weight:500;color:#212121}.user-upgrade-table .device-model{font-size:12px;color:#757575;display:block}.user-upgrade-table .one-dev-extensions{margin:0 0 0 13px}.user-upgrade-table .device-indicator{width:8px;height:8px;border-radius:50%;background-color:#f8cd00}.user-upgrade-table .device-indicator-ready{background-color:#1d805f}.user-upgrade-table .device-td{padding:0 0 0 13px}.user-upgrade-table .status-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .status-info .status-indicator{width:8px;height:8px;border-radius:50%}.user-upgrade-table .status-info .status-indicator.ready{background-color:#1170cf}.user-upgrade-table .status-info .status-indicator.partial-ready{background-color:#f8cd00}.user-upgrade-table .status-info .status-indicator.not-ready{background-color:#9e9e9e}.user-upgrade-table .status-info .status-indicator.completed{background-color:#1d805f}.user-upgrade-table .status-info .status-indicator.failed{background-color:#f23933}.user-upgrade-table .dependencies-text{font-size:12px;background-color:#ffe9e9;padding:.25rem .5rem;border-radius:3px;color:#000}.user-upgrade-table .upgrade-status-cell{display:flex;align-items:center;justify-content:flex-start}.user-upgrade-table .upgrade-button{border-radius:20px!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:32px!important;display:flex!important;align-items:center!important;justify-content:center!important;border:2px solid black;border-radius:.5rem;color:#000}.user-upgrade-table .upgrade-button:hover{background-color:#000000ce!important;color:#fff!important}.user-upgrade-table .custom-checkbox .mdc-checkbox{padding:8px}.mat-checkbox-disabled{opacity:.5}.multi-dev-box{position:relative}.device-list{position:absolute;top:65%;left:0;min-width:200px;background:white;box-shadow:0 2px 8px #0000001a;padding:8px 0;margin-top:4px;border-radius:2px;opacity:0;transform:translateY(-10px);visibility:hidden;transition:all .3s ease;z-index:1000}.device-list.show-dev-list{opacity:1;transform:translateY(0);visibility:visible;pointer-events:auto}.clickable{cursor:pointer}.device-item{padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background-color .2s ease}.device-item:hover{background-color:#f9f9f9}.device-item.no-border{border-bottom:none}.device-item .device-name{font-size:14px;color:#333}.table-action-panel{width:100%;display:flex;justify-content:flex-start;gap:1rem}:host ::ng-deep .action-wrapper{display:flex;flex:1;align-items:center;justify-content:space-between;gap:1rem;color:#555}:host ::ng-deep .action-wrapper .mat-button .mat-button-wrapper{margin:0}.upgrade-bulk-button{border:1px solid #000!important;color:#fff!important;background:#000!important;border-radius:20px!important;padding:0 1rem!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important}.upgrade-bulk-button:hover{background-color:#212121!important}.upgrade-bulk-button:disabled{background-color:#888!important;color:#fff!important;cursor:not-allowed!important;border-color:#888!important;opacity:.25!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-checked .mat-checkbox-background{background-color:#1170cf!important;border-color:#00000080!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled):hover:not(.mat-checkbox-checked) .mat-checkbox-background{background-color:#0000004d!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background{background-color:#1170cf!important;border-color:#00000080!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background .mat-checkbox-mixedmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox .mat-checkbox-background{border-color:#00000080!important;transition:background-color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled) .mat-checkbox-ripple .mat-ripple-element{background-color:#1170cf40}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).cdk-focused .mat-checkbox-ripple .mat-ripple-element{background-color:#1170cf59}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background{border-color:#00000080!important;transition:background-color .2s,border-color .2s,box-shadow .2s;background-color:#1170cf!important}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}.user-upgrade-table .mat-checkbox.mat-accent .mat-ripple-element{background-color:#08599c1a!important}.user-upgrade-table .mat-checkbox.mat-accent:focus .mat-checkbox-background{background-color:#08599c1a!important}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-frame{border-color:#00000080!important}.user-upgrade-table .mat-checkbox-checkmark{color:#fff!important;transform:scale(.75)}.user-upgrade-table .mat-checkbox-checkmark-path{stroke:#fff!important}.user-upgrade-table .mat-checkbox-mixedmark{border-color:#fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i4.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"] }, { kind: "component", type: i5.SummaryCardComponent, selector: "tk-summary-card", inputs: ["value", "status", "description"] }, { kind: "component", type: i6.TableFiltersComponent, selector: "tk-table-filters", inputs: ["filters"], outputs: ["filter"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }] });
355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserUpgradeDataTableComponent, decorators: [{
356
+ type: Component,
357
+ args: [{ selector: 'tk-user-upgrade-data-table', template: "<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"70\"\r\n strokeWidth=\"3\"\r\n ></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th class=\"device-td\" mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devicesWithExtensions; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.deviceName || device }}</span>\r\n <span class=\"device-model\">\r\n {{ device.extensions?.length ? 'Ext: ' + device.extensions.join(\", \") : 'No Extension' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div class=\"multiple-dev-link\" *ngIf=\"element.devicesWithExtensions?.length > 1; else oneDevice\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <ng-template #oneDevice>\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devicesWithExtensions[0].deviceName}}</span>\r\n </div>\r\n <div class=\"device-model one-dev-extensions\">\r\n {{ element.devicesWithExtensions[0].extensions?.length ?\r\n 'Ext: ' + element.devicesWithExtensions[0].extensions?.join(\", \") : 'No Extension' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">\u2014</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\";.app-pagination{display:flex;flex-direction:column;align-items:stretch}.app-pagination .page-indexes-box,.app-pagination .per-page-block{justify-self:center}.app-pagination mat-select{width:100px}.overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff6;z-index:200}.mat-progress-spinner{position:absolute;top:50%;left:50%;margin-top:-20px;margin-left:-25px;width:50px;height:40px;text-align:center;font-size:10px}.mat-progress-spinner-td{position:relative}#userUpgradeDataTable .flex-container{padding:0!important}.multiple-dev-link{margin:0 0 0 13px}:host ::ng-deep .mat-cell{border-bottom:1px solid #d6d6d6;font-family:Inter,sans-serif!important}:host ::ng-deep .mat-header-cell{border-bottom:1px solid #afafaf;font-family:Inter,sans-serif!important}:host ::ng-deep .progress-spinner-td{position:relative}:host ::ng-deep #userUpgradeDataTable .mat-progress-spinner-td .mat-progress-spinner{top:28%;left:0;margin:0}.wrapper{display:flex;flex-direction:column;gap:1rem}.user-upgrade-status-wrapper{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1rem;align-items:stretch}.user-upgrade-table{width:100%;background:white;border-radius:8px;overflow:hidden;font-size:14px}.user-upgrade-table .mat-header-row{font-size:12px;height:35px}.user-upgrade-table .mat-cell{border-bottom:1px solid #d6d6d6}.user-upgrade-table .mat-header-cell{border-bottom:1px solid #afafaf}.user-upgrade-table .mat-row{transition:background-color .2s ease}.user-upgrade-table .mat-row:hover{background-color:#f8f9fa}.user-upgrade-table .mat-row.selected-row{background-color:#08599c1a}.user-upgrade-table .user-info .user-name{font-weight:500;color:#212121}.user-upgrade-table .user-info .user-email{font-size:12px;color:#757575}.user-upgrade-table .site-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .site-info .site-indicator{width:8px;height:8px;border-radius:50%;background-color:#737480}.user-upgrade-table .device-info .device-name-wrapper{display:flex;align-items:center;gap:5px}.user-upgrade-table .device-info .device-name-wrapper .device-name{font-weight:500;color:#212121}.user-upgrade-table .device-model{font-size:12px;color:#757575;display:block}.user-upgrade-table .one-dev-extensions{margin:0 0 0 13px}.user-upgrade-table .device-indicator{width:8px;height:8px;border-radius:50%;background-color:#f8cd00}.user-upgrade-table .device-indicator-ready{background-color:#1d805f}.user-upgrade-table .device-td{padding:0 0 0 13px}.user-upgrade-table .status-info{display:flex;align-items:center;gap:8px}.user-upgrade-table .status-info .status-indicator{width:8px;height:8px;border-radius:50%}.user-upgrade-table .status-info .status-indicator.ready{background-color:#1170cf}.user-upgrade-table .status-info .status-indicator.partial-ready{background-color:#f8cd00}.user-upgrade-table .status-info .status-indicator.not-ready{background-color:#9e9e9e}.user-upgrade-table .status-info .status-indicator.completed{background-color:#1d805f}.user-upgrade-table .status-info .status-indicator.failed{background-color:#f23933}.user-upgrade-table .dependencies-text{font-size:12px;background-color:#ffe9e9;padding:.25rem .5rem;border-radius:3px;color:#000}.user-upgrade-table .upgrade-status-cell{display:flex;align-items:center;justify-content:flex-start}.user-upgrade-table .upgrade-button{border-radius:20px!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:32px!important;display:flex!important;align-items:center!important;justify-content:center!important;border:2px solid black;border-radius:.5rem;color:#000}.user-upgrade-table .upgrade-button:hover{background-color:#000000ce!important;color:#fff!important}.user-upgrade-table .custom-checkbox .mdc-checkbox{padding:8px}.mat-checkbox-disabled{opacity:.5}.multi-dev-box{position:relative}.device-list{position:absolute;top:65%;left:0;min-width:200px;background:white;box-shadow:0 2px 8px #0000001a;padding:8px 0;margin-top:4px;border-radius:2px;opacity:0;transform:translateY(-10px);visibility:hidden;transition:all .3s ease;z-index:1000}.device-list.show-dev-list{opacity:1;transform:translateY(0);visibility:visible;pointer-events:auto}.clickable{cursor:pointer}.device-item{padding:12px 16px;border-bottom:1px solid #f5f5f5;cursor:pointer;transition:background-color .2s ease}.device-item:hover{background-color:#f9f9f9}.device-item.no-border{border-bottom:none}.device-item .device-name{font-size:14px;color:#333}.table-action-panel{width:100%;display:flex;justify-content:flex-start;gap:1rem}:host ::ng-deep .action-wrapper{display:flex;flex:1;align-items:center;justify-content:space-between;gap:1rem;color:#555}:host ::ng-deep .action-wrapper .mat-button .mat-button-wrapper{margin:0}.upgrade-bulk-button{border:1px solid #000!important;color:#fff!important;background:#000!important;border-radius:20px!important;padding:0 1rem!important;font-size:14px!important;font-style:normal!important;font-weight:400!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important}.upgrade-bulk-button:hover{background-color:#212121!important}.upgrade-bulk-button:disabled{background-color:#888!important;color:#fff!important;cursor:not-allowed!important;border-color:#888!important;opacity:.25!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-checked .mat-checkbox-background{background-color:#1170cf!important;border-color:#00000080!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled):hover:not(.mat-checkbox-checked) .mat-checkbox-background{background-color:#0000004d!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background{background-color:#1170cf!important;border-color:#00000080!important}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox-indeterminate .mat-checkbox-background .mat-checkbox-mixedmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox .mat-checkbox-background{border-color:#00000080!important;transition:background-color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).mat-checkbox .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled) .mat-checkbox-ripple .mat-ripple-element{background-color:#1170cf40}:host ::ng-deep .user-upgrade-table .mat-accent:not(.mat-checkbox-disabled).cdk-focused .mat-checkbox-ripple .mat-ripple-element{background-color:#1170cf59}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background{border-color:#00000080!important;transition:background-color .2s,border-color .2s,box-shadow .2s;background-color:#1170cf!important}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-background .mat-checkbox-checkmark{transform:scale(.75)}.user-upgrade-table .mat-checkbox.mat-accent .mat-ripple-element{background-color:#08599c1a!important}.user-upgrade-table .mat-checkbox.mat-accent:focus .mat-checkbox-background{background-color:#08599c1a!important}.user-upgrade-table .mat-checkbox.mat-accent .mat-checkbox-frame{border-color:#00000080!important}.user-upgrade-table .mat-checkbox-checkmark{color:#fff!important;transform:scale(.75)}.user-upgrade-table .mat-checkbox-checkmark-path{stroke:#fff!important}.user-upgrade-table .mat-checkbox-mixedmark{border-color:#fff!important}\n"] }]
358
+ }], propDecorators: { token: [{
359
+ type: Input
360
+ }], customerId: [{
361
+ type: Input
362
+ }] } });
363
+ class PaginationDataDto {
364
+ constructor(data) {
365
+ this.pageSizeOptions = data?.pageSizeOptions || PAGINATION_DATA_DEFAULTS.OPTIONS;
366
+ this.pageSize = data?.pageSize || PAGINATION_DATA_DEFAULTS.SIZE;
367
+ this.pageIndex = data?.pageIndex || PAGINATION_DATA_DEFAULTS.PAGE_INDEX;
368
+ this.total = data?.total || 0;
369
+ }
370
+ }
371
+ const PAGINATION_DATA_DEFAULTS = {
372
+ OPTIONS: [10, 20, 50, 100],
373
+ SIZE: 10,
374
+ PAGE_INDEX: 0
375
+ };
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci11cGdyYWRlLWRhdGEtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2RpMm10L3dpZGdldHMvdXNlci11cGdyYWRlL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3VzZXItdXBncmFkZS91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0QsT0FBTyxFQUFrQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUNMLGNBQWMsRUFJZCxrQkFBa0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQVUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7O0FBU2xGLE1BQU0sT0FBTyw2QkFBNkI7SUFOMUM7UUFPVSxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztR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QUFFRCxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxQixJQUFJLEVBQUUsRUFBRTtJQUNSLFVBQVUsRUFBRSxDQUFDO0NBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBpbmplY3QsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xyXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdHlwZXMvZGF0YS10YWJsZVwiO1xyXG5pbXBvcnQgeyBUYWJsZUZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvdHlwZXMvdGFibGUvZmlsdGVyXCI7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge1xyXG4gIEZJTFRFUl9LRVlfTUFQLFxyXG4gIFVpRmlsdGVyS2V5LFxyXG4gIFVzZXIyVXBncmFkZVN0YXR1c0RUTyxcclxuICBVc2VyU2VhcmNoUGFyYW1zLFxyXG4gIFVzZXJVcGdyYWRlU2VydmljZVxyXG59IGZyb20gXCIuLi91c2VyLXVwZ3JhZGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBERVBFTkRFTkNJRVNfU1RBVFVTLCBTdGF0dXMsIFNUQVRVU19FTlRSSUVTIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC90eXBlcy9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgVXNlclVwZ3JhZGVSZWNvcmQgfSBmcm9tIFwiLi4vdHlwZXMvdXNlci11cGdyYWRlXCI7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2FwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBBR0lOQVRJT05fU0laRV9PUFRJT05TIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9jb25zdGFudHMvYXBwLmNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0ay11c2VyLXVwZ3JhZGUtZGF0YS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItdXBncmFkZS1kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91c2VyLXVwZ3JhZGUtZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclVwZ3JhZGVEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSB1c2VyVXBncmFkZVNlcnZpY2UgPSBpbmplY3QoVXNlclVwZ3JhZGVTZXJ2aWNlKTtcclxuICBwcml2YXRlIGFwaVNlcnZpY2UgPSBpbmplY3QoQVBJU2VydmljZSk7XHJcbiAgcmVhZG9ubHkgU1RBVFVTX0VOVFJJRVMgPSBTVEFUVVNfRU5UUklFUztcclxuICByZWFkb25seSBERVBFTkRFTkNJRVNfU1RBVFVTID0gREVQRU5ERU5DSUVTX1NUQVRVUztcclxuXHJcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJJZCE6IHN0cmluZztcclxuXHJcbiAgY29sdW1ucyE6IFRhYmxlQ29sdW1uW107XHJcbiAgZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICBkYXRhITogTWF0VGFibGVEYXRhU291cmNlPFVzZXJVcGdyYWRlUmVjb3JkPjtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFsnc2VsZWN0JywgJ3VzZXInLCAnc2l0ZScsICdkZXZpY2UnLCAnZGlhbFBsYW5TdGF0dXMnLCAnZGVwZW5kZW5jaWVzJywgJ3VzZXJVcGdyYWRlU3RhdHVzJywgJ3VzZXJVcGdyYWRlTG9hZGVyJ107XHJcbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFVzZXJVcGdyYWRlUmVjb3JkPih0cnVlLCBbXSk7XHJcbiAgZmlsdGVyczogVGFibGVGaWx0ZXJbXSA9IFtdO1xyXG4gIHBhZ2luYXRpb24gPSBuZXcgUGFnaW5hdGlvbkRhdGFEdG8oKTtcclxuICB1c2VyczogVXNlclVwZ3JhZGVSZWNvcmRbXSA9IFtdO1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgc3RhdHVzQ291bnRzOiBhbnkgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVGaWx0ZXJzOiBQYXJ0aWFsPFVzZXJTZWFyY2hQYXJhbXM+ID0ge307XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuY3VzdG9tZXJJZCA9IHRoaXMuY3VzdG9tZXJJZDtcclxuXHJcbiAgICBjb25zdCBzdWJzYzEgPSB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5nZXRVc2VyVXBncmFkZVJlY29yZHModGhpcy5wYWdpbmF0aW9uLnBhZ2VTaXplLCB0aGlzLnBhZ2luYXRpb24ucGFnZUluZGV4LCB0aGlzLmFjdGl2ZUZpbHRlcnMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHJlc3VsdHMuY29udGVudCBhcyBVc2VyVXBncmFkZVJlY29yZFtdXHJcbiAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKHJlY29yZCA9PiB7XHJcbiAgICAgICAgICByZWNvcmQuZGV2aWNlc1dpdGhFeHRlbnNpb25zID0gdGhpcy51c2VyVXBncmFkZVNlcnZpY2UubWFwRGV2aWNlc1dpdGhFeHRlbnNpb25zKHJlY29yZC5kZXZpY2VzLCByZWNvcmQuZGV2aWNlRGV0YWlscyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShyZWNvcmRzKTtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb24udG90YWwgPSByZXN1bHRzLnRvdGFsRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dXBDdXN0b21GaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKHJlY29yZHMpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3Vic2MxKTtcclxuXHJcbiAgICBjb25zdCBzdWJzYzIgPSB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5nZXRVc2VyVXBncmFkZVN0YXR1c0NvdW50cygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzQ291bnRzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNDb3VudHNbJ1JlYWR5J10gPSBzdGF0dXNDb3VudHNbJ1JFQURZJ10gfHwgMDtcclxuICAgICAgICB0aGlzLnN0YXR1c0NvdW50c1snTm90IFJlYWR5J10gPSBzdGF0dXNDb3VudHNbJ05PVF9SRUFEWSddIHx8IDA7XHJcbiAgICAgICAgdGhpcy5zdGF0dXNDb3VudHNbJ0NvbXBsZXRlZCddID0gc3RhdHVzQ291bnRzWydDT01QTEVURUQnXSB8fCAwO1xyXG4gICAgICAgIHRoaXMuc3RhdHVzQ291bnRzWydGYWlsZWQnXSA9IHN0YXR1c0NvdW50c1snRkFJTEVEJ10gfHwgMDtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YnNjMik7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk11bHRpcGxlRGV2aWNlcyh1c2VyOiBVc2VyVXBncmFkZVJlY29yZCk6IHZvaWQge1xyXG4gICAgdXNlci5zaG93RGV2aWNlcyA9ICF1c2VyLnNob3dEZXZpY2VzO1xyXG4gIH1cclxuXHJcbiAgcGFnZUV2ZW50IChldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIGdldFNpdGVVcGdyYWRlU3RhdHVzQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChzdGF0dXMudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlICdyZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdzdGF0dXMtcmVhZHknO1xyXG4gICAgICBjYXNlICdwYXJ0aWFsIHJlYWR5JzpcclxuICAgICAgICByZXR1cm4gJ3BhcnRpYWwtcmVhZHknO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxyXG4gICAgICAgIHJldHVybiAnY29tcGxldGVkJztcclxuICAgICAgY2FzZSAnZmFpbGVkJzpcclxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XHJcbiAgICAgIGNhc2UgJ25vdCByZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdub3QtcmVhZHknO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVBlclBhZ2VOdW1iZXIocGFnZVNpemVFdmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUgPSBwYWdlU2l6ZUV2ZW50LnZhbHVlO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YShwYXJhbXM/OiBVc2VyU2VhcmNoUGFyYW1zKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHN1YnNjMSA9IHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLmdldFVzZXJVcGdyYWRlUmVjb3Jkcyh0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUsIHRoaXMucGFnaW5hdGlvbi5wYWdlSW5kZXgsIHBhcmFtcyB8fCB7fSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBjb25zdCByZWNvcmRzID0gcmVzdWx0LmNvbnRlbnQgYXMgVXNlclVwZ3JhZGVSZWNvcmRbXVxyXG4gICAgICAgIHJlY29yZHMuZm9yRWFjaChyZWNvcmQgPT4ge1xyXG4gICAgICAgICAgcmVjb3JkLmRldmljZXNXaXRoRXh0ZW5zaW9ucyA9IHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLm1hcERldmljZXNXaXRoRXh0ZW5zaW9ucyhyZWNvcmQuZGV2aWNlcywgcmVjb3JkLmRldmljZURldGFpbHMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHJlY29yZHMpO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi50b3RhbCA9IHJlc3VsdC50b3RhbEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YnNjMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVGaWx0ZXJzKHJlY29yZHM6IFVzZXJVcGdyYWRlUmVjb3JkW10pOiB2b2lkIHtcclxuICAgIGlmICghcmVjb3Jkcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXh0cmFjdCB1bmlxdWUgc2l0ZXMgKHNraXAgZW1wdHkvbnVsbClcclxuICAgIGNvbnN0IHVuaXF1ZVNpdGVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgIHJlY29yZHNcclxuICAgICAgICAgIC5tYXAocmVjb3JkID0+IHJlY29yZC5zaXRlTmFtZT8udHJpbSgpKVxyXG4gICAgICAgICAgLmZpbHRlcigoc2l0ZSk6IHNpdGUgaXMgc3RyaW5nID0+ICEhc2l0ZSlcclxuICAgICAgKVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzaXRlT3B0aW9ucyA9IHVuaXF1ZVNpdGVzLm1hcChzaXRlID0+ICh7XHJcbiAgICAgIGxhYmVsOiBzaXRlLFxyXG4gICAgICB2YWx1ZTogc2l0ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKVxyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgdW5pcXVlIHN0YXR1c2VzIChza2lwIGVtcHR5L251bGwpXHJcbiAgICBjb25zdCB1bmlxdWVTdGF0dXNlcyA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICByZWNvcmRzXHJcbiAgICAgICAgICAubWFwKHJlY29yZCA9PiByZWNvcmQudXBncmFkZVN0YXR1cz8udHJpbSgpKVxyXG4gICAgICAgICAgLmZpbHRlcigoc3RhdHVzKTogc3RhdHVzIGlzIHN0cmluZyA9PiAhIXN0YXR1cylcclxuICAgICAgKVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBzdGF0dXNPcHRpb25zID0gdW5pcXVlU3RhdHVzZXMubWFwKHN0YXR1cyA9PiAoe1xyXG4gICAgICBsYWJlbDogU1RBVFVTX0VOVFJJRVNbc3RhdHVzXSxcclxuICAgICAgdmFsdWU6IHN0YXR1cy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVycyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAndXNlck5hbWUnLFxyXG4gICAgICAgIHR5cGU6ICdzZWFyY2gnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1VzZXInLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoIHVzZXJzLi4uJyxcclxuICAgICAgICBvcHRpb25zOiBbXVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIGlmIChzaXRlT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgIGlkOiAnc2l0ZXMnLFxyXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1NpdGUnLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2l0ZXMnLFxyXG4gICAgICAgIG9wdGlvbnM6IHNpdGVPcHRpb25zXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdGF0dXNPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XHJcbiAgICAgICAgaWQ6ICdzdGF0dXMnLFxyXG4gICAgICAgIHR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGNvbHVtbktleTogJ1VzZXIgVXBncmFkZSBTdGF0dXMnLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnVXBncmFkZSBTdGF0dXMnLFxyXG4gICAgICAgIG9wdGlvbnM6IHN0YXR1c09wdGlvbnNcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xyXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGE/LmRhdGEubGVuZ3RoID8/IDA7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xyXG4gIG1hc3RlclRvZ2dsZSgpIHtcclxuICAgIC8vIHRoaXMuaXNBbGxTZWxlY3RlZCgpID9cclxuICAgIC8vICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6XHJcbiAgICAvLyAgIHRoaXMuZGF0YT8uZGF0YS5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YT8uZGF0YS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgaWYgKHJvdy51cGdyYWRlU3RhdHVzID09PSAnUkVBRFknKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGdyYWRlVXNlcih1c2VyOiBVc2VyVXBncmFkZVJlY29yZCk6IHZvaWQge1xyXG4gICAgaWYgKHVzZXI/LnVwZ3JhZGVTdGF0dXMgPT09ICdSRUFEWScpXHJcbiAgICAgIHVzZXIucGVuZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5jb2xsZWN0VXNlcnMoW3VzZXJdKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMudXNlclVwZ3JhZGVTZXJ2aWNlLmJ1bGtVcGdyYWRlKFt1c2VyXSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJzU3RhdHVzQWZ0ZXJVcGdyYWRlKFt1c2VyXSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2Vyc1N0YXR1c0FmdGVyVXBncmFkZSh1c2VyczogVXNlclVwZ3JhZGVSZWNvcmRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuZ2V0VXNlcnNVcGdyYWRlU3RhdHVzZXModXNlcnMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodXBncmFkZWRTdGF0dXNlczogVXNlcjJVcGdyYWRlU3RhdHVzRFRPW10pID0+IHtcclxuICAgICAgICB1cGdyYWRlZFN0YXR1c2VzLmZvckVhY2goc3RhdHVzSXRlbSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbmQgPSB0aGlzLmdldFVzZXJJbmRleChzdGF0dXNJdGVtLnVzZXJJZCk7XHJcbiAgICAgICAgICBpZiAoaW5kID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmRhdGFbaW5kXS51cGdyYWRlU3RhdHVzID0gc3RhdHVzSXRlbS51cGdyYWRlU3RhdHVzO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuZGF0YVtpbmRdLnBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckluZGV4KHVzZXJJZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuZGF0YS5maW5kSW5kZXgoKHJlY29yZDogVXNlclVwZ3JhZGVSZWNvcmQpID0+IHJlY29yZC51c2VySWQgPT09IHVzZXJJZCk7XHJcbiAgfVxyXG5cclxuICB1cGdyYWRlU2VsZWN0ZWRVc2VycygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnVzZXJVcGdyYWRlU2VydmljZS5jb2xsZWN0VXNlcnModGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuYnVsa1VwZ3JhZGUodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVVc2Vyc1N0YXR1c0FmdGVyVXBncmFkZSh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyVXBncmFkZVNlcnZpY2UuYnVsa1VwZ3JhZGUodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJWYWx1ZShpbnB1dDogYW55KTogYW55IHtcclxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC52YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gaW5wdXQudmFsdWU7ICAgICAgLy8gZS5nLiB7dmFsdWUsbGFiZWx9XHJcbiAgICBpZiAoaW5wdXQgJiYgaW5wdXQudGFyZ2V0KSByZXR1cm4gaW5wdXQudGFyZ2V0LnZhbHVlOyAgICAgICAgICAgIC8vIERPTSBldmVudFxyXG4gICAgcmV0dXJuIGlucHV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFpbiB2YWx1ZVxyXG4gIH1cclxuICBwcml2YXRlIGlzRW1wdHlGaWx0ZXIodjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBzID0gdi50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIHMgPT09ICcnIHx8IHMgPT09ICdhbGwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXIoZmlsdGVyRXZlbnQ6IHsga2V5OiBVaUZpbHRlcktleTsgdmFsdWU6IGFueSB9KSB7XHJcbiAgICBjb25zdCByYXdLZXkgPSBmaWx0ZXJFdmVudC5rZXk7ICAgICAgICBcclxuICAgIGNvbnN0IHNlcnZlcktleSA9IEZJTFRFUl9LRVlfTUFQW3Jhd0tleV07XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0RmlsdGVyVmFsdWUoZmlsdGVyRXZlbnQudmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IG5leHQ6IFBhcnRpYWw8VXNlclNlYXJjaFBhcmFtcz4gPSB7IC4uLnRoaXMuYWN0aXZlRmlsdGVycyB9OyAgICBcclxuXHJcbiAgICBpZiAodGhpcy5pc0VtcHR5RmlsdGVyKHZhbHVlKSkge1xyXG4gICAgICBkZWxldGUgbmV4dFtzZXJ2ZXJLZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gbm9ybWFsaXplIHRvIHN0cmluZyBmb3IgQVBJICh0cmltKVxyXG4gICAgICBuZXh0W3NlcnZlcktleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcnMgPSBuZXh0O1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2VJbmRleCA9IDA7XHJcblxyXG4gICAgLy8gcXVpY2sgZml4IGZvciBkZW1vXHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzWyd1cGdyYWRlU3RhdHVzJ10pIHtcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzWyd1cGdyYWRlU3RhdHVzJ10gPSB0aGlzLmFjdGl2ZUZpbHRlcnNbJ3VwZ3JhZGVTdGF0dXMnXT8udG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldERhdGEodGhpcy5hY3RpdmVGaWx0ZXJzIGFzIFVzZXJTZWFyY2hQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLypvbkZpbHRlcihmaWx0ZXJFdmVudDogeyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9KSB7XHJcbiAgICBjb25zdCB7a2V5LCB2YWx1ZX0gPSBmaWx0ZXJFdmVudDtcclxuXHJcbiAgICBsZXQgZmlsdGVyVmFsdWU6IGFueTtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZpbHRlclZhbHVlID0gdmFsdWUudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnRhcmdldCkge1xyXG4gICAgICBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRhcmdldC52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlclZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIFwiQWxsXCIgb3B0aW9uIG9yIGVtcHR5IHZhbHVlcyAtIHJlbW92ZSB0aGUgZmlsdGVyXHJcbiAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICdhbGwnIHx8ICFmaWx0ZXJWYWx1ZSB8fCBmaWx0ZXJWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlRmlsdGVyc1trZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzW2tleV0gPSBmaWx0ZXJWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gIH0qL1xyXG5cclxuICBwcml2YXRlIHNldHVwQ3VzdG9tRmlsdGVyKCkge1xyXG4gICAgdGhpcy5kYXRhLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBKU09OLnBhcnNlKGZpbHRlciB8fCAne30nKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgY29udGludWU7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICBjYXNlICdVc2VyJzpcclxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9ICh2YWx1ZSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS51c2VyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnU2l0ZSc6XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNpdGVOYW1lICE9PSB0aGlzLmdldFNpdGVOYW1lRnJvbVZhbHVlKHZhbHVlIGFzIHN0cmluZykpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdVc2VyIFVwZ3JhZGUgU3RhdHVzJzpcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoZXNVcGdyYWRlU3RhdHVzKGRhdGEudXBncmFkZVN0YXR1cywgdmFsdWUgYXMgc3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5kYXRhLmZpbHRlciA9IEpTT04uc3RyaW5naWZ5KHRoaXMuYWN0aXZlRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlsdGVyZWREYXRhQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmZpbHRlcmVkRGF0YT8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNpdGVOYW1lRnJvbVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gU2luY2Ugd2UncmUgbm93IHVzaW5nIGFjdHVhbCBzaXRlIG5hbWVzLCBqdXN0IGNvbnZlcnQgYmFjayBmcm9tIHNsdWcgZm9ybWF0XHJcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJy0nKS5tYXAod29yZCA9PlxyXG4gICAgICB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxyXG4gICAgKS5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hdGNoZXNVcGdyYWRlU3RhdHVzKHN0YXR1czogc3RyaW5nLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAvLyBIYW5kbGUgZGlyZWN0IHN0YXR1cyBtYXRjaGluZyBmb3IgY2xlYW5lciBpbXBsZW1lbnRhdGlvblxyXG4gICAgcmV0dXJuIHN0YXR1cy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKSA9PT0gZmlsdGVyVmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1c0NsYXNzKHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoc3RhdHVzLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSAncmVhZHknOlxyXG4gICAgICAgIHJldHVybiAncmVhZHknO1xyXG4gICAgICBjYXNlICdub3QgcmVhZHknOlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgICAgY2FzZSAncGFydGlhbCByZWFkeSc6XHJcbiAgICAgICAgcmV0dXJuICdwYXJ0aWFsLXJlYWR5JztcclxuICAgICAgY2FzZSAnY29tcGxldGVkJzpcclxuICAgICAgICByZXR1cm4gJ2NvbXBsZXRlZCc7XHJcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XHJcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbm90LXJlYWR5JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBQQUdJTkFUSU9OX1NJWkVfT1BUSU9OUztcclxufVxyXG5cclxuaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhRHRvSW50ZXJmYWNlIHtcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW107XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuICBwYWdlSW5kZXg6IG51bWJlcjtcclxufVxyXG5jbGFzcyBQYWdpbmF0aW9uRGF0YUR0byB7XHJcbiAgdG90YWwhOiBudW1iZXI7XHJcbiAgcGFnZVNpemVPcHRpb25zITogbnVtYmVyW107XHJcbiAgcGFnZVNpemUhOiBudW1iZXI7XHJcbiAgcGFnZUluZGV4ITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihkYXRhPzogUGFnaW5hdGlvbkRhdGFEdG9JbnRlcmZhY2UpIHtcclxuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gZGF0YT8ucGFnZVNpemVPcHRpb25zIHx8IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUy5PUFRJT05TO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IGRhdGE/LnBhZ2VTaXplIHx8IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUy5TSVpFO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBkYXRhPy5wYWdlSW5kZXggfHwgUEFHSU5BVElPTl9EQVRBX0RFRkFVTFRTLlBBR0VfSU5ERVg7XHJcbiAgICB0aGlzLnRvdGFsID0gZGF0YT8udG90YWwgfHwgMDtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBR0lOQVRJT05fREFUQV9ERUZBVUxUUyA9IHtcclxuICBPUFRJT05TOiBbMTAsIDIwLCA1MCwgMTAwXSxcclxuICBTSVpFOiAxMCxcclxuICBQQUdFX0lOREVYOiAwXHJcbn07XHJcbiIsIjxkaXYgKm5nSWY9XCJkYXRhUGVuZGluZ1wiIGNsYXNzPVwib3ZlcmxheVwiPlxyXG4gIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgY2xhc3M9XCJwYWdlLXNwaW5uZXJcIlxyXG4gICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgW2RpYW1ldGVyXT1cIjcwXCJcclxuICAgIHN0cm9rZVdpZHRoPVwiM1wiXHJcbiAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGlkPVwidXNlclVwZ3JhZGVEYXRhVGFibGVcIiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLXVwZ3JhZGUtc3RhdHVzLXdyYXBwZXJcIj5cclxuICAgICAgICA8dGstc3VtbWFyeS1jYXJkIFtkZXNjcmlwdGlvbl09XCInVXNlcnMgYXJlIHJlYWR5IHRvIHVwZ3JhZGUnXCIgW3ZhbHVlXT1cInN0YXR1c0NvdW50c1snUmVhZHknXVwiPjwvdGstc3VtbWFyeS1jYXJkPlxyXG4gICAgICAgIDx0ay1zdW1tYXJ5LWNhcmQgW2Rlc2NyaXB0aW9uXT1cIidVc2VycyBhcmUgbm90IHJlYWR5J1wiIFt2YWx1ZV09XCJzdGF0dXNDb3VudHNbJ05vdCBSZWFkeSddXCIgW3N0YXR1c109XCInTm90IFJlYWR5J1wiPjwvdGstc3VtbWFyeS1jYXJkPlxyXG4gICAgICAgIDx0ay1zdW1tYXJ5LWNhcmQgW2Rlc2NyaXB0aW9uXT1cIidVc2VycyBmYWlsZWQgdG8gdXBncmFkZSdcIiBbdmFsdWVdPVwic3RhdHVzQ291bnRzWydGYWlsZWQnXVwiIFtzdGF0dXNdPVwiJ0ZhaWxlZCdcIj48L3RrLXN1bW1hcnktY2FyZD5cclxuICAgICAgICA8dGstc3VtbWFyeS1jYXJkIFtkZXNjcmlwdGlvbl09XCInU3VjY2Vzc2Z1bGx5IHVwZ3JhZGVkJ1wiIFt2YWx1ZV09XCJzdGF0dXNDb3VudHNbJ0NvbXBsZXRlZCddXCIgW3N0YXR1c109XCInQ29tcGxldGVkJ1wiPjwvdGstc3VtbWFyeS1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtYWN0aW9uLXBhbmVsXCI+XHJcbiAgICAgICAgPHRrLXRhYmxlLWZpbHRlcnMgKm5nSWY9XCJmaWx0ZXJzLmxlbmd0aCA+IDBcIiBbZmlsdGVyc109XCJmaWx0ZXJzXCIgKGZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCI+PC90ay10YWJsZS1maWx0ZXJzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8c3Bhbj57e2ZpbHRlcmVkRGF0YUNvdW50fX0gVXNlcnM8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXBncmFkZS1idWxrLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZ3JhZGVTZWxlY3RlZFVzZXJzKClcIj5cclxuICAgICAgICAgICAgICAgIFVwZ3JhZGUge3sgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/ICcnIDogJygnICsgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCArICcpJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJkYXRhXCIgY2xhc3M9XCJ1c2VyLXVwZ3JhZGUtdGFibGVcIj5cclxuXHJcbiAgICAgICAgPCEtLSBDaGVja2JveCBDb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIj5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IG1hc3RlclRvZ2dsZSgpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJTVEFUVVNfRU5UUklFU1tyb3cudXBncmFkZVN0YXR1c10gIT09ICdSZWFkeScgfHwgcm93LnBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBVc2VyIENvbHVtbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVzZXJcIj5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5Vc2VyPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1uYW1lXCI+e3tlbGVtZW50LnVzZXJOYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1lbWFpbFwiPnt7ZWxlbWVudC51c2VyTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBTaXRlIENvbHVtbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNpdGVcIj5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5TaXRlPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXRlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yXCIgW25nQ2xhc3NdPVwiZ2V0U2l0ZVVwZ3JhZGVTdGF0dXNDbGFzcyhlbGVtZW50LnVwZ3JhZGVTdGF0dXMpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZWxlbWVudC5zaXRlTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRGV2aWNlIENvbHVtbiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRldmljZVwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJkZXZpY2UtdGRcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+RGV2aWNlPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIiBjbGFzcz1cIm11bHRpLWRldi1ib3hcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZWxlbWVudC5zaG93RGV2aWNlc1wiIGNsYXNzPVwiZGV2aWNlLWxpc3Qgc2hvdy1kZXYtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGV2aWNlIG9mIGVsZW1lbnQuZGV2aWNlc1dpdGhFeHRlbnNpb25zOyBsZXQgbGFzdCA9IGxhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRldmljZS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5vLWJvcmRlcl09XCJsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2aWNlLWluZGljYXRvclwiIFtuZ0NsYXNzXT1cInsnZGV2aWNlLWluZGljYXRvci1yZWFkeSc6IGVsZW1lbnQuZGV2aWNlU3RhdHVzID09PSAnUkVBRFknfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXZpY2UtbmFtZVwiPnt7IGRldmljZS5kZXZpY2VOYW1lIHx8IGRldmljZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXZpY2UtbW9kZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkZXZpY2UuZXh0ZW5zaW9ucz8ubGVuZ3RoID8gJ0V4dDogJyArIGRldmljZS5leHRlbnNpb25zLmpvaW4oXCIsIFwiKSA6ICdObyBFeHRlbnNpb24nIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldmljZS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpcGxlLWRldi1saW5rXCIgKm5nSWY9XCJlbGVtZW50LmRldmljZXNXaXRoRXh0ZW5zaW9ucz8ubGVuZ3RoID4gMTsgZWxzZSBvbmVEZXZpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldmljZS1uYW1lLXdyYXBwZXIgY2xpY2thYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk11bHRpcGxlRGV2aWNlcyhlbGVtZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25NdWx0aXBsZURldmljZXMoZWxlbWVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRldmljZS1uYW1lXCI+TXVsdGlwbGUgZGV2aWNlcyA+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvbmVEZXZpY2U+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldmljZS1uYW1lLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2aWNlLWluZGljYXRvclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGV2aWNlLW5hbWVcIj57e2VsZW1lbnQuZGV2aWNlc1dpdGhFeHRlbnNpb25zWzBdLmRldmljZU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV2aWNlLW1vZGVsIG9uZS1kZXYtZXh0ZW5zaW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZWxlbWVudC5kZXZpY2VzV2l0aEV4dGVuc2lvbnNbMF0uZXh0ZW5zaW9ucz8ubGVuZ3RoID9cclxuICAgICAgICAgICAgICAgICAgICAgICdFeHQ6ICcgKyBlbGVtZW50LmRldmljZXNXaXRoRXh0ZW5zaW9uc1swXS5leHRlbnNpb25zPy5qb2luKFwiLCBcIikgOiAnTm8gRXh0ZW5zaW9uJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRGlhbCBQbGFuIFN0YXR1cyBDb2x1bW4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJkaWFsUGxhblN0YXR1c1wiPlxyXG4gICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkRpYWwgUGxhbiBTdGF0dXM8L3RoPlxyXG4gICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQ2xhc3MoZWxlbWVudC5kaWFsUGxhblN0YXR1cylcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnc3RhdHVzLXJlYWR5JzogZWxlbWVudC5kaWFsUGxhblN0YXR1cyA9PT0gJ1JFQURZJ31cIj57e1NUQVRVU19FTlRSSUVTW2VsZW1lbnQuZGlhbFBsYW5TdGF0dXNdfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBEZXBlbmRlbmNpZXMgQ29sdW1uIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGVwZW5kZW5jaWVzXCI+XHJcbiAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+RGVwZW5kZW5jaWVzPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiREVQRU5ERU5DSUVTX1NUQVRVU1tlbGVtZW50LmRlcGVuZGVuY2llc1N0YXR1c10gPT09ICdEZXBlbmRlbmNpZXMgZm91bmQnXCIgY2xhc3M9XCJkZXBlbmRlbmNpZXMtdGV4dFwiPnt7REVQRU5ERU5DSUVTX1NUQVRVU1tlbGVtZW50LmRlcGVuZGVuY2llc1N0YXR1c119fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiREVQRU5ERU5DSUVTX1NUQVRVU1tlbGVtZW50LmRlcGVuZGVuY2llc1N0YXR1c10gPT09ICdObyBkZXBlbmRlbmNpZXMnXCI+4oCUPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIFVzZXIgVXBncmFkZSBTdGF0dXMgQ29sdW1uIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidXNlclVwZ3JhZGVTdGF0dXNcIj5cclxuICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5Vc2VyIFVwZ3JhZGUgU3RhdHVzPC90aD5cclxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGdyYWRlLXN0YXR1cy1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNUQVRVU19FTlRSSUVTW2VsZW1lbnQudXBncmFkZVN0YXR1c10gPT09ICdSZWFkeSc7IGVsc2Ugc3RhdHVzQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwidXBncmFkZS1idXR0b25cIiAoY2xpY2spPVwidXBncmFkZVVzZXIoZWxlbWVudClcIj5VcGdyYWRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGF0dXNCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1cy1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pbmRpY2F0b3JcIiBbbmdDbGFzc109XCJnZXRTdGF0dXNDbGFzcyhlbGVtZW50LnVwZ3JhZGVTdGF0dXMpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tTVEFUVVNfRU5UUklFU1tlbGVtZW50LnVwZ3JhZGVTdGF0dXNdfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInVzZXJVcGdyYWRlTG9hZGVyXCI+XHJcbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj48L3RoPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1wcm9ncmVzcy1zcGlubmVyLXRkXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxyXG5cclxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgICAqbmdJZj1cImVsZW1lbnQucGVuZGluZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtc3Bpbm5lclwiXHJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCI+XHJcbiAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxyXG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1yb3ddPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiPjwvdHI+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhcHAtcGFnaW5hdGlvblwiPlxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICBbbGVuZ3RoXT1cInBhZ2luYXRpb24udG90YWxcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2luYXRpb24ucGFnZVNpemVcIlxyXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICBbcGFnZUluZGV4XT1cInBhZ2luYXRpb24ucGFnZUluZGV4XCJcclxuICAgIChwYWdlKT1cInBhZ2VFdmVudCgkZXZlbnQpXCJcclxuICAgIHNob3dGaXJzdExhc3RCdXR0b25zPlxyXG4gIDwvbWF0LXBhZ2luYXRvcj5cclxuXHJcbiAgPCEtLTxkaXYgY2xhc3M9XCJwYWdlLWluZGV4ZXMtYm94XCI+XHJcbiAgICA8bWF0LXBhZ2luYXRvclxyXG4gICAgICBbaWRdPVwiJ2NvbW1vblBhZ2luYXRpb24nXCJcclxuICAgICAgW2hpZGVQYWdlU2l6ZV09XCJ0cnVlXCJcclxuICAgICAgW2xlbmd0aF09XCJwYWdpbmF0aW9uLnRvdGFsXCJcclxuICAgICAgW3BhZ2VJbmRleF09XCJwYWdpbmF0aW9uLnBhZ2VJbmRleFwiXHJcbiAgICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uLnBhZ2VTaXplXCJcclxuICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0aW9uLnBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAgIChwYWdlKT1cInBhZ2VFdmVudCgkZXZlbnQpXCI+XHJcbiAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJwZXItcGFnZS1ibG9ja1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIml0ZW1fcGVyX3BhZ2VcIj5JdGVtcyBwZXIgcGFnZTo8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYm94IHNlbGVjdC1wYWdlLXNpemVcIj5cclxuICAgICAgPG1hdC1zZWxlY3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VQZXJQYWdlTnVtYmVyKCRldmVudClcIiAjcGFnZVxyXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvbW1vblBhZ2luYXRpb25TZWxlY3QnXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IGxldCBpID0gaW5kZXg7XCIgW2lkXT1cIidwYWdpbmF0aW9uU2VsZWN0T3B0XycgKyBpXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7b3B0aW9ufX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj4tLT5cclxuPC9kaXY+XHJcbiJdfQ==