@gitpod/gitpod-protocol 0.1.5-update-ovsx.0 → 0.1.5-update-yarnlock.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 (455) hide show
  1. package/data/gitpod-schema.json +159 -25
  2. package/lib/accounting-protocol.d.ts +165 -0
  3. package/lib/accounting-protocol.d.ts.map +1 -0
  4. package/lib/accounting-protocol.js +120 -0
  5. package/lib/accounting-protocol.js.map +1 -0
  6. package/lib/admin-protocol.d.ts +51 -6
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +17 -2
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +44 -0
  11. package/lib/analytics.d.ts.map +1 -0
  12. package/lib/analytics.js +10 -0
  13. package/lib/analytics.js.map +1 -0
  14. package/lib/attribution.d.ts +25 -0
  15. package/lib/attribution.d.ts.map +1 -0
  16. package/lib/attribution.js +58 -0
  17. package/lib/attribution.js.map +1 -0
  18. package/lib/auth.d.ts +25 -0
  19. package/lib/auth.d.ts.map +1 -0
  20. package/lib/auth.js +16 -0
  21. package/lib/auth.js.map +1 -0
  22. package/lib/billing-mode.d.ts +45 -0
  23. package/lib/billing-mode.d.ts.map +1 -0
  24. package/lib/billing-mode.js +44 -0
  25. package/lib/billing-mode.js.map +1 -0
  26. package/lib/blocked-repositories-protocol.d.ts +13 -0
  27. package/lib/blocked-repositories-protocol.d.ts.map +1 -0
  28. package/lib/blocked-repositories-protocol.js +8 -0
  29. package/lib/blocked-repositories-protocol.js.map +1 -0
  30. package/lib/context-url.d.ts +30 -0
  31. package/lib/context-url.d.ts.map +1 -0
  32. package/lib/context-url.js +100 -0
  33. package/lib/context-url.js.map +1 -0
  34. package/lib/context-url.spec.d.ts +12 -0
  35. package/lib/context-url.spec.d.ts.map +1 -0
  36. package/lib/context-url.spec.js +81 -0
  37. package/lib/context-url.spec.js.map +1 -0
  38. package/lib/encryption/container-module.d.ts +2 -2
  39. package/lib/encryption/container-module.d.ts.map +1 -1
  40. package/lib/encryption/container-module.js +8 -6
  41. package/lib/encryption/container-module.js.map +1 -1
  42. package/lib/encryption/encryption-engine.d.ts +2 -2
  43. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  44. package/lib/encryption/encryption-engine.js +28 -28
  45. package/lib/encryption/encryption-engine.js.map +1 -1
  46. package/lib/encryption/encryption-engine.spec.d.ts +3 -3
  47. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  48. package/lib/encryption/encryption-engine.spec.js +32 -39
  49. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  50. package/lib/encryption/encryption-service.d.ts +2 -2
  51. package/lib/encryption/encryption-service.d.ts.map +1 -1
  52. package/lib/encryption/encryption-service.js +33 -46
  53. package/lib/encryption/encryption-service.js.map +1 -1
  54. package/lib/encryption/key-provider.d.ts +3 -3
  55. package/lib/encryption/key-provider.d.ts.map +1 -1
  56. package/lib/encryption/key-provider.js +34 -40
  57. package/lib/encryption/key-provider.js.map +1 -1
  58. package/lib/env.d.ts +2 -8
  59. package/lib/env.d.ts.map +1 -1
  60. package/lib/env.js +10 -29
  61. package/lib/env.js.map +1 -1
  62. package/lib/experiments/always-default.d.ts +8 -0
  63. package/lib/experiments/always-default.d.ts.map +1 -0
  64. package/lib/experiments/always-default.js +20 -0
  65. package/lib/experiments/always-default.js.map +1 -0
  66. package/lib/experiments/configcat-server.d.ts +10 -0
  67. package/lib/experiments/configcat-server.d.ts.map +1 -0
  68. package/lib/experiments/configcat-server.js +37 -0
  69. package/lib/experiments/configcat-server.js.map +1 -0
  70. package/lib/experiments/configcat.d.ts +21 -0
  71. package/lib/experiments/configcat.d.ts.map +1 -0
  72. package/lib/experiments/configcat.js +51 -0
  73. package/lib/experiments/configcat.js.map +1 -0
  74. package/lib/experiments/types.d.ts +22 -0
  75. package/lib/experiments/types.d.ts.map +1 -0
  76. package/lib/experiments/types.js +10 -0
  77. package/lib/experiments/types.js.map +1 -0
  78. package/lib/frontend-dashboard-service.d.ts +99 -0
  79. package/lib/frontend-dashboard-service.d.ts.map +1 -0
  80. package/lib/frontend-dashboard-service.js +55 -0
  81. package/lib/frontend-dashboard-service.js.map +1 -0
  82. package/lib/gitpod-file-parser.d.ts +2 -2
  83. package/lib/gitpod-file-parser.d.ts.map +1 -1
  84. package/lib/gitpod-file-parser.js +29 -44
  85. package/lib/gitpod-file-parser.js.map +1 -1
  86. package/lib/gitpod-file-parser.spec.d.ts +2 -2
  87. package/lib/gitpod-file-parser.spec.js +147 -144
  88. package/lib/gitpod-file-parser.spec.js.map +1 -1
  89. package/lib/gitpod-service.d.ts +290 -50
  90. package/lib/gitpod-service.d.ts.map +1 -1
  91. package/lib/gitpod-service.js +288 -123
  92. package/lib/gitpod-service.js.map +1 -1
  93. package/lib/headless-workspace-log.d.ts +11 -13
  94. package/lib/headless-workspace-log.d.ts.map +1 -1
  95. package/lib/headless-workspace-log.js +8 -9
  96. package/lib/headless-workspace-log.js.map +1 -1
  97. package/lib/ide-frontend-service.d.ts +26 -0
  98. package/lib/ide-frontend-service.d.ts.map +1 -0
  99. package/lib/ide-frontend-service.js +8 -0
  100. package/lib/ide-frontend-service.js.map +1 -0
  101. package/lib/ide-protocol.d.ts +126 -0
  102. package/lib/ide-protocol.d.ts.map +1 -0
  103. package/lib/ide-protocol.js +18 -0
  104. package/lib/ide-protocol.js.map +1 -0
  105. package/lib/index.d.ts +18 -12
  106. package/lib/index.d.ts.map +1 -1
  107. package/lib/index.js +28 -13
  108. package/lib/index.js.map +1 -1
  109. package/lib/installation-admin-protocol.d.ts +30 -0
  110. package/lib/installation-admin-protocol.d.ts.map +1 -0
  111. package/lib/installation-admin-protocol.js +31 -0
  112. package/lib/installation-admin-protocol.js.map +1 -0
  113. package/lib/license-protocol.d.ts +9 -2
  114. package/lib/license-protocol.d.ts.map +1 -1
  115. package/lib/license-protocol.js +3 -2
  116. package/lib/license-protocol.js.map +1 -1
  117. package/lib/messaging/browser/connection.d.ts +6 -4
  118. package/lib/messaging/browser/connection.d.ts.map +1 -1
  119. package/lib/messaging/browser/connection.js +188 -48
  120. package/lib/messaging/browser/connection.js.map +1 -1
  121. package/lib/messaging/browser/window-connection.d.ts +9 -4
  122. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  123. package/lib/messaging/browser/window-connection.js +48 -59
  124. package/lib/messaging/browser/window-connection.js.map +1 -1
  125. package/lib/messaging/client-call-metrics.d.ts +21 -0
  126. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  127. package/lib/messaging/client-call-metrics.js +95 -0
  128. package/lib/messaging/client-call-metrics.js.map +1 -0
  129. package/lib/messaging/error.d.ts +18 -4
  130. package/lib/messaging/error.d.ts.map +1 -1
  131. package/lib/messaging/error.js +38 -7
  132. package/lib/messaging/error.js.map +1 -1
  133. package/lib/messaging/handler.d.ts +10 -0
  134. package/lib/messaging/handler.d.ts.map +1 -1
  135. package/lib/messaging/handler.js +2 -1
  136. package/lib/messaging/handler.js.map +1 -1
  137. package/lib/messaging/node/connection.d.ts +1 -17
  138. package/lib/messaging/node/connection.d.ts.map +1 -1
  139. package/lib/messaging/node/connection.js +24 -59
  140. package/lib/messaging/node/connection.js.map +1 -1
  141. package/lib/messaging/proxy-factory.d.ts +3 -1
  142. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  143. package/lib/messaging/proxy-factory.js +76 -162
  144. package/lib/messaging/proxy-factory.js.map +1 -1
  145. package/lib/oss-allowlist.d.ts +14 -0
  146. package/lib/oss-allowlist.d.ts.map +1 -0
  147. package/lib/oss-allowlist.js +8 -0
  148. package/lib/oss-allowlist.js.map +1 -0
  149. package/lib/payment-protocol.d.ts +18 -0
  150. package/lib/payment-protocol.d.ts.map +1 -0
  151. package/lib/payment-protocol.js +13 -0
  152. package/lib/payment-protocol.js.map +1 -0
  153. package/lib/permission.d.ts +26 -15
  154. package/lib/permission.d.ts.map +1 -1
  155. package/lib/permission.js +50 -36
  156. package/lib/permission.js.map +1 -1
  157. package/lib/plans.d.ts +213 -0
  158. package/lib/plans.d.ts.map +1 -0
  159. package/lib/plans.js +625 -0
  160. package/lib/plans.js.map +1 -0
  161. package/lib/protocol.d.ts +338 -111
  162. package/lib/protocol.d.ts.map +1 -1
  163. package/lib/protocol.js +422 -201
  164. package/lib/protocol.js.map +1 -1
  165. package/lib/protocol.spec.d.ts +7 -0
  166. package/lib/protocol.spec.d.ts.map +1 -0
  167. package/lib/protocol.spec.js +127 -0
  168. package/lib/protocol.spec.js.map +1 -0
  169. package/lib/snapshot-url.d.ts +14 -0
  170. package/lib/snapshot-url.d.ts.map +1 -0
  171. package/lib/snapshot-url.js +26 -0
  172. package/lib/snapshot-url.js.map +1 -0
  173. package/lib/snapshot-url.spec.d.ts +7 -0
  174. package/lib/snapshot-url.spec.d.ts.map +1 -0
  175. package/lib/snapshot-url.spec.js +41 -0
  176. package/lib/snapshot-url.spec.js.map +1 -0
  177. package/lib/team-subscription-protocol.d.ts +93 -0
  178. package/lib/team-subscription-protocol.d.ts.map +1 -0
  179. package/lib/team-subscription-protocol.js +82 -0
  180. package/lib/team-subscription-protocol.js.map +1 -0
  181. package/lib/teams-projects-protocol.d.ts +136 -0
  182. package/lib/teams-projects-protocol.d.ts.map +1 -0
  183. package/lib/teams-projects-protocol.js +41 -0
  184. package/lib/teams-projects-protocol.js.map +1 -0
  185. package/lib/typings/globals.d.ts +8 -3
  186. package/lib/typings/globals.d.ts.map +1 -1
  187. package/lib/typings/globals.js +2 -2
  188. package/lib/usage.d.ts +73 -0
  189. package/lib/usage.d.ts.map +1 -0
  190. package/lib/usage.js +20 -0
  191. package/lib/usage.js.map +1 -0
  192. package/lib/util/analytics.d.ts +8 -0
  193. package/lib/util/analytics.d.ts.map +1 -0
  194. package/lib/util/analytics.js +88 -0
  195. package/lib/util/analytics.js.map +1 -0
  196. package/lib/util/async-iterator.d.ts +2 -2
  197. package/lib/util/async-iterator.d.ts.map +1 -1
  198. package/lib/util/async-iterator.js +60 -137
  199. package/lib/util/async-iterator.js.map +1 -1
  200. package/lib/util/cancelable.d.ts +2 -2
  201. package/lib/util/cancelable.js +20 -61
  202. package/lib/util/cancelable.js.map +1 -1
  203. package/lib/util/date-time.d.ts +2 -2
  204. package/lib/util/date-time.js +14 -13
  205. package/lib/util/date-time.js.map +1 -1
  206. package/lib/util/debug-app.d.ts +25 -0
  207. package/lib/util/debug-app.d.ts.map +1 -0
  208. package/lib/util/debug-app.js +100 -0
  209. package/lib/util/debug-app.js.map +1 -0
  210. package/lib/util/deep-partial.d.ts +2 -2
  211. package/lib/util/deep-partial.js +2 -2
  212. package/lib/util/deferred.d.ts +2 -2
  213. package/lib/util/deferred.js +13 -14
  214. package/lib/util/deferred.js.map +1 -1
  215. package/lib/util/disposable.d.ts +2 -2
  216. package/lib/util/disposable.d.ts.map +1 -1
  217. package/lib/util/disposable.js +28 -40
  218. package/lib/util/disposable.js.map +1 -1
  219. package/lib/util/event.d.ts +1 -1
  220. package/lib/util/event.d.ts.map +1 -1
  221. package/lib/util/event.js +64 -77
  222. package/lib/util/event.js.map +1 -1
  223. package/lib/util/garbage-collected-cache.d.ts +3 -2
  224. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  225. package/lib/util/garbage-collected-cache.js +35 -49
  226. package/lib/util/garbage-collected-cache.js.map +1 -1
  227. package/lib/util/generate-workspace-id.d.ts +9 -0
  228. package/lib/util/generate-workspace-id.d.ts.map +1 -0
  229. package/lib/util/generate-workspace-id.js +491 -0
  230. package/lib/util/generate-workspace-id.js.map +1 -0
  231. package/lib/util/generate-workspace-id.spec.d.ts +7 -0
  232. package/lib/util/generate-workspace-id.spec.d.ts.map +1 -0
  233. package/lib/util/generate-workspace-id.spec.js +98 -0
  234. package/lib/util/generate-workspace-id.spec.js.map +1 -0
  235. package/lib/util/gitpod-cookie.d.ts +20 -0
  236. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  237. package/lib/util/gitpod-cookie.js +41 -0
  238. package/lib/util/gitpod-cookie.js.map +1 -0
  239. package/lib/util/gitpod-host-url.d.ts +20 -8
  240. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  241. package/lib/util/gitpod-host-url.js +143 -85
  242. package/lib/util/gitpod-host-url.js.map +1 -1
  243. package/lib/util/gitpod-host-url.spec.d.ts +16 -0
  244. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -0
  245. package/lib/util/gitpod-host-url.spec.js +134 -0
  246. package/lib/util/gitpod-host-url.spec.js.map +1 -0
  247. package/lib/util/grpc.d.ts +35 -0
  248. package/lib/util/grpc.d.ts.map +1 -0
  249. package/lib/util/grpc.js +90 -0
  250. package/lib/util/grpc.js.map +1 -0
  251. package/lib/util/jaeger-client-types.d.ts +68 -0
  252. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  253. package/lib/util/jaeger-client-types.js +8 -0
  254. package/lib/util/jaeger-client-types.js.map +1 -0
  255. package/lib/util/logging.d.ts +58 -35
  256. package/lib/util/logging.d.ts.map +1 -1
  257. package/lib/util/logging.js +144 -129
  258. package/lib/util/logging.js.map +1 -1
  259. package/lib/util/logging.spec.d.ts +7 -0
  260. package/lib/util/logging.spec.d.ts.map +1 -0
  261. package/lib/util/logging.spec.js +52 -0
  262. package/lib/util/logging.spec.js.map +1 -0
  263. package/lib/util/make-link.d.ts +2 -2
  264. package/lib/util/make-link.js +8 -7
  265. package/lib/util/make-link.js.map +1 -1
  266. package/lib/util/nice-grpc.d.ts +9 -0
  267. package/lib/util/nice-grpc.d.ts.map +1 -0
  268. package/lib/util/nice-grpc.js +121 -0
  269. package/lib/util/nice-grpc.js.map +1 -0
  270. package/lib/util/parse-workspace-id.d.ts +15 -5
  271. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  272. package/lib/util/parse-workspace-id.js +39 -9
  273. package/lib/util/parse-workspace-id.js.map +1 -1
  274. package/lib/util/parse-workspace-id.spec.d.ts +10 -2
  275. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  276. package/lib/util/parse-workspace-id.spec.js +130 -49
  277. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  278. package/lib/util/queue.d.ts +2 -2
  279. package/lib/util/queue.js +19 -57
  280. package/lib/util/queue.js.map +1 -1
  281. package/lib/util/queue.spec.d.ts +2 -2
  282. package/lib/util/queue.spec.js +149 -288
  283. package/lib/util/queue.spec.js.map +1 -1
  284. package/lib/util/repeat.d.ts +15 -0
  285. package/lib/util/repeat.d.ts.map +1 -0
  286. package/lib/util/repeat.js +55 -0
  287. package/lib/util/repeat.js.map +1 -0
  288. package/lib/util/semaphore.d.ts +2 -2
  289. package/lib/util/semaphore.d.ts.map +1 -1
  290. package/lib/util/semaphore.js +18 -48
  291. package/lib/util/semaphore.js.map +1 -1
  292. package/lib/util/skip-if.d.ts +2 -2
  293. package/lib/util/skip-if.d.ts.map +1 -1
  294. package/lib/util/skip-if.js +9 -8
  295. package/lib/util/skip-if.js.map +1 -1
  296. package/lib/util/timeutil.d.ts +4 -2
  297. package/lib/util/timeutil.d.ts.map +1 -1
  298. package/lib/util/timeutil.js +43 -18
  299. package/lib/util/timeutil.js.map +1 -1
  300. package/lib/util/timeutil.spec.d.ts +4 -2
  301. package/lib/util/timeutil.spec.d.ts.map +1 -1
  302. package/lib/util/timeutil.spec.js +57 -25
  303. package/lib/util/timeutil.spec.js.map +1 -1
  304. package/lib/util/tracing.d.ts +55 -8
  305. package/lib/util/tracing.d.ts.map +1 -1
  306. package/lib/util/tracing.js +210 -66
  307. package/lib/util/tracing.js.map +1 -1
  308. package/lib/util/tracing.spec.d.ts +7 -0
  309. package/lib/util/tracing.spec.d.ts.map +1 -0
  310. package/lib/util/tracing.spec.js +121 -0
  311. package/lib/util/tracing.spec.js.map +1 -0
  312. package/lib/util/workspace-port-authentication.d.ts +9 -9
  313. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  314. package/lib/util/workspace-port-authentication.js +13 -14
  315. package/lib/util/workspace-port-authentication.js.map +1 -1
  316. package/lib/webhook-event.d.ts +44 -0
  317. package/lib/webhook-event.d.ts.map +1 -0
  318. package/lib/webhook-event.js +8 -0
  319. package/lib/webhook-event.js.map +1 -0
  320. package/lib/workspace-class.d.ts +14 -0
  321. package/lib/workspace-class.d.ts.map +1 -0
  322. package/lib/workspace-class.js +8 -0
  323. package/lib/workspace-class.js.map +1 -0
  324. package/lib/workspace-cluster.d.ts +80 -0
  325. package/lib/workspace-cluster.d.ts.map +1 -0
  326. package/lib/workspace-cluster.js +36 -0
  327. package/lib/workspace-cluster.js.map +1 -0
  328. package/lib/workspace-instance.d.ts +51 -8
  329. package/lib/workspace-instance.d.ts.map +1 -1
  330. package/lib/workspace-instance.js +2 -2
  331. package/lib/wsready.d.ts +8 -2
  332. package/lib/wsready.d.ts.map +1 -1
  333. package/lib/wsready.js +4 -3
  334. package/lib/wsready.js.map +1 -1
  335. package/package.json +42 -18
  336. package/pkg-yarn.lock +24 -10
  337. package/provenance-bundle.jsonl +2 -0
  338. package/src/accounting-protocol.ts +253 -0
  339. package/src/admin-protocol.ts +96 -21
  340. package/src/analytics.ts +52 -0
  341. package/src/attribution.ts +67 -0
  342. package/src/auth.ts +27 -0
  343. package/src/billing-mode.ts +84 -0
  344. package/src/blocked-repositories-protocol.ts +13 -0
  345. package/src/context-url.spec.ts +49 -0
  346. package/src/context-url.ts +107 -0
  347. package/src/encryption/container-module.ts +4 -5
  348. package/src/encryption/encryption-engine.spec.ts +11 -10
  349. package/src/encryption/encryption-engine.ts +22 -18
  350. package/src/encryption/encryption-service.ts +6 -7
  351. package/src/encryption/key-provider.ts +18 -21
  352. package/src/env.ts +3 -26
  353. package/src/experiments/always-default.ts +24 -0
  354. package/src/experiments/configcat-server.ts +42 -0
  355. package/src/experiments/configcat.ts +56 -0
  356. package/src/experiments/types.ts +34 -0
  357. package/src/frontend-dashboard-service.ts +148 -0
  358. package/src/gitpod-file-parser.spec.ts +57 -63
  359. package/src/gitpod-file-parser.ts +18 -19
  360. package/src/gitpod-service.ts +602 -99
  361. package/src/headless-workspace-log.ts +14 -16
  362. package/src/ide-frontend-service.ts +28 -0
  363. package/src/ide-protocol.ts +147 -0
  364. package/src/index.ts +18 -12
  365. package/src/installation-admin-protocol.ts +45 -0
  366. package/src/license-protocol.ts +14 -8
  367. package/src/messaging/browser/connection.ts +202 -26
  368. package/src/messaging/browser/window-connection.ts +45 -29
  369. package/src/messaging/client-call-metrics.ts +94 -0
  370. package/src/messaging/error.ts +51 -10
  371. package/src/messaging/handler.ts +13 -1
  372. package/src/messaging/node/connection.ts +23 -70
  373. package/src/messaging/proxy-factory.ts +35 -34
  374. package/src/oss-allowlist.ts +15 -0
  375. package/src/payment-protocol.ts +20 -0
  376. package/src/permission.ts +53 -40
  377. package/src/plans.ts +699 -0
  378. package/src/protocol.spec.ts +97 -0
  379. package/src/protocol.ts +790 -302
  380. package/src/snapshot-url.spec.ts +27 -0
  381. package/src/snapshot-url.ts +27 -0
  382. package/src/team-subscription-protocol.ts +153 -0
  383. package/src/teams-projects-protocol.ts +180 -0
  384. package/src/typings/globals.ts +13 -5
  385. package/src/usage.ts +85 -0
  386. package/src/util/analytics.ts +109 -0
  387. package/src/util/async-iterator.ts +6 -7
  388. package/src/util/cancelable.ts +5 -5
  389. package/src/util/date-time.ts +10 -10
  390. package/src/util/debug-app.ts +81 -0
  391. package/src/util/deep-partial.ts +2 -2
  392. package/src/util/deferred.ts +8 -8
  393. package/src/util/disposable.ts +3 -6
  394. package/src/util/event.ts +9 -11
  395. package/src/util/garbage-collected-cache.ts +18 -10
  396. package/src/util/generate-workspace-id.spec.ts +58 -0
  397. package/src/util/generate-workspace-id.ts +481 -0
  398. package/src/util/gitpod-cookie.ts +38 -0
  399. package/src/util/gitpod-host-url.spec.ts +76 -0
  400. package/src/util/gitpod-host-url.ts +119 -40
  401. package/src/util/grpc.ts +107 -0
  402. package/src/util/jaeger-client-types.ts +102 -0
  403. package/src/util/logging.spec.ts +23 -0
  404. package/src/util/logging.ts +163 -73
  405. package/src/util/make-link.ts +8 -9
  406. package/src/util/nice-grpc.ts +96 -0
  407. package/src/util/parse-workspace-id.spec.ts +62 -12
  408. package/src/util/parse-workspace-id.ts +40 -10
  409. package/src/util/queue.spec.ts +30 -28
  410. package/src/util/queue.ts +2 -2
  411. package/src/util/repeat.ts +45 -0
  412. package/src/util/semaphore.ts +8 -10
  413. package/src/util/skip-if.ts +12 -9
  414. package/src/util/timeutil.spec.ts +42 -16
  415. package/src/util/timeutil.ts +33 -17
  416. package/src/util/tracing.spec.ts +88 -0
  417. package/src/util/tracing.ts +211 -33
  418. package/src/util/workspace-port-authentication.ts +12 -15
  419. package/src/webhook-event.ts +55 -0
  420. package/src/workspace-class.ts +14 -0
  421. package/src/workspace-cluster.ts +121 -0
  422. package/src/workspace-instance.ts +120 -36
  423. package/src/wsready.ts +11 -4
  424. package/data/builtin-theia-plugins.json +0 -362
  425. package/lib/email-protocol.d.ts +0 -49
  426. package/lib/email-protocol.d.ts.map +0 -1
  427. package/lib/email-protocol.js +0 -27
  428. package/lib/email-protocol.js.map +0 -1
  429. package/lib/messaging/connection-error-handler.d.ts +0 -27
  430. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  431. package/lib/messaging/connection-error-handler.js +0 -45
  432. package/lib/messaging/connection-error-handler.js.map +0 -1
  433. package/lib/theia-plugins.d.ts +0 -11
  434. package/lib/theia-plugins.d.ts.map +0 -1
  435. package/lib/theia-plugins.js +0 -8
  436. package/lib/theia-plugins.js.map +0 -1
  437. package/lib/util/repeater.d.ts +0 -22
  438. package/lib/util/repeater.d.ts.map +0 -1
  439. package/lib/util/repeater.js +0 -117
  440. package/lib/util/repeater.js.map +0 -1
  441. package/lib/util/safe-promise.d.ts +0 -11
  442. package/lib/util/safe-promise.d.ts.map +0 -1
  443. package/lib/util/safe-promise.js +0 -33
  444. package/lib/util/safe-promise.js.map +0 -1
  445. package/lib/util/without.d.ts +0 -7
  446. package/lib/util/without.d.ts.map +0 -1
  447. package/lib/util/without.js +0 -8
  448. package/lib/util/without.js.map +0 -1
  449. package/src/email-protocol.ts +0 -67
  450. package/src/messaging/connection-error-handler.ts +0 -62
  451. package/src/theia-plugins.ts +0 -11
  452. package/src/util/jaeger-client.d.ts +0 -105
  453. package/src/util/repeater.ts +0 -49
  454. package/src/util/safe-promise.ts +0 -26
  455. package/src/util/without.ts +0 -8
@@ -0,0 +1,2 @@
1
+ {"payloadType":"application/vnd.in-toto+json","payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YwLjEiLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vc2xzYS5kZXYvcHJvdmVuYW5jZS92MC4xIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvZXJyb3IuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDY3N2JjNTBkMzQ2ZTc0YWU4NDdjMjdiMDc3YTkwZTA2M2UzNGM4ODNkNTUxZjY1YzU2MGVlMjgwOGIyNDVlZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tZW5naW5lLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImM0MTdmMDhmMGZhODljODRmYTY5ZDhiMDE2ZTljMzMzMTAyMzkzNWI5YjczYTI3YmQ4MzNiNTAyYzM2ZjM2NDMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWluc3RhbmNlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE0ZDgxNzk1NDNkN2M0OGE3ODI0ZDM5NmQyNTAyYWRjNzI3MjJiMDczZWE5Y2NiMWFiMjU3MGZlNTZiYjZjMDQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWNjb3VudGluZy1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDU0ZGFlMzRiMjZkZGNjNjMxMjM2MmI0NzcyMDY4OTE4MDdjMzljYjdmY2Y1NDVmN2RiMTYwOGViZTk4ZmEyMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RyYWNpbmcuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYmVkZTg1MDkxMGIzZjEzMDZkNWJmMWRjZDQ2NjdmODAwMjZkN2ZhNzNjNmUxYTQ5NTQwYjM2YmFmOGNlMTA3OSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9hbHdheXMtZGVmYXVsdC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc4YjdhMWM0NDJmMTI0Y2ZiYzI4MmUyOWMyZDNjOTZiMzM0NTljZGZiNzhiN2Y1ODQwZGUxNDYxNzk2NGFjYWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kZWZlcnJlZC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhODhlOGVlYmZkMzg5MDk5MDhlMzA4YzYwODZiZTM0YzFkYzlhYzUzOGJhMzhmODU1ZTkwMzAxYjc0Nzg0OTFhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2MDEwMzlkZGJiNzZmMmI2OWJhMjQ5YzEyNTIxYWIyOWU0N2FhOTkyYzhlYjA1ZWIwZTE3NzMxNTdlOWY4OTg3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3OTM4NjNjOTYyMDk5ZTE3ZjNiNDBjYWY5ZWUyNjA4ZTk4ZmU5NGZhNWFiYjM5YzRjZmM1NWFmY2RhMTgxMzI2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24va2V5LXByb3ZpZGVyLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODBmYTc5MDA4ODE2ODE1OTBlNjVhNDUzNGNkNWRmZjY1NjZjZTljMTk2MDhkZjQ3ZDY1ZjA2NTZkODQ5YWIyNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3F1ZXVlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjk2MzRlYmZkZDQyYWYyZmFmNjUzZDgzZmI5NjNkOTkzNWMwMDI3MmIzZTM4MTQ3ODFhMWI1OGMzMTQ5Yzk5YWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWNjb3VudGluZy1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1MjdkYzMwNzc1ODI0MTAyZmMwM2E3N2ZmMTg1Nzc2Y2FkNWY3ZjY2NjhlYTEyMzhhYjlmMTA1MWE1ODFhYjYzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9icm93c2VyL3dpbmRvdy1jb25uZWN0aW9uLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3ZmQ1MjFiNzBiNzczZmI4NDhkMTI2OWRjNzU1YWE0YTY2OTNkYTJiMTgzYTg2ODE0NjNlNTRhYWQwODIzMGY1IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FuYWx5dGljcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImEwZTEwMWJkZjJjMjdlNGM4MmNmMGE5YWY0MjI2OWU0ZTIxOTM2N2RlODgyNDdlZmRjNDc1MGY2OTUzNDkwN2QiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxMzg2N2RjZTZkZDRmOTdhMjlmNGY4ZmZjNzQ4NWU3ZmM5ZGEzYTg4N2JiODc5ZjZhNGM4YTU4N2M1MDU3ZmE3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNWFiOGQwOGEzN2I0NjI3NjgwYjkyNjZhY2IxOWE1NjhlZGUzODI2YWU0M2ZmZTEyNjQ4NGI2OWY3OGU2NzU3ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci93aW5kb3ctY29ubmVjdGlvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZjhlNDI3OTQ5MWZkODBiNmYyMzEwOTY4NWMyZDIyNWQ5NzM5Zjk5NzE1MWZlNjM1MTk3YWVjYTVhYWZjZWUzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9ub2RlL2Nvbm5lY3Rpb24uZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzU4YWVlYTY1ZmVkZTQxMGZiOWI3MDU2NThmM2Q5NDIwMDk4YTI0YTE1NTk3NzllMjgwYTVjYjI0ZDYzNDU0NyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZmVycmVkLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjg2NmZjNzlhYTEzMzYwMTA1ZDQzMTMzYmQ5YTQ4MGUwYzVjZDM0YzdjZDdiZDIxZTE4NWU0Yjg1YzMzZWUyZjMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjEzMDM5ZTVmZWExOTAyOTEwNjA1YTM2Y2IyZjVkM2FmMDRlMGU3ZTUwMzM2OTJlM2QxZDllZmE1NzM1ZWNmMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hbmFseXRpY3MuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmEzZjAzZmU4MDY4MDFiNjdiNWQxNjUxN2FhMTk1MWI4YjQ5NmRhODM1YTkwMTZhMjYzOTcyNmNjYmFjNzZjZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9saWNlbnNlLXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2U3NTQ1NjUzNzBiODllZDQ3Y2ZkNjY0MmY4MjcxNjhkYjMyZTBmYjUyZDYyOTBjZjdlZDMzZjk0NzM4NTg0ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzNiYjc0MTI1NWJiNzg0ZWFhNzJlMTY2N2JiNTQ2ZjNiZGM0YWM3MGRkZDVlODcwOWE3M2U1OTI4NGZkMzRiMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy90eXBlcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRiOWVlMzlkNGQ4NTcxMjk0NTJiYTBlOTBjOTU4ODE0NTcyMzQ0NjUwYzA0OGFlNzJlMmRkZTZkNDZlMWU2YWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9qYWVnZXItY2xpZW50LXR5cGVzLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImY2ZmQxNDkxMDU3NjM1NDZkYzM2YTk4NjdlMzQ3MzE5MDM4ZWVmZTQyMjk5NmY2NWNhYzdmMWMxYmZmZWJmZGYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL3Byb3h5LWZhY3RvcnkuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmZjN2I2YWJjYTA2M2VjMjVhMGJiNjIxOTdlZDJlOTQwMWUwZDhkMmI0NzFlODUwYjYxZmMyYTdjNjcwYWJlOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hdXRoLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyODg5MjExNmMyMjYyMDYyYjllOWMzMjQwMGQ3YzhhYWViNzZkNjI3ZTg3OTQ5Zjg1NTRhZjhlZjBmN2ZlY2RjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdGltZXV0aWwuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1ODJhNzA0YzA3YTE1M2M2YzIyNTNiMDdjMTFlMjU2NTE0NjA5YjdkMGY0NTQwOTc1ZjVjODljMWEyYTlkYTJjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYXN5bmMtaXRlcmF0b3IuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE3NjY1M2M0MGIwMDFmZGU1OGE1OWQyYjI5MmE0ZGNhZDVkMTFkZGM0MGYzMjdkYzdlMzBlYWRmY2I4Yzg4ZTMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhYmI1YWU1OTk4OGUzNTMwOWMzZTRkYmJhMjdmZmM4YzIzMGY5YjlkZDEzYTJhYzlkZmU1ZTJjZjFlZGJmMDM4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dvcmtzcGFjZS1jbGFzcy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NTJjMWRmNWMyYzE1MDdlMjlkNDY5ZTI0OTE3ZjQ0OWJhMGU1YzliN2E1NzYwMzU5ZjYzOTA5MWIwYWRkMDdiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9oYW5kbGVyLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxNDM3MzBkMTc3MGNiNjRjMzM2MzE0M2ZiODg2NzgzMmVlODg3YTQwMWI4ZmI1MDMwMzQ2MmM0OTE2Y2JlOTEyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYXN5bmMtaXRlcmF0b3IuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NTBjYzViY2RkYTZkNjJhYWQ5NDc3NjkzNDU4MWQ1ZjEyYzkwY2Y4MWE4YTk3ZDZiZWMyMWE3YmM1ZDYwZWZkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2V4cGVyaW1lbnRzL2NvbmZpZ2NhdC1zZXJ2ZXIuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwNmQxZjlhNDBkMmYzMjkxNGVkMDU4ODViOGFkZTQ1NmQ3NDU2MmU0NDZkZTNiYWUwZDNkMDVhNTJmNDgwZTlhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2V4cGVyaW1lbnRzL2NvbmZpZ2NhdC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiY2RkNzUxNzEzZDJjM2RiOTRjNTFkOWJlYjJhNmJhYmQzOWZjYTI1ODNmYTdlYzBhNWNhZTRlMDQwNDVjYTUwMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTYzOTY1MWZlZjA4YTYxYzY3ZGQwYjkwZDQ3YTVkMTQwMTQ5YzM0YTI1NjNlYTVkYjBlNWVjZjU3MDI1YmExNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wZXJtaXNzaW9uLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZmEyNDg4M2U1MDhjZjM4YmM4ZTY1M2EyMjQzZTMyYTFmNDI5YWE5NGE1ZjZhMmUwNzQxOTA3N2JjMTVmMmQxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGF0ZS10aW1lLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMmMwYmViOGVmNTA3ZTAwNjJiZTYwOTRmN2JjY2FjNDMwZDFkZGIxMjQyZjhhMjNmMWZlYTljMGI0NWEwNGZmNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9jb25maWdjYXQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5NzhmNmVlMDMxNzI5YTQ2ZTk2NjU4MGQ0NjdhNTJmZGYzNDUzMTQ3NDYyMGI3YmM4Y2E2YjI3NTU1ZWEzYzkzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGlzcG9zYWJsZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ4MDhmZDI3ODEwZGNhNmY5YjA2NDU2YmYxMzBlZTBlYjFlMjcyNjJmNmNhMGI2MzRmMmQ1MmE1Njc2ZWI3NmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvb3NzLWFsbG93bGlzdC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE0ZmVkMmQ5MzU5MGIyMDE4NjcwOTBkOGI4ZjVlYjM3OTc4ZWRhZmI3NTRjOTFmYWQ3ZDdhNGI2ZWZmZTZkYWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL25vZGUvY29ubmVjdGlvbi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNkNDE4OTlhYzI5ZTdmYjdlN2NhNzExOWIzZDJiN2UwZDE1MzUxMDY2YzE1YWMzOWQwYmM2OTZmOWY4ZWQ2ZDgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd3NyZWFkeS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2OWFmMzY3YTBlNmYzOTI3YWU5OGM0NGM5ZjJhYzQ3Zjg0Mjg1NjQ3OGNjZGI3MzQ2NTViODQ1YmJiNmUxMzAyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvY2FuY2VsYWJsZS5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmM2JhY2I2ODJjOTBjZjgwZWVhMjJlZWI4NzQyOTA5OTEwMzM1MGNiM2U2ZWU5YWRjMzlmYzEwNTk4NTM4YTliIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL29zcy1hbGxvd2xpc3QuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjkxMDAyYWUzNGRmMjEzMWY2MDNkZWMyZmMxMzM5Njg5Nzk1YTEwYjdhYWE0ZWY2NzRlYjI4ZGVlN2UxYjNkMWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjFiMTliYTVmNmQ5OTNmY2NkNDdlYzZhNjc4ODA1NTMzNmE0MmU2OTIyZmE0Y2JlODljMmI0NzY1ZjMyMjFiMGIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2NsaWVudC1jYWxsLW1ldHJpY3MuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmM2MyYzgyZjk0YmYwZWI4YjQwMmY4OTJhMzA5Zjk4NDk0ZjQ3OWYyODNhM2NkMDBkYjdiZGY5ZWJjMjEzN2I5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvY2FuY2VsYWJsZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDUzYjA3MmNkYmQ5MjIzOTU0ZGQ1ZmRhOTJkOTJjOTlmODA5OWQ4ZWFlNTBjZmE2YzRiZjJkYWFkZDA2MWEwYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91c2FnZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjMxOWRmZjI5OTFmMDA2MmI5ZTE5ZGMwMTU2NzkxYTM2NmZkM2U2MWRjM2M4ZDI4YTIwMjQyYjcwNzQ2Yjg1OWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXNhZ2UuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODAzMWQ1OGRjMTg2MzZlOTZiYTA1YjE3ZmVkNjE3OGU0NWQzMTdiNWQwNTJmZTQ4NzBiMmE4YmVjOTgzOTc5OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5Zjk0ODVhODBlYzQzMmI1MjEzMzQ4NWNlNzhjMTZlMmUzYzVmZGRmMDkxY2I4ODhlMDVkNDNlOGVhNDhjM2RmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2Jsb2NrZWQtcmVwb3NpdG9yaWVzLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiOTA4OGM4ODkyMzQ1NzJmYjg0YTFkNzk3YmMzMjM3ZjBiZTAxZWY2MWY5ZWMzN2Q5YWQwYTc5OTcyNDgyZTciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW52LmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhNmE1YzBmNDk4YzVkNTE5Nzc2Y2JkNDM1YjZjZDhmZDI4MzRmZmRmZWFmZmIwZDg1Yjg1OTU0MGMxYWRjYTZkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvd29ya3NwYWNlLXBvcnQtYXV0aGVudGljYXRpb24uanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDU2MDZkYTJjZjE5MDE3YTdkOGVmODI2NjlhOGFiMDExOTg2ODZlOTEzMDEzNTBhYmU5ZGFhMmQ4OTM2YjYwNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci93aW5kb3ctY29ubmVjdGlvbi5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwZWJhMmM1NjA2YTk1NTk2ZmQwMjE0ZDg1MzIzM2RiZmI3YTRlNDM1Y2UwY2NmODZlNWJkNjA4Y2E3ZDQ0MjExIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9wcm94eS1mYWN0b3J5LmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmQxOGFiYTAzNzAxNWM3NzdhOGFkOTY3Y2IxZDFmNzlhMDg5MmE5NGQxNjBkYTY3ZGUzMjcwNGM2ZmUyMTNmYiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL21ha2UtbGluay5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjlhMzNjY2U1Yzg0NDM4YzRhOGY1NjAwMGRiZGY0OTFjYWViZTY1MzZiMzhlMzU0ZjA4MGEwZTQ3OGMzZDRlMDQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Vycm9yLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4MzdjZTcwMDg1NWRhMWZlMWQ3MzNlMDg0OTc2MWU4ZTNkYmJkYzdjZjk0NjEyNjU4NTUxZDk2NDZiN2UwY2QwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FjY291bnRpbmctcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2M5ZDE0ZmJjMmI4OGY3ZDdhN2UxY2Y4MTZmODVhYWRmN2M3MDNkYmI2ZDY2NWNhNGY4YjlhNjQ3OTMwOGY1NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wZXJtaXNzaW9uLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQzNjZkNWE3MWIyM2E3MzIxZmQxYjhhZDUzOWNmYzM1ZDY5NzY0MTFiYmJmYWQ2OWU2YzYxNzJjYWNhM2U2OTQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWNjb3VudGluZy1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjU5ZWU3NTNiMDZjNjIyZjZlYWUzZGE3NWE5NGRmMGZhMjE3MDE1NTNiZTFiZmExYmJlYjczNTQzZjJkOTQ1ZjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvc25hcHNob3QtdXJsLnNwZWMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzJmNTZlZTBjNzUzOWMzOWY2OTcxZWU5ZmE4MWMwNDUwZGZmNDRhYTNmMDFkNjY2YzhhZDYyMjliZGYzMzQ2NSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkOTkwNTkxNWNjYTk1YTE5ZjU0ZmRmZWRmNzdlZGIyMTI2NWU2MDRmZThiYjY1NGZmZmU4N2IzMjMwZWE3ODcyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2luc3RhbGxhdGlvbi1hZG1pbi1wcm90b2NvbC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiYTgxMjkzMGMwYTIxNDEzYjhkZWEyODM4OWJmZjk2Y2M1MWZhZDczNDlmZWMzNDE4M2Y4NTE2MGI0YjZmNTI4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbG9nZ2luZy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0MDk5NzUxM2IyMDFmZDdhNjViNjMwMjA4MDk3N2QzYjdkMWVhYTYzZDU0M2RiM2U4OWVjNjczYjU5NmE2MTY1IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdGltZXV0aWwuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzMWM1ZGY5ZDk5NDkyZmNhYjk0Mzc2OTk2NzUyZjExNzU5M2Q2MzUxZjA2ZWVhMDFmNzdkZTFmMWE3YzI1ODQwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BsYW5zLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkMGI2MzcyYjNlYTQ5MjNmYjgyNDBmNDVkN2YyZGJjYWRjYjI3MWQ1MmVmZDUxYzNkODk2M2Y0NDhlZjZmNjIxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvd29ya3NwYWNlLXBvcnQtYXV0aGVudGljYXRpb24uZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWIzMzhhYjA2YmI0M2RhYzE4NjY0NmQ5ODJiNjhiNWIxZWJmNGM4NDgzOGU5YWVjZDM2NWZiN2UyZDZkYzdmMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NraXAtaWYuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYThmZjRjMWQ1NGVjNjhiYjk4ZGJjNjE5YmYwM2ExN2MzZjI4MGMxYWI5NTQ0YmM0NTJiMzMwNzU5MWFkYmJkYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hdHRyaWJ1dGlvbi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzNlMTBmMmI1NmNmYmYxYzVjM2JjZTk0ODRlMDBmNDZhZjA5ODBlZjQ2NmZmZWI4ODBmOTliMDI1NDdjZmM0ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pZGUtcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTA2NDRkYjFiN2NkNzIzZjdlNDQ0OWQxNzExNmZjNmMyMzJlNjQ0YmE5Mzc5OTE4ZTAzOWE2OTBhYWUxNTM1ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtcy1wcm9qZWN0cy1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI3MzJkNTE5Mzc3ZWRjMWI3M2NiMDhmNzA2ZDRhYzJhM2Q4MDdkNGY4NjhiMTZhNTFiM2Q0OTlmYzNmOWQ5ZjMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaGVhZGxlc3Mtd29ya3NwYWNlLWxvZy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1ZjUwN2QyNGNjMzEyZDJlMGNkZDY1YWZkMzBkYTk4ZWIyZjM1Y2VkNTE5N2I3MWMxNmFlZmUyODc3N2ExNWU2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvamFlZ2VyLWNsaWVudC10eXBlcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImMxZDM4YjhkYjIzNTg5MjA2MDY0MTg5N2Q2Y2QzOTBkMjM4YTg4YzE3YjdjMGY2NmYwMTc4NTJlMDk2ODExMjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDQzZGNjN2I0MzI0Nzc4MzU1ZDFmMzM5Y2FiYWFkODZiNmFkMTNkYzZmMjZlMzg4OWQ4ZTRhOTNhMTgwN2Q2MyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pbnN0YWxsYXRpb24tYWRtaW4tcHJvdG9jb2wuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNjMDZhODIwNWIzYjdiYzQxY2IyNDY0NTA3NTE5ZTBjNmYyYmIzMmY4ZDdjZDdlZTkyMTliNGNkZTY5YzE2YTkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZXhwZXJpbWVudHMvYWx3YXlzLWRlZmF1bHQuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTU0NTM1NTFkNzBiMjY3M2QwYjUzMGI5NzFjMTMzZDQ5ZmQ1MWVlMWVhMzFlMDZmMDMzYjRjMzI0MmUyMTdhMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wbGFucy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImEwMjU0OTQ0Zjg3NjZmYjY0ODdkNzM2NzM5YzljODM1Y2ZkMDE2YzI2MmM0OTg4NGIyZGIwY2VmMDgwNWFiYWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaGVhZGxlc3Mtd29ya3NwYWNlLWxvZy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3YzRhYjE2NzllYWNmYzI4NmU5ZjRiNDQxMTM2MmM2MWVlZDJiMTkwZDk5YmFkY2JmZDBlNTI1ZDRkYTJiM2JlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdGltZXV0aWwuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTk3M2QxZTQwMWFhYzNmMDgzYzY1MDg2ZDMxYWI1MTBkZjVhMzkzOTEzNzUyNTBkNzhlOGMwNjlhMzA1ZTliOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjJmMTRiNDhmMTQ5YjUzYWNkNjU4ZjY5MDVjMmEwZDdlZjc1MzM0YWQ2OTIzMmIyN2E5NzM5MGRhN2FiZTc4YzIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLWZpbGUtcGFyc2VyLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODUxMjIxODVhZTEzYmE1ODI3NDIwOTc0NWNhMDFkZjc2ZTAyNzkzM2I2YzExOGFjYzJiYTQ3MTFjNTAzNGRjMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dycGMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNGQwYTc1MDM2YTZjYTM4MjYwMmU2YjdkY2I1NWUwM2I3OTVlOWFlMTljZTUwMzZhYzRmOGQ2NzY5MTQwYTliMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlYnVnLWFwcC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWQ1YjFlMzc4NWZkNDdiNDlkNWE4ZmEwOTNkNzg4NmJhYjYyODk3ZTg4NmIzMmZjZWVkMDI3MzE3OGUyZDhlMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2NhbmNlbGFibGUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyZTVjMzVmMzliOWViMTIxOTE2OTc3MzhlMDc3N2U4ZDIxOTJjYjQwMjU3Yjc1ZThkYWJmNmI4NThiOGMxYTU0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BheW1lbnQtcHJvdG9jb2wuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY4YjQ2YjdlODlmYmRjZWNlYjdiY2YzOWQwNGMwMWIyNGNlM2YwMTEzYTAxNmVhYThmYzIwMDU1NzQwNmJlNWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2hhbmRsZXIuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2YTc0YTg4MWE5OWI2MjcxOWE5ZGExYzFiM2IyNmVlZTIzZTQ5ZTYyYTdlODdjNjc1NTkwZGEwMzk1NmUwOTNiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzNGFmMDAzNGM0MTc2YzQwYzdiYmUwYTc1NWI5ZTUxOGNiYjQ4YWE5NTA2Yzg0MWM3OTlkZGVlOTkzZjVhOGMyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1zZXJ2aWNlLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjg5ZmJjOTU2YzM0YjNkOTgzNTIzZTJkYmEzYzc1ZmNkNzk5YzgyZGE4NDZiOGJhZWExNTdlZWMzNGQ5YzFhZDEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdGVhbXMtcHJvamVjdHMtcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOThlY2U1OGU0MmFiNzM0Njg0MDJhZTFmMzQ5NjIxM2Y2YzZlNjAyZDFlNWU1ZDZmMWFhMWJmZDQyODBlMjA4OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1ob3N0LXVybC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWYwNWM3OTIyNGIzMjNkMmYwYzA4NzVlNGU4YmE1YWU0MTRlODczYWM3OWRjNDhmZGZhNTE0OWRkNDliYjYyOCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYmIzY2RhMTc3OTg1NGNjN2NkYzllYjg1Y2U2YmVhNWQxZTdiZGUxMTRkY2Y2MWJiMmE0M2FmMTRkYWZmN2YxZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3F1ZXVlLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDA4NmQwN2FhMDYzMWRkODExNjAwN2E4NTcwMWYzNzkzMGIyNGVjZDI2OTUwMmIxNDM1ODY5ZjE4MzAwNmM3YyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2tleS1wcm92aWRlci5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyODY2MWI2NTU1MmY3YmMyZGViYmU1NTMwYzE4ODEzMTlkZjM5OGFkOTIwY2YyOGRkYWRlMmMwNTQyMmMwNmM5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYW5hbHl0aWNzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyYTkxYWI1MjQ4MDUxZDVkYzQxMmQ1Y2ZkNjk1ZTc0NmI2Yzc0NDA2YjJlZDQxYThmZDg1MDY1NDI3Mzg5ZmFkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2hlYWRsZXNzLXdvcmtzcGFjZS1sb2cuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ1YjdhMDM4ODdhMGM0ZGQ0ZjU0Y2MxNDg3NmNiZGZkNTA5NThkZmQ1NDBiMThjZjdkNjhhYWJjZDdlZjY0MjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXNhZ2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTI0MzIwYzk4YmVlOTM5Nzg4ZTQyODZiZjM4ZGQ5M2UwY2Q5Y2IxOTM5MmQ4OGE3NmM2NzRhM2JkZTYzYWUyZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjA1MTE4MmE4MDAyYWEyZmJiOTc5YmFmNGE5YzM2YmQxOGMwZmNjMTdiZTU0MGQ5Y2M5OTQ3NjJjMjAzNTI3ZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWM3YWUzYTA1MGY5ZWM4MzY0NDhlZDc3ZTk0YmZkMmExNDUzMjcwZmZhNTA5NmFhZTVkNjg2ZDg1NDlmYjdlNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2Qtc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBhYWY4NDRmNGVmY2I1MDUyYTRkNzcyNTJkMTRhYzBkOGRiZDYxZWE2NmYxODc1Y2I4ZTg2MzZlMWZjODJmZTQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kaXNwb3NhYmxlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZjBkNzk3NGRhZjMyNTFhNDUwNjY2NTc1OTlhMDY0MTllYjBkZTU2ZTcwMTkxZTRkMzVhNTQwMWJiNTVkNjY0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2VuZXJhdGUtd29ya3NwYWNlLWlkLnNwZWMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDA2N2RjODMwYjJhNWRlMGQ1MmU3NGUzMjM4MTI3ZTY3OWE5MzZlMGE3NzBhYWNiY2U2NjE2MmIyMjAwMzE0YiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hdHRyaWJ1dGlvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZDMxMGNkYjliNDE4ZDdkNTQ1NWRiZGQzZGIwNTQ1MDA2YzhmODNhYWE2ZWZlNDA1ZjI1OGU5MTNlNGNkOGYzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVlcC1wYXJ0aWFsLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjhhZGZiY2VhZTg4NDMzOTFjYjBjZjZjZjY2MzdmM2UzN2EwMDBlNjc4NzJhMTgwOWVkMTIwMjk5MzJjYjhmMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RhdGUtdGltZS5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ODc4YmViMGY3Y2VmMmZhODkyNjY1NWU1YzU5OTBjMDlhNmI5YzgwYzA0MTY2MTAyNGJiMGIwYmYyMmM4YTE5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2tpcC1pZi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI3N2JiNTMyZjhhZDJjMmJmZmVkN2ZlMWM1MzI1MjA5YThkNTViN2EzNjRjNjE0YzZkNDRjYTM3MzllN2MwYmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1MzRjNTJmZmNjODFiODQ5NzU3NTEzM2I2YzU1YWQzOGFmZTVjZjAwYzRlMWQ5ZTkxMTA3MzczZGM0OWQ4OTYwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3R5cGluZ3MvZ2xvYmFscy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2Q2NzE5MjA3YmY5YTg5NjQ0OTdjY2Y4NDVmNGI5OTVmNzEyMTZmMmU3Nzg0ZTk2MDJlYmY1ZjM0OWU2NGJkMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tZW5naW5lLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjE4OThmZTUwMzlhMDk2YjhkOTE4NzNlYzdkZWMzZDViMjAzNGU2OTE4YTI5ODU1NjQzM2QxOGNmMDI0ZGE4ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtaW5zdGFuY2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZGI5Mjk3MTY3N2I1YjIyOWZiZjY3MWE4NTIyMDM2ZDFiYzg0MmQ5ODZlN2UyYzAyZDdjMzJjYzQwODQzOTY1MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY2MmVkM2IyZDhjOTI4MDExNjI5MWQ5ZWIyODVlYjJiZTBhMWVjMzE0ZGM3NGY3YTc3OGZmNWQ0MzM3NzJlNDUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLWZyb250ZW5kLXNlcnZpY2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2E0NWUyNWE1ZDFjZWQwOWVmMWI1OGU0YThkOGE5ZTIyMGJlNjRmNDVhZWJjMzEyOGI1NTRkYTRjNDMwODhmMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93ZWJob29rLWV2ZW50LmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI3NjdlMzE0NGJjMGFkZTllOGY3NjY4ZGE0M2Y0MzFjY2MxMTI1NWY1YmFlNTZiOTIwZjQ1NWMyOTg2NDdhZTEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWRtaW4tcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzRkZWNkZDYyMWQ3M2RlYWFmYTY5ZjFhNzUwOTdlNjNkYTUyM2YyMzBlNDE0NDVlMDVlYTY4MGM4NzVkODBmNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2Rpc3Bvc2FibGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWU5OTE0ZjdiMmQyYzFmODRiOWIwOTg4NWFhMTM3MWIwODdjMTZiMTc3ZDg0ZjRkMWM2MDRmMmE1YTRjODA5ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RyYWNpbmcuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTdmZDAyOTNkNTJhMWEyOTBmZDc3MmEyYjc3ZWQ2YzdiOGUyZmY0YjdjZjU1MDRhMzE0MTAzYTExZTAwZmM5NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2phZWdlci1jbGllbnQtdHlwZXMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjlkODc1YTNjNmY0OTdlZDFmOWUzYjk4MDAxOTQ1ZjhiZDE5N2IxOTk5ZmI2YWQ4N2UxNzlkNDc3ZDIyZmQ3ODEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuc3BlYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2Mzg1ZjIxYjViMmUzOGFhNTdiZDdlNGRlOWUxYjA0YzQzODkyNjg4ZmQ5YzBkZWI3ZWRmMzUzZDhmNWRiYTYxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dvcmtzcGFjZS1jbHVzdGVyLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjliZjJhODNiNmIyNzhmZDU1MWJlZTlkNzk1YzMyNDBlOGJjZjQ1NGNkMjdjYTdhMzU3MjJiYzBkMTI0M2EwMTQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kZWJ1Zy1hcHAuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjdhZWUxMDIyY2ZlZWNhYjY5YmEwYzViMDkxNTZiNzBhZjMwODMzNjc0OTc4NmQ1M2NlY2RkYzAzOTM5YWE0YSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9ibG9ja2VkLXJlcG9zaXRvcmllcy1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjhiZDc4ZDkwYzQ5YzA0MDQxMGNmNWU4N2I1YWZlMDRjOTc2ODE4ZjI5NTJiMjZmNmMxZWQyYzg5NTAwMDU3MzgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLWZyb250ZW5kLXNlcnZpY2UuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImFhYWQzZjE4ZmIwNDlmOWE1MTNjMGM4ODJkYjRhM2IxYTk0ODNiZTNjZTZmNDIxM2M4MGIwMTFiNTFmMjZkMzUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuc3BlYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzMzFlZWMyMjk4ZjZhNWExMjU5YzNhOGFmNWIzY2NjNjM0NWMxYmVkMzhlZWZmMWQxOWVlMTQ2MTI4YzQ4YWIyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1zZXJ2aWNlLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjg1ZWIzOGMyMWYwYTdiOWZjM2ZiZDcxN2Y3YWFhZTlhZjg2MGU3ZTYwODIwZWQwNWZkNjgzMjc1MmEyNzNkMGYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZnJvbnRlbmQtZGFzaGJvYXJkLXNlcnZpY2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTdkNmFkNDljMWZjNTVkNjZlOTNlM2E5ZGE4OGJjNTViMGExZTA5MGQzZmJlZmZkYjBjZDlkY2ZiODFmZGFkOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRhYTdiNTJjYTZiZTE0MTJlMjBlNzJhOWZiYzgzODM0ZDVhZjExNTA2ODIxM2JhNGQ2NzY4YTM5NGUzNWE0YWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kZWZlcnJlZC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTIyYzRmMTczNjc5NWMwMDM2MDRhNWViZmU0MjQ1YWY0NWEyNzc3YmQ1YmI5Njk1MWRkMzA5NjBkOGEzNzQ1ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pZGUtZnJvbnRlbmQtc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE1NzA5YjM0MTczNWM4NjM3N2MyMWM2YmFmMzlmMmY0M2ZjYmRlMzg0OWQ3NzQ4ZDBmMzM2YjJkNmMxYTJjMDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzYzNkYTg1OTZiMWExOTk2OWM0ZWE1MTQyNjZkMTlkNTA3YzM2OWE3ZTk5ZmQ2YjQ5MzQwZmM0ZjJiNzllMWY3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2Jsb2NrZWQtcmVwb3NpdG9yaWVzLXByb3RvY29sLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJjOWQ3OTQxZjA5ZjM4MTlkMGRjNmFlYTczM2Q1NTMyZDE2NTY3NGU3OWM0MDk5OWFmMDVkYmQ2OTY5YjIxY2VjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2NvbnRleHQtdXJsLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjhlMjkwMTEwYmM3YjZkYmYwMmNlOTYzMzZkNWU2YTdkODY5NjJjZWEyOTlkZjkyMmVhM2M1Njk1N2NmZjYwMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2xhc3MuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhNzNjYTA4MjE1OTc1M2ZmYzcyMzRjMzQ4Yzg2ZDg1YzI5MTQ3ZjcyNzAxOWY0NDgxMzQxYWRlNzIzZWVkN2QxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2lkZS1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTYwYjFlOGJjNmEwZmJiMDViMDQ4MGE0NTVmZTkwNWJmZWFhYWZlODI2NDg0ZWRhOTIwMTMxOGMzOWM0ZTVlOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3F1ZXVlLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiODI2ZDU5MGVlZjNiYjU1NDhkNTMxNjQyNzFkNzgxZTJkMzgyMTY1MWJjMzVhNmZiNGMwYzJlM2RhZDUyYzFjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1ZmMwNWE0MzdjODQ0ZDY2NjBlYWZkOTJkMmE1YjdhMGY4MDExOTY2NGQyOTM5OTVmZjcwOWNiMGZkNWU1YTAxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dzcmVhZHkuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzYTQxYzAxYTY1YTBjMGU1M2U1NmFlZjhiMWNhMWMwM2QwZTQyMTA1NjgxN2I3N2Y1OTc1N2Q1MGQyZDlmZTQ1IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5zcGVjLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxNWI4YTE4MzZmYWMwNGZjN2EzODYwOGYyNDQ0YmI4NmYzMGU0MmNlMmJkOGIyOGY3YzE1ZWFlYjQ1YzI3Y2IyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2luc3RhbGxhdGlvbi1hZG1pbi1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5NTkzOWZiMWZhYzE3MWVmMmM0YTIxYTE3MjBlYzU0ZTM2NmY0MGFkMGJiMmJiZmNkMDY3ZjdhMDJkMDI4MmY4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbmljZS1ncnBjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjhiN2JkNmRjYjdjNzBiMDRhMGU5NWUwNzJiNzU0YTkxMzdhYmNlMGViMzZjOGM5NWM0ZDA5MDJhMGJiZjY5OGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTMwNWJiOTQ2ODFhNzFmMTZjYzgwNzU4NjYzMWFiYzhhMDFkZDExN2ExYzc4MDUzZWM0OGVjYjZiNDRiZDJjZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZXAtcGFydGlhbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5YzA5NGEyYjUzYjVkMDk2Yjc3NmIxN2FkMWRjZGQ2ZjlmZDdlMmQ4Mjg0YTVhNjEwNGMyYTJmNjUyMmJiZTBhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9jbGllbnQtY2FsbC1tZXRyaWNzLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImFhYjY1ODgzYWNjOTRkOTdmMTgyNzkzOWZlYWIyM2VmMGNhOTdjOGVkYzcwYzBkN2Q0NDZhZWMwOWQ4ZGZiYzUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDM3YmMwODhiZTRiYjJkZDEzN2NjMmJkODI2MGIxYzRhMmI1NDE5YzZhM2NkZWRlNWIyNGQ5NzdmMGExZDM4OSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dycGMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmZDM3MzYyZWVhMjhlYzFhNDQ5ODE5MDgyNWRmMzFhMGNlZWFlMzg3YTdiYmRmYmQyYTA5ZDNhM2QyYzA2MzYxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJjNDQwZTQ5MzZkMWNjMzdmODVjYTc4M2EyNDZkNzdiNjg5YzU0MDU4MmVhYjkxZDdlNDE2ZDFiNDdlOThmMWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjM5YThlNTliYzZiNDA1MGM3NWNlODM2Mjk1MmNiOTdjOTY5NTQ5NjY5MTE1M2ZiY2ExMTc5NjdhODg2YTg5NjEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hc3luYy1pdGVyYXRvci5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3MTcyYWVhOTg5OGZkNzcxNjE4ZGQzODNiMWQwNjM4Y2VlYTZmOGE3MzZiMjBhYWJhYzRlZTU5ZTdhNzZhY2ZhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWhvc3QtdXJsLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImViNjYyYjFlZTFkYTI4ZmY4ZWZjZjdkMThhNzI0NGI5ODdhYWM3ZWRjZDg2MGUwNzNhNTMwYmJiODQ3NzliYWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYXV0aC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwZmEzYTQ3YTYyM2ZmNmRiNTlmNGU0NzQyNzQyODhlZDEzODM3Y2I5OTc0NDVmZGE1NDNkNWViODJmNDRjYjhiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2V4cGVyaW1lbnRzL2NvbmZpZ2NhdC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxMGQ1ZjgzOTdmY2U2NTBhZjI4NTVkMTZmZDFiNWRiM2RmZTc5MWY1ZjkwNGE3NDliZDVmOTIzMjU1MzMzMjA2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3Byb3RvY29sLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2YzYzYzZTU2N2NlMjBlOWU4MmIyZmExOTA4YWFlZmYyN2EwZGQwZDhkMWE4MWNhNjI3NTc5NzQ1MzYyNDU4NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjlmN2E3YmU3ODUwYWJkZWFiNDkwYzYxNjg1MGE3YTJiOGFhMzViOTZmNDkzNGQ0MzdiNGVkZWUwMzBiZGYyZTAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuc3BlYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1M2EyNDcwYzA2ZGU2MjAxMTIxNjU3ZjdlNDYwN2FhODE3NTRkNmE4NWI5ZjBkOTdhN2FhNzhlMjZkNTVlZDhlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbG9nZ2luZy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5NWYyM2U2ZmU4YzUzMDRhODU1NTgxZjRkM2ZkNmEyNDE3YmNhYzgwMGNmMDY4ZjJhYmE5M2FiMDgxMDUzNTE5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZXZlbnQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5OTE1NzI0Yzg4NDQ0Zjc4NDA5ZmI4ZDhiZjNmOTg4ZjU2YWNiN2M0YmUyNzVmZjhjMzEyYjFkMjc4NmEwZTIzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZXZlbnQuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2E2YmM0MjY1M2IzMDI3NGY5NTQ5ZDg1YjAxZDZmOWQxM2Y3OGE2ZDYyOWVlZGQ3ODU5M2NhNGM1M2M3MzVhMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2QtZmlsZS1wYXJzZXIuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjk2MWQzMDUwMzJlMTU3YWI2ZTNiYmUzN2I0MWFjNGYxZDQzMGVjNTIxMzY3ZjBhOGYyMjhlYTNlOTdjMDIzNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1jb29raWUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjQ3MWZmMTU0ZjVjYjkxZTNhNTk4ZmZkNWFjMzYxYTE3MTZmYzcwYzhiZmQ5MDEyZDVkMTkyNGM1MmMzNDlkNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dhcmJhZ2UtY29sbGVjdGVkLWNhY2hlLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWZjYzA5YTg2ZmU0YWM3ODNlOWM2Y2RmMDJlZTk5ZWEzNDYzZjkyMzlhZThiZTgyYjUwNGJjN2E5ZTU0OTQzMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90eXBpbmdzL2dsb2JhbHMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxYzc1OGQ2MTQzMDg5ODNlZTA3NjNkYjc2YTU0ZGY0MzkwMDI5NGQ2MDZmMDhlYmZiY2VmMzc1MDk4YWRlYjM2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dvcmtzcGFjZS1jbHVzdGVyLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImEyNTcwZDllMDlkMjlmYzY4MmVhZTgyMzY0MDZlOTdmMDA2MzMwNjU0ZjUxMmU0ZjQ1OTE5MTk2MjU3MWY4MmQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9yZXBlYXQuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiY2E4MzBhZDQzOWNkMjg3NzA0ZjEwZjljYzIyNDJjNGFjMDVjMWU5MWFmMzFkNTUwOTA2NDQ4YjZmOTI1MjMzZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2NhbmNlbGFibGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2IzN2FhZThhYTBhNTJmN2I2YzA3ZDViOTI0MzI1MDhjNjYzYjdkMjU3YzMzMDc4Yjg0ZDljYjZjODU3MWZkYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90eXBpbmdzL2dsb2JhbHMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmIxMjlmNThlYjM5MWY3Y2RhYjQ5OWNjYmE5NGRkNTM3M2NhZWJjY2E2Mjg4ZjQxYzdhZjQwNTc3ZDRhN2NjMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2Rpc3Bvc2FibGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjg1Zjg1ZTk5NDg3ZDRmZDhhZWQ5NjZmYjIzMTc5OWUyYTllOWZmNDhlOTRjYmVmY2Y2YzNlZWI3N2NiOTBkNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NlbWFwaG9yZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWI5ZWE1YjA5Y2E3OWViMmE2ZmZiZDNlNDMzYjhmYjkzNDQ1NDAxMDZlMzEwYzhhODY5MjUzN2FlYTExOTU3MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzNWI5N2VkNmQzM2IyYWM1ZGYzZGZjNDc1NjgxMzJkMzJlNTEwMWVhZjI4M2M0ZDEzNTM4MTdlNDU0NzY1M2U0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODEwZjI3MjE1YjZkNGVlMmVhZGU2MjU1NDg1NWJlYWQzMmJhYjExN2JiYzM0NTgzOGZlODA3MDY0MDA3MDVkNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hZG1pbi1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiN2FlOGU1YzZhYzYyYzlkNWZlMmJjNjZiM2ZkZTFhN2NkZmJhYjM4NTRmOTZiY2FlMjI2YmRhYTk0MjliMjcyNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wcm90b2NvbC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDgwYjEyNGZhNmFjNzEyNzQ2ZjRiM2NiZmJhZTAwYmM0YTgzZWY0ZmE5NDM5N2Q1YTUwYmRlZWI4OWE3ODkyYiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5OWNiMDAzNzVlN2FmZmU2NDg1OTNjOTlhOWI5NGVlNzhhYzkzMTM1ZTJjNjFhYzc0ZjIzNzRhYTRlMGYzYjQzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2V4cGVyaW1lbnRzL3R5cGVzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4MGRkMjZhYzA5OWZmODI0OTM3NTc4NjkxMGZmYzJmZDVhNDRhNzE1NGQ2ZGYwNmE3YTMzMzg2M2Y1ZTQ3MTVmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dlYmhvb2stZXZlbnQuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDU5ZmYwNmE5N2Q1YjYxZTNlNmRmMmUyNDEzYjBhMjI4ODYyNDUwZmQzZjY3OGYzMDUyZDk1YWMzMjNjYjM2YiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImU3ZDBkMTNlNWExZWEyNDM4OWRkN2ZkMjIwYzViYTcwNWFjOTE5YzYwYjAyNzExZmY1NWYyMzg2NzkyMTVhMTUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvb3NzLWFsbG93bGlzdC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZWRlNjQ5MzZlOThjNGU1MGE1OWNjNDM0ZGI4MGE5NWM5YTc0MWMzNzE3YmQ4MWRhOTJjYTVjZjEwZmI1ZGZiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvamFlZ2VyLWNsaWVudC10eXBlcy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmNGIyNWJkNDcxMzAxMjkxMzNmMTM4ZGY5MGM2YjdhYjQwYzIzNmVkY2VhZTRhZGIzODJmZmY0Y2ZhMjc3YWQwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbG9nZ2luZy5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjhmMjMyNzBlNGQ4NmY0YWM5YTBmMDM2YTIwNjJhYjgzMGQxOTcwNjdiYzFlODg4OTI2ZTllZjk5MTVkMWY5NzIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyMTIxNzY0ZjBhMWU2NTAyNzA2MTc3MjhhMDI1MmZlODQ0Y2NkZjRjNmNkOTM5MTlmZTg4N2ZiN2NiYWEzNzhlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FuYWx5dGljcy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlOWY1MjRiMzhlOTM1NzQzZTFhYTc3NDUwZGJjMmMzNmIxYTFjZWRkMDY0NWVhYjhlZjZhYzc3ZjI4YjQ4MzU5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2FyYmFnZS1jb2xsZWN0ZWQtY2FjaGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDYyZTI3OGE3NDM2Y2NhZDhjM2QyZTRkM2NlMGNiZDQ5MmZlMTJmN2Q2M2I5OWFkYjgzODNjZWQ5M2RhZDllNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wYXltZW50LXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODBmYjhlMWZiMGI0OWZmYWI4ZjU0YzE3Y2E4ZTY4OGQyMjliMTBkYjM4ZmZiZmRhMjk4ZjhhY2MwYmU3M2MzYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtcy1wcm9qZWN0cy1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjMzZGU2Njk3ZTIwZmI1NTg1N2I5MWQ5MWUxZGMyZjE4ZTBjZjQyYzFlMDM0ZDE3OTEyMDI0MWMxOGM2M2M5ZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy90eXBlcy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwNmJlYjY4YmY1MDMxZDk5MWU1YjE4YTJiMmU4N2M4NzU1YTI4OTZmNjY4MmY5MmJhZjJlYTU3OGQ2NDBkMTA4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24va2V5LXByb3ZpZGVyLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NzI5ZTNhODMzODBjNmQyMjEyMjI0YTJjZTVmMzAxY2YwMDVkOWYxZTEzNGUwYjgzYTQyMjFiZWJiMDkzOGY2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3R5cGluZ3MvZ2xvYmFscy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3Y2Q4NDk1ZGVkNDgwMDc5MjA3ODU4MWQzMjMwNTk2ZjlkYjQ0MTYxNTg0N2MwNTYwNDZiYjU2MTFlNTVkZGUwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzIwYjdlNjFkNTdmMWYyMWNmZTFmMTFhMmIyNWU1ZTM4MGEwZDYwZDY5YWJiYzYyOTllM2FlYThiYjY3YmFkNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci9jb25uZWN0aW9uLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlZGNkNDY1YWM4M2QxMjBiN2UxNjFmN2RjYmM4ZjZkZTNmNzFjOGFlYWIwYjY0NzMzYWYzOTFjYjFhOTgxYTFjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjdlYmQ3NTZlNTAzZjAyMWUzNDgwODM0N2FjNDk3ZjFiNmQwZjMxMTMwYmNhMDkzNzQ4YmRjOThmZTIyNGIyMzYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYmlsbGluZy1tb2RlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ2OWFlZGU0MjM3NGVlYWRlNmUxZjQyYjU5MzQ3ZjI4NWI0MTEzNTYwOWYxNzY1NGMyYzA2MWM4YTZmYTBlZTgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdGVhbS1zdWJzY3JpcHRpb24tcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWYyOThlZDI1ZDM5YmU5YTIyYTExODVhYWM3YzBhOWZmNjFjNDdlNTMxOWVhMjk0Mzk1Mjc5M2M3MjQ5MzQxMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wbGFucy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1NDY0NzBmYTFkYjg4OGE2ZWIzMzIzZGQ0OWVkMjdkZjE0YzA4OTI3ZTJkNzMxYTcxYzcyNDJmNDBlNGMxZTc5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiYTQ0YTI2NWNlNjFkNmE5ZDg4NzczMjdjZjAzMTQwMTE5NmUzZjJhNTc5OWY1NTU2NTc2NjA2YzgwZmQyZDhjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY0MmMyY2JkMWNjM2IwYzVmZDAwYzgxODg3MzIxZWI3OTNlNGMxNmE2MzBlNjhjMjJkY2QwYzFmNmQ2M2JkYTciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvc25hcHNob3QtdXJsLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ4NjhlYTI5YmY5YzZhYzlhZjQxOWJhNGU1ZTE4OGY5OGVlN2EyNzYxNDIzMzg1NzMyYzA2YWMxMmEwMWE3YzAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd2ViaG9vay1ldmVudC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzFlODk5ZDJjNjE2ZWRiYmY4YjcxNGYwZTc2ZDU5OTgyYmJhMDNlODRiYzc3YWM5ZjMyYWE4ZGUzYzZiZDdmNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2FzeW5jLWl0ZXJhdG9yLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE4YzYwMjM1Y2ExMzBlOWQyMDY4YjVhOThkOTcxYTg4NjY2NDA4YjdjZDE2MDM0N2QxYzJhNTBlZTE0ZWI0MWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYXV0aC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3YjI4ZjEyNzlmZDdlZjAxMDc3ODZiY2QzNzAxOGIwZGYzZmNlY2RkYzNlOTBmMTk2MWM0YzUwZWEwMmQ2YjU3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2Zyb250ZW5kLWRhc2hib2FyZC1zZXJ2aWNlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImYxMzRlMzBhZDVkMmQxZDRhMzdlOTRlYTNlYThiNWQ5NDJmZjkyMWZjYjIyZGY0YmM4ZDgyYzViYzg4NWI5OGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5zdGFsbGF0aW9uLWFkbWluLXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTU4ZTU1ZTJmODZjMWIyMDE3NjdiYjkyOWI1OTFiYzlhMmI3MTY0NjI0Y2YyNGE5NTUwOGE2MDYxOTA1YWZhZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3BhcnNlLXdvcmtzcGFjZS1pZC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxZjMzODYwNGQyYjdjMGM5OTc2ZGM5NThhNTAzOWE2MTg5NDYxMjA0MWM1Y2NlNjQzODMxNTgyOGI5OTU1OWRiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyN2VlYzIwYjFiYWIyMDJiNjVmNjIwOTFiOWQ1Y2M3ZTU5NTFmYzcyNDNlNWQ3MzRkMTM3ZWYwZWQ5M2Q4YmM3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9jbGllbnQtY2FsbC1tZXRyaWNzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNWFiY2RmYmJjYWQzNmYzOWJhNTkyN2MwYjE5MGYwMDJhNjk3NDg5YzE1NDdjYWU1ZTNlMDIxYWM1ZmMzMDNlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9ub2RlL2Nvbm5lY3Rpb24uanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImMzZWRmMWViZTA1ZDNlMGIzMDNlNzAxMDM3OGJlYWFlN2RmN2MxNTAyODFmOTlkOTg0YWI3OWIzYTI2YTdhY2EiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWNsYXNzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4NWM2NmUzZjQ1OGZhNGI1YzYxMTUzZmJiOGY0ZTgwZmQ0ZTVkZTUyMGFlODg0YWExNTY1NzU0MjQ2MjVjZjA5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYW5hbHl0aWNzLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiYTViZDYxNDkzNDlmNzUxMTVlMjc0OGM1OTlmZDBmZmQ1NmExNWM5OGY4NTY5YTY2YzQ2ZDk4Y2I1N2RlYWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYmlsbGluZy1tb2RlLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYmUxM2FhM2VlYmQ4MjVjM2UwOGRhNTgzZGYwNjk3OTA3MDlkYTcyNjUwZTg0MDI0YjE4ZDU1MmE0YjgzZmI5MSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2QtZmlsZS1wYXJzZXIuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZlYmI3ZDhkY2ZiODcwYTMwN2QzYWM3OGE5OGYxNTcxNzMxZTkyODY1NjE0YTMwMzJlMzNiNDRjOThmNTZjZTAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9uaWNlLWdycGMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2YwZjlmNDRhNTVjYTI3OTVjZWE5ODlmNDczODM5OWE1NWNlZTk5NTViZTFiZjVjMzZhNWI2ZmE5ZTVhZDJiNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2xhc3MuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTUzYTU0MmNjZDljZDdkYWYyNjU5Y2FiMmVkZDdhMWYyNWJjNGE0Mzg3OGVjYmMxOTgxMTRhMTBkZTRhMDM1OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dhcmJhZ2UtY29sbGVjdGVkLWNhY2hlLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjZlODllOWRkNmVmMzMwMGMzMGFiNTUxNDY2Y2NjYTYwMTZlNDJkNDdiZGE1NTI0MzczMDNlMDUxYWI0Mjc1MDEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90aW1ldXRpbC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTFmZDExNTQ3M2YxZDllZTcwYjY2OGEzYmVhZGE5YmY2ZGZkYWMzYjRhMDc5ZjNlNDgzMDQ3MjFiYzIxYTc0ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93c3JlYWR5LmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjkwYWVlYTRjYjY3MjJiYTIwM2VhNDcwYjhkMjNkYTgzOGIzZTM1NDJmMTczOWM4NDAzODAyNWRlMGVjNWFlMzIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLXNlcnZpY2UuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiNTEyOTE4ZDYwYWQyMWQxNmRkMWM3N2Q3OGQ1ZjQ5ZmM0ZWJjMDJjNDBjMmEzMzkxYTRjZWI4NDQ4OTJlZWYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZnJvbnRlbmQtZGFzaGJvYXJkLXNlcnZpY2UuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjVmZDFhNmY1YmY5YTU3OGE2MTBjMzE4NmU2N2M5MjMzMjdmMmVmMzU1OWY0MDMxMjZjMDY0MjFiZmMyMjkzMWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL3Byb3h5LWZhY3RvcnkuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzk4ZjBkMzBjOTBhOWMwNTYyY2RkOWZkMzk3ZDk3ZjA1ODUxZjYwODhhZjdkZjgwMmNmNzZkYWI3YzhjMmI4ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wYXltZW50LXByb3RvY29sLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImVlMjhhMGFjNjM4YTMxYTEwZGQzYTc0MzEzZTI5MDE0YTNlMWRhYTNiM2UwNjQyZmJhNmNlNzI4OWI5ZGY0YTEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWRtaW4tcHJvdG9jb2wuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmYjhiNzJhZjBlNTYxOTQ5ZjMwMzg0MWU1YTc4YWQxNDhjYjMxZGQyOWFkYzBkZjU0MmY0ZjIzZjNlNWI1YzdjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvd29ya3NwYWNlLXBvcnQtYXV0aGVudGljYXRpb24uanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjZhYjg5MjNhNDFkNTVlZDY2MjBmYzdhMjNjNDE5OWRjNWIzODk5OTA4MjRmZjQyNzM2NjI4NmU4N2VhNzk4ZmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90cmFjaW5nLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZGM1NzcyMmVhOTVkNzBiZDI2MzdmOWExZjAxOWQzODlmNzkxZDRjYWI0MGQ1YjVmZDdkMzViYmU4ZGUyOWQyZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvY2xpZW50LWNhbGwtbWV0cmljcy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwM2FhM2M1OTBmYzdkZGI2YzI1ODljZTkwYmUwZjhkYzYyNDk1NDRiMDkwOWRiZmJlOTQ1Y2M5MTcyYTNjODdmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVidWctYXBwLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMmZjZWZiYzEwZjFmNDZiYTlhNzcwMDdhOTgyYmNmYmQwNTJjNWRmNTU1ZDg2YzI5Y2VjZWM5N2RmZDIyZTAyYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvaGFuZGxlci5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3Mjg3YzRlMGE0MDE3ZTkwOGNiNjYwODhlYWU0M2JlMmVkZWUzYmUxYjAxMGFkYjAyMzc3Mzg0MzExOTUyYmFmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzNmUwZDNhYzFiMjJkYjMxY2JjY2U0MTk5MTU4MzE4ZWY5YjQwMmVlOTY5YWVmNGM4ZTRkNjVhNjhiMDM3MTJhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTJiNDI4Y2M2YTdlOWIyNTY1YzEyM2M4Yzc0NWQwOTRlMzA1MmE0MzY0MmVjZjliMjk3NDQ0YjBiZGJjMTU0NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtaW5zdGFuY2UuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNDk1N2NjODA0NDgwZTE2MmYxZWRhYzg3Njg0MzM0NjkwMmNlNGM4MjE4OWM3YTlmMjk0YzIwMDgyNTdkYWY2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3RlYW1zLXByb2plY3RzLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjlhYTMyODFlY2M3ZjMzMzdkMjMzMTEyMjc3ZjhhNzk2MDBiZjZlNGEwMjg3ZWU3ZmVhYjJjOGRkNTE5OTk5YzEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Jyb3dzZXIvY29ubmVjdGlvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZjQ4MjY2ODEyNjFkYWYwMTBmZDMxOThkYzMxNDRiODZhM2RjYWYzNjE0ODU1NDViY2Y1NWViYzk5YWJlNzgxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BsYW5zLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNkNWY3NzU0ZjY0MGY4ZWRlYzE1Y2JmMmEyOTg2MjRlZTYxZWQzMzdlOTA1YjIzMGQwNDM4MWE5MzBlMmNlNGYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZXhwZXJpbWVudHMvYWx3YXlzLWRlZmF1bHQuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWE5MmIxZjFmMzY4YjVlMzg0OTExMjgyMDJlYjMxNzM4MDVlY2JmOGI2NDhiMzg5MDA5MWZhZjNjN2U1MDY2OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZmVycmVkLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDEwMmI5YWRmZDQxNzhmODkzMmM2NWEzOWJmZjYzODdkMWJkNTgwMTU3NWM1ZGIzNzE1YzQ4MDNjMTcyNTk5MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvZXJyb3IuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjQ3YzQyYmY3MTIzMmIyODFiMzU2NTU5ZDkyOTA3NjYzMzkwZDc5ZTZlYWE2OGY3MzY5YzJiNGI2MzVlNjQ2NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjFjMTMyZmQ1N2RlNTA3ZDc2MTk1OTE1YjNmMWU4YzM4NDlhYTY1MTIyMjNhNTI2NzM2MGNiZjM0YTgzYTNjY2UiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90aW1ldXRpbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmZGQxMjQzYzM1YmU0ODVlMjIyOTRiZjA0NjBkMGE1MzQ2YmNjMWQ4NmI5OWZjOWY0NDQ0NTA5ZjBmYzMzNDBjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9oYW5kbGVyLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjdhOTc3ZTA1OTMzOGY3MTVkZjcxNTcwZGVhZmU5YzI3OWY3ODQwMDBlZmU4ZWQ5NDEzM2YxYzY3OGQxYmFkYzciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLXNlcnZpY2UuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWYwZDFlM2Q4NGJiNDQzNDA3N2QzYjYwNjZjOTYzYTg5NjQ5YTRiNzRkMTFhYjg1YmVjNWNkOGEyZWI0ZDA1OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiYjk1ZWM2ZTMzYTVmNzJhYjZjNTUyMWIxNDRmMjZlYTU4MGQxZjA0MDJjZTEyMDkyM2I4N2JiOGM3YjQ2ZmU5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2tpcC1pZi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTAzOTFkZGM5NjkxZTk5YmUzNWNlZGQ1MDdjZmI3MzdmZTUxNmIyZTBhZTA5NzRhZGI3MzIzNzQ5ZWZlOGQ0ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWI3NGQ5NDYzMmMzNjA1YmQ5YWFkYmU5ZDRhMGExNWEzZTA0OWI1ZTQ4MzYwNDQxZmY1MzU3YzJjODdhMDFhNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91c2FnZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZGY4NTA4ZDVhZjZlNmY3NzFkMDI3OTkxY2MyM2FkMDcyYWE1N2I3MzVmMjlkNzNmZmQxMDQ4ODczM2E1ZjcwZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9zbmFwc2hvdC11cmwuc3BlYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwNmY5ZTJmNDQzNWRjODFhNGE3ZDhjM2I2ZGM5ZGY3NjJkZmQxOWQzNDFlZDhmMWU0M2YyZTY2MmQyZjY2MGRiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3RlYW0tc3Vic2NyaXB0aW9uLXByb3RvY29sLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5MGFjMzE5NjVjZjdhNDMyM2YzOTRmMWNlODM0MGE4YWEyOTc2ZGY2Y2ZhNjMxZGQwYmY3Y2ViNjFmY2EzYmY2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjVlNjg0MjdiYWZlZTdlYWE4NTE2OWRjMzVhMWI1ZTdkYmZlNmE2M2Y1NGY5YjI3Y2JkMGI2MzMxODRjMmI1ZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dycGMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzMyYzZlZDVmY2RjMGE3OGYxZTNhNThlZjhlNzAwNmEyNGU4MjgwOGM5ODZiY2EyNzhiZWNiZjU5NDFhNjc1NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9jb25maWdjYXQtc2VydmVyLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI4NDkwZmM5MWVmY2EzNmE3NDEwOTdiMGViNjJhZGRlNjMyMzdkZGQxMGI1ZWYxYzNhZGY5ZTcyOTQzZDljYmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90cmFjaW5nLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDJjMmJmZDEyYmZjMGQ4MGFhZGY0YzRhZmI3MGI2NTMwMGVlM2NjN2EyMDZhMjYyYmIyYTUyNGJkYjQ0ZTk5YyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy90eXBlcy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1ZDRmYjM1YWEyYjBkNjg2YjI4Mzk1YjVlNDM1MWQwYTAzYTBiMWMzZDhhYjE2ZWIxZDZlY2Y5M2RmMTc0M2Q4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1zZXJ2aWNlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3YWJiNDM4ZTlmYzJiZDY3YTZhZDljNTAxNGUwOWU2YTBlZTU5ODg0OThmYjQ0M2ViMTViZGU5MTNkMzc3Yzk0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVidWctYXBwLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQyMWFmMTY1N2M3ODkyMDQ3YzFhOGJkZTRkYjhkMjdjNzMxYjg4YWYyNWU4ZWRiMTdmOWQ1MzBmM2M5YTg2NjQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4NmRjNzc5NTExMDcxOGQ2ZWE3YjE5ZTFiMDMxN2M3NjBmM2RkZjY3MmMxMTlkNzc3OGM5ZjIyYjlhOGEwZjY0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbWFrZS1saW5rLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0M2ZmNDYzYWZlOTc1ZDA1ZWMxZjMyMzdlZTMwZWVhMzUwYjI1NTU5ZmNjMTM0YzI0ZWZhMWU2M2Y1YjdhOWQxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZlM2I1MDNmYTk0NDg0ZTdhODFhNmJlNzNhYjRkNjRjZjVhN2UzZDJlZjNhZTJkMzNjNGIxYzU4OTI3MWE1YzAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzkxOGVkMDQyOWI0M2E5YmQ2MTUyNGY2YWM0Y2ZmOTAzN2JlYWE1NjQzYTU1MTI4ZTY5YTAwZTQwODliZmQ3YyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9mcm9udGVuZC1kYXNoYm9hcmQtc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjM5M2ZlODFjOGVmNTE4NmE2Y2YyNjc0M2I4MzY1ZmI1NTIzNGIxY2U0MDM2ZWU1NTVjNTIzYzEzZmY3ZDc2OTIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI2NjRhYjg1ZjVmZTI3NGMwNjM3ZDUyZWE0YjAyMmNlYzA3MDBjYzdmZjRmZGNhMmQwOTQ2YjE3ZWUwY2Q0NDYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kYXRlLXRpbWUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjVlODdlNjY1MmNmOTA2MzU1ZjJiNzNkZDBiYTJiYTdjYjVlN2ZmZDE1MzVlN2Y3MTQwMDU2NDkwYTE1MzI2ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2UzODc3ZmE0Mjc4ZDhlMzJmNGJiZjAyM2NmMmU5MmUzNDhiZTZmZmQ2ZDk1ZWVmMDNiNTBjOWRiYjY1MzM5MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjJhZGRjYmE3NzAzOTUwYjExNTZkNzM1NmI5MjdiYWUzODI5OWRiOTU3YTE3ZmQxODQ2MjY0MTQ1OTZlMDUzNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9jb25maWdjYXQuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjQ0NzhiYTA1MDc2MjM5ZjQwNWUwZjMyNzRiODAyNzY4NDRiZmNhMDFhNTdmMzM2OTczMjRiYjE3ZWIyYjE3OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci9jb25uZWN0aW9uLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjAxZmFmN2E3MDlhOWE4MmI4NWFmYmM2MDc0NGFlYmRiNWM1YzkyZDlmOWUwODQ5NmJjNDZlMDVhNTdlOTRjMmYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcHJvdG9jb2wuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTMxNjkyNjE0YmJhNmJiNDJmYmQxZTdlMDc5YzliMGMxMDk5ODY2Zjc4ZGJlYjMzMDY2NTU3ZmRjZWNiYmZiOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wcm90b2NvbC5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc0MzYxM2VkOWNmNWMzMjM4ZGRhMjQxY2NiOTY3OWE4MTg1ZmU5ZmMzZTVlZmY2MzkxNTUxOTgzNmZiYTcyN2UiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9rZXktcHJvdmlkZXIuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDRjMjBhOWI4MzdiYTNjNWFjODJiOWMxOWUzZDhhYWE1NzA5MDJiYWMxZjhlYWMzYWQ4YTUyNGQwYzhkY2IyOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL25pY2UtZ3JwYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImY2YmY3NDk4YTJmM2VkNTI1NDM1MjNiOTg2OTE3Njc4ZjE3Nzc0ZjU3MzZmM2E1M2M2MDBhNDNhNzA1OGQ4YmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcGF5bWVudC1wcm90b2NvbC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3ZjJkNDY3MzhiOTE3M2QzYjQzZmMzMmUzMjBhYWYxN2JkZmVkMjVkZDk5NjRjZjE3NDA5MjUyMWNkZGJiMjlmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTQyMGFhZDQyZDc3YmMxYjVjOGM1ZWFmNzcxNDk2MjRiN2RiMmFlYmZiMjE4NmIyZjkyYjA1NjA3YjJjNWIxZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtLXN1YnNjcmlwdGlvbi1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjVlMDNkYzI0ZGUwODM0ZTEzMjRiYmZjMzhmMTc1ODk1Zjg1ZTJmZGE1YzY0NzFmNTdiMTFlMmRkMWE5OTlmNGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90aW1ldXRpbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOTk0MjIzNTg2Y2E1OGIzM2FjNTNhMTU4NmQ3ODU0YWNiMzcyNjYzOWFjM2VhNjNlZDRmYmQxMjE5OTU1YzdjYiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNDZjZGUyNWFlZWMzZjJjMjU3M2MwNzU4MGM0MDE5MGYxMGQ4MmRmMjI2Mjc0YjZjZDI3MDY3ZGNjNjBmMTE4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1NWU3MWNhZDIyYzA2MDI2NTFlY2IwN2M1ZjhlODQwZjgyNjJmYjVjZTM1NGQ1OTkyN2JhNTg4OTJhYWJlNWVkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dvcmtzcGFjZS1pbnN0YW5jZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTY2NTQ3ZWQ2YTk5NjM1MGQ5NmRmNWRiZjA3MTMyN2ViM2M5MDUyMmI4NzU5Njg3OWMxNTdmNzA5ZDE3NjEyMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc1MmQyZWU4NDE0ODc2MGYzMmM2OGYwNTdkNmE4YjlhNDA4ZjM4ZDcwMjllN2IwNTMwMjBhMDQyNWQ5ZGIxOTciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjViMDdjZDI4YmNkNmNiNTQ4NjcxZjMyZDI1NDlhNmM0NjEyY2JjNGIzMzhjOGZiOWRmNzQwMzA3MzhkYzIyNzMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYXV0aC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY2NWU2OTdjZjBkZjEwOTY0ZDIwMmJmZmE5YWU0MWJhY2IzNmUyOWUxZDY3NTA4ZDYwODIxMzEzMzQyNjVjNDYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9za2lwLWlmLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY3NTM2NWI0MjkzYzc3NDNjYTU0ZmE0ODRiMDZkZWI2NzdiNWZkYjVkY2M0YjhjZDY4ZGVhMTY2NmE2YzMyMWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW52LmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTBlNzFkMDE5MjA5NWUwYTdmYzMyMGRmZDRkYjUyNjE0OWRkOGM4MTkwOGQ3ZDRhNTBkZmZhOWM3MjE0YjZiMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5zcGVjLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0ODFkODAxMDcyM2Q4NDIyMGFlY2E4ZWM0MjRmMjYwZTIwMWU0MmQwODZkZDBhNzc0NjBmOTFiOGUxMTI3YWQzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9icm93c2VyL2Nvbm5lY3Rpb24uZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhNzUwZDZlMGQ5ZmZlYmY0OWU4MDIwZDAwM2NjMzViM2RhNDkxNWU3NjkxZThmNTUzZGEwNmRhNjJmNTVjZTNjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FkbWluLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBkY2QyM2IxMjIzNGQzNGNlZmI0MjZmMWMyNWM3ODllMzk3NzA2Njc3MzA5MGZjYzE2NTllOTY0YjMxYzgzYTciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd3NyZWFkeS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmU4ODdmYTM2OWY4ZDY4NTU1YzNhNWYyZWJlNjgxMjBjYTdkMzUyZDMzYWU3NmRhYTZjOWI4OTEwMGYyMDJmMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWJjYTJkMjc3ODFhYWQ5OTg4ZTEwYjljYmFhMDBkMGExZGNlNzY0MDI0ZThjMzgwODRiZWQzYjJlZDc0ZjY1OSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtLXN1YnNjcmlwdGlvbi1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlMzhhODkwYjIyZTA2ZjgzMjk5ZDY0NjgyOWM2ZWMxNDBhYzgyYmFiM2ZjYzJmZGEyMDdkNDI3MDIyZGNhZjU4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dvcmtzcGFjZS1jbHVzdGVyLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJjYTRhN2M4ZTA3MWRiMGU0MzIxYWFhODFhMTkyOWQ4ODIyZjMwOTkxZjZiMjcxYjM0NmU0YWFiOTIxODZhZjExIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmODNlYzNmYjA3YWYxNjhiYjA0N2Q0YjJjZWUxYWU2YTNiNDU4YzUzMThhYjdlMDJmNDExY2E3MmIyZGVlYTJjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWhvc3QtdXJsLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiN2JkOTZkMDA0MjViOGYzYTkzZDA0ODE1YjhkMTE4YWM2MWRmYzBkZjcyN2I0YmZiN2JhM2IzYTdjZWIzZmMzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmNlYjJiODBlY2I2MjFkMDE0OTUyYzczYzFmMzUxMjY0OWRkMjY0YmUwYTQ2N2I4NDIxMDFlYzYyNzZmZGRlYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hdHRyaWJ1dGlvbi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI4ZmQ3ZDdkNGViNDRiY2I1ZDFkM2U4NGQ5YTNlZmY2M2IxNzAxNTNiYjc0OTYzNWJjYjEzYzA0Zjg1ZDc5ZmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzJmZGZhNjQ2NmEzZDQwNDkzMWM3NWY0MTQ4ODU3NzA4ZGY2NjJkMWJjYjM3ODZiZGE4YTFhYmE0NTM3YWMzOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9jb25maWdjYXQtc2VydmVyLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1YThkOTNkMjUwYzg2MzVmNDM1Y2EwNmUwYjI5ZmM0MmFkZTQ0ODg5MTU5ZmJiOTNlZjE5YzU3NWNhNmQ5YzVkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2VuZXJhdGUtd29ya3NwYWNlLWlkLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjRmOGQ0MTE2MTFiMGIyMTQ0YjlkOTExMmIxYWRkOWI0MDMyMzlmYzQ4OWM0MzkyMzBiY2E2MmM4MDY1ZWU0M2UiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmY0NTM3YWYzZThkN2UwMWI3OWNiZTY0YmFmNWQwMTc2NDM0ZWFlNDI0ZDMwZWRjN2Y3MTJmNjI5YzM5ODI1OSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dycGMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjU1MDFkMmMyYmIxOWM5YWQwMzFiMDcxZDEwNGIzMmI1YjY2Y2M0YjY2M2RhYmM1NGZlNWY2MzJjZWE0MDcyNTYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcGVybWlzc2lvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyOGFjMTQ4OTBkY2U2ZWJjYmIxMjFjNWZiNTdlZDJmMmEwYzI1YTY2MDg3Mzg3YWI2NzU2ODQxMTQ4ZDNmNjE1IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVlcC1wYXJ0aWFsLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjU2ZDlkOGQyYWY4OGNhMTcyMjY0ZWQ5MGE5NWRkZmIzNmRlNzFmZDcxNTFhMTQ0YmM2NDYzZTA2ZTVmNmMxMjQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC93b3Jrc3BhY2UtcG9ydC1hdXRoZW50aWNhdGlvbi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjYzOWVmNDhkN2UwYTM4ZmRjNmM4YmNlZDJlMmQ4MWQ0MWIyOTRkYmU5YTk5ZDI3ZjVhYjQzNzNlM2YwMGRhNzkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTVmMWE2NWQ4MzM3NmUwMDMzMjgyNGUzYTNkODgzYTYxOTk3ZjUxNzgwOWM1M2E1MWQ0OTU3NzZiMWQ1MzEzMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjcwYzVlNTIzMzg0ZTc1YjQzOGM1ZGE5N2I5ZTkyNTkzZWM5ZDNkYjZiMzc5NzdjNDZhNDk4MWY3NGQ2MzBkMjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hbmFseXRpY3MuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3ZTI0ZDAyYmUwYzZlMzA1MmY1ZDhhODgxMDI5Y2ExOGE2Njk3OGNjMDk3OTZlNGM5ZjQzMTdhN2ZkNGMwODJhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2NvbnRleHQtdXJsLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjZkZmU4YzNkNTk4ZjAxNTE0NjQzMjc2ZmQxZDVkNWU4YTUyYzM2N2JkYWQ5OWRmNzgwMTk1YTFhZTBhNzlmNmUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImU2Yzg2ZmM1ZTVmMDEyZTJkYzcyNWQ5ZmU2NmQ1YjkwODRmZTExYjEwNDFiOGU3YTQzYzUyYzhiMjJhNTJjOWMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWQ3YTFlYjAxNzY2YWI5NTA2OWI5NDA1OTgyMmE3MDM3YmJkY2EwMGZmMGI0YTgzNWZmMzZmODA4MmQxMTRiZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZXAtcGFydGlhbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZDFlMDEyYTcxYmYyZmRmMGI4ZWQ1YmMwNGE0NGRhOTI5NmU4OGEzN2EwMzlhYjQ3OWNkOGViNmQzMzI5OGY2NyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NlbWFwaG9yZS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmNDdlNmM1NDZmNzZhYjBjYjYxMzIwZjE4YjMyNGUwMWExZjQ1NTQyZTM0Nzk3ZTk4ZWFiYjViZTZiMmUyMGJmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbG9nZ2luZy5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjNjNjkwM2Q3MzdlNzNiNzdlYTMyMzgxZWY2ZjVmMjAwYzBjOTIzYWFjODI5M2ExN2MwNjdjZjQ3MTY0ZWNmYiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvcHJveHktZmFjdG9yeS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjg2MmE2NjI1YmI2MDFkMThiNjUyNWZhZDhiZjc4MzI2NTUyMjJiYzE5NThlZmM1OWM1YjFhNWEwYWQ4NjE4MyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2V2ZW50LmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjhmYjBiZTBjMmRkNjMxZGNjMjllZDcyZDBlZjg4MTE5ODQwMDRiY2NkMTE5ZmU2YTI0NWRhNDk0MDU1MGE3NTMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLWZyb250ZW5kLXNlcnZpY2UuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOGNhYTgwODc1OGFkMWEzOGZmZmU4NmViM2JkYTdiZWRmMWZmNzI0Mjc5NTk3ODMzZjM3NmMwNTg0NWM0YTMyMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE0ZmQxMWYxNzMyMDZhNmMxOWI3NjVkOGY0OGQxNDNjNTA1YThjZDczYjBjM2QwOTU2ODBiODRkN2Y4Zjc3MWMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9zZW1hcGhvcmUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTRmNmQ5ZjcxYTk3OTljNzk3MTg1N2RhZGE5YzZkODNmNTg0ZTc0MDg5NGUwNTg5ZjZjYjZlOTZiY2YxODFmOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9oZWFkbGVzcy13b3Jrc3BhY2UtbG9nLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiY2I4MjdiN2NhNTc3ODA5NzZjN2EyZTY0Nzg5YmMyMzE3ZDJiZThlYjMwMjkyOTE1MDYwYzljM2JhMWZiYWUxMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2Qtc2VydmljZS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiYWY4NDJmMWY0ODcxMDczMDgxNWQ3NmRmMzA2YTQ5YTFlZGNlODEzOTFmNWI4MTdkMWY2MzZlZjNlMDNhODZjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjA1NDk4YWRkYjdjOWFlZWRhNTI5MThiYzVmMGYyZjZhNDE2NTU4MjM2YTY4YWMwYjRkMjg3ZmFlMDIzZDk2NTYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvY29udGV4dC11cmwuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjA5NzM3ZWI0ZjI0ODQ3ZWZlZTZlNmNiMzFjNGI3MzBmZWI1NjE3MDBlNDEyODBmY2FmNTlhNDEzZTk0OTU3YiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzRkYjY4MzAwZWU0NDI3MzVhNmVlYzMzODBjNjUwZTZmMzVmMDNmMTNhNjE4YTM4ZGE4MjFlNTdmMjcxNzg1MSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9iaWxsaW5nLW1vZGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjM3MGI0MGFiOGI2MzE1OGM0MTUzZGEwYzBiYWMzYTFlNDBjZjQ5YjY0MDE3MmE1MDZkYmY2OTcxYzQ1YWVlZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1ob3N0LXVybC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxOWU0ZWFjYmRhOTA4NTBiOTdhMzc1NzAwNWY4NWFiMTU5MTA4M2RmZjZiZTYxZDllNDdiNzViNzM0MjAzMWY4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2F0dHJpYnV0aW9uLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI2NDYyNmQ5MTM2ZTc1MmY5ZTNjMzZlMjdhMDM3MTdiMTZkYmRkMTFkMGVkMWU0Zjc0ZmJjZDY2OTJhZDRkNDEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWRkYjk4YjZmYTE2NTg3M2NkMDNhMDY3ZTA0OTlhMmQxYTlkNGJmY2I2YWRjNDhmZGY0OTIxNjIwMzgyMDE1NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pZGUtcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTNkYzBiYTQ5OTYwYjVmOGJiMmM1ODkzZjUyNTllMDg3YTU0ZWQyMTc0OGNhMmUzYzVjM2ZmMmExMWY2MGZjMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RyYWNpbmcuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImVkNTBhMGE4YWY0NGEzYWUyNmMwYmVlMjA0YWNkYzM2MzRkOGQ2NGEwMzNlZjFkOTFjNzE0NjM5MWViMGNkZDkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlZWQ3NjdhYTE0YzY4NDcyYTU4ZTZhMWM5YWM0MTEzYjFjZDhiMWI1MzJlN2IyNWM0ZWQ5YWE2ZTMwMmFkNjYwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2V4cGVyaW1lbnRzL2Fsd2F5cy1kZWZhdWx0LmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxNDdmNmY3NzM3ODZiMDc2MGFjZTMzNzc5ZmQ2MWFhOGNlZTMyMGY2NzkxNjU4YTI3NmEzNDRjM2Q2YzMyOWVlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2Jsb2NrZWQtcmVwb3NpdG9yaWVzLXByb3RvY29sLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImFhZDYwZmQwZTJjNTc3NjJkN2RmYTNmYTJkMmNjNDFlYzI3MGI2OTc0Mzc4OTQxMDhjZDEzN2RjOTg3OTJjODIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYW5hbHl0aWNzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0NGZhZDczZDU5ZDg1NDJiYzU5MGRjM2VkYzQ2MDI3ZGJiMTI4ZmVmM2EzYTk4NmNkMjFhZjljZmZkMDVlNDBmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9icm93c2VyL3dpbmRvdy1jb25uZWN0aW9uLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzkyNjdlMjIyNzVkZTM1OTA3YTRlOTI4YTQ1NTdjNTQwMDM4MTUwNTM2ZDZkZDc2YjRjYzA5NGI4OTIxZDk2NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2FuYWx5dGljcy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0MzBlMTE4ZWRhZmExYjk4NjYzNDU4NmVkODZmODFjMjYzYWQyNzZjYWJlYmFjNzIzNzBlY2YyNDk4ZDdkMjQzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL29zcy1hbGxvd2xpc3QuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzIyZjMzYTc0Nzc1NDAxODVhNjFlYWU2ODdmMjlmMWQzY2FhY2ZhNDQyYzhhNGRkMTNiNmVmNzQ1ZTBmZjhhYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dhcmJhZ2UtY29sbGVjdGVkLWNhY2hlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiNGQ3NmUyNTlkMDQ3ZmRiMTQ0OTE1OGJiNGRlYTdhNTZlMmIzMjUwOGE1MTgxYTU3Njg3ZDhlMjk2MjkzNDhlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2JpbGxpbmctbW9kZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjhiZDRiOTEyZTU1YmU1ZWRmMGE5ZThkMDM4NTI2M2JmMGQ2ZWU1NTMzZTVlZDI3ZGM5MDI4YTVhMDM5Y2E4NSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NlbWFwaG9yZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI2ZjgwNGJiYWEwMjAwMGQ5NDVlNWYyOGFiNDM4MjlmMmE3NTIzMjljMDAyZjU5MjIyYzM5OGI5YzI4OGVkMGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kYXRlLXRpbWUuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiMmQzYmZkZTk5NDU4Mjc5MmNiZGQ3M2QyNGU5M2RhOWEzYjczYTExZWY4ZjUzNTY3NWQ0Mzk2MGFhNjBmYmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMThkZDU2YzIzNWQwNTQ2NWFkZmRiMDk3NGRmZTg5M2NmNTQwZDQ5NzQ5OWVmNDc3OGMyOTc3MDFhMDM3NGNkNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9leHBlcmltZW50cy9jb25maWdjYXQtc2VydmVyLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjgwNmI1OWEzMjVmMDMxZWY4ODI1MzU3MzI0NWEyOWM3OWIzYjJmNDQzMzNhYzE1YzVhZjA5N2FkZTY3MzQ4NTkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ldmVudC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTU4NWQyMGE0N2EyYmYwOThiNGRjYTI1ZjQwZjZlZTg5NWUxMmRlNjMzY2MyNGY4MWEyOTliNTJlZjE1YmZjMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2x1c3Rlci5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ5OTU2MjVlNWRhNTUyZGYxNjgyNWZhMWJkZDg5NWYwZTk4ZjcyZWQ0Njk4MWQ1ZWQzNjk3ZjQ4MThmYjcxNzkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLWVuZ2luZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2U4ZTI0NjYyNjk3OTc0YzQ4MjNmNjJlZmYxZDE5YzA5OWI0ZWRkZTM2YjFlNTg4OGUzNzFlYmJlZGM0MDVkYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wZXJtaXNzaW9uLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjM1ZDU3OTBmNDE2YjllNjQ4NzQ1MDc3ZWJhYmZhZjI5MzliOTAxMTYxMDgxZmUwOWYxN2ZjYzIxODYwYjVkYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL21ha2UtbGluay5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxOTk5OWY0ZTZmYWYwYWY3YzM0ZmU0OWFkNDQ0NDJlOTA5ZjYxNWMyZGExNWZhOTUwZGYxZDUzZmEzYzZiMDI3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9ub2RlL2Nvbm5lY3Rpb24uanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmZiZDc4ZDNmMWViZmE1NmZjODk4ZGI1YTcyMzhlMjIzOGIxNjc2ZTMxY2ZkNDM4YThmZTVmMDViMDlmMjZmYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL21ha2UtbGluay5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiOTIyMDg5MTVmMDY1MGIyODJkMWJkZjRmYTAzZDljODIwMzUyYWViZTg3MGJhMzU5ZGIzMDhlMWQ4M2U2YzAyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9lcnJvci5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjljN2NmMDU2NDYyNjIxYTAyNjYxYWM3MTBkZWE0NDIyMjVjM2VmNzllZmJkMzBiN2RhOTFlMTdlZTc4ZjkzNmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZTY4MTVjM2I2YTg5OWQ2YTFkZDliOTYwMjgzMDAxZTdiNTFkMjQ5NGVjMjcyZTU5YmM3MGI2ZDQ0MmZiOWY3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbmljZS1ncnBjLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1M2Y1MDcyODAzMzFlZjdhYTU1ZTJhZDA2MmRjNjJmYWRiM2ZkYjQxNWE2ZDBhMzZiYWNlZjczNGQwOTcxYWQwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNGJkYzZhNzk4YTVmY2UzZTc0MDFhYmFhM2U2MGU4MDY3ZTU3ODFlOTY2N2Y3ZWFiODZjNDYwY2MxNDAzZTRiZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93ZWJob29rLWV2ZW50LmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTFiYWVjMzY0NGU0ODIzNzUxZGQ1MjZiNWRjYzBiZDljNjViNjdhZWM3Njg4N2EwNzE4Yjg1MzNjMDJkYzRiYSIKICAgICAgfQogICAgfQogIF0sCiAgInByZWRpY2F0ZSI6IHsKICAgICJidWlsZGVyIjogewogICAgICAiaWQiOiAiZ2l0aHViLmNvbS9naXRwb2QtaW8vbGVld2F5OjAuNy4zLTg1MzlkOTJAc2hhMjU2OjVmZjYwOGQwYWM0OWFlMzM2MDIxNGQ1NmExYjNlYjE1NjEzMDljYzMxZDNlNjJhNTdhMjgyZjRmZjVjMDE1ODgiCiAgICB9LAogICAgInJlY2lwZSI6IHsKICAgICAgInR5cGUiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dpdHBvZC1pby9sZWV3YXkvYnVpbGRAeWFybjo3IiwKICAgICAgImRlZmluZWRJbk1hdGVyaWFsIjogMCwKICAgICAgImVudHJ5UG9pbnQiOiAiY29tcG9uZW50cy9naXRwb2QtcHJvdG9jb2w6bGliIiwKICAgICAgImFyZ3VtZW50cyI6IFsKICAgICAgICAibGVld2F5IiwKICAgICAgICAiYnVpbGQiLAogICAgICAgICItLWRvY2tlci1idWlsZC1vcHRpb25zIiwKICAgICAgICAibmV0d29yaz1ob3N0IiwKICAgICAgICAiLS13ZXJmdD10cnVlIiwKICAgICAgICAiLWMiLAogICAgICAgICJyZW1vdGUiLAogICAgICAgICItLWNvdmVyYWdlLW91dHB1dC1wYXRoPS90bXAvdG1wLkFQME5aVjY1MkIiLAogICAgICAgICItRHZlcnNpb249dXBkYXRlLXlhcm5sb2NrLjAiLAogICAgICAgICItRHJlbW92ZVNvdXJjZXM9ZmFsc2UiLAogICAgICAgICItRGltYWdlUmVwb0Jhc2U9ZXUuZ2NyLmlvL2dpdHBvZC1jb3JlLWRldi9idWlsZCIsCiAgICAgICAgIi1EbG9jYWxBcHBWZXJzaW9uPXVua25vd24iLAogICAgICAgICItRFNFR01FTlRfSU9fVE9LRU49WDNiTmF0WVB1ZElKY0N6NmtGbFRuNTRwcnVtUUFxR2giLAogICAgICAgICItRFJFUExJQ0FURURfQVBJX1RPS0VOPWRlYTEwYzhmYjU4NzU1ZmQ1MWFiOTk2Y2NiYWFiODk2MmY1ZTkwNmFiNDQxMmFlNjc3OTk2ZWE3NGU4NWFlMzUiLAogICAgICAgICItRFJFUExJQ0FURURfQVBQPWdpdHBvZCIsCiAgICAgICAgIi1EbnBtUHVibGlzaFRyaWdnZXI9ZmFsc2UiCiAgICAgIF0sCiAgICAgICJlbnZpcm9ubWVudCI6IHsKICAgICAgICAibWFuaWZlc3QiOiB7CiAgICAgICAgICAiYXJjaCI6ICJhbWQ2NCIsCiAgICAgICAgICAiZ28iOiAiZ28gdmVyc2lvbiBnbzEuMTkuMiBsaW51eC9hbWQ2NCIsCiAgICAgICAgICAibm9kZSI6ICJ2MTYuMTkuMCIsCiAgICAgICAgICAib3MiOiAibGludXgiLAogICAgICAgICAgInlhcm4iOiAiMS4yMi4xOSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAibWV0YWRhdGEiOiB7CiAgICAgICJidWlsZFN0YXJ0ZWRPbiI6ICIyMDIzLTAzLTA2VDA5OjIwOjMzLjU4MjcwNzhaIiwKICAgICAgImJ1aWxkRmluaXNoZWRPbiI6ICIyMDIzLTAzLTA2VDA5OjIwOjU2LjUyNzMxODMzWiIsCiAgICAgICJjb21wbGV0ZW5lc3MiOiB7CiAgICAgICAgImFyZ3VtZW50cyI6IHRydWUsCiAgICAgICAgImVudmlyb25tZW50IjogZmFsc2UsCiAgICAgICAgIm1hdGVyaWFscyI6IHRydWUKICAgICAgfSwKICAgICAgInJlcHJvZHVjaWJsZSI6IGZhbHNlCiAgICB9LAogICAgIm1hdGVyaWFscyI6IFsKICAgICAgewogICAgICAgICJ1cmkiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9naXRwb2QtaW8vZ2l0cG9kLmdpdCIsCiAgICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAgICJzaGEyNTYiOiAiNjdlNzI1ZjIwOGQ1YjVmYjY3NDUzYjNlNGJlMzAzYzExYTY0NGRmMiIKICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0=","signatures":null}
2
+
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License.AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import { Plans } from "./plans";
9
+ import { User } from "./protocol";
10
+ import { oneMonthLater } from "./util/timeutil";
11
+
12
+ /*
13
+ * Subscription and acocunting data
14
+ */
15
+ export interface AccountEntry {
16
+ uid: string;
17
+
18
+ userId: string;
19
+
20
+ /** [hours] */
21
+ amount: number;
22
+
23
+ /**
24
+ * credit: start of validity,
25
+ * session: end of (split-) session
26
+ */
27
+ date: string;
28
+
29
+ /**
30
+ * debits (session, expiry, loss): relation to credit
31
+ */
32
+ creditId?: string;
33
+
34
+ /**
35
+ * credit: end of validity
36
+ */
37
+ expiryDate?: string; // exclusive
38
+
39
+ kind: AccountEntryKind;
40
+
41
+ /**
42
+ * credit: amount - accounted debits
43
+ * [hours]
44
+ */
45
+ remainingAmount?: number;
46
+
47
+ description?: object;
48
+ }
49
+ export namespace AccountEntry {
50
+ export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
51
+ const result = entry as T;
52
+ result.uid = uuidv4();
53
+ return result;
54
+ }
55
+ }
56
+
57
+ export type DebitAccountEntryKind = "session" | "expiry" | "loss";
58
+ export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
59
+
60
+ export interface Credit extends AccountEntry {
61
+ kind: "credit";
62
+ expiryDate: string;
63
+ }
64
+ export type Debit = LossDebit | ExpiryDebit | SessionDebit;
65
+ export interface LossDebit extends AccountEntry {
66
+ kind: "loss";
67
+ }
68
+ export interface ExpiryDebit extends AccountEntry {
69
+ kind: "expiry";
70
+ creditId: undefined;
71
+ }
72
+ export interface SessionDebit extends AccountEntry {
73
+ kind: DebitAccountEntryKind;
74
+ creditId: string;
75
+ }
76
+
77
+ export type AccountEntryDescription = SessionDescription | CreditDescription;
78
+ export interface CreditDescription {
79
+ subscriptionId: string;
80
+ planId: string;
81
+ }
82
+ export namespace CreditDescription {
83
+ export function is(obj: any): obj is CreditDescription {
84
+ return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
85
+ }
86
+ }
87
+ export interface SessionDescription {
88
+ contextTitle: string;
89
+ contextUrl: string;
90
+ workspaceId: string;
91
+ workspaceInstanceId: string;
92
+ }
93
+ export namespace SessionDescription {
94
+ export function is(obj: any): obj is SessionDescription {
95
+ return (
96
+ !!obj &&
97
+ obj.hasOwnProperty("contextTitle") &&
98
+ obj.hasOwnProperty("contextUrl") &&
99
+ obj.hasOwnProperty("workspaceId") &&
100
+ obj.hasOwnProperty("workspaceInstanceId")
101
+ );
102
+ }
103
+ }
104
+
105
+ /**
106
+ * - The earliest subscription may start with User.creationDate
107
+ * - There may be multiple Gitpod subscriptions for a user at any given time
108
+ * - The dates form an interval of the form: [startDate, endDate)
109
+ * - Subscriptions that directly map to a Chargebee plan have their paymentReference set and MAY carry additional paymentData (UserPaidSubscription)
110
+ * - Subscriptions that are assigned to a user through a Team Subscription carry a teamSubscriptionSlotId (AssignedTeamSubscription)
111
+ */
112
+ export interface Subscription {
113
+ uid: string;
114
+ userId: string;
115
+ startDate: string; // inclusive
116
+ /** When the subscription will end (must be >= cancellationDate!) */
117
+ endDate?: string; // exclusive
118
+ /** When the subscription was cancelled */
119
+ cancellationDate?: string; // exclusive
120
+ /** Number of granted hours */
121
+ amount: number;
122
+ /** Number of granted hours for the first month: If this is set, use this value for the first month */
123
+ firstMonthAmount?: number;
124
+ planId?: string;
125
+ paymentReference?: string;
126
+ paymentData?: PaymentData;
127
+ teamSubscriptionSlotId?: string;
128
+ teamMembershipId?: string;
129
+ /** marks the subscription as deleted */
130
+ deleted?: boolean;
131
+ }
132
+
133
+ export interface SubscriptionAndUser extends Subscription {
134
+ user: User;
135
+ }
136
+
137
+ export interface PaymentData {
138
+ /** Marks the date as of which the _switch_ is effective. */
139
+ downgradeDate?: string;
140
+ /** Determines the new plan the dowgrade is targeted against (optional for backwards compatibility) */
141
+ newPlan?: string;
142
+ }
143
+
144
+ export interface UserPaidSubscription extends Subscription {
145
+ paymentReference: string;
146
+ paymentData?: PaymentData;
147
+ }
148
+ export namespace UserPaidSubscription {
149
+ export function is(data: any): data is UserPaidSubscription {
150
+ return !!data && data.hasOwnProperty("paymentReference");
151
+ }
152
+ }
153
+
154
+ export interface AssignedTeamSubscription extends Subscription {
155
+ teamSubscriptionSlotId: string;
156
+ }
157
+ export namespace AssignedTeamSubscription {
158
+ export function is(data: any): data is AssignedTeamSubscription {
159
+ return !!data && data.hasOwnProperty("teamSubscriptionSlotId");
160
+ }
161
+ }
162
+
163
+ export interface AssignedTeamSubscription2 extends Subscription {
164
+ teamMembershipId: string;
165
+ }
166
+ export namespace AssignedTeamSubscription2 {
167
+ export function is(data: any): data is AssignedTeamSubscription2 {
168
+ return typeof data === "object" && data.hasOwnProperty("teamMembershipId");
169
+ }
170
+ }
171
+
172
+ export namespace Subscription {
173
+ export function create(newSubscription: Omit<Subscription, "uid">) {
174
+ const subscription = newSubscription as Subscription;
175
+ subscription.uid = uuidv4();
176
+ return subscription;
177
+ }
178
+ export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
179
+ s.endDate = endDate || cancellationDate;
180
+ s.cancellationDate = cancellationDate;
181
+ }
182
+ export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
183
+ return (
184
+ !!s1 &&
185
+ !!s2 &&
186
+ s1.userId === s2.userId &&
187
+ s1.planId === s2.planId &&
188
+ s1.startDate === s2.startDate &&
189
+ s1.endDate === s2.endDate &&
190
+ s1.amount === s2.amount &&
191
+ s1.cancellationDate === s2.cancellationDate &&
192
+ s1.deleted === s2.deleted &&
193
+ ((s1.paymentData === undefined && s2.paymentData === undefined) ||
194
+ (!!s1.paymentData &&
195
+ !!s2.paymentData &&
196
+ s1.paymentData.downgradeDate === s2.paymentData.downgradeDate &&
197
+ s1.paymentData.newPlan === s2.paymentData.newPlan))
198
+ );
199
+ }
200
+ export function isActive(s: Subscription, date: string): boolean {
201
+ return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
202
+ }
203
+ export function isCancelled(s: Subscription, date: string): boolean {
204
+ return (!!s.cancellationDate && s.cancellationDate < date) || (!!s.endDate && s.endDate < date); // This edge case is meant to handle bad data: If for whatever reason cancellationDate has not been set: treat endDate as such
205
+ }
206
+ export function isDowngraded(s: Subscription) {
207
+ return s.paymentData && s.paymentData.downgradeDate;
208
+ }
209
+ export function calculateCurrentPeriod(startDate: string, now: Date) {
210
+ let nextStartDate = startDate;
211
+ do {
212
+ startDate = nextStartDate;
213
+ nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
214
+ } while (nextStartDate < now.toISOString());
215
+ return { startDate, endDate: nextStartDate };
216
+ }
217
+
218
+ export function isOldTeamSubscription(s: Subscription): boolean {
219
+ return Plans.isTeamPlan(s.planId) && !s.teamMembershipId;
220
+ }
221
+
222
+ export function isTeamSubscription2(s: Subscription): boolean {
223
+ return Plans.isTeamPlan(s.planId) && !!s.teamMembershipId;
224
+ }
225
+ }
226
+
227
+ export type MaybeSubscription = Subscription | undefined;
228
+
229
+ export interface Period {
230
+ startDate: string; // inclusive
231
+ endDate: string; // exclusive
232
+ }
233
+
234
+ export type MaybePeriod = Period | undefined;
235
+
236
+ export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
237
+ export interface AccountStatement extends Period {
238
+ userId: string;
239
+ /**
240
+ * The subscriptions that have not been cancelled yet at the end of the period
241
+ */
242
+ subscriptions: Subscription[];
243
+ credits: Credit[];
244
+ debits: Debit[];
245
+ /** Remaining valid hours (accumulated from credits) */
246
+ remainingHours: RemainingHours;
247
+ }
248
+ export type RemainingHours = number | "unlimited";
249
+
250
+ export interface CreditAlert {
251
+ userId: string;
252
+ remainingUsageHours: number;
253
+ }
@@ -1,63 +1,111 @@
1
1
  /**
2
- * Copyright (c) 2020 TypeFox GmbH. All rights reserved.
2
+ * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
- * See License-AGPL.txt in the project root for license information.
4
+ * See License.AGPL.txt in the project root for license information.
5
5
  */
6
6
 
7
7
  import { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol";
8
- import { Without } from "./util/without";
8
+ import { BlockedRepository } from "./blocked-repositories-protocol";
9
+ import { FindPrebuildsParams } from "./gitpod-service";
10
+ import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
9
11
  import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
10
12
  import { RoleOrPermission } from "./permission";
13
+ import { AccountStatement } from "./accounting-protocol";
14
+ import { BillingMode } from "./billing-mode";
15
+ import { CostCenterJSON, ListUsageRequest, ListUsageResponse } from "./usage";
16
+ import { InstallationAdminSettings, TelemetryData } from "./installation-admin-protocol";
11
17
 
12
18
  export interface AdminServer {
13
19
  adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
14
20
  adminGetUser(id: string): Promise<User>;
15
21
  adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
22
+ adminDeleteUser(id: string): Promise<void>;
23
+ adminVerifyUser(id: string): Promise<User>;
16
24
  adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
17
25
  adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
18
26
 
27
+ adminCreateBlockedRepository(urlRegexp: string, blockUser: boolean): Promise<BlockedRepository>;
28
+ adminDeleteBlockedRepository(id: number): Promise<void>;
29
+ adminGetBlockedRepositories(
30
+ req: AdminGetListRequest<BlockedRepository>,
31
+ ): Promise<AdminGetListResult<BlockedRepository>>;
32
+
33
+ adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
34
+ adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
35
+ adminGetTeamById(id: string): Promise<Team | undefined>;
36
+ adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
37
+
19
38
  adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
20
39
  adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
21
40
  adminForceStopWorkspace(id: string): Promise<void>;
41
+ adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
42
+
43
+ adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
44
+ adminGetProjectById(id: string): Promise<Project | undefined>;
22
45
 
46
+ adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
23
47
  adminSetLicense(key: string): Promise<void>;
48
+
49
+ adminGetAccountStatement(userId: string): Promise<AccountStatement>;
50
+ adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise<void>;
51
+ adminIsStudent(userId: string): Promise<boolean>;
52
+ adminAddStudentEmailDomain(userId: string, domain: string): Promise<void>;
53
+ adminGrantExtraHours(userId: string, extraHours: number): Promise<void>;
54
+ adminGetBillingMode(attributionId: string): Promise<BillingMode>;
55
+
56
+ adminGetSettings(): Promise<InstallationAdminSettings>;
57
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
58
+
59
+ adminGetCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
60
+ adminSetUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
61
+
62
+ adminListUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
63
+ adminAddUsageCreditNote(attributionId: string, credits: number, note: string): Promise<void>;
64
+ adminGetUsageBalance(attributionId: string): Promise<number>;
65
+
66
+ // Admin Settings
67
+ adminGetSettings(): Promise<InstallationAdminSettings>;
68
+ adminUpdateSettings(settings: InstallationAdminSettings): Promise<void>;
69
+ adminGetTelemetryData(): Promise<TelemetryData>;
24
70
  }
25
71
 
26
72
  export interface AdminGetListRequest<T> {
27
- offset: number
28
- limit: number
29
- orderBy: keyof T
30
- orderDir: "asc" | "desc"
73
+ offset: number;
74
+ limit: number;
75
+ orderBy: keyof T;
76
+ orderDir: "asc" | "desc";
31
77
  searchTerm?: string;
32
78
  }
33
79
 
34
80
  export interface AdminGetListResult<T> {
35
- total: number
36
- rows: T[]
81
+ total: number;
82
+ rows: T[];
37
83
  }
38
84
 
39
85
  export interface AdminBlockUserRequest {
40
- id: string
41
- blocked: boolean
86
+ id: string;
87
+ blocked: boolean;
42
88
  }
43
89
 
44
90
  export interface AdminModifyRoleOrPermissionRequest {
45
91
  id: string;
46
92
  rpp: {
47
- r: RoleOrPermission
48
- add: boolean
49
- }[]
93
+ r: RoleOrPermission;
94
+ add: boolean;
95
+ }[];
50
96
  }
51
97
 
52
98
  export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
53
99
  id: string;
54
100
  changes: {
55
- featureFlag: NamedWorkspaceFeatureFlag
56
- add: boolean
57
- }[]
101
+ featureFlag: NamedWorkspaceFeatureFlag;
102
+ add: boolean;
103
+ }[];
58
104
  }
59
105
 
60
- export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationTime">, Without<WorkspaceInstance, "id"|"creationTime"> {
106
+ export interface WorkspaceAndInstance
107
+ extends Omit<Workspace, "id" | "creationTime">,
108
+ Omit<WorkspaceInstance, "id" | "creationTime"> {
61
109
  workspaceId: string;
62
110
  workspaceCreationTime: string;
63
111
  instanceId: string;
@@ -65,6 +113,33 @@ export interface WorkspaceAndInstance extends Without<Workspace, "id"|"creationT
65
113
  phase: WorkspaceInstancePhase;
66
114
  }
67
115
 
68
- export interface AdminGetWorkspacesRequest extends AdminGetListRequest<WorkspaceAndInstance> {
69
- ownerId?: string
70
- }
116
+ export namespace WorkspaceAndInstance {
117
+ export function toWorkspace(wai: WorkspaceAndInstance): Workspace {
118
+ return {
119
+ id: wai.workspaceId,
120
+ creationTime: wai.workspaceCreationTime,
121
+ ...wai,
122
+ };
123
+ }
124
+
125
+ export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined {
126
+ if (!wai.instanceId) {
127
+ return undefined;
128
+ }
129
+ return {
130
+ id: wai.instanceId,
131
+ creationTime: wai.instanceCreationTime,
132
+ ...wai,
133
+ };
134
+ }
135
+ }
136
+
137
+ export type AdminGetWorkspacesRequest = AdminGetListRequest<WorkspaceAndInstance> & AdminGetWorkspacesQuery;
138
+ /** The fields are meant to be used either OR (not combined) */
139
+ export type AdminGetWorkspacesQuery = {
140
+ /** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */
141
+ instanceIdOrWorkspaceId?: string;
142
+ instanceId?: string;
143
+ workspaceId?: string;
144
+ ownerId?: string;
145
+ };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License.AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ export const IAnalyticsWriter = Symbol("IAnalyticsWriter");
8
+
9
+ type Identity =
10
+ | { userId: string | number; anonymousId?: string | number }
11
+ | { userId?: string | number; anonymousId: string | number };
12
+
13
+ interface Message {
14
+ messageId?: string;
15
+ }
16
+
17
+ export type IdentifyMessage = Message &
18
+ Identity & {
19
+ traits?: any;
20
+ timestamp?: Date;
21
+ context?: any;
22
+ };
23
+
24
+ export type TrackMessage = Message &
25
+ Identity & {
26
+ event: string;
27
+ properties?: any;
28
+ timestamp?: Date;
29
+ context?: any;
30
+ };
31
+
32
+ export type PageMessage = Message &
33
+ Identity & {
34
+ properties?: any;
35
+ timestamp?: Date;
36
+ context?: any;
37
+ };
38
+
39
+ export type RemoteTrackMessage = Omit<TrackMessage, "timestamp" | "userId">;
40
+ export type RemotePageMessage = Omit<PageMessage, "timestamp" | "userId"> & {
41
+ includePII?: boolean;
42
+ };
43
+
44
+ export type RemoteIdentifyMessage = Omit<IdentifyMessage, "timestamp" | "userId">;
45
+
46
+ export interface IAnalyticsWriter {
47
+ identify(msg: IdentifyMessage): void;
48
+
49
+ track(msg: TrackMessage): void;
50
+
51
+ page(msg: PageMessage): void;
52
+ }