@microsoft/windows-admin-center-sdk 4.167.0 → 4.232.0

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 (499) hide show
  1. package/angular/esm2020/src/controls/accordion/accordion-panel/accordion-panel.component.mjs +36 -12
  2. package/angular/esm2020/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.mjs +59 -0
  3. package/angular/esm2020/src/controls/form/form-field/array/array-form-field.component.mjs +24 -35
  4. package/angular/esm2020/src/controls/form/form-field/form-field-accessibility-manager-base.service.mjs +105 -0
  5. package/angular/esm2020/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.mjs +38 -0
  6. package/angular/esm2020/src/controls/form/form-field/list/list-form-field.component.mjs +56 -38
  7. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.mjs +54 -0
  8. package/angular/esm2020/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.mjs +67 -67
  9. package/angular/esm2020/src/controls/form/forms.module.mjs +19 -2
  10. package/angular/esm2020/src/controls/page-alert-bar/page-alert-bar.component.mjs +4 -4
  11. package/angular/esm2020/src/controls/snap-in-extension/snap-in-extension.component.mjs +1 -1
  12. package/angular/esm2020/src/controls/wizard/models/wizard-step-snap-in-output.mjs +1 -1
  13. package/angular/esm2020/src/controls/wizard-lite/wizard-navigation-button/wizard-navigation-button.component.mjs +3 -3
  14. package/angular/esm2020/src/data/extension-broker/snap-in-listener.mjs +80 -0
  15. package/angular/esm2020/src/data/index.mjs +2 -1
  16. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs +539 -167
  17. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  18. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs +521 -167
  19. package/angular/fesm2020/microsoft-windows-admin-center-sdk-angular.mjs.map +1 -1
  20. package/angular/src/controls/accordion/accordion-panel/accordion-panel.component.d.ts +13 -4
  21. package/angular/src/controls/form/form-field/array/array-form-field-accessibility-manager.service.d.ts +38 -0
  22. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +3 -1
  23. package/angular/src/controls/form/form-field/form-field-accessibility-manager-base.service.d.ts +37 -0
  24. package/angular/src/controls/form/form-field/list/list-form-field-accessibility-manager.service.d.ts +25 -0
  25. package/angular/src/controls/form/form-field/list/list-form-field.component.d.ts +12 -2
  26. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field-accessibility-manager.service.d.ts +37 -0
  27. package/angular/src/controls/form/form-field/ordered-list/ordered-list-form-field.component.d.ts +12 -8
  28. package/angular/src/controls/wizard/models/wizard-step-snap-in-output.d.ts +1 -1
  29. package/{core → angular/src}/data/extension-broker/snap-in-listener.d.ts +49 -46
  30. package/angular/src/data/index.d.ts +1 -0
  31. package/core/async/cancellation.js +312 -0
  32. package/core/async/index.js +312 -0
  33. package/core/async/progress.js +312 -0
  34. package/core/azure/azure-constants.js +312 -0
  35. package/core/azure/azure-logging.js +312 -0
  36. package/core/azure/azure-manager.js +312 -0
  37. package/core/azure/models/aadAppConfig-data.js +312 -0
  38. package/core/azure/models/azureArcStatusEnum.js +312 -0
  39. package/core/azure/models/azureTokenResult-data.js +312 -0
  40. package/core/azure/resources/deployment-operation-request-body.js +312 -0
  41. package/core/azure/resources/deployment-operation-response.js +312 -0
  42. package/core/azure/resources/location-data.js +315 -0
  43. package/core/azure/resources/resource-group-data.js +312 -0
  44. package/core/azure/resources/subscription-data.js +312 -0
  45. package/core/base/data-store/browser-storage-data-store.js +315 -0
  46. package/core/base/data-store/cached-data-store.js +312 -0
  47. package/core/base/data-store/data-store.js +312 -0
  48. package/core/base/data-store/local-data-store.js +312 -0
  49. package/core/base/data-store/memory-data-store.js +312 -0
  50. package/core/base/data-store/session-data-store.js +312 -0
  51. package/core/base/date/date-like.js +312 -0
  52. package/core/base/date/date-range.js +312 -0
  53. package/core/base/date/date-time.js +312 -0
  54. package/core/base/date/date-type.js +312 -0
  55. package/core/base/date/time-unit.js +312 -0
  56. package/core/base/decorators/base.js +312 -0
  57. package/core/base/decorators/debounce.decorators.js +312 -0
  58. package/core/base/decorators/delay.decorator.js +315 -0
  59. package/core/base/decorators/yield.decorator.js +312 -0
  60. package/core/base/environment.js +312 -0
  61. package/core/base/json.js +312 -0
  62. package/core/base/msft-sme.mock.js +316 -0
  63. package/core/base/polyfills/array.js +315 -0
  64. package/core/base/polyfills/string.js +312 -0
  65. package/core/base/rxjs-lifetime-manager.js +312 -0
  66. package/core/base/utilities.js +312 -0
  67. package/core/base/versioned-object.js +312 -0
  68. package/core/data/accessibility-manager.js +312 -0
  69. package/core/data/active-directory/active-directory.js +312 -0
  70. package/core/data/active-directory/models/account-info.js +312 -0
  71. package/core/data/active-directory/models/active-directory-search-options.js +312 -0
  72. package/core/data/active-directory/models/search-type.js +312 -0
  73. package/core/data/animation.js +312 -0
  74. package/core/data/app-context.js +312 -0
  75. package/core/data/asset-manager.js +315 -0
  76. package/core/data/base64-array-buffer.js +312 -0
  77. package/core/data/batch-connection.js +312 -0
  78. package/core/data/cim-connection.js +312 -0
  79. package/core/data/cim-stream.js +312 -0
  80. package/core/data/cim.js +312 -0
  81. package/core/data/column-picker.js +312 -0
  82. package/core/data/cookie.js +312 -0
  83. package/core/data/core-environment.js +315 -0
  84. package/core/data/crypto.js +312 -0
  85. package/core/data/deployment-share.js +312 -0
  86. package/core/data/disposable.js +312 -0
  87. package/core/data/electron.js +315 -0
  88. package/core/data/error-extended.js +312 -0
  89. package/core/data/extension-broker/dialog-listener.js +312 -0
  90. package/core/data/extension-broker/extension-broker.js +312 -0
  91. package/core/data/extension-broker/extension-listener.js +312 -0
  92. package/core/data/extension-broker/model/extension-broker-request-payload.js +312 -0
  93. package/core/data/extension-broker/model/extension-broker-response-error.js +312 -0
  94. package/core/data/extension-broker/model/extension-broker-response-payload.js +312 -0
  95. package/core/data/extension-broker/model/extension-entries.js +315 -0
  96. package/core/data/extension-broker/model/extension-instance.js +315 -0
  97. package/core/data/extension-broker/model/extension-rect.js +312 -0
  98. package/core/data/extension-broker/model/extension-search-options.js +312 -0
  99. package/core/data/extension-broker/service-listener.js +312 -0
  100. package/core/data/extension-broker/worker-listener.js +312 -0
  101. package/core/data/extension-broker/worker-set.js +312 -0
  102. package/core/data/file-transfer.js +312 -0
  103. package/core/data/gateway-connection.js +312 -0
  104. package/core/data/gateway-status.js +312 -0
  105. package/core/data/gateway-url-builder.js +312 -0
  106. package/core/data/gateway-url-translator.js +316 -0
  107. package/core/data/gateway-urls.js +312 -0
  108. package/core/data/globalization.js +315 -0
  109. package/core/data/http-constants.js +315 -0
  110. package/core/data/http.js +312 -0
  111. package/core/data/jobs/jobs-manager.js +312 -0
  112. package/core/data/jobs/models/job-credentials.js +312 -0
  113. package/core/data/jobs/models/job-node.js +312 -0
  114. package/core/data/jobs/models/job-paginated-response.js +315 -0
  115. package/core/data/jobs/models/job-pagination-options.js +315 -0
  116. package/core/data/jobs/models/job.js +312 -0
  117. package/core/data/jobs/models/node-job.js +312 -0
  118. package/core/data/jobs/models/powershell-job.js +312 -0
  119. package/core/data/language.js +315 -0
  120. package/core/data/lifetime-data.js +312 -0
  121. package/core/data/localization-manager.js +312 -0
  122. package/core/data/native-q.js +312 -0
  123. package/core/data/net.d.ts.map +1 -1
  124. package/core/data/net.js +313 -1
  125. package/core/data/net.js.map +1 -1
  126. package/core/data/node-connection.d.ts.map +1 -1
  127. package/core/data/node-connection.js +312 -0
  128. package/core/data/node-connection.js.map +1 -1
  129. package/core/data/node-extension-install.js +312 -0
  130. package/core/data/powershell-alternate.js +312 -0
  131. package/core/data/powershell-batch.js +312 -0
  132. package/core/data/powershell-connection.js +312 -0
  133. package/core/data/powershell-crypto.js +312 -0
  134. package/core/data/powershell-stream.js +312 -0
  135. package/core/data/powershell.js +312 -0
  136. package/core/data/query-cache.js +312 -0
  137. package/core/data/resource-cache.js +312 -0
  138. package/core/data/schedule-reboot.js +312 -0
  139. package/core/data/settings-manager.js +312 -0
  140. package/core/data/settings-manger.mock.js +312 -0
  141. package/core/data/sme-extension.js +312 -0
  142. package/core/data/ssh-stream.js +312 -0
  143. package/core/data/units.js +312 -0
  144. package/core/data/uri-builder.js +315 -0
  145. package/core/data/wdac-operations.js +312 -0
  146. package/core/data/websocket-stream.js +312 -0
  147. package/core/diagnostics/error-monitor.js +312 -0
  148. package/core/diagnostics/log-level.js +312 -0
  149. package/core/diagnostics/log-record.js +312 -0
  150. package/core/diagnostics/logging-constants.js +312 -0
  151. package/core/diagnostics/logging.js +312 -0
  152. package/core/diagnostics/logging.mock.js +312 -0
  153. package/core/diagnostics/sme-web-telemetry-models.js +312 -0
  154. package/core/diagnostics/sme-web-telemetry.d.ts +1 -2
  155. package/core/diagnostics/sme-web-telemetry.d.ts.map +1 -1
  156. package/core/diagnostics/sme-web-telemetry.js +336 -15
  157. package/core/diagnostics/sme-web-telemetry.js.map +1 -1
  158. package/core/diagnostics/telemetry-control-type.js +312 -0
  159. package/core/diagnostics/telemetry-options.js +312 -0
  160. package/core/diagnostics/telemetry-record.js +312 -0
  161. package/core/dom/dom.js +312 -0
  162. package/core/frame/frame-connection.js +312 -0
  163. package/core/frame/frame-connection.mock.js +312 -0
  164. package/core/frame/shell-navigation-connection.js +312 -0
  165. package/core/generated/powershell-scripts.js +312 -0
  166. package/core/generated/strings.js +312 -0
  167. package/core/host/host-core-manager.js +312 -0
  168. package/core/host/host-core-message-type.js +312 -0
  169. package/core/host/host-core-messages.js +312 -0
  170. package/core/index.d.ts +0 -1
  171. package/core/index.d.ts.map +1 -1
  172. package/core/index.js +312 -1
  173. package/core/index.js.map +1 -1
  174. package/core/manifest/environment-modules.js +312 -0
  175. package/core/manifest/manifest-loader.js +312 -0
  176. package/core/notification/client-notification-instance.js +312 -0
  177. package/core/notification/client-notification.js +312 -0
  178. package/core/notification/notification-connection.js +312 -0
  179. package/core/notification/notification-link-type.js +312 -0
  180. package/core/notification/notification-manager.js +312 -0
  181. package/core/notification/notification-message.js +312 -0
  182. package/core/notification/notification-state.js +312 -0
  183. package/core/notification/notification.js +312 -0
  184. package/core/notification/powershell-notification.js +312 -0
  185. package/core/notification/socket-signalr.js +312 -0
  186. package/core/notification/work-item-connection.js +312 -0
  187. package/core/notification/work-item-manager.js +312 -0
  188. package/core/notification/work-item-request.js +312 -0
  189. package/core/performance/performance-profile-data-type.js +312 -0
  190. package/core/performance/performance-profile-data.js +312 -0
  191. package/core/performance/performance-profile-database.js +312 -0
  192. package/core/performance/performance-profile-record.js +312 -0
  193. package/core/performance/performance-profile.d.ts.map +1 -1
  194. package/core/performance/performance-profile.js +321 -9
  195. package/core/performance/performance-profile.js.map +1 -1
  196. package/core/performance/performance-tracker.js +312 -0
  197. package/core/polyfills.js +312 -0
  198. package/core/resources/scripts/public/crypto/Get-DecryptedDataFromNode.ps1 +216 -0
  199. package/core/resources/scripts/public/crypto/Get-EncryptionJWKOnNode.ps1 +216 -0
  200. package/core/resources/scripts/public/inventory/Get-CimWin32LogicalDisk.ps1 +218 -0
  201. package/core/resources/scripts/public/inventory/Get-CimWin32NetworkAdapter.ps1 +216 -0
  202. package/core/resources/scripts/public/inventory/Get-CimWin32PhysicalMemory.ps1 +216 -0
  203. package/core/resources/scripts/public/inventory/Get-CimWin32Processor.ps1 +216 -0
  204. package/core/resources/scripts/public/inventory/Get-ClusterInventory.ps1 +216 -0
  205. package/core/resources/scripts/public/inventory/Get-ClusterNodes.ps1 +216 -0
  206. package/core/resources/scripts/public/inventory/Get-ServerInventory.ps1 +216 -0
  207. package/core/rpc/alive/rpc-alive-client.js +312 -0
  208. package/core/rpc/alive/rpc-alive-handler.js +312 -0
  209. package/core/rpc/alive/rpc-alive-model.js +315 -0
  210. package/core/rpc/alive/rpc-alive-subject-server.js +312 -0
  211. package/core/rpc/alive/rpc-observable-alive-client.js +312 -0
  212. package/core/rpc/alive/rpc-observable-alive-model.js +312 -0
  213. package/core/rpc/alive/rpc-observable-alive-server.js +312 -0
  214. package/core/rpc/azure/rpc-azure-model.js +312 -0
  215. package/core/rpc/azure/rpc-azure-request-client.js +312 -0
  216. package/core/rpc/azure/rpc-azure-request-handler.js +312 -0
  217. package/core/rpc/azure/rpc-azure-request-subject-server.js +312 -0
  218. package/core/rpc/azure/rpc-azure-response-client.js +312 -0
  219. package/core/rpc/azure/rpc-azure-response-handler.js +315 -0
  220. package/core/rpc/credssp/rpc-credssp-model.js +312 -0
  221. package/core/rpc/credssp/rpc-credssp-request-client.js +312 -0
  222. package/core/rpc/credssp/rpc-credssp-request-handler.js +315 -0
  223. package/core/rpc/credssp/rpc-credssp-request-subject-server.js +312 -0
  224. package/core/rpc/credssp/rpc-credssp-response-client.js +312 -0
  225. package/core/rpc/credssp/rpc-credssp-response-handler.js +315 -0
  226. package/core/rpc/dialog/rpc-dialog-client.js +312 -0
  227. package/core/rpc/dialog/rpc-dialog-handler.js +312 -0
  228. package/core/rpc/dialog/rpc-dialog-model.js +312 -0
  229. package/core/rpc/dialog/rpc-dialog-subject-server.js +315 -0
  230. package/core/rpc/electron/rpc-electron-model.js +312 -0
  231. package/core/rpc/electron/rpc-electron-request-client.js +312 -0
  232. package/core/rpc/electron/rpc-electron-request-handler.js +312 -0
  233. package/core/rpc/electron/rpc-electron-request-subject-server.js +312 -0
  234. package/core/rpc/electron/rpc-electron-response-client.js +312 -0
  235. package/core/rpc/electron/rpc-electron-response-handler.js +312 -0
  236. package/core/rpc/elevate/rpc-observable-elevate-client.js +312 -0
  237. package/core/rpc/elevate/rpc-observable-elevate-model.js +312 -0
  238. package/core/rpc/elevate/rpc-observable-elevate-server.js +312 -0
  239. package/core/rpc/error-monitor/rpc-observable-error-monitor-client.js +312 -0
  240. package/core/rpc/error-monitor/rpc-observable-error-monitor-model.js +315 -0
  241. package/core/rpc/error-monitor/rpc-observable-error-monitor-server.js +312 -0
  242. package/core/rpc/extension-broker/rpc-extension-broker-model.js +315 -0
  243. package/core/rpc/extension-broker/rpc-extension-broker-module-request-subject-server.js +315 -0
  244. package/core/rpc/extension-broker/rpc-extension-broker-request-client.js +312 -0
  245. package/core/rpc/extension-broker/rpc-extension-broker-request-handler.js +312 -0
  246. package/core/rpc/extension-broker/rpc-extension-broker-request-subject-server.js +312 -0
  247. package/core/rpc/extension-broker/rpc-extension-broker-response-client.js +312 -0
  248. package/core/rpc/extension-broker/rpc-extension-broker-response-handler.js +312 -0
  249. package/core/rpc/extension-data/rpc-observable-extension-data-client.js +312 -0
  250. package/core/rpc/extension-data/rpc-observable-extension-data-model.js +312 -0
  251. package/core/rpc/extension-data/rpc-observable-extension-data-server.js +312 -0
  252. package/core/rpc/forward/rpc-forward-auto-client.js +312 -0
  253. package/core/rpc/forward/rpc-forward-down-client.js +315 -0
  254. package/core/rpc/forward/rpc-forward-down-handler.js +312 -0
  255. package/core/rpc/forward/rpc-forward-model.js +312 -0
  256. package/core/rpc/forward/rpc-forward-up-client.js +312 -0
  257. package/core/rpc/forward/rpc-forward-up-handler.js +312 -0
  258. package/core/rpc/forward/rpc-forward-up-subject-server.js +312 -0
  259. package/core/rpc/log/rpc-log-client.js +312 -0
  260. package/core/rpc/log/rpc-log-handler.js +312 -0
  261. package/core/rpc/log/rpc-log-model.js +312 -0
  262. package/core/rpc/log/rpc-log-subject-server.js +312 -0
  263. package/core/rpc/notification/rpc-notification-client.js +312 -0
  264. package/core/rpc/notification/rpc-notification-handler.js +312 -0
  265. package/core/rpc/notification/rpc-notification-model.js +312 -0
  266. package/core/rpc/notification/rpc-notification-subject-server.js +312 -0
  267. package/core/rpc/overlay/rpc-overlay-close-client.js +312 -0
  268. package/core/rpc/overlay/rpc-overlay-close-handler.js +312 -0
  269. package/core/rpc/overlay/rpc-overlay-model.js +312 -0
  270. package/core/rpc/overlay/rpc-overlay-open-client.js +315 -0
  271. package/core/rpc/overlay/rpc-overlay-open-handler.js +312 -0
  272. package/core/rpc/overlay/rpc-overlay-open-subject-server.js +312 -0
  273. package/core/rpc/performance/rpc-observable-performance-client.js +312 -0
  274. package/core/rpc/performance/rpc-observable-performance-config-client.js +312 -0
  275. package/core/rpc/performance/rpc-observable-performance-config-server.js +312 -0
  276. package/core/rpc/performance/rpc-observable-performance-model.js +312 -0
  277. package/core/rpc/performance/rpc-observable-performance-server.js +312 -0
  278. package/core/rpc/report/rpc-report-client.js +312 -0
  279. package/core/rpc/report/rpc-report-handler.js +312 -0
  280. package/core/rpc/report/rpc-report-model.js +312 -0
  281. package/core/rpc/report/rpc-report-subject-server.js +315 -0
  282. package/core/rpc/rpc-base.js +312 -0
  283. package/core/rpc/rpc-channel.js +312 -0
  284. package/core/rpc/rpc-forwarder.js +312 -0
  285. package/core/rpc/rpc-inbound-client.js +312 -0
  286. package/core/rpc/rpc-inbound.js +312 -0
  287. package/core/rpc/rpc-manager.js +312 -0
  288. package/core/rpc/rpc-module-subject-server.js +315 -0
  289. package/core/rpc/rpc-observable-client.js +312 -0
  290. package/core/rpc/rpc-observable-request.js +312 -0
  291. package/core/rpc/rpc-observable-result.js +312 -0
  292. package/core/rpc/rpc-observable-server.js +312 -0
  293. package/core/rpc/rpc-outbound-client.js +312 -0
  294. package/core/rpc/rpc-outbound.js +312 -0
  295. package/core/rpc/rpc-subject-server.js +312 -0
  296. package/core/rpc/rpc.js +312 -0
  297. package/core/rpc/seek/rpc-seek-client.js +312 -0
  298. package/core/rpc/seek/rpc-seek-handler.js +315 -0
  299. package/core/rpc/seek/rpc-seek-model.js +312 -0
  300. package/core/rpc/settings/rpc-settings-client.js +315 -0
  301. package/core/rpc/settings/rpc-settings-handler.js +312 -0
  302. package/core/rpc/settings/rpc-settings-model.js +312 -0
  303. package/core/rpc/settings/rpc-settings-subject-server.js +312 -0
  304. package/core/rpc/shell-navigate/rpc-shell-navigate-client.js +312 -0
  305. package/core/rpc/shell-navigate/rpc-shell-navigate-handler.js +312 -0
  306. package/core/rpc/shell-navigate/rpc-shell-navigate-model.js +312 -0
  307. package/core/rpc/shell-navigate/rpc-shell-navigate-subject-server.js +312 -0
  308. package/core/rpc/sme-extension/rpc-sme-extension-model.js +315 -0
  309. package/core/rpc/sme-extension/rpc-sme-extension-request-client.js +312 -0
  310. package/core/rpc/sme-extension/rpc-sme-extension-request-handler.js +312 -0
  311. package/core/rpc/sme-extension/rpc-sme-extension-request-subject-server.js +312 -0
  312. package/core/rpc/sme-extension/rpc-sme-extension-response-client.js +312 -0
  313. package/core/rpc/sme-extension/rpc-sme-extension-response-handler.js +312 -0
  314. package/core/rpc/telemetry/rpc-telemetry-client.js +312 -0
  315. package/core/rpc/telemetry/rpc-telemetry-handler.js +315 -0
  316. package/core/rpc/telemetry/rpc-telemetry-model.js +312 -0
  317. package/core/rpc/telemetry/rpc-telemetry-subject-server.js +312 -0
  318. package/core/rpc/update-data/rpc-update-data-client.js +312 -0
  319. package/core/rpc/update-data/rpc-update-data-handler.js +312 -0
  320. package/core/rpc/update-data/rpc-update-data-model.js +312 -0
  321. package/core/rpc/update-data/rpc-update-data-subject-server.js +312 -0
  322. package/core/rpc/update-theme/rpc-observable-update-theme-client.js +312 -0
  323. package/core/rpc/update-theme/rpc-observable-update-theme-model.js +312 -0
  324. package/core/rpc/update-theme/rpc-observable-update-theme-server.js +312 -0
  325. package/core/rpc/work-item/rpc-work-item-client.js +312 -0
  326. package/core/rpc/work-item/rpc-work-item-handler.js +312 -0
  327. package/core/rpc/work-item/rpc-work-item-model.js +312 -0
  328. package/core/rpc/work-item/rpc-work-item-subject-server.js +312 -0
  329. package/core/rpc/work-item-find/rpc-work-item-find-client.js +312 -0
  330. package/core/rpc/work-item-find/rpc-work-item-find-handler.js +312 -0
  331. package/core/rpc/work-item-find/rpc-work-item-find-model.js +312 -0
  332. package/core/rpc/work-item-find/rpc-work-item-find-subject-server.js +312 -0
  333. package/core/security/active-connection.js +312 -0
  334. package/core/security/authorization-manager.js +312 -0
  335. package/core/security/connection-manager-settings/common-connection-settings.js +315 -0
  336. package/core/security/connection-manager-settings/connection-settings.js +312 -0
  337. package/core/security/connection-manager.js +312 -0
  338. package/core/security/connection-stream.js +312 -0
  339. package/core/security/connection.js +312 -0
  340. package/core/security/credssp-manager.js +312 -0
  341. package/core/security/sign-on-manager.js +312 -0
  342. package/core/security/tag-manager.js +312 -0
  343. package/core/security/tool-condition-validator.js +312 -0
  344. package/core/security/tool-connection-query.js +312 -0
  345. package/core/security/user-principal.js +312 -0
  346. package/core/shared/cluster-inventory/cluster-inventory-cache.js +312 -0
  347. package/core/shared/cluster-inventory/cluster-inventory.js +312 -0
  348. package/core/shared/cluster-inventory/cluster-node-inventory.js +312 -0
  349. package/core/shared/gateway-inventory/gateway-inventory-cache.js +312 -0
  350. package/core/shared/gateway-inventory/gateway-inventory-detail-cache.js +312 -0
  351. package/core/shared/gateway-inventory/gateway-inventory-detail.js +312 -0
  352. package/core/shared/gateway-inventory/gateway-inventory.js +312 -0
  353. package/core/shared/inventory-query-caches.js +312 -0
  354. package/core/shared/server-inventory/server-inventory-cache.js +312 -0
  355. package/core/shared/server-inventory/server-inventory-detail-cache.js +312 -0
  356. package/core/shared/server-inventory/server-inventory-detail.js +315 -0
  357. package/core/shared/server-inventory/server-inventory.js +312 -0
  358. package/core/shared/shared-cache.js +312 -0
  359. package/core/shared/tool-inventory/tool-inventory-cache.js +312 -0
  360. package/core/shared/tool-inventory/tool-inventory.js +312 -0
  361. package/core/special.js +315 -0
  362. package/core/test-utilities/accessibility-tester.js +312 -0
  363. package/core/test-utilities/console.mock.js +312 -0
  364. package/core/test-utilities/jasmine-axe-matcher.js +312 -0
  365. package/core/test-utilities/wait-async.js +312 -0
  366. package/core/test.js +312 -0
  367. package/core/testing.js +312 -0
  368. package/core/workflow/persistent-local-storage.js +312 -0
  369. package/core/workflow/persistent-work-item-apply-state.js +316 -0
  370. package/core/workflow/persistent-work-item-state.js +312 -0
  371. package/core/workflow/persistent-work-item.js +315 -0
  372. package/core/workflow/persistent-workflow-builder.js +312 -0
  373. package/core/workflow/persistent-workflow-context.js +312 -0
  374. package/core/workflow/persistent-workflow-runner.js +312 -0
  375. package/core/workflow/persistent-workflow-snapshot.js +312 -0
  376. package/core/workflow/persistent-workflow-store.js +312 -0
  377. package/core/workflow/persistent-workflow.js +312 -0
  378. package/package.json +4 -4
  379. package/styles/fonts/SegoeUI/Bold/SegoeUIBold-5.27.woff +0 -0
  380. package/styles/fonts/SegoeUI/Light/SegoeUILight-5.27.woff +0 -0
  381. package/styles/fonts/SegoeUI/Normal/SegoeUI-5.27.woff +0 -0
  382. package/styles/fonts/SegoeUI/SemiBold/SegoeUISemiBold-5.27.woff +0 -0
  383. package/styles/fonts/SegoeUI/SemiLight/SegoeUISemiLight-5.27.woff +0 -0
  384. package/styles/fonts/ServMDL2/ServMDL2-4.66.woff +0 -0
  385. package/tools/build/webpack/index-html.transform.js +312 -0
  386. package/tools/build/webpack/shell.index-html.transform.js +312 -0
  387. package/tools/build/webpack/shell.webpack.config.js +312 -0
  388. package/tools/build/webpack/webpack.config.js +312 -0
  389. package/tools/code-formatter/.eslintrc.base.json +2 -1
  390. package/tools/code-formatter/lint.js +312 -0
  391. package/tools/code-formatter/utilities.js +316 -0
  392. package/tools/gulp-doc-generator/index.js +312 -0
  393. package/tools/gulp-manifest-resource/index.js +312 -0
  394. package/tools/gulp-manifest-validator/index.js +312 -0
  395. package/tools/gulp-merge-json-in-folders/index.js +312 -0
  396. package/tools/gulp-merge-json-in-folders/json-merge.js +312 -0
  397. package/tools/gulp-ps-cim/index.js +315 -0
  398. package/tools/gulp-ps-code/index.d.ts.map +1 -1
  399. package/tools/gulp-ps-code/index.js +323 -2
  400. package/tools/gulp-ps-code/index.js.map +1 -1
  401. package/tools/gulp-ps-code/ps-code-convert.js +312 -0
  402. package/tools/gulp-ps-manifest/index.js +312 -0
  403. package/tools/gulp-ps-module/index.d.ts.map +1 -1
  404. package/tools/gulp-ps-module/index.js +327 -3
  405. package/tools/gulp-ps-module/index.js.map +1 -1
  406. package/tools/gulp-ps-resjson/index.js +315 -0
  407. package/tools/gulp-resjson/index.js +315 -0
  408. package/tools/gulp-resjson/resjson-convert.js +312 -0
  409. package/tools/gulp-schema-form/index.js +312 -0
  410. package/tools/gulp-svg-code/index.js +312 -0
  411. package/tools/gulp-svg-code/svg-code-convert.js +312 -0
  412. package/tools/gulp-update-notes-resource/index.js +312 -0
  413. package/tools/module-template/build/increment-package-version.ps1 +216 -0
  414. package/tools/module-template/build/push-incremented-version.ps1 +216 -1
  415. package/tools/module-template/build/update-powershell-code.ps1 +216 -0
  416. package/tools/module-template/gulpfile.ts/common/clean.ts +2 -0
  417. package/tools/module-template/gulpfile.ts/common/pack.ts +17 -5
  418. package/tools/module-template/gulpfile.ts/common/powershell.ts +40 -2
  419. package/tools/pack-nuget/index.d.ts.map +1 -1
  420. package/tools/pack-nuget/index.js +321 -3
  421. package/tools/pack-nuget/index.js.map +1 -1
  422. package/tools/scripts/Invoke-PesterTest.ps1 +216 -0
  423. package/tools/scripts/New-ExtensionPackage.ps1 +373 -6
  424. package/tools/scripts/Search-NonAsciiText.ps1 +216 -0
  425. package/tools/scripts/package-information/README.md +3 -0
  426. package/tools/scripts/package-information/ms-logo.png +0 -0
  427. package/tools/test-runner/index.js +312 -0
  428. package/tools/utilities/index.js +312 -0
  429. package/tools/wac-cli/src/angular15/configs/angular-json-config.js +312 -0
  430. package/tools/wac-cli/src/angular15/configs/ci-build-yml-config.js +315 -0
  431. package/tools/wac-cli/src/angular15/configs/config.js +312 -0
  432. package/tools/wac-cli/src/angular15/configs/eslint-auto-fix-config.js +312 -0
  433. package/tools/wac-cli/src/angular15/configs/git-ignore-config.js +312 -0
  434. package/tools/wac-cli/src/angular15/configs/jasmine-test-config.js +315 -0
  435. package/tools/wac-cli/src/angular15/configs/package-json-config.js +312 -0
  436. package/tools/wac-cli/src/angular15/configs/replace-config.js +315 -0
  437. package/tools/wac-cli/src/angular15/configs/tsconfig-config.js +312 -0
  438. package/tools/wac-cli/src/angular15/configs/ui-test-automation-lagacy-config.js +312 -0
  439. package/tools/wac-cli/src/angular15/main.js +312 -0
  440. package/tools/wac-cli/src/angular15/upgrader/angular-json-upgrader.js +316 -0
  441. package/tools/wac-cli/src/angular15/upgrader/audit/ajax-response-updater.js +312 -0
  442. package/tools/wac-cli/src/angular15/upgrader/audit/css-syntax-error-updater.js +312 -0
  443. package/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.js +312 -0
  444. package/tools/wac-cli/src/angular15/upgrader/audit/error-updater-angular15.js +312 -0
  445. package/tools/wac-cli/src/angular15/upgrader/audit/form-control-updater.js +312 -0
  446. package/tools/wac-cli/src/angular15/upgrader/audit/iif-updater-util.js +312 -0
  447. package/tools/wac-cli/src/angular15/upgrader/audit/load-children-callback-updater.js +315 -0
  448. package/tools/wac-cli/src/angular15/upgrader/audit/log-parser.js +312 -0
  449. package/tools/wac-cli/src/angular15/upgrader/audit/observable-throw-updater.js +312 -0
  450. package/tools/wac-cli/src/angular15/upgrader/audit/parameter-count-violation-updater.js +312 -0
  451. package/tools/wac-cli/src/angular15/upgrader/audit/string-replace-updater.js +312 -0
  452. package/tools/wac-cli/src/angular15/upgrader/audit/subjuct-next-updater-util.js +312 -0
  453. package/tools/wac-cli/src/angular15/upgrader/ci-build-yml-upgrader.js +312 -0
  454. package/tools/wac-cli/src/angular15/upgrader/eslint-auto-fix-upgrader.js +312 -0
  455. package/tools/wac-cli/src/angular15/upgrader/file-replacement-upgrader.js +312 -0
  456. package/tools/wac-cli/src/angular15/upgrader/git-ignore-upgrader.js +312 -0
  457. package/tools/wac-cli/src/angular15/upgrader/jasmine-test-upgrader.js +312 -0
  458. package/tools/wac-cli/src/angular15/upgrader/package-json-upgrader.js +312 -0
  459. package/tools/wac-cli/src/angular15/upgrader/remove-upgrader.js +315 -0
  460. package/tools/wac-cli/src/angular15/upgrader/replace-upgrader.js +312 -0
  461. package/tools/wac-cli/src/angular15/upgrader/tsconfig-upgrader.js +312 -0
  462. package/tools/wac-cli/src/angular15/upgrader/ui-test-automation-legacy-upgrader.js +312 -0
  463. package/tools/wac-cli/src/angular15/upgrader/version-json-upgrader.js +312 -0
  464. package/tools/wac-cli/src/angular15/utils/add-item.js +312 -0
  465. package/tools/wac-cli/src/angular15/utils/command-runner.js +312 -0
  466. package/tools/wac-cli/src/angular15/utils/file-comparison.js +315 -0
  467. package/tools/wac-cli/src/angular15/utils/file-replacement.js +312 -0
  468. package/tools/wac-cli/src/angular15/utils/file-writer.js +312 -0
  469. package/tools/wac-cli/src/angular15/utils/logger.js +312 -0
  470. package/tools/wac-cli/src/angular15/utils/main-debugger.js +312 -0
  471. package/tools/wac-cli/src/angular15/utils/relative-path.js +312 -0
  472. package/tools/wac-cli/src/angular15/utils/remove-item.js +312 -0
  473. package/tools/wac-cli/src/angular15/utils/space-generator.js +312 -0
  474. package/tools/wac-cli/src/angular15/utils/update-shell-references.js +316 -0
  475. package/tools/wac-cli/src/common.js +312 -0
  476. package/tools/wac-cli/src/create/main.js +312 -0
  477. package/tools/wac-cli/src/eslint/main.js +312 -0
  478. package/tools/wac-cli/src/index.js +312 -0
  479. package/tools/wac-cli/src/upgrade/error-updater.js +312 -0
  480. package/tools/wac-cli/src/upgrade/error-updaters/component-selector-updater.js +315 -0
  481. package/tools/wac-cli/src/upgrade/error-updaters/only-arrow-functions-updater.js +315 -0
  482. package/tools/wac-cli/src/upgrade/error-updaters/updater-lookup.js +312 -0
  483. package/tools/wac-cli/src/upgrade/file-updater.js +312 -0
  484. package/tools/wac-cli/src/upgrade/get-files.js +312 -0
  485. package/tools/wac-cli/src/upgrade/main.js +312 -0
  486. package/tools/wac-cli/src/upgrade/models/error-result.js +312 -0
  487. package/tools/wac-cli/src/upgrade/models/updater-interface.js +312 -0
  488. package/tools/wac-cli/src/upgrade/package-updater.js +312 -0
  489. package/tools/wac-cli/templates/wac-template/src/favicon.ico +0 -0
  490. package/tools/wac-cli/templates/wac-template/src/karma.conf.js +312 -0
  491. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Error.ps1 +216 -0
  492. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Exception.ps1 +216 -0
  493. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Process.ps1 +216 -1
  494. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-Service.ps1 +216 -1
  495. package/tools/wac-cli/templates/wac-template/src/resources/scripts/Get-WinRmState.ps1 +216 -1
  496. package/core/data/extension-broker/snap-in-listener.d.ts.map +0 -1
  497. package/core/data/extension-broker/snap-in-listener.js +0 -73
  498. package/core/data/extension-broker/snap-in-listener.js.map +0 -1
  499. package/microsoft-windows-admin-center-sdk-4.167.0.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/core/diagnostics/sme-web-telemetry.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,oFAAoF;AAEpF,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EACH,uBAAuB,EAEvB,WAAW,EACX,sBAAsB,EACzB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAQH,aAAa,EAEb,oBAAoB,EAEpB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAKpC,MAAM,OAAO,eAAe;IAExB;;OAEG;IACK,MAAM,KAAK,aAAa;QAC5B,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD;;OAEG;IACK,MAAM,KAAK,YAAY;QAC3B,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC;IACtG,CAAC;IAEO,MAAM,KAAK,eAAe;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC;IACzC,CAAC;IAEO,MAAM,CAAC,YAAY,GAA4C,EAAE,CAAC;IAClE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAE/B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,WAAW,CAAO;IACzB,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,MAAM,CAAC,QAAQ,GAA8B,EAAE,CAAC;IAChD,MAAM,CAAC,eAAe,GAAwC,EAAE,CAAC;IACjE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAEtB,MAAM,KAAK,YAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,oEAAoE;IACpE,iFAAiF;IACjF,oGAAoG;IACpG,iEAAiE;IACzD,MAAM,CAAC,6BAA6B,GAAG,4EAA4E,CAAC;IAE5H;;OAEG;IACK,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC;IAEnC;;;;OAIG;IACK,MAAM,CAAC,gBAAgB,CAAC,UAAkB;QAC9C,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;SAC1C;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;QAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACrD,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;QAC1C,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,iBAAiB;QAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAwC,EAAE,EAAE;YAC9E,QAAQ,IAAI,EAAE;gBACV,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,cAA8C,CAAC;oBACzE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACxF,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC;oBAC7B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAA8C,CAAC,CAAC;oBAC/F,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,qBAAqB;oBAAE,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAAC,MAAM;gBACrG,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;oBACzB,MAAM,YAAY,GAAG,IAAI,CAAC,cAA2C,CAAC;oBACtE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACpE,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC;oBAChC,MAAM,YAAY,GAAG,IAAI,CAAC,cAA8C,CAAC;oBACzE,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,cAAyC,CAAC;oBACpE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACxD,MAAM;iBACT;gBACD,KAAK,eAAe,CAAC,YAAY;oBAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAAC,MAAM;gBAC1F,OAAO,CAAC,CAAC,OAAO;aACnB;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,yBAAyB;QACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC;YAClC,IAAI,EAAE,GAAG,EAAE;gBACP,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7B,CAAC;YACD,KAAK,EAAE,CAAC,KAAY,EAAE,EAAE;gBACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACvF,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,YAAY;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACtD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;SACtE;IACL,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,iBAAiB,CAAC,WAAsC;QAClE,8HAA8H;QAC9H,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;eACxD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;QAExD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/C,4GAA4G;QAC5G,oHAAoH;QACpH,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACpC;IACL,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,IAAI,CAAC,UAAsB;QACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,iHAAiH;QACjH,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;QACnF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7D,0DAA0D;QAC1D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;QAE/C,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACpE,OAAO,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;aACjC,IAAI,CACD,SAAS,CAAC,MAAM,CAAC,EAAE;YACf,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,OAAO,MAAM,CAAC,IAAI,CACd,KAAK,CAAC,IAAI,CAAC,EACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACV,IAAI,cAAc,KAAK,CAAC,EAAE;oBACtB,MAAM,KAAK,CAAC;iBACf;gBACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;gBAC7E,cAAc,EAAE,CAAC;YACrB,CAAC,CAAC,CACL,CAAC;QACN,CAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;YAChB,MAAM,SAAS,GAAqB,MAAM,CAAC,QAAQ,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;mBAClB,SAAS,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,UAAU,CAAC;YAE9E,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,QAAQ,CAAC;YAC/G,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,cAAc,CAAC;YAC9D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAC/G,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClE,qFAAqF;YACrF,0DAA0D;YAC1D,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;gBAC1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;aACpC;QACL,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,+CAA+C,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9G,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACL,CAAC;IACV,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,oBAAoB;QAC/B,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;YACzC,MAAM,MAAM,GAAsB,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAoB,CAAC;YACrF,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,6BAA6B,CAAC;YACpG,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;YACjC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YAEpB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;gBACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAW,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC7D,MAAM,SAAS,GAAW,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;gBAE7D,MAAM,MAAM,GAAG;oBACX,kBAAkB,EAAE,IAAI,CAAC,6BAA6B;oBACtD,6BAA6B;oBAC7B,oBAAoB,EAAE;wBAClB,gBAAgB,EAAE,EAAE;qBACvB;oBACD,kCAAkC;oBAClC,qBAAqB,EAAE;wBACnB,SAAS,EAAE,sBAAsB;wBACjC,aAAa,EAAE,IAAI;qBACtB;oBACD,qCAAqC;oBACrC,yBAAyB,EAAE;wBACvB,WAAW,EAAE;4BACT,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE,IAAI;4BACd,KAAK,EAAE,IAAI;4BACX,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,IAAI;yBAChB;wBACD,QAAQ,EAAE;4BACN,QAAQ,EAAE,IAAI,CAAC,YAAY;4BAC3B,kDAAkD;4BAClD,WAAW,EAAE,sBAAsB;4BACnC,UAAU,EAAE,sBAAsB;4BAClC,QAAQ,EAAE;gCACN,cAAc,EAAE,SAAS,IAAI,EAAE;gCAC/B,cAAc,EAAE,SAAS,IAAI,EAAE;6BAClC;yBACJ;wBACD,0BAA0B,EAAE,KAAK;qBACpC;iBACJ,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,KAAU,EAAE,EAAE;oBACzD,0FAA0F;oBAC1F,+CAA+C;oBAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE;wBAC3C,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC;4BACvE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;qBAClD;oBACD,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,gBAAgB,GAAG;wBAClD,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;wBAC1C,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;qBAC3C,CAAC;oBACF,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC/G,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC,CAAC;YACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;gBAClB,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,OAAgB,EAAE,cAA0C,EAAE,UAAoC;QACxH,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE;wBAC5C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc;wBAChD,gBAAgB,EAAE,UAAU;qBAC/B,CAAC,CAAC,CAAC;aACP;YACD,OAAO;SACV;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAC5B,cAAc,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,aAAa,CAAC,cAAuC,EAAE,UAAoC;QACrG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;aAC1F;YACD,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,cAA4C,EAAE,UAAoC;QAC/G,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;aAC7H;YACD,OAAO;SACV;QACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YAC5B,cAAc,CAAC,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC;SAC9D;QACD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,2BAA2B,CAAC,IAAwB;QAC/D,MAAM,eAAe,GAA+B;YAChD,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI;YAC1C,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE;YACxD,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;YAC7B,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,EAAE;YACP,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;SACjB,CAAC;QACF,8EAA8E;QAC9E,6FAA6F;QAC7F,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG;YACf,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;YACrB,WAAW,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YACjC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SAChE,CAAC;QAEF,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7D,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAChE,oEAAoE;gBACpE,2EAA2E;gBAC3E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;oBAChE,eAAe,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChF;aACJ;SACJ;QAED,mFAAmF;QACnF,qDAAqD;QACrD,IAAI,eAAe,CAAC,UAAU,EAAE;YAC5B,eAAe,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;SAC7E;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,MAAM,CAAC,oBAAoB,CAAC,WAA+B,EAAE,gBAAsB;QACtF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,WAAW;oBACnD;wBACI,WAAW,EAAE,WAAW;wBACxB,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAkC;qBAChF,CAAC,CAAC,CAAC;aACP;YACD,OAAO;SACV;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QAEtE,+DAA+D;QAC/D,MAAM,cAAc,GAAiC;YACjD,UAAU,EAAE,oBAAoB,CAAC,SAAS;YAC1C,OAAO,EAAE,gBAAgB,IAAI,WAAW;SAC3C,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,CAAC;QAC7E,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,mBAAmB,CAAC,WAAyC,EAAE,gBAAsB,EAC/F,UAAoC;QACpC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,UAAU;oBAClD;wBACI,UAAU,EAAE,WAAW;wBACvB,cAAc,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAkC;qBAChF,CAAC,CAAC,CAAC;aACP;YACD,OAAO;SACV;QACD,MAAM,cAAc,GAAiC;YACjD,UAAU,EAAE,oBAAoB,CAAC,SAAS;YAC1C,OAAO,EAAE,gBAAgB,IAAI,WAAW;SAC3C,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,CAAC;QACnF,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,0BAA0B,CAAC,WAA+B;QACpE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;aACjG;YACD,OAAO;SACV;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,MAAM,cAAc,GAAuC;YACvD,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SACrC,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,mBAAmB,CAAC,WAAW,EAAE,CAAC;QAE7E,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAClF,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,uBAAuB,CAAC,kBAAmC;QACrE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;aAChG;YACD,OAAO;SACV;QACD,MAAM,cAAc,GAAiC;YACjD,OAAO,EAAE;gBACL,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,KAAK,EAAE,kBAAkB,CAAC,KAAK;gBAC/B,KAAK,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAClD,WAAW,EAAE,mBAAmB,CAAC,YAAY;aAChD;YACD,+DAA+D;YAC/D,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY;SAC9F,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,eAAe,CAAC,EAAU,EAAE,OAA0B;QAChE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,kBAAkB,CAAC,EAAU;QACvC,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,oBAAoB,CAAC,OAA0B,EAAE,KAA2B,EAAE,OAA2B;QACnH,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE/D,kEAAkE;QAClE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;YACjD,OAAO;SACV;QAED,wFAAwF;QACxF,IAAI,KAAK,KAAK,oBAAoB,CAAC,OAAO,IAAI,EAAE,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;SAC/B;QAED,MAAM,SAAS,GAAG;YACd,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM;YACtE,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;SACnE,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnD;aAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YACpC,SAAS,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACzG;QACD,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,EAC1E,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,yBAAyB,CAAC,QAAkB,EAAE,KAA2B,EAAE,OAA2B;QAChH,2CAA2C;QAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,OAAO;SACV;QAED,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE;YAC7D,IAAI,cAAc,EAAE;gBAChB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;gBACpE,IAAI,aAAa,EAAE;oBACf,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;iBACnC;gBACD,OAAO,WAAW,CAAC;aACtB;QACL,CAAC,EAAE,cAAc,CAAC,CAAC;QAEnB,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,MAAM,SAAS,GAAG,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEjI,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YAC5B,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnD;aAAM,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YACpC,SAAS,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;SACzG;QACD,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EACpD,EAAE,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,qBAAqB,CAAC,GAAW,EAAE,gBAA0B,EAAE,UAAuB;QACjG,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACrB,OAAO,KAAK,CAAC;SAChB;QAED,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE;YAClC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;gBACjD,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,kBAAkB,CAAC,KAAU,EAAE,gBAA0B,EAAE,eAAyB;QAC9F,MAAM,cAAc,GAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,MAAM,gBAAgB,GAAG,CAAC,cAAc,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QAE9C,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAExC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACnC,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;oBACzC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3C;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC/G,mHAAmH;oBACnH,wFAAwF;oBACxF,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAChG;qBAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE;oBACxE,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;wBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;4BAC9C,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;yBAC/B;qBACJ;yBAAM;wBACH,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;qBAC5B;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,gBAAgB,CAAC,KAAK,EAAE,CAAC;SAC5B;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC","file":"sme-web-telemetry.js","sourcesContent":["// 1DS documentation found at\r\n// https://1dsdocs.azurewebsites.net/getting-started/javascript-getting_started.html\r\n\r\nimport { Meta } from '@angular/platform-browser';\r\nimport { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, delay, retryWhen, shareReplay, take, tap } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { NotificationState } from '../notification/notification-state';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport {\r\n GatewayInstallationType,\r\n GatewayInventory,\r\n GatewayMode,\r\n GatewayOperationalMode\r\n} from '../shared/gateway-inventory/gateway-inventory';\r\nimport { GatewayInventoryCache } from '../shared/gateway-inventory/gateway-inventory-cache';\r\nimport { Logging } from './logging';\r\nimport {\r\n CompleteSmePerformanceData,\r\n IContentUpdateOverrideValues,\r\n IPageActionOverrideValues,\r\n IPageViewOverrideValues,\r\n IPageViewPerformanceOverrideValues,\r\n LighthousePerformanceMetrics,\r\n PowershellDetails,\r\n SmeMetaLabels,\r\n SmePerformanceData,\r\n TelemetryActionTypes,\r\n TelemetryEventBody,\r\n TelemetryEvents,\r\n TelemetryEventStates,\r\n TelemetryEventTypes\r\n} from './sme-web-telemetry-models';\r\n\r\n// placeholder for the oneDS type, introduced when we load script.\r\ndeclare let oneDS: any;\r\n\r\nexport class SmeWebTelemetry {\r\n\r\n /**\r\n * The source name to use when logging about this service.\r\n */\r\n private static get logSourceName() {\r\n return 'WebTelemetry';\r\n }\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private static get nameOfModule(): string {\r\n return MsftSme.self().Init.moduleName ? MsftSme.self().Init.moduleName : SmeWebTelemetry.testMode;\r\n }\r\n\r\n private static get backlogHasSpace(): boolean {\r\n return this.eventBacklog.length < 50;\r\n }\r\n\r\n private static eventBacklog: [TelemetryEvents, TelemetryEventBody][] = [];\r\n private static telemetryHandler = null;\r\n\r\n private static testMode = 'test';\r\n private static metaService: Meta;\r\n private static rpcInitAlready = false;\r\n private static metaTags: { [tag: string]: string } = {};\r\n private static powershellIdMap: { [id: string]: PowerShellCommand } = {};\r\n private static isProd = true;\r\n\r\n public static get isProduction() {\r\n return this.isProd;\r\n }\r\n\r\n // AppId/Tenant Token provided by MarTech support\r\n // AppId is not used, but it will be mapped to later in the pipeline\r\n // Full keys are JS:WindowsAdminCenter and o:f78e2b7c9ae4461399c360160d82dcfc for\r\n // AppId/Tenant token respectively. In Cosmos, only the initial portion of the tenant token is used.\r\n // private static windowsAdminCenterAppId = 'WindowsAdminCenter';\r\n private static windowsAdminCenterTenantToken = 'f78e2b7c9ae4461399c360160d82dcfc-9371288c-a1b9-4fdc-a196-0340fc5f9880-7071';\r\n\r\n /**\r\n * Map of module versions used in this instance of web telemetry - memoize values here.\r\n */\r\n private static moduleVersions = {};\r\n\r\n /**\r\n * Get the list of module versions for use in telemetry where the event is sent via RPC to shell\r\n * from the actual module the event is called in.\r\n * @returns list of module mappings to versions\r\n */\r\n private static getModuleVersion(moduleName: string): string {\r\n if (this.moduleVersions[moduleName]) {\r\n return this.moduleVersions[moduleName];\r\n }\r\n const environment = MsftSme.self().Environment;\r\n const moduleObject = environment.modules.find((module) => {\r\n return module.name === moduleName;\r\n });\r\n const version = moduleObject ? moduleObject.version : 'N/A';\r\n this.moduleVersions[moduleName] = version;\r\n return version;\r\n }\r\n\r\n /**\r\n * Send any manual events that were triggered prior to telemetry initializing.\r\n */\r\n private static sendBacklogEvents(): void {\r\n this.eventBacklog.forEach(([type, body]: [TelemetryEvents, TelemetryEventBody]) => {\r\n switch (type) {\r\n case TelemetryEvents.Performance: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.tracePerformanceData(body.performance, overrideVals ? overrideVals.content : null);\r\n break;\r\n }\r\n case TelemetryEvents.Lighthouse: {\r\n this.traceLighthouseData(body.lighthouse, body.overrideValues as IContentUpdateOverrideValues);\r\n break;\r\n }\r\n case TelemetryEvents.ModuleOpenPerformance: this.traceModuleOpenPerformance(body.performance); break;\r\n case TelemetryEvents.Action: {\r\n const overrideVals = body.overrideValues as IPageActionOverrideValues;\r\n this.traceAction(body.element, overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.ContentUpdate: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.traceContentUpdate(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.PageView: {\r\n const overrideVals = body.overrideValues as IPageViewOverrideValues;\r\n this.tracePageView(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.Notification: this.traceClientNotification(body.notification); break;\r\n default: return;\r\n }\r\n });\r\n this.eventBacklog = [];\r\n }\r\n\r\n /**\r\n * Helper to combine setting metaTags, initialize handler, and\r\n * send any telemetry events that occurred prior to initialization\r\n */\r\n private static configureAndInitTelemetry(): void {\r\n this.setMetaInDom();\r\n this.initTelemetryHandler().subscribe({\r\n next: () => {\r\n this.sendBacklogEvents();\r\n },\r\n error: (error: Error) => {\r\n Logging.logError(this.logSourceName, '{0}: {1}'.format(error.name, error.message));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Helper function to set metaTags in DOM\r\n */\r\n private static setMetaInDom(): void {\r\n for (const [key, value] of Object.entries(this.metaTags)) {\r\n this.metaService.updateTag({ name: `awa-${key}`, content: value });\r\n }\r\n }\r\n\r\n /**\r\n * Update Metatags and/or initialize telemetry, depending on whether rpc message came before or after app-context init.\r\n * @param newMetaTags Primarily contains WAC-Session-Id & extension-version, received from RPC message\r\n */\r\n public static updateFromRpcInit(newMetaTags: { [tag: string]: string }): void {\r\n // All the fields will be updated at the same time here, checking one (wac-session-id is the main one) is enough for the check\r\n const shouldInitHere = SmeMetaLabels.SessionId in this.metaTags\r\n && this.metaTags[SmeMetaLabels.SessionId] === 'N/A';\r\n\r\n this.rpcInitAlready = true;\r\n MsftSme.deepAssign(this.metaTags, newMetaTags);\r\n\r\n // If metaTags contains session ID but it's N/A (ie initial init was called already), call the init. If not,\r\n // just wait for normal init to be called in app-context. Depending on timing RPC update can happen before or after.\r\n if (shouldInitHere) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }\r\n\r\n /**\r\n * Load 1DS if does not already exist.\r\n * @param appContext App context currently being used\r\n */\r\n public static init(appContext: AppContext): Observable<boolean> {\r\n if (this.telemetryHandler) {\r\n return EMPTY;\r\n }\r\n\r\n this.metaService = new Meta(document);\r\n // Set fields we don't need gateway for, if connection to gateway fails, initialize telemetry with limited fields\r\n this.metaTags[SmeMetaLabels.Language] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.Market] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.IsProduction] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.ExtensionVersion] = MsftSme.self().Environment.version;\r\n this.metaTags[SmeMetaLabels.SessionId] = MsftSme.sessionId();\r\n // Instantiate these initially so they aren't empty values\r\n this.metaTags[SmeMetaLabels.InstallationType] = 'N/A';\r\n this.metaTags[SmeMetaLabels.Build] = 'N/A';\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[MsftSme.self().Init.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = 'N/A';\r\n this.isProd = MsftSme.self().Init.isProduction;\r\n\r\n const gatewayInventoryCache = new GatewayInventoryCache(appContext);\r\n return gatewayInventoryCache.query({})\r\n .pipe(\r\n retryWhen(errors => {\r\n let gatewayRetries = 2;\r\n return errors.pipe(\r\n delay(1000),\r\n tap((error) => {\r\n if (gatewayRetries === 0) {\r\n throw error;\r\n }\r\n Logging.logDebug(this.logSourceName, 'Attempting to query gateway again...');\r\n gatewayRetries--;\r\n })\r\n );\r\n }),\r\n take(1),\r\n tap((status: any) => {\r\n const inventory: GatewayInventory = status.instance;\r\n this.isProd = this.isProd\r\n && inventory.gatewayOperationalMode === GatewayOperationalMode.Production;\r\n\r\n this.metaTags[SmeMetaLabels.InstallationType] = inventory.installationType || GatewayInstallationType.Standard;\r\n this.metaTags[SmeMetaLabels.Build] = inventory.gatewayVersion;\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[inventory.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = GatewayOperationalMode[inventory.gatewayOperationalMode];\r\n this.metaTags[SmeMetaLabels.IsProduction] = this.isProd.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = this.isProd.toString();\r\n // If not shell, handle in RPC handler, because some fields will init after 1DS inits\r\n // If rpc handler has happened already, go ahead with this\r\n if (MsftSme.isShell() || this.rpcInitAlready) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }),\r\n catchError((error) => {\r\n Logging.logWarning(this.logSourceName, 'Telemetry failed to initialized with error {}'.format(error.message));\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set config and initialize telemetry library handler\r\n */\r\n private static initTelemetryHandler(): Observable<any> {\r\n const observable = new Observable(observer => {\r\n const script: HTMLScriptElement = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnLink;\r\n script.integrity = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnIntegrityHash;\r\n script.crossOrigin = 'anonymous';\r\n script.async = true;\r\n\r\n script.onload = () => {\r\n this.telemetryHandler = new oneDS.ApplicationInsights();\r\n const entryType: string = MsftSme.self().Init.entryPointType;\r\n const entryName: string = MsftSme.self().Init.entryPointName;\r\n\r\n const config = {\r\n instrumentationKey: this.windowsAdminCenterTenantToken,\r\n // post channel configuration\r\n channelConfiguration: {\r\n eventsLimitInMem: 50\r\n },\r\n // Properties Plugin configuration\r\n propertyConfiguration: {\r\n userAgent: 'Windows Admin Center',\r\n sessionAsGuid: true\r\n },\r\n // Web Analytics Plugin configuration\r\n webAnalyticsConfiguration: {\r\n autoCapture: {\r\n scroll: false,\r\n pageView: true,\r\n onLoad: false,\r\n onUnload: true,\r\n click: true,\r\n resize: true,\r\n jsError: true,\r\n lineage: true\r\n },\r\n coreData: {\r\n pageName: this.nameOfModule,\r\n // to prevent personal data from being sent in URI\r\n referrerUri: 'windows.admin.center',\r\n requestUri: 'windows.admin.center',\r\n pageTags: {\r\n entryPointName: entryName || '',\r\n entryPointType: entryType || ''\r\n }\r\n },\r\n useShortNameForContentBlob: false\r\n }\r\n };\r\n this.telemetryHandler.initialize(config, []);\r\n this.telemetryHandler.addTelemetryInitializer((event: any) => {\r\n // If we send an event that originates from a different module (eg notifications in shell)\r\n // change the extension version to match module\r\n if (event.baseData.name !== this.nameOfModule) {\r\n event.baseData.properties.pageTags.metaTags[SmeMetaLabels.ExtensionVersion] =\r\n this.getModuleVersion(event.baseData.name);\r\n }\r\n event.baseData.properties.pageTags.screenResolution = {\r\n availableHeight: window.screen.availHeight,\r\n availableWidth: window.screen.availWidth\r\n };\r\n event.baseData.properties.pageTags.frameDetails = { height: window.innerHeight, width: window.innerWidth };\r\n });\r\n observer.next();\r\n observer.complete();\r\n };\r\n script.onerror = () => {\r\n script.remove();\r\n observer.error(new Error('1DS Script could not be loaded'));\r\n };\r\n document.body.appendChild(script);\r\n }).pipe(shareReplay(1));\r\n return observable;\r\n }\r\n\r\n /**\r\n * Send a Page-Action event through Web Telemetry.\r\n * @param element Element action is being executed on\r\n * @param overrideValues Various values to override within default Web Telemetry page action fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceAction(element: Element, overrideValues?: IPageActionOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Action, {\r\n element: element, overrideValues: overrideValues,\r\n customProperties: properties\r\n }]);\r\n }\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.capturePageAction(element, overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Page-View event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry page view fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static tracePageView(overrideValues: IPageViewOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.PageView, { overrideValues: overrideValues }]);\r\n }\r\n return;\r\n }\r\n this.telemetryHandler.capturePageView(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Content-Update event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry content update fields, see Web Telemetry documentation\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceContentUpdate(overrideValues: IContentUpdateOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ContentUpdate, { overrideValues: overrideValues, customProperties: properties }]);\r\n }\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.captureContentUpdate(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Add standard fields onto performance data\r\n * @param data SmePerformanceData to be sent\r\n */\r\n private static fillStandardPerformanceData(data: SmePerformanceData): CompleteSmePerformanceData {\r\n const fullDataPayload: CompleteSmePerformanceData = {\r\n extension: MsftSme.self().Environment.name,\r\n entryPointName: MsftSme.self().Init.entryPointName || '',\r\n url: window.location.pathname,\r\n moduleOpened: false,\r\n totalLoadTime: '',\r\n label: data.label,\r\n sme: {},\r\n resources: {},\r\n navigation: {}\r\n };\r\n // Truncate all decimals to 5 places to avoid cosmos stream from redacting any\r\n // Convert PerformanceNavigationTiming to JSON so we can manipulate it via Object.() methods.\r\n fullDataPayload.totalLoadTime = data.totalLoadTime.toFixed(5);\r\n const timingData = {\r\n 'sme': data.sme || {},\r\n 'resources': data.resources || {},\r\n 'navigation': data.navigation ? data.navigation.toJSON() : {}\r\n };\r\n\r\n for (const [sourceKey, sourceVal] of Object.entries(timingData)) {\r\n for (const [resourceKey, resourceVal] of Object.entries(sourceVal)) {\r\n // navigation has some string-string maps, ignore the string values.\r\n // Convert all numbers back into numbers to preserve types in cosmos stream\r\n if (!MsftSme.isEmpty(sourceVal) && typeof resourceVal === 'number') {\r\n fullDataPayload[sourceKey][resourceKey] = parseFloat(resourceVal.toFixed(7));\r\n }\r\n }\r\n }\r\n\r\n // Set this here if need - often the appLoad times happen before Init is populated,\r\n // so check again to make sure if its actually empty.\r\n if (fullDataPayload.navigation) {\r\n fullDataPayload.entryPointName = MsftSme.self().Init.entryPointName || '';\r\n }\r\n return fullDataPayload;\r\n }\r\n\r\n /**\r\n * Send a content update event. This content update contains an updated sme-specific timings structure with relevant\r\n * performance data under the data field. The original timings data is also contained under the navigation field.\r\n * The structure of the event is such:\r\n * data : { ...,\r\n * \"timings\": {\r\n * \"extension\": [extension-name],\r\n * \"entryPointName\": [entryPointName],\r\n * \"url\": [url-endpoint],\r\n * \"moduleOpened\" : [isModuleOpened],\r\n * \"sme\": {\r\n * [sme-mark] : [mark-timestamps],\r\n * ...\r\n * },\r\n * \"resources\": {\r\n * [resource-endpoint] : [resource-load-complete-timestamps],\r\n * ...\r\n * },\r\n * \"navigation\": {\r\n * [performance-navigation-event]: [navigation-event-timestamps]\r\n * }\r\n * }, ...\r\n * }\r\n * Certain fields are set within this class instead of outside modules since they will always be the same.\r\n * @param dataPayload performance data to be sent through telemetry.\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static tracePerformanceData(dataPayload: SmePerformanceData, contentOverrides?: any): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Performance,\r\n {\r\n performance: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n }\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n\r\n // A for automatic, performance tracking is done automatically.\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Send a content update event - this event will contain timings for lighthouse calculation in the backend\r\n * This can potentially be sent a couple times with overlapping data for one page load event, depending\r\n * on when the TTI is calculated. In this scenario, it will be handled on the backend.\r\n * @param dataPayload Lighthouse data\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static traceLighthouseData(dataPayload: LighthousePerformanceMetrics, contentOverrides?: any,\r\n properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Lighthouse,\r\n {\r\n lighthouse: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n }\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: dataPayload, type: TelemetryEventTypes.Lighthouse };\r\n MsftSme.deepAssign(customProps, properties);\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * See tracePerformanceData comments, only difference is moduleOpened is true and the contentOverrides\r\n * @param dataPayload performance data to be sent through telemetry.\r\n */\r\n public static traceModuleOpenPerformance(dataPayload: SmePerformanceData): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ModuleOpenPerformance, { performance: dataPayload }]);\r\n }\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n data.moduleOpened = true;\r\n\r\n const overrideValues: IPageViewPerformanceOverrideValues = {\r\n customTiming: JSON.stringify(data)\r\n };\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n\r\n this.telemetryHandler.capturePageViewPerformance(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for notification\r\n * @param clientNotification Client notification to send event for\r\n */\r\n public static traceClientNotification(clientNotification: RpcNotification): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Notification, { notification: clientNotification }]);\r\n }\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n content: {\r\n message: clientNotification.message,\r\n title: clientNotification.title,\r\n state: NotificationState[clientNotification.state],\r\n contentType: TelemetryEventTypes.Notification\r\n },\r\n // If source is not shell, replace pagename with proper source.\r\n pageName: clientNotification.sourceName ? clientNotification.sourceName : this.nameOfModule\r\n };\r\n this.traceContentUpdate(overrideValues, { type: TelemetryEventTypes.Notification });\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static addPowershellId(id: string, command: PowerShellCommand) {\r\n this.powershellIdMap[id] = command;\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static removePowershellId(id: string) {\r\n delete this.powershellIdMap[id];\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell event. In the case where command is not available,\r\n * use an ID (usually ps session ID, which may correlate with work item id)\r\n * @param command Powershell Command\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object - see interface for more detail.\r\n */\r\n public static tracePowershellEvent(command: PowerShellCommand, state: TelemetryEventStates, details?: PowershellDetails): void {\r\n const id = details ? details.id : null;\r\n const response = details ? details.response : null;\r\n const psCommand = command ? command : this.powershellIdMap[id];\r\n\r\n // Ignore any events that are either null or un-named PS commands.\r\n if ((psCommand && !psCommand.command) || !psCommand) {\r\n return;\r\n }\r\n\r\n // If state is not started and id is provided, remove the ID from the map to save space.\r\n if (state !== TelemetryEventStates.Started && id) {\r\n this.removePowershellId(id);\r\n }\r\n\r\n const psContent = {\r\n psCommand: psCommand.command, state: state, psModule: psCommand.module,\r\n otherData: details && details.otherData ? details.otherData : {}\r\n };\r\n const sourceName = this.nameOfModule;\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, { content: psContent, pageName: sourceName },\r\n { type: TelemetryEventTypes.Powershell });\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell batch event. Batch doesn't deal with work items, so\r\n * we can ignore the ID and sourceName handling that the above function handles.\r\n * @param commands Powershell Commands List in properties stringified form. PS Batch events places PS command into a\r\n * '{properties: PSCommand }' string structure.\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object contains various optional fields in powershell event.\r\n * @returns\r\n */\r\n public static tracePowershellBatchEvent(commands: string[], state: TelemetryEventStates, details?: PowershellDetails) {\r\n // check that at least one command is valid\r\n if (!commands || commands.length === 0) {\r\n return;\r\n }\r\n\r\n let parsedCommands: string[] = [];\r\n parsedCommands = commands.reduce((commandList, currentCommand) => {\r\n if (currentCommand) {\r\n const parsedCommand = JSON.parse(currentCommand).properties.command;\r\n if (parsedCommand) {\r\n commandList.push(parsedCommand);\r\n }\r\n return commandList;\r\n }\r\n }, parsedCommands);\r\n\r\n const response = details ? details.response : null;\r\n\r\n const psContent = { psCommands: parsedCommands, state: state, otherData: details && details.otherData ? details.otherData : {} };\r\n\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, { content: psContent },\r\n { type: TelemetryEventTypes.Powershell });\r\n }\r\n\r\n /**\r\n * Helper to redactGenericModel function\r\n * Determines whether field should be redacted according to fields provided for redacting and exceptions\r\n * @param key The field in question\r\n * @param keywordsToRedact List of string inclusions to redact - if the field contains any part of this, it will be redacted\r\n * @param exceptions Set of exceptions to the above - if the field matches an exception, it will not be redacted\r\n * @returns True if field should be redacted, false otherwise\r\n */\r\n private static fieldShouldBeRedacted(key: string, keywordsToRedact: string[], exceptions: Set<string>): boolean {\r\n if (exceptions.has(key)) {\r\n return false;\r\n }\r\n\r\n for (const field of keywordsToRedact) {\r\n if (key.toLowerCase().includes(field.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Telemetry utility function to redact a model object. This function will traverse the model in BFS fashion and redact any fields\r\n * that contain any string in the keywordsToRedact array, unless the field is an exception (in the exceptions array).\r\n * This function will not affect keys in StringMaps or Maps - if names exist there, they should be handled separately.\r\n *\r\n * @param model Model to redact\r\n * @param keywordsToRedact List of string inclusions to redact\r\n * @param fieldExceptions List of exceptions to the above\r\n * @returns Redacted model\r\n */\r\n public static redactGenericModel(model: any, keywordsToRedact: string[], fieldExceptions: string[]): any {\r\n const redacted_model: any = JSON.parse(JSON.stringify(model));\r\n const remainingObjects = [redacted_model];\r\n const exceptionSet = new Set(fieldExceptions);\r\n\r\n while (remainingObjects.length > 0) {\r\n const currentTree = remainingObjects[0];\r\n\r\n Object.keys(currentTree).forEach(key => {\r\n if (MsftSme.isPlainObject(currentTree[key])) {\r\n remainingObjects.push(currentTree[key]);\r\n } else if (Array.isArray(currentTree[key]) && currentTree[key].some((field: any) => MsftSme.isPlainObject(field))) {\r\n // If array intermixes objects and non-objects, we will push the objects into the queue and ignore the non-objects.\r\n // The non-objects will avoid redaction, but this should never be a concern in practice.\r\n remainingObjects.push(currentTree[key].filter((field: any) => MsftSme.isPlainObject(field)));\r\n } else if (this.fieldShouldBeRedacted(key, keywordsToRedact, exceptionSet)) {\r\n if (Array.isArray(currentTree[key])) {\r\n for (let i = 0; i < currentTree[key].length; ++i) {\r\n currentTree[key][i] = '***';\r\n }\r\n } else {\r\n currentTree[key] = '***';\r\n }\r\n }\r\n });\r\n remainingObjects.shift();\r\n }\r\n return redacted_model;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../packages/core/diagnostics/sme-web-telemetry.ts"],"names":[],"mappings":"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","file":"sme-web-telemetry.js","sourcesContent":["// 1DS documentation found at\r\n// https://1dsdocs.azurewebsites.net/getting-started/javascript-getting_started.html\r\n\r\nimport { EMPTY, Observable, of } from 'rxjs';\r\nimport { catchError, delay, retry, shareReplay, take, tap } from 'rxjs/operators';\r\nimport { AppContext } from '../data/app-context';\r\nimport { PowerShellCommand } from '../data/powershell';\r\nimport { NotificationState } from '../notification/notification-state';\r\nimport { RpcNotification } from '../rpc/notification/rpc-notification-model';\r\nimport {\r\n GatewayInstallationType,\r\n GatewayInventory,\r\n GatewayMode,\r\n GatewayOperationalMode\r\n} from '../shared/gateway-inventory/gateway-inventory';\r\nimport { GatewayInventoryCache } from '../shared/gateway-inventory/gateway-inventory-cache';\r\nimport { Logging } from './logging';\r\nimport {\r\n CompleteSmePerformanceData,\r\n IContentUpdateOverrideValues,\r\n IPageActionOverrideValues,\r\n IPageViewOverrideValues,\r\n IPageViewPerformanceOverrideValues,\r\n LighthousePerformanceMetrics,\r\n PowershellDetails,\r\n SmeMetaLabels,\r\n SmePerformanceData,\r\n TelemetryActionTypes,\r\n TelemetryEventBody,\r\n TelemetryEvents,\r\n TelemetryEventStates,\r\n TelemetryEventTypes\r\n} from './sme-web-telemetry-models';\r\n\r\n// placeholder for the oneDS type, introduced when we load script.\r\ndeclare let oneDS: any;\r\n\r\nexport class SmeWebTelemetry {\r\n\r\n /**\r\n * The source name to use when logging about this service.\r\n */\r\n private static get logSourceName() {\r\n return 'WebTelemetry';\r\n }\r\n /**\r\n * Gets the name of current shell or module.\r\n */\r\n private static get nameOfModule(): string {\r\n return MsftSme.self().Init.moduleName ? MsftSme.self().Init.moduleName : SmeWebTelemetry.testMode;\r\n }\r\n\r\n private static get backlogHasSpace(): boolean {\r\n return this.eventBacklog.length < 50;\r\n }\r\n\r\n private static eventBacklog: [TelemetryEvents, TelemetryEventBody][] = [];\r\n private static telemetryHandler = null;\r\n\r\n private static testMode = 'test';\r\n private static rpcInitAlready = false;\r\n private static metaTags: { [tag: string]: string } = {};\r\n private static powershellIdMap: { [id: string]: PowerShellCommand } = {};\r\n private static isProd = true;\r\n\r\n public static get isProduction() {\r\n return this.isProd;\r\n }\r\n\r\n // AppId/Tenant Token provided by MarTech support\r\n // AppId is not used, but it will be mapped to later in the pipeline\r\n // Full keys are JS:WindowsAdminCenter and o:f78e2b7c9ae4461399c360160d82dcfc for\r\n // AppId/Tenant token respectively. In Cosmos, only the initial portion of the tenant token is used.\r\n // private static windowsAdminCenterAppId = 'WindowsAdminCenter';\r\n private static windowsAdminCenterTenantToken = 'f78e2b7c9ae4461399c360160d82dcfc-9371288c-a1b9-4fdc-a196-0340fc5f9880-7071';\r\n\r\n /**\r\n * Map of module versions used in this instance of web telemetry - memoize values here.\r\n */\r\n private static moduleVersions = {};\r\n\r\n /**\r\n * Get the list of module versions for use in telemetry where the event is sent via RPC to shell\r\n * from the actual module the event is called in.\r\n * @returns list of module mappings to versions\r\n */\r\n private static getModuleVersion(moduleName: string): string {\r\n if (this.moduleVersions[moduleName]) {\r\n return this.moduleVersions[moduleName];\r\n }\r\n const environment = MsftSme.self().Environment;\r\n const moduleObject = environment.modules.find((module) => {\r\n return module.name === moduleName;\r\n });\r\n const version = moduleObject ? moduleObject.version : 'N/A';\r\n this.moduleVersions[moduleName] = version;\r\n return version;\r\n }\r\n\r\n /**\r\n * Send any manual events that were triggered prior to telemetry initializing.\r\n */\r\n private static sendBacklogEvents(): void {\r\n this.eventBacklog.forEach(([type, body]: [TelemetryEvents, TelemetryEventBody]) => {\r\n switch (type) {\r\n case TelemetryEvents.Performance: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.tracePerformanceData(body.performance, overrideVals ? overrideVals.content : null);\r\n break;\r\n }\r\n case TelemetryEvents.Lighthouse: {\r\n this.traceLighthouseData(body.lighthouse, body.overrideValues as IContentUpdateOverrideValues);\r\n break;\r\n }\r\n case TelemetryEvents.ModuleOpenPerformance: this.traceModuleOpenPerformance(body.performance); break;\r\n case TelemetryEvents.Action: {\r\n const overrideVals = body.overrideValues as IPageActionOverrideValues;\r\n this.traceAction(body.element, overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.ContentUpdate: {\r\n const overrideVals = body.overrideValues as IContentUpdateOverrideValues;\r\n this.traceContentUpdate(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.PageView: {\r\n const overrideVals = body.overrideValues as IPageViewOverrideValues;\r\n this.tracePageView(overrideVals, body.customProperties);\r\n break;\r\n }\r\n case TelemetryEvents.Notification: this.traceClientNotification(body.notification); break;\r\n default: return;\r\n }\r\n });\r\n this.eventBacklog = [];\r\n }\r\n\r\n /**\r\n * Helper to combine setting metaTags, initialize handler, and\r\n * send any telemetry events that occurred prior to initialization\r\n */\r\n private static configureAndInitTelemetry(): void {\r\n this.setMetaInDom();\r\n this.initTelemetryHandler().subscribe({\r\n next: () => {\r\n this.sendBacklogEvents();\r\n },\r\n error: (error: Error) => {\r\n Logging.logError(this.logSourceName, '{0}: {1}'.format(error.name, error.message));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Helper function to set metaTags in DOM\r\n */\r\n private static setMetaInDom(): void {\r\n // create an indexed table of current meta data.\r\n const metaList = document.head.getElementsByTagName(\"meta\");\r\n const metaIndex = {};\r\n for (let i = 0; i < metaList.length; i++) {\r\n const metaName = metaList[i].getAttribute(\"name\");\r\n if (metaName && metaName.indexOf('awa-') === 0) {\r\n metaIndex[metaName] = metaList[i];\r\n }\r\n }\r\n\r\n // set or replace meta tags in the DOM\r\n for (const [key, value] of Object.entries(this.metaTags)) {\r\n const metaName = `awa-${key}`;\r\n const oldMeta = metaIndex[metaName];\r\n if (oldMeta) {\r\n document.head.removeChild(oldMeta);\r\n }\r\n\r\n const newMeta = document.createElement('meta');\r\n newMeta.name = metaName;\r\n newMeta.content = value;\r\n document.head.appendChild(newMeta);\r\n }\r\n }\r\n\r\n /**\r\n * Update Meta-tags and/or initialize telemetry, depending on whether rpc message came before or after app-context init.\r\n * @param newMetaTags Primarily contains WAC-Session-Id & extension-version, received from RPC message\r\n */\r\n public static updateFromRpcInit(newMetaTags: { [tag: string]: string }): void {\r\n // All the fields will be updated at the same time here, checking one (wac-session-id is the main one) is enough for the check\r\n const shouldInitHere = SmeMetaLabels.SessionId in this.metaTags\r\n && this.metaTags[SmeMetaLabels.SessionId] === 'N/A';\r\n\r\n this.rpcInitAlready = true;\r\n MsftSme.deepAssign(this.metaTags, newMetaTags);\r\n\r\n // If metaTags contains session ID but it's N/A (ie initial init was called already), call the init. If not,\r\n // just wait for normal init to be called in app-context. Depending on timing RPC update can happen before or after.\r\n if (shouldInitHere) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }\r\n\r\n /**\r\n * Load 1DS if does not already exist.\r\n * @param appContext App context currently being used\r\n */\r\n public static init(appContext: AppContext): Observable<boolean> {\r\n if (this.telemetryHandler) {\r\n return EMPTY;\r\n }\r\n\r\n // Set fields we don't need gateway for, if connection to gateway fails, initialize telemetry with limited fields\r\n this.metaTags[SmeMetaLabels.Language] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.Market] = MsftSme.self().Resources.localeId;\r\n this.metaTags[SmeMetaLabels.IsProduction] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = MsftSme.self().Init.isProduction.toString();\r\n this.metaTags[SmeMetaLabels.ExtensionVersion] = MsftSme.self().Environment.version;\r\n this.metaTags[SmeMetaLabels.SessionId] = MsftSme.sessionId();\r\n // Instantiate these initially so they aren't empty values\r\n this.metaTags[SmeMetaLabels.InstallationType] = 'N/A';\r\n this.metaTags[SmeMetaLabels.Build] = 'N/A';\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[MsftSme.self().Init.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = 'N/A';\r\n this.isProd = MsftSme.self().Init.isProduction;\r\n\r\n const gatewayInventoryCache = new GatewayInventoryCache(appContext);\r\n return gatewayInventoryCache.query({})\r\n .pipe(\r\n retry({\r\n count: 2,\r\n delay: error => error.pipe(\r\n delay(1000),\r\n tap(() => Logging.logDebug(this.logSourceName, 'Attempting to query gateway again...')))\r\n }),\r\n take(1),\r\n tap((status: any) => {\r\n const inventory: GatewayInventory = status.instance;\r\n this.isProd = this.isProd\r\n && inventory.gatewayOperationalMode === GatewayOperationalMode.Production;\r\n\r\n this.metaTags[SmeMetaLabels.InstallationType] = inventory.installationType || GatewayInstallationType.Standard;\r\n this.metaTags[SmeMetaLabels.Build] = inventory.gatewayVersion;\r\n this.metaTags[SmeMetaLabels.GatewayMode] = GatewayMode[inventory.mode];\r\n this.metaTags[SmeMetaLabels.GatewayOperationalMode] = GatewayOperationalMode[inventory.gatewayOperationalMode];\r\n this.metaTags[SmeMetaLabels.IsProduction] = this.isProd.toString();\r\n this.metaTags[SmeMetaLabels.Environment] = this.isProd.toString();\r\n // If not shell, handle in RPC handler, because some fields will init after 1DS inits\r\n // If rpc handler has happened already, go ahead with this\r\n if (MsftSme.isShell() || this.rpcInitAlready) {\r\n this.configureAndInitTelemetry();\r\n }\r\n }),\r\n catchError((error) => {\r\n Logging.logWarning(this.logSourceName, 'Telemetry failed to initialized with error {}'.format(error.message));\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Set config and initialize telemetry library handler\r\n */\r\n private static initTelemetryHandler(): Observable<any> {\r\n const observable = new Observable(observer => {\r\n const script: HTMLScriptElement = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnLink;\r\n script.integrity = MsftSme.self().Environment.configuration.telemetry.sourceLibraryCdnIntegrityHash;\r\n script.crossOrigin = 'anonymous';\r\n script.async = true;\r\n\r\n script.onload = () => {\r\n this.telemetryHandler = new oneDS.ApplicationInsights();\r\n const entryType: string = MsftSme.self().Init.entryPointType;\r\n const entryName: string = MsftSme.self().Init.entryPointName;\r\n\r\n const config = {\r\n instrumentationKey: this.windowsAdminCenterTenantToken,\r\n // post channel configuration\r\n channelConfiguration: {\r\n eventsLimitInMem: 50\r\n },\r\n // Properties Plugin configuration\r\n propertyConfiguration: {\r\n userAgent: 'Windows Admin Center',\r\n sessionAsGuid: true\r\n },\r\n // Web Analytics Plugin configuration\r\n webAnalyticsConfiguration: {\r\n autoCapture: {\r\n scroll: false,\r\n pageView: true,\r\n onLoad: false,\r\n onUnload: true,\r\n click: true,\r\n resize: true,\r\n jsError: true,\r\n lineage: true\r\n },\r\n coreData: {\r\n pageName: this.nameOfModule,\r\n // to prevent personal data from being sent in URI\r\n referrerUri: 'windows.admin.center',\r\n requestUri: 'windows.admin.center',\r\n pageTags: {\r\n entryPointName: entryName || '',\r\n entryPointType: entryType || ''\r\n }\r\n },\r\n useShortNameForContentBlob: false\r\n }\r\n };\r\n this.telemetryHandler.initialize(config, []);\r\n this.telemetryHandler.addTelemetryInitializer((event: any) => {\r\n // If we send an event that originates from a different module (eg notifications in shell)\r\n // change the extension version to match module\r\n if (event.baseData.name !== this.nameOfModule) {\r\n event.baseData.properties.pageTags.metaTags[SmeMetaLabels.ExtensionVersion] =\r\n this.getModuleVersion(event.baseData.name);\r\n }\r\n event.baseData.properties.pageTags.screenResolution = {\r\n availableHeight: window.screen.availHeight,\r\n availableWidth: window.screen.availWidth\r\n };\r\n event.baseData.properties.pageTags.frameDetails = { height: window.innerHeight, width: window.innerWidth };\r\n });\r\n observer.next();\r\n observer.complete();\r\n };\r\n script.onerror = () => {\r\n script.remove();\r\n observer.error(new Error('1DS Script could not be loaded'));\r\n };\r\n document.body.appendChild(script);\r\n }).pipe(shareReplay(1));\r\n return observable;\r\n }\r\n\r\n /**\r\n * Send a Page-Action event through Web Telemetry.\r\n * @param element Element action is being executed on\r\n * @param overrideValues Various values to override within default Web Telemetry page action fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceAction(element: Element, overrideValues?: IPageActionOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Action, {\r\n element: element, overrideValues: overrideValues,\r\n customProperties: properties\r\n }]);\r\n }\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.capturePageAction(element, overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Page-View event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry page view fields, see Web Telemetry documentation.\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static tracePageView(overrideValues: IPageViewOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.PageView, { overrideValues: overrideValues }]);\r\n }\r\n return;\r\n }\r\n this.telemetryHandler.capturePageView(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Send a Content-Update event through Web Telemetry.\r\n * @param overrideValues Various values to override within default Web Telemetry content update fields, see Web Telemetry documentation\r\n * @param properties Extra properties in an index signature. These are placed under the data field in partC data.\r\n */\r\n public static traceContentUpdate(overrideValues: IContentUpdateOverrideValues, properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ContentUpdate, { overrideValues: overrideValues, customProperties: properties }]);\r\n }\r\n return;\r\n }\r\n if (!overrideValues.actionType) {\r\n overrideValues.actionType = TelemetryActionTypes.Automatic;\r\n }\r\n this.telemetryHandler.captureContentUpdate(overrideValues, properties);\r\n }\r\n\r\n /**\r\n * Add standard fields onto performance data\r\n * @param data SmePerformanceData to be sent\r\n */\r\n private static fillStandardPerformanceData(data: SmePerformanceData): CompleteSmePerformanceData {\r\n const fullDataPayload: CompleteSmePerformanceData = {\r\n extension: MsftSme.self().Environment.name,\r\n entryPointName: MsftSme.self().Init.entryPointName || '',\r\n url: window.location.pathname,\r\n moduleOpened: false,\r\n totalLoadTime: '',\r\n label: data.label,\r\n sme: {},\r\n resources: {},\r\n navigation: {}\r\n };\r\n // Truncate all decimals to 5 places to avoid cosmos stream from redacting any\r\n // Convert PerformanceNavigationTiming to JSON so we can manipulate it via Object.() methods.\r\n fullDataPayload.totalLoadTime = data.totalLoadTime.toFixed(5);\r\n const timingData = {\r\n 'sme': data.sme || {},\r\n 'resources': data.resources || {},\r\n 'navigation': data.navigation ? data.navigation.toJSON() : {}\r\n };\r\n\r\n for (const [sourceKey, sourceVal] of Object.entries(timingData)) {\r\n for (const [resourceKey, resourceVal] of Object.entries(sourceVal)) {\r\n // navigation has some string-string maps, ignore the string values.\r\n // Convert all numbers back into numbers to preserve types in cosmos stream\r\n if (!MsftSme.isEmpty(sourceVal) && typeof resourceVal === 'number') {\r\n fullDataPayload[sourceKey][resourceKey] = parseFloat(resourceVal.toFixed(7));\r\n }\r\n }\r\n }\r\n\r\n // Set this here if need - often the appLoad times happen before Init is populated,\r\n // so check again to make sure if its actually empty.\r\n if (fullDataPayload.navigation) {\r\n fullDataPayload.entryPointName = MsftSme.self().Init.entryPointName || '';\r\n }\r\n return fullDataPayload;\r\n }\r\n\r\n /**\r\n * Send a content update event. This content update contains an updated sme-specific timings structure with relevant\r\n * performance data under the data field. The original timings data is also contained under the navigation field.\r\n * The structure of the event is such:\r\n * data : { ...,\r\n * \"timings\": {\r\n * \"extension\": [extension-name],\r\n * \"entryPointName\": [entryPointName],\r\n * \"url\": [url-endpoint],\r\n * \"moduleOpened\" : [isModuleOpened],\r\n * \"sme\": {\r\n * [sme-mark] : [mark-timestamps],\r\n * ...\r\n * },\r\n * \"resources\": {\r\n * [resource-endpoint] : [resource-load-complete-timestamps],\r\n * ...\r\n * },\r\n * \"navigation\": {\r\n * [performance-navigation-event]: [navigation-event-timestamps]\r\n * }\r\n * }, ...\r\n * }\r\n * Certain fields are set within this class instead of outside modules since they will always be the same.\r\n * @param dataPayload performance data to be sent through telemetry.\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static tracePerformanceData(dataPayload: SmePerformanceData, contentOverrides?: any): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Performance,\r\n {\r\n performance: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n }\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n\r\n // A for automatic, performance tracking is done automatically.\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Send a content update event - this event will contain timings for lighthouse calculation in the backend\r\n * This can potentially be sent a couple times with overlapping data for one page load event, depending\r\n * on when the TTI is calculated. In this scenario, it will be handled on the backend.\r\n * @param dataPayload Lighthouse data\r\n * @param contentOverrides any content overriding behavior wanted in the performance event\r\n */\r\n public static traceLighthouseData(dataPayload: LighthousePerformanceMetrics, contentOverrides?: any,\r\n properties?: { [name: string]: any }): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Lighthouse,\r\n {\r\n lighthouse: dataPayload,\r\n overrideValues: { content: contentOverrides } as IContentUpdateOverrideValues\r\n }]);\r\n }\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n actionType: TelemetryActionTypes.Automatic,\r\n content: contentOverrides || dataPayload\r\n };\r\n\r\n const customProps = { timings: dataPayload, type: TelemetryEventTypes.Lighthouse };\r\n MsftSme.deepAssign(customProps, properties);\r\n this.telemetryHandler.captureContentUpdate(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * See tracePerformanceData comments, only difference is moduleOpened is true and the contentOverrides\r\n * @param dataPayload performance data to be sent through telemetry.\r\n */\r\n public static traceModuleOpenPerformance(dataPayload: SmePerformanceData): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.ModuleOpenPerformance, { performance: dataPayload }]);\r\n }\r\n return;\r\n }\r\n const data = SmeWebTelemetry.fillStandardPerformanceData(dataPayload);\r\n data.moduleOpened = true;\r\n\r\n const overrideValues: IPageViewPerformanceOverrideValues = {\r\n customTiming: JSON.stringify(data)\r\n };\r\n const customProps = { timings: data, type: TelemetryEventTypes.Performance };\r\n\r\n this.telemetryHandler.capturePageViewPerformance(overrideValues, customProps);\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for notification\r\n * @param clientNotification Client notification to send event for\r\n */\r\n public static traceClientNotification(clientNotification: RpcNotification): void {\r\n if (!this.telemetryHandler) {\r\n if (this.backlogHasSpace) {\r\n this.eventBacklog.push([TelemetryEvents.Notification, { notification: clientNotification }]);\r\n }\r\n return;\r\n }\r\n const overrideValues: IContentUpdateOverrideValues = {\r\n content: {\r\n message: clientNotification.message,\r\n title: clientNotification.title,\r\n state: NotificationState[clientNotification.state],\r\n contentType: TelemetryEventTypes.Notification\r\n },\r\n // If source is not shell, replace pagename with proper source.\r\n pageName: clientNotification.sourceName ? clientNotification.sourceName : this.nameOfModule\r\n };\r\n this.traceContentUpdate(overrideValues, { type: TelemetryEventTypes.Notification });\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static addPowershellId(id: string, command: PowerShellCommand) {\r\n this.powershellIdMap[id] = command;\r\n }\r\n\r\n /**\r\n * Helper function to assign a command to an id in a multi-step workitem process\r\n * @param id The ID of the powershell session to assign\r\n * @param command The command to assign to the session ID\r\n */\r\n public static removePowershellId(id: string) {\r\n delete this.powershellIdMap[id];\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell event. In the case where command is not available,\r\n * use an ID (usually ps session ID, which may correlate with work item id)\r\n * @param command Powershell Command\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object - see interface for more detail.\r\n */\r\n public static tracePowershellEvent(command: PowerShellCommand, state: TelemetryEventStates, details?: PowershellDetails): void {\r\n const id = details ? details.id : null;\r\n const response = details ? details.response : null;\r\n const psCommand = command ? command : this.powershellIdMap[id];\r\n\r\n // Ignore any events that are either null or un-named PS commands.\r\n if ((psCommand && !psCommand.command) || !psCommand) {\r\n return;\r\n }\r\n\r\n // If state is not started and id is provided, remove the ID from the map to save space.\r\n if (state !== TelemetryEventStates.Started && id) {\r\n this.removePowershellId(id);\r\n }\r\n\r\n const psContent = {\r\n psCommand: psCommand.command, state: state, psModule: psCommand.module,\r\n otherData: details && details.otherData ? details.otherData : {}\r\n };\r\n const sourceName = this.nameOfModule;\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, { content: psContent, pageName: sourceName },\r\n { type: TelemetryEventTypes.Powershell });\r\n }\r\n\r\n /**\r\n * Helper to create event boilerplate for powershell batch event. Batch doesn't deal with work items, so\r\n * we can ignore the ID and sourceName handling that the above function handles.\r\n * @param commands Powershell Commands List in properties stringified form. PS Batch events places PS command into a\r\n * '{properties: PSCommand }' string structure.\r\n * @param state State of powershell event (start/end/etc)\r\n * @param details Optional details object contains various optional fields in powershell event.\r\n * @returns\r\n */\r\n public static tracePowershellBatchEvent(commands: string[], state: TelemetryEventStates, details?: PowershellDetails) {\r\n // check that at least one command is valid\r\n if (!commands || commands.length === 0) {\r\n return;\r\n }\r\n\r\n let parsedCommands: string[] = [];\r\n parsedCommands = commands.reduce((commandList, currentCommand) => {\r\n if (currentCommand) {\r\n const parsedCommand = JSON.parse(currentCommand).properties.command;\r\n if (parsedCommand) {\r\n commandList.push(parsedCommand);\r\n }\r\n return commandList;\r\n }\r\n }, parsedCommands);\r\n\r\n const response = details ? details.response : null;\r\n\r\n const psContent = { psCommands: parsedCommands, state: state, otherData: details && details.otherData ? details.otherData : {} };\r\n\r\n if (response && response.error) {\r\n psContent['errorCodes'] = [response.error.code];\r\n } else if (response && response.errors) {\r\n psContent['errorCodes'] = response.errors.map((e) => e.errorType);\r\n psContent.otherData['hResult'] = response.errors.map((e) => e.detailRecord && e.detailRecord.hResult);\r\n }\r\n SmeWebTelemetry.traceAction(null, { content: psContent },\r\n { type: TelemetryEventTypes.Powershell });\r\n }\r\n\r\n /**\r\n * Helper to redactGenericModel function\r\n * Determines whether field should be redacted according to fields provided for redacting and exceptions\r\n * @param key The field in question\r\n * @param keywordsToRedact List of string inclusions to redact - if the field contains any part of this, it will be redacted\r\n * @param exceptions Set of exceptions to the above - if the field matches an exception, it will not be redacted\r\n * @returns True if field should be redacted, false otherwise\r\n */\r\n private static fieldShouldBeRedacted(key: string, keywordsToRedact: string[], exceptions: Set<string>): boolean {\r\n if (exceptions.has(key)) {\r\n return false;\r\n }\r\n\r\n for (const field of keywordsToRedact) {\r\n if (key.toLowerCase().includes(field.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Telemetry utility function to redact a model object. This function will traverse the model in BFS fashion and redact any fields\r\n * that contain any string in the keywordsToRedact array, unless the field is an exception (in the exceptions array).\r\n * This function will not affect keys in StringMaps or Maps - if names exist there, they should be handled separately.\r\n *\r\n * @param model Model to redact\r\n * @param keywordsToRedact List of string inclusions to redact\r\n * @param fieldExceptions List of exceptions to the above\r\n * @returns Redacted model\r\n */\r\n public static redactGenericModel(model: any, keywordsToRedact: string[], fieldExceptions: string[]): any {\r\n const redacted_model: any = JSON.parse(JSON.stringify(model));\r\n const remainingObjects = [redacted_model];\r\n const exceptionSet = new Set(fieldExceptions);\r\n\r\n while (remainingObjects.length > 0) {\r\n const currentTree = remainingObjects[0];\r\n\r\n Object.keys(currentTree).forEach(key => {\r\n if (MsftSme.isPlainObject(currentTree[key])) {\r\n remainingObjects.push(currentTree[key]);\r\n } else if (Array.isArray(currentTree[key]) && currentTree[key].some((field: any) => MsftSme.isPlainObject(field))) {\r\n // If array intermixes objects and non-objects, we will push the objects into the queue and ignore the non-objects.\r\n // The non-objects will avoid redaction, but this should never be a concern in practice.\r\n remainingObjects.push(currentTree[key].filter((field: any) => MsftSme.isPlainObject(field)));\r\n } else if (this.fieldShouldBeRedacted(key, keywordsToRedact, exceptionSet)) {\r\n if (Array.isArray(currentTree[key])) {\r\n for (let i = 0; i < currentTree[key].length; ++i) {\r\n currentTree[key][i] = '***';\r\n }\r\n } else {\r\n currentTree[key] = '***';\r\n }\r\n }\r\n });\r\n remainingObjects.shift();\r\n }\r\n return redacted_model;\r\n }\r\n}\r\n"]}
@@ -13,3 +13,315 @@ export var TelemetryControlType;
13
13
  })(TelemetryControlType || (TelemetryControlType = {}));
14
14
 
15
15
  //# sourceMappingURL=telemetry-control-type.js.map
16
+
17
+ // SIG // Begin signature block
18
+ // SIG // MIInvAYJKoZIhvcNAQcCoIInrTCCJ6kCAQExDzANBglg
19
+ // SIG // hkgBZQMEAgEFADB3BgorBgEEAYI3AgEEoGkwZzAyBgor
20
+ // SIG // BgEEAYI3AgEeMCQCAQEEEBDgyQbOONQRoqMAEEvTUJAC
21
+ // SIG // AQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQg
22
+ // SIG // 45FTGIZ5mJLupyQ6s0tLH+eUmMgWUnobAJFPh9ZktJ+g
23
+ // SIG // gg12MIIF9DCCA9ygAwIBAgITMwAAA68wQA5Mo00FQQAA
24
+ // SIG // AAADrzANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJV
25
+ // SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
26
+ // SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
27
+ // SIG // cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
28
+ // SIG // aWduaW5nIFBDQSAyMDExMB4XDTIzMTExNjE5MDkwMFoX
29
+ // SIG // DTI0MTExNDE5MDkwMFowdDELMAkGA1UEBhMCVVMxEzAR
30
+ // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
31
+ // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
32
+ // SIG // bjEeMBwGA1UEAxMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
33
+ // SIG // MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
34
+ // SIG // zkvLNa2un9GBrYNDoRGkGv7d0PqtTBB4ViYakFbjuWpm
35
+ // SIG // F0KcvDAzzaCWJPhVgIXjz+S8cHEoHuWnp/n+UOljT3eh
36
+ // SIG // A8Rs6Lb1aTYub3tB/e0txewv2sQ3yscjYdtTBtFvEm9L
37
+ // SIG // 8Yv76K3Cxzi/Yvrdg+sr7w8y5RHn1Am0Ff8xggY1xpWC
38
+ // SIG // XFI+kQM18njQDcUqSlwBnexYfqHBhzz6YXA/S0EziYBu
39
+ // SIG // 2O2mM7R6gSyYkEOHgIGTVOGnOvvC5xBgC4KNcnQuQSRL
40
+ // SIG // iUI2CmzU8vefR6ykruyzt1rNMPI8OqWHQtSDKXU5JNqb
41
+ // SIG // k4GNjwzcwbSzOHrxuxWHq91l/vLdVDGDUwIDAQABo4IB
42
+ // SIG // czCCAW8wHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYB
43
+ // SIG // BQUHAwMwHQYDVR0OBBYEFEcccTTyBDxkjvJKs/m4AgEF
44
+ // SIG // hl7BMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQLExVNaWNy
45
+ // SIG // b3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAx
46
+ // SIG // Mis1MDE4MjYwHwYDVR0jBBgwFoAUSG5k5VAF04KqFzc3
47
+ // SIG // IrVtqMp1ApUwVAYDVR0fBE0wSzBJoEegRYZDaHR0cDov
48
+ // SIG // L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj
49
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNybDBhBggr
50
+ // SIG // BgEFBQcBAQRVMFMwUQYIKwYBBQUHMAKGRWh0dHA6Ly93
51
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWlj
52
+ // SIG // Q29kU2lnUENBMjAxMV8yMDExLTA3LTA4LmNydDAMBgNV
53
+ // SIG // HRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQCEsRbf
54
+ // SIG // 80dn60xTweOWHZoWaQdpzSaDqIvqpYHE5ZzuEMJWDdcP
55
+ // SIG // 72MGw8v6BSaJQ+a+hTCXdERnIBDPKvU4ENjgu4EBJocH
56
+ // SIG // lSe8riiZUAR+z+z4OUYqoFd3EqJyfjjOJBR2z94Dy4ss
57
+ // SIG // 7LEkHUbj2NZiFqBoPYu2OGQvEk+1oaUsnNKZ7Nl7FHtV
58
+ // SIG // 7CI2lHBru83e4IPe3glIi0XVZJT5qV6Gx/QhAFmpEVBj
59
+ // SIG // SAmDdgII4UUwuI9yiX6jJFNOEek6MoeP06LMJtbqA3Bq
60
+ // SIG // +ZWmJ033F97uVpyaiS4bj3vFI/ZBgDnMqNDtZjcA2vi4
61
+ // SIG // RRMweggd9vsHyTLpn6+nXoLy03vMeebq0C3k44pgUIEu
62
+ // SIG // PQUlJIRTe6IrN3GcjaZ6zHGuQGWgu6SyO9r7qkrEpS2p
63
+ // SIG // RjnGZjx2RmCamdAWnDdu+DmfNEPAddYjaJJ7PTnd+PGz
64
+ // SIG // G+WeH4ocWgVnm5fJFhItjj70CJjgHqt57e1FiQcyWCwB
65
+ // SIG // hKX2rGgN2UICHBF3Q/rsKOspjMw2OlGphTn2KmFl5J7c
66
+ // SIG // Qxru54A9roClLnHGCiSUYos/iwFHI/dAVXEh0S0KKfTf
67
+ // SIG // M6AC6/9bCbsD61QLcRzRIElvgCgaiMWFjOBL99pemoEl
68
+ // SIG // AHsyzG6uX93fMfas09N9YzA0/rFAKAsNDOcFbQlEHKiD
69
+ // SIG // T7mI20tVoCcmSIhJATCCB3owggVioAMCAQICCmEOkNIA
70
+ // SIG // AAAAAAMwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYT
71
+ // SIG // AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
72
+ // SIG // EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
73
+ // SIG // cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290
74
+ // SIG // IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDExMB4XDTEx
75
+ // SIG // MDcwODIwNTkwOVoXDTI2MDcwODIxMDkwOVowfjELMAkG
76
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
77
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
78
+ // SIG // dCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9zb2Z0
79
+ // SIG // IENvZGUgU2lnbmluZyBQQ0EgMjAxMTCCAiIwDQYJKoZI
80
+ // SIG // hvcNAQEBBQADggIPADCCAgoCggIBAKvw+nIQHC6t2G6q
81
+ // SIG // ghBNNLrytlghn0IbKmvpWlCquAY4GgRJun/DDB7dN2vG
82
+ // SIG // EtgL8DjCmQawyDnVARQxQtOJDXlkh36UYCRsr55JnOlo
83
+ // SIG // XtLfm1OyCizDr9mpK656Ca/XllnKYBoF6WZ26DJSJhIv
84
+ // SIG // 56sIUM+zRLdd2MQuA3WraPPLbfM6XKEW9Ea64DhkrG5k
85
+ // SIG // NXimoGMPLdNAk/jj3gcN1Vx5pUkp5w2+oBN3vpQ97/vj
86
+ // SIG // K1oQH01WKKJ6cuASOrdJXtjt7UORg9l7snuGG9k+sYxd
87
+ // SIG // 6IlPhBryoS9Z5JA7La4zWMW3Pv4y07MDPbGyr5I4ftKd
88
+ // SIG // gCz1TlaRITUlwzluZH9TupwPrRkjhMv0ugOGjfdf8NBS
89
+ // SIG // v4yUh7zAIXQlXxgotswnKDglmDlKNs98sZKuHCOnqWbs
90
+ // SIG // YR9q4ShJnV+I4iVd0yFLPlLEtVc/JAPw0XpbL9Uj43Bd
91
+ // SIG // D1FGd7P4AOG8rAKCX9vAFbO9G9RVS+c5oQ/pI0m8GLhE
92
+ // SIG // fEXkwcNyeuBy5yTfv0aZxe/CHFfbg43sTUkwp6uO3+xb
93
+ // SIG // n6/83bBm4sGXgXvt1u1L50kppxMopqd9Z4DmimJ4X7Iv
94
+ // SIG // hNdXnFy/dygo8e1twyiPLI9AN0/B4YVEicQJTMXUpUMv
95
+ // SIG // dJX3bvh4IFgsE11glZo+TzOE2rCIF96eTvSWsLxGoGyY
96
+ // SIG // 0uDWiIwLAgMBAAGjggHtMIIB6TAQBgkrBgEEAYI3FQEE
97
+ // SIG // AwIBADAdBgNVHQ4EFgQUSG5k5VAF04KqFzc3IrVtqMp1
98
+ // SIG // ApUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYD
99
+ // SIG // VR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
100
+ // SIG // BBgwFoAUci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0f
101
+ // SIG // BFMwUTBPoE2gS4ZJaHR0cDovL2NybC5taWNyb3NvZnQu
102
+ // SIG // Y29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0
103
+ // SIG // MjAxMV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRS
104
+ // SIG // MFAwTgYIKwYBBQUHMAKGQmh0dHA6Ly93d3cubWljcm9z
105
+ // SIG // b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx
106
+ // SIG // MV8yMDExXzAzXzIyLmNydDCBnwYDVR0gBIGXMIGUMIGR
107
+ // SIG // BgkrBgEEAYI3LgMwgYMwPwYIKwYBBQUHAgEWM2h0dHA6
108
+ // SIG // Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvZG9jcy9w
109
+ // SIG // cmltYXJ5Y3BzLmh0bTBABggrBgEFBQcCAjA0HjIgHQBM
110
+ // SIG // AGUAZwBhAGwAXwBwAG8AbABpAGMAeQBfAHMAdABhAHQA
111
+ // SIG // ZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEA
112
+ // SIG // Z/KGpZjgVHkaLtPYdGcimwuWEeFjkplCln3SeQyQwWVf
113
+ // SIG // Liw++MNy0W2D/r4/6ArKO79HqaPzadtjvyI1pZddZYSQ
114
+ // SIG // fYtGUFXYDJJ80hpLHPM8QotS0LD9a+M+By4pm+Y9G6XU
115
+ // SIG // tR13lDni6WTJRD14eiPzE32mkHSDjfTLJgJGKsKKELuk
116
+ // SIG // qQUMm+1o+mgulaAqPyprWEljHwlpblqYluSD9MCP80Yr
117
+ // SIG // 3vw70L01724lruWvJ+3Q3fMOr5kol5hNDj0L8giJ1h/D
118
+ // SIG // Mhji8MUtzluetEk5CsYKwsatruWy2dsViFFFWDgycSca
119
+ // SIG // f7H0J/jeLDogaZiyWYlobm+nt3TDQAUGpgEqKD6CPxNN
120
+ // SIG // ZgvAs0314Y9/HG8VfUWnduVAKmWjw11SYobDHWM2l4bf
121
+ // SIG // 2vP48hahmifhzaWX0O5dY0HjWwechz4GdwbRBrF1HxS+
122
+ // SIG // YWG18NzGGwS+30HHDiju3mUv7Jf2oVyW2ADWoUa9WfOX
123
+ // SIG // pQlLSBCZgB/QACnFsZulP0V3HjXG0qKin3p6IvpIlR+r
124
+ // SIG // +0cjgPWe+L9rt0uX4ut1eBrs6jeZeRhL/9azI2h15q/6
125
+ // SIG // /IvrC4DqaTuv/DDtBEyO3991bWORPdGdVk5Pv4BXIqF4
126
+ // SIG // ETIheu9BCrE/+6jMpF3BoYibV3FWTkhFwELJm3ZbCoBI
127
+ // SIG // a/15n8G9bW1qyVJzEw16UM0xghmeMIIZmgIBATCBlTB+
128
+ // SIG // MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
129
+ // SIG // bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
130
+ // SIG // cm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNy
131
+ // SIG // b3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExAhMzAAAD
132
+ // SIG // rzBADkyjTQVBAAAAAAOvMA0GCWCGSAFlAwQCAQUAoIGu
133
+ // SIG // MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisG
134
+ // SIG // AQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3
135
+ // SIG // DQEJBDEiBCBWyFbycjD2yQtr5U7upB5dT4CnLW9HolQt
136
+ // SIG // 4tewqKK+LTBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBp
137
+ // SIG // AGMAcgBvAHMAbwBmAHShGoAYaHR0cDovL3d3dy5taWNy
138
+ // SIG // b3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIBAIvr2pyI
139
+ // SIG // ERZWM+c0/ZYSc6kYQMlp0gJ8SgYt+DeiKRC6hOR7sET1
140
+ // SIG // NORVLT9Rt/U0lVxEQ/tQnD3xbbVy2IAVo3kuCOOOTbfg
141
+ // SIG // BKf44wLaURPHw5h3nspq9B2UqsEObFUoHHpfTmrXBqCv
142
+ // SIG // uCv++5yQaBaJMwFBrG+8cKwkEtBfLjAkG5/JN2qrjXCN
143
+ // SIG // 8aNR1tGDF1oHu4THqYj1pVyGx6rVysZ72r2VfMdPdmrf
144
+ // SIG // wiQ/5KbWC3bafwoLVxUaQV7rhaY60J2jvNbjTtyO7rEk
145
+ // SIG // Ueufrm4pWNm6jHv7NEGvxdZiFSxL0mbHlm1ZU0hAW+lC
146
+ // SIG // 5QhpjtgK7GGY9cX3mIILT9OesUGhghcoMIIXJAYKKwYB
147
+ // SIG // BAGCNwMDATGCFxQwghcQBgkqhkiG9w0BBwKgghcBMIIW
148
+ // SIG // /QIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWAYLKoZIhvcN
149
+ // SIG // AQkQAQSgggFHBIIBQzCCAT8CAQEGCisGAQQBhFkKAwEw
150
+ // SIG // MTANBglghkgBZQMEAgEFAAQg5CoVKqr4B+mQD4P+xkOz
151
+ // SIG // /W52sQEdZJPBHxd9sygERVsCBmZzEYRKVRgSMjAyNDA2
152
+ // SIG // MjcwNjI1MDAuMTRaMASAAgH0oIHYpIHVMIHSMQswCQYD
153
+ // SIG // VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
154
+ // SIG // A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
155
+ // SIG // IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
156
+ // SIG // SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNV
157
+ // SIG // BAsTHVRoYWxlcyBUU1MgRVNOOkQwODItNEJGRC1FRUJB
158
+ // SIG // MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
159
+ // SIG // ZXJ2aWNloIIReDCCBycwggUPoAMCAQICEzMAAAHcweCM
160
+ // SIG // wl9YXo4AAQAAAdwwDQYJKoZIhvcNAQELBQAwfDELMAkG
161
+ // SIG // A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
162
+ // SIG // BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m
163
+ // SIG // dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
164
+ // SIG // IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMDEyMTkw
165
+ // SIG // NzA2WhcNMjUwMTEwMTkwNzA2WjCB0jELMAkGA1UEBhMC
166
+ // SIG // VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
167
+ // SIG // B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
168
+ // SIG // b3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxh
169
+ // SIG // bmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1U
170
+ // SIG // aGFsZXMgVFNTIEVTTjpEMDgyLTRCRkQtRUVCQTElMCMG
171
+ // SIG // A1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
172
+ // SIG // ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
173
+ // SIG // AIvIsyA1sjg9kSKJzelrUWF5ShqYWL83amn3SE5JyIVP
174
+ // SIG // UC7F6qTcLphhHZ9idf21f0RaGrU8EHydF8NxPMR2KVNi
175
+ // SIG // AtCGPJa8kV1CGvn3beGB2m2ltmqJanG71mAywrkKATYn
176
+ // SIG // iwKLPQLJ00EkXw5TSwfmJXbdgQLFlHyfA5Kg+pUsJXzq
177
+ // SIG // umkIvEr0DXPvptAGqkdFLKwo4BTlEgnvzeTfXukzX8vQ
178
+ // SIG // tTALfVJuTUgRU7zoP/RFWt3WagahZ6UloI0FC8XlBQDV
179
+ // SIG // DX5JeMEsx7jgJDdEnK44Y8gHuEWRDq+SG9Xo0GIOjiuT
180
+ // SIG // WD5uv3vlEmIAyR/7rSFvcLnwAqMdqcy/iqQPMlDOcd0A
181
+ // SIG // bniP8ia1BQEUnfZT3UxyK9rLB/SRiKPyHDlg8oWwXyiv
182
+ // SIG // 3+bGB6dmdM61ur6nUtfDf51lPcKhK4Vo83pOE1/niWlV
183
+ // SIG // nEHQV9NJ5/DbUSqW2RqTUa2O2KuvsyRGMEgjGJA12/Sq
184
+ // SIG // rRqlvE2fiN5ZmZVtqSPWaIasx7a0GB+fdTw+geRn6Mo2
185
+ // SIG // S6+/bZEwS/0IJ5gcKGinNbfyQ1xrvWXPtXzKOfjkh75i
186
+ // SIG // RuXourGVPRqkmz5UYz+R5ybMJWj+mfcGqz2hXV8iZnCZ
187
+ // SIG // DBrrnZivnErCMh5Flfg8496pT0phjUTH2GChHIvE4SDS
188
+ // SIG // k2hwWP/uHB9gEs8p/9Pe/mt9AgMBAAGjggFJMIIBRTAd
189
+ // SIG // BgNVHQ4EFgQU6HPSBd0OfEX3uNWsdkSraUGe3dswHwYD
190
+ // SIG // VR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYD
191
+ // SIG // VR0fBFgwVjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3Nv
192
+ // SIG // ZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVGlt
193
+ // SIG // ZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsG
194
+ // SIG // AQUFBwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3
195
+ // SIG // dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNy
196
+ // SIG // b3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx
197
+ // SIG // KS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAK
198
+ // SIG // BggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCB4AwDQYJKoZI
199
+ // SIG // hvcNAQELBQADggIBANnrb8Ewr8eX/H1sKt3rnwTDx4Aq
200
+ // SIG // gHbkMNQo+kUGwCINXS3y1GUcdqsK/R1g6Tf7tNx1q0Np
201
+ // SIG // Kk1JTupUJfHdExKtkuhHA+82lT7yISp/Y74dqJ03RCT4
202
+ // SIG // Q+8ooQXTMzxiewfErVLt8WefebncST0i6ypKv87pCYkx
203
+ // SIG // M24bbqbM/V+M5VBppCUs7R+cETiz/zEA1AbZL/viXtHm
204
+ // SIG // ryA0CGd+Pt9c+adsYfm7qe5UMnS0f/YJmEEMkEqGXCzy
205
+ // SIG // LK+dh+UsFi0d4lkdcE+Zq5JNjIHesX1wztGVAtvX0DYD
206
+ // SIG // ZdN2WZ1kk+hOMblUV/L8n1YWzhP/5XQnYl03AfXErn+1
207
+ // SIG // Eatylifzd3ChJ1xuGG76YbWgiRXnDvCiwDqvUJevVRY1
208
+ // SIG // qy4y4vlVKaShtbdfgPyGeeJ/YcSBONOc0DNTWbjMbL50
209
+ // SIG // qeIEC0lHSpL2rRYNVu3hsHzG8n5u5CQajPwx9PzpsZIe
210
+ // SIG // FTNHyVF6kujI4Vo9NvO/zF8Ot44IMj4M7UX9Za4QwGf5
211
+ // SIG // B71x57OjaX53gxT4vzoHvEBXF9qCmHRgXBLbRomJfDn6
212
+ // SIG // 0alzv7dpCVQIuQ062nyIZKnsXxzuKFb0TjXWw6OFpG1b
213
+ // SIG // sjXpOo5DMHkysribxHor4Yz5dZjVyHANyKo0bSrAlVei
214
+ // SIG // hcaG5F74SZT8FtyHAW6IgLc5w/3D+R1obDhKZ21WMIIH
215
+ // SIG // cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTAN
216
+ // SIG // BgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzAR
217
+ // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
218
+ // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
219
+ // SIG // bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
220
+ // SIG // aWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgy
221
+ // SIG // MjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJV
222
+ // SIG // UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
223
+ // SIG // UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
224
+ // SIG // cmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1T
225
+ // SIG // dGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQAD
226
+ // SIG // ggIPADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT
227
+ // SIG // /e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3
228
+ // SIG // lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3
229
+ // SIG // po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8
230
+ // SIG // OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc
231
+ // SIG // nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjks
232
+ // SIG // UZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWY
233
+ // SIG // bWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyziYrLN
234
+ // SIG // ueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1
235
+ // SIG // zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM
236
+ // SIG // 9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8
237
+ // SIG // P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoY
238
+ // SIG // WmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItb
239
+ // SIG // oKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQc
240
+ // SIG // xWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8Fdsa
241
+ // SIG // N8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMB
242
+ // SIG // AAGjggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMG
243
+ // SIG // CSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E
244
+ // SIG // 7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIw
245
+ // SIG // XAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/Bggr
246
+ // SIG // BgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
247
+ // SIG // L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1Ud
248
+ // SIG // JQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoA
249
+ // SIG // UwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8E
250
+ // SIG // BTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQ
251
+ // SIG // W9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j
252
+ // SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
253
+ // SIG // L01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggr
254
+ // SIG // BgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93
255
+ // SIG // d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9v
256
+ // SIG // Q2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEB
257
+ // SIG // CwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2
258
+ // SIG // Pk5HZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP
259
+ // SIG // +2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J
260
+ // SIG // 6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1
261
+ // SIG // JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthIS
262
+ // SIG // EV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC
263
+ // SIG // gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QM
264
+ // SIG // vOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJv
265
+ // SIG // EKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEUBHG/
266
+ // SIG // ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo
267
+ // SIG // 3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1
268
+ // SIG // V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g7
269
+ // SIG // 5LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuP
270
+ // SIG // Ntq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0
271
+ // SIG // dFtq0Z4+7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lw
272
+ // SIG // Y1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtQwggI9
273
+ // SIG // AgEBMIIBAKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR
274
+ // SIG // BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
275
+ // SIG // bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
276
+ // SIG // bjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3Bl
277
+ // SIG // cmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMg
278
+ // SIG // VFNTIEVTTjpEMDgyLTRCRkQtRUVCQTElMCMGA1UEAxMc
279
+ // SIG // TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEB
280
+ // SIG // MAcGBSsOAwIaAxUAHDn/cz+3yRkIUCJfSbL3djnQEqag
281
+ // SIG // gYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
282
+ // SIG // V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
283
+ // SIG // A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
284
+ // SIG // VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
285
+ // SIG // MDANBgkqhkiG9w0BAQUFAAIFAOoncoUwIhgPMjAyNDA2
286
+ // SIG // MjcxMzA5MjVaGA8yMDI0MDYyODEzMDkyNVowdDA6Bgor
287
+ // SIG // BgEEAYRZCgQBMSwwKjAKAgUA6idyhQIBADAHAgEAAgIF
288
+ // SIG // jjAHAgEAAgISsDAKAgUA6ijEBQIBADA2BgorBgEEAYRZ
289
+ // SIG // CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6Eg
290
+ // SIG // oQowCAIBAAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBACgE
291
+ // SIG // w7PBw6tFinpkZeAhktBS3GDx14y6lIf8Pvby3VdLZDXh
292
+ // SIG // ndOOzqSekVBdIF+v1RbwVYp7yHatzbpSwOnqQnULj7Bu
293
+ // SIG // u0qaMurtpe5m10ekZKF/ksXqfaPXFplXyE8hp6pOJ67y
294
+ // SIG // IAfhSgKcW9tW2RpYsUsI6V13J1dFNDGx8iRLMYIEDTCC
295
+ // SIG // BAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
296
+ // SIG // Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
297
+ // SIG // BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
298
+ // SIG // A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
299
+ // SIG // MTACEzMAAAHcweCMwl9YXo4AAQAAAdwwDQYJYIZIAWUD
300
+ // SIG // BAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B
301
+ // SIG // CRABBDAvBgkqhkiG9w0BCQQxIgQghtGQ0+ngssqtTUVg
302
+ // SIG // RGjfW7XzoOEn7NgxZAHSZR7yuygwgfoGCyqGSIb3DQEJ
303
+ // SIG // EAIvMYHqMIHnMIHkMIG9BCBTpxeKatlEP4y8qZzjuWL0
304
+ // SIG // Ou0IqxELDhX2TLylxIINNzCBmDCBgKR+MHwxCzAJBgNV
305
+ // SIG // BAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
306
+ // SIG // VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
307
+ // SIG // Q29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
308
+ // SIG // aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAAB3MHgjMJfWF6O
309
+ // SIG // AAEAAAHcMCIEIHvz/+xVWa7I6q5nxvpg+v3poL5vpvaM
310
+ // SIG // jodGgf7fmYYcMA0GCSqGSIb3DQEBCwUABIICAD4F8yjq
311
+ // SIG // raidtszfNRzQnNVMzhwFGmyObmHPfm1BzQj7tAL9smkl
312
+ // SIG // wbtWU0lXH9L8f7TSoZOoMP1i7WCcr+bwxBM6VwYcpN20
313
+ // SIG // QuntWB56zchqeWLPW4amCNP9rW0IO4oNSMS523PQnE9A
314
+ // SIG // 5at+g6Y37e+8uU0NHRhaT0pdgmBQtSPoxKfTu+Zp7l2A
315
+ // SIG // RmLTXL9WtdFVAWvxZcn7kqDvK/7f9TPL1BMQkwhyRnzk
316
+ // SIG // uOiNJuiui35jgJHBw9VQvOTtvaFUD0e9OdS34KsV5SPL
317
+ // SIG // 1PxizvAnPu2fjKr5Rx5+kr1Ix+emFMLYOP7ewpafjIaq
318
+ // SIG // hy1/CQV/NUMmsIJJH+KzCXoD6gvw7tNew1aEK1Wlcbk4
319
+ // SIG // sdy80PmPauiA3mbH+sM5jDO2xjzalDtg6UhH643KlCew
320
+ // SIG // FRcMa/RRrUxMeUI2FU5LaVIK/QVPqXZlhhqW9xP8xfh/
321
+ // SIG // 5yLUfRQAH9JdNdb4MdyFCisoo++4RXZbjfaTFVZ4y+uH
322
+ // SIG // lW21+Onv4cBoVgZ/8e/TjB84ly+LxuHi45V6xeMl7nu0
323
+ // SIG // eed1puV9b7VQPbySnJyyxEuK0reGfk7dvLQ8m3VOS2jr
324
+ // SIG // pxUP6no+QR7WZNH3Wt3WXaUcMpnsWFONdJIAiQ2Da/RZ
325
+ // SIG // e3chB8x8bRlmPy5+9y1dmSgLI/uKuFFoNf4EmmNGnE/Q
326
+ // SIG // BjqMGl0qsM+SjBZt
327
+ // SIG // End signature block