@nlabs/reaktor 1.6.3 → 1.7.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 (274) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +48 -16
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +5 -1
  10. package/lib/actions/crm.js +226 -3
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +143 -45
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.js +59 -6
  45. package/lib/actions/videos.js +2 -2
  46. package/lib/adapters/arangoAdapter.js +1 -1
  47. package/lib/adapters/contentAdapter.js +2 -2
  48. package/lib/adapters/fileAdapter.js +1 -1
  49. package/lib/adapters/imageAdapter.js +1 -1
  50. package/lib/adapters/index.js +1 -1
  51. package/lib/adapters/messageAdapter.js +1 -1
  52. package/lib/adapters/postAdapter.js +1 -1
  53. package/lib/adapters/reaktorAdapter.js +1 -1
  54. package/lib/adapters/tagAdapter.d.ts +0 -1
  55. package/lib/adapters/tagAdapter.js +1 -2
  56. package/lib/adapters/userAdapter.d.ts +0 -1
  57. package/lib/adapters/userAdapter.js +1 -2
  58. package/lib/config.js +8 -2
  59. package/lib/constants/collections.d.ts +5 -1
  60. package/lib/constants/collections.js +6 -2
  61. package/lib/handlers/graphqlHandler.d.ts +2 -2
  62. package/lib/handlers/graphqlHandler.js +2 -19
  63. package/lib/index.d.ts +1 -1
  64. package/lib/index.js +2 -2
  65. package/lib/lambdas/actions/websockets.js +2 -2
  66. package/lib/lambdas/authorizer.js +2 -2
  67. package/lib/lambdas/connection.js +2 -2
  68. package/lib/lambdas/utils/message.js +2 -2
  69. package/lib/lambdas/utils/websocket.d.ts +1 -1
  70. package/lib/lambdas/utils/websocket.js +2 -2
  71. package/lib/mocks/conversation.js +1 -1
  72. package/lib/mocks/file.js +1 -1
  73. package/lib/mocks/group.js +1 -1
  74. package/lib/mocks/image.js +1 -1
  75. package/lib/mocks/post.js +1 -1
  76. package/lib/mocks/tag.js +1 -1
  77. package/lib/mocks/user.js +1 -1
  78. package/lib/mocks/video.js +1 -1
  79. package/lib/mutations/analytics/analytics.d.ts +1 -0
  80. package/lib/mutations/analytics/analytics.js +35 -0
  81. package/lib/mutations/content/content.js +2 -2
  82. package/lib/mutations/crm/crm.js +18 -4
  83. package/lib/mutations/events/events.js +2 -2
  84. package/lib/mutations/flags/flags.d.ts +1 -0
  85. package/lib/mutations/flags/flags.js +33 -0
  86. package/lib/mutations/groups/groups.js +2 -2
  87. package/lib/mutations/images/images.js +2 -2
  88. package/lib/mutations/index.d.ts +3 -1
  89. package/lib/mutations/index.js +13 -3
  90. package/lib/mutations/locations/locations.js +2 -2
  91. package/lib/mutations/messages/messages.js +2 -2
  92. package/lib/mutations/personas/personas.js +2 -2
  93. package/lib/mutations/posts/posts.js +2 -2
  94. package/lib/mutations/reactions/reactions.js +2 -2
  95. package/lib/mutations/rum/rum.js +2 -2
  96. package/lib/mutations/statistics/statistics.js +2 -2
  97. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  98. package/lib/mutations/tags/tags.js +2 -2
  99. package/lib/mutations/users/users.js +30 -17
  100. package/lib/mutations/videos/videos.js +2 -2
  101. package/lib/objectTypes/analytics.d.ts +8 -0
  102. package/lib/objectTypes/analytics.js +147 -0
  103. package/lib/objectTypes/app.js +2 -2
  104. package/lib/objectTypes/bankAccount.js +2 -2
  105. package/lib/objectTypes/connection.js +2 -2
  106. package/lib/objectTypes/content.js +2 -2
  107. package/lib/objectTypes/conversation.js +2 -2
  108. package/lib/objectTypes/creditCard.js +2 -2
  109. package/lib/objectTypes/crm.d.ts +5 -0
  110. package/lib/objectTypes/crm.js +64 -2
  111. package/lib/objectTypes/document.js +1 -1
  112. package/lib/objectTypes/error.js +2 -2
  113. package/lib/objectTypes/event.js +2 -2
  114. package/lib/objectTypes/external.js +2 -2
  115. package/lib/objectTypes/file.js +2 -2
  116. package/lib/objectTypes/filter.js +2 -2
  117. package/lib/objectTypes/flag.d.ts +1 -0
  118. package/lib/objectTypes/flag.js +32 -0
  119. package/lib/objectTypes/group.js +2 -2
  120. package/lib/objectTypes/iapSubscription.js +2 -2
  121. package/lib/objectTypes/image.d.ts +1 -1
  122. package/lib/objectTypes/image.js +2 -2
  123. package/lib/objectTypes/index.d.ts +2 -0
  124. package/lib/objectTypes/index.js +3 -1
  125. package/lib/objectTypes/location.js +2 -2
  126. package/lib/objectTypes/message.js +2 -2
  127. package/lib/objectTypes/passcode.js +2 -2
  128. package/lib/objectTypes/persona.js +2 -2
  129. package/lib/objectTypes/plan.js +2 -2
  130. package/lib/objectTypes/post.js +2 -2
  131. package/lib/objectTypes/query.js +2 -2
  132. package/lib/objectTypes/reaction.js +2 -2
  133. package/lib/objectTypes/relation.js +2 -2
  134. package/lib/objectTypes/rum.js +4 -4
  135. package/lib/objectTypes/search.js +2 -2
  136. package/lib/objectTypes/statistics.js +2 -2
  137. package/lib/objectTypes/subscription.js +2 -2
  138. package/lib/objectTypes/tag.js +2 -2
  139. package/lib/objectTypes/user.js +2 -2
  140. package/lib/objectTypes/video.d.ts +1 -1
  141. package/lib/objectTypes/video.js +2 -2
  142. package/lib/queries/analytics/analytics.d.ts +1 -0
  143. package/lib/queries/analytics/analytics.js +41 -0
  144. package/lib/queries/content/content.js +2 -2
  145. package/lib/queries/crm/crm.js +15 -4
  146. package/lib/queries/events/events.js +2 -2
  147. package/lib/queries/flags/flags.d.ts +1 -0
  148. package/lib/queries/flags/flags.js +16 -0
  149. package/lib/queries/groups/groups.js +2 -2
  150. package/lib/queries/images/images.js +2 -2
  151. package/lib/queries/index.d.ts +3 -1
  152. package/lib/queries/index.js +13 -3
  153. package/lib/queries/locations/locations.js +2 -2
  154. package/lib/queries/messages/messages.js +1 -1
  155. package/lib/queries/personas/personas.js +2 -2
  156. package/lib/queries/posts/posts.js +2 -2
  157. package/lib/queries/query/query.js +2 -2
  158. package/lib/queries/reactions/reactions.js +2 -2
  159. package/lib/queries/statistics/statistics.js +2 -2
  160. package/lib/queries/subscriptions/subscriptions.js +1 -1
  161. package/lib/queries/tags/tags.js +2 -2
  162. package/lib/queries/users/users.js +2 -2
  163. package/lib/queries/videos/videos.js +2 -2
  164. package/lib/templates/email/layout.js +1 -1
  165. package/lib/templates/email/passwordForgot.js +1 -1
  166. package/lib/templates/email/passwordRecovery.js +1 -1
  167. package/lib/templates/email/verifyEmail.js +1 -1
  168. package/lib/templates/email/welcome.js +1 -1
  169. package/lib/templates/sms/passwordForgot.js +1 -1
  170. package/lib/templates/sms/passwordRecovery.js +1 -1
  171. package/lib/templates/sms/verifyEmail.js +1 -1
  172. package/lib/templates/sms/verifyPhone.js +1 -1
  173. package/lib/templates/sms/welcome.js +1 -1
  174. package/lib/types/analytics.types.d.ts +92 -0
  175. package/lib/types/analytics.types.js +6 -0
  176. package/lib/types/apps.types.d.ts +1 -1
  177. package/lib/types/apps.types.js +2 -2
  178. package/lib/types/arangodb.types.d.ts +2 -2
  179. package/lib/types/arangodb.types.js +2 -2
  180. package/lib/types/auth.types.d.ts +3 -1
  181. package/lib/types/auth.types.js +2 -2
  182. package/lib/types/connections.types.d.ts +1 -1
  183. package/lib/types/connections.types.js +2 -2
  184. package/lib/types/content.types.d.ts +1 -1
  185. package/lib/types/content.types.js +2 -2
  186. package/lib/types/conversations.types.d.ts +1 -1
  187. package/lib/types/conversations.types.js +2 -2
  188. package/lib/types/crm.types.d.ts +38 -1
  189. package/lib/types/crm.types.js +2 -2
  190. package/lib/types/email.types.d.ts +1 -1
  191. package/lib/types/email.types.js +2 -2
  192. package/lib/types/error.types.js +1 -1
  193. package/lib/types/files.types.d.ts +1 -1
  194. package/lib/types/files.types.js +2 -2
  195. package/lib/types/flags.types.d.ts +28 -0
  196. package/lib/types/flags.types.js +3 -0
  197. package/lib/types/google.types.d.ts +1 -1
  198. package/lib/types/google.types.js +2 -2
  199. package/lib/types/groups.types.d.ts +1 -1
  200. package/lib/types/groups.types.js +2 -2
  201. package/lib/types/images.types.d.ts +1 -1
  202. package/lib/types/images.types.js +2 -2
  203. package/lib/types/index.d.ts +3 -1
  204. package/lib/types/index.js +4 -2
  205. package/lib/types/locations.types.d.ts +1 -1
  206. package/lib/types/locations.types.js +2 -2
  207. package/lib/types/messages.types.d.ts +1 -1
  208. package/lib/types/messages.types.js +2 -2
  209. package/lib/types/notifications.types.d.ts +1 -1
  210. package/lib/types/notifications.types.js +2 -2
  211. package/lib/types/payments.types.d.ts +4 -1
  212. package/lib/types/payments.types.js +2 -2
  213. package/lib/types/personas.types.js +1 -1
  214. package/lib/types/posts.types.d.ts +1 -1
  215. package/lib/types/posts.types.js +2 -2
  216. package/lib/types/rum.types.d.ts +3 -3
  217. package/lib/types/rum.types.js +2 -2
  218. package/lib/types/statistics.types.js +1 -1
  219. package/lib/types/tags.types.d.ts +1 -1
  220. package/lib/types/tags.types.js +2 -2
  221. package/lib/types/users.types.d.ts +1 -1
  222. package/lib/types/users.types.js +2 -2
  223. package/lib/types/videos.types.d.ts +1 -1
  224. package/lib/types/videos.types.js +2 -2
  225. package/lib/types/websockets.types.d.ts +1 -1
  226. package/lib/types/websockets.types.js +2 -2
  227. package/lib/upload.js +4 -9
  228. package/lib/utils/adapterUtils.d.ts +1 -1
  229. package/lib/utils/adapterUtils.js +2 -2
  230. package/lib/utils/analyticsUtils.d.ts +1 -1
  231. package/lib/utils/analyticsUtils.js +2 -2
  232. package/lib/utils/aqlHelpers.d.ts +1 -1
  233. package/lib/utils/aqlHelpers.js +2 -2
  234. package/lib/utils/arangodbUtils.d.ts +9 -1
  235. package/lib/utils/arangodbUtils.js +10 -2
  236. package/lib/utils/authUtils.js +2 -2
  237. package/lib/utils/awsUtils.js +2 -2
  238. package/lib/utils/collectionRegistry.d.ts +1 -1
  239. package/lib/utils/collectionRegistry.js +17 -2
  240. package/lib/utils/contextUtils.d.ts +2 -2
  241. package/lib/utils/contextUtils.js +2 -2
  242. package/lib/utils/dbI18n.example.d.ts +1 -1
  243. package/lib/utils/dbI18n.example.js +2 -2
  244. package/lib/utils/dbI18n.js +2 -2
  245. package/lib/utils/googleTranslate.d.ts +1 -1
  246. package/lib/utils/googleTranslate.js +2 -2
  247. package/lib/utils/graphqlUtils.d.ts +1 -0
  248. package/lib/utils/graphqlUtils.js +1 -1
  249. package/lib/utils/imageUtils.js +1 -1
  250. package/lib/utils/index.d.ts +1 -1
  251. package/lib/utils/index.js +2 -2
  252. package/lib/utils/languageDetection.js +1 -1
  253. package/lib/utils/localeUtils.d.ts +1 -1
  254. package/lib/utils/localeUtils.example.d.ts +1 -1
  255. package/lib/utils/localeUtils.example.js +2 -2
  256. package/lib/utils/localeUtils.js +2 -2
  257. package/lib/utils/middlewareUtils.js +1 -1
  258. package/lib/utils/queryBuilder.d.ts +1 -1
  259. package/lib/utils/queryBuilder.js +2 -2
  260. package/lib/utils/schemaUtils.js +1 -1
  261. package/lib/utils/sessionUtils.js +2 -2
  262. package/lib/utils/stripeUtils.d.ts +1 -1
  263. package/lib/utils/stripeUtils.js +2 -2
  264. package/lib/utils/templateUtils.js +1 -1
  265. package/lib/utils/testUtils.js +2 -2
  266. package/lib/utils/translationQueue.d.ts +1 -1
  267. package/lib/utils/translationQueue.example.d.ts +1 -1
  268. package/lib/utils/translationQueue.example.js +2 -2
  269. package/lib/utils/translationQueue.js +2 -2
  270. package/lib/videoProcessing.js +1 -1
  271. package/package.json +43 -80
  272. package/lib/actions/websockets.d.ts +0 -20
  273. package/lib/actions/websockets.js +0 -164
  274. package/lib/mocks/nlabs.png +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  *
5
5
  * Example usage of the translation queue system with Google Translate integration
6
6
  *
@@ -337,4 +337,4 @@ export async function ensureAllTranslationsProcessed() {
337
337
  // // Force flush
338
338
  // await ensureAllTranslationsProcessed();
339
339
 
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUuZXhhbXBsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIG9mIHRoZSB0cmFuc2xhdGlvbiBxdWV1ZSBzeXN0ZW0gd2l0aCBHb29nbGUgVHJhbnNsYXRlIGludGVncmF0aW9uXG4gKlxuICogVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgbmV3IHRyYW5zbGF0aW9uIHF1ZXVlIHRoYXQgYXV0b21hdGljYWxseVxuICogdHJhbnNsYXRlcyBjb250ZW50IHVzaW5nIEdvb2dsZSBUcmFuc2xhdGUgQVBJIHdoZW4gbmVlZGVkLlxuICovXG5cbmltcG9ydCB7Zmx1c2gsIGkxOG4sIHR5cGUgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJy4vdHJhbnNsYXRpb25RdWV1ZS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtMb2NhbGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuXG4vLyBFeGFtcGxlIDE6IEJhc2ljIHRyYW5zbGF0aW9ucyAtIHdpbGwgdXNlIGRhdGFiYXNlIG9yIHRyYW5zbGF0ZSBhcyBuZWVkZWRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnN1YnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwZXJzb25hbCBBSSBhc3Npc3RhbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLmRlc2NyaXB0aW9uJyxcbiAgICAgIGZhbGxiYWNrOiAnR2V0IHN0YXJ0ZWQgYnkgZXhwbG9yaW5nIG91ciBmZWF0dXJlcydcbiAgICB9XG4gIF07XG5cbiAgLy8gVGhpcyB3aWxsOlxuICAvLyAxLiBDaGVjayBkYXRhYmFzZSBmb3IgZXhpc3RpbmcgdHJhbnNsYXRpb25zXG4gIC8vIDIuIElmIG5vdCBmb3VuZCBhbmQgbG9jYWxlIGlzIGRlZmF1bHQgKGVuKSwgc2F2ZSBmYWxsYmFjayB0byBEQlxuICAvLyAzLiBJZiBub3QgZm91bmQgYW5kIGxvY2FsZSBpcyBkaWZmZXJlbnQsIHRyYW5zbGF0ZSBmcm9tIGRlZmF1bHQgbG9jYWxlXG4gIC8vIDQuIFNhdmUgdHJhbnNsYXRlZCBjb250ZW50IHRvIERCIGZvciBmdXR1cmUgdXNlXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4gKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3dlbGNvbWUudGl0bGUnOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnIChvciB0cmFuc2xhdGVkIHZlcnNpb24pLFxuICAvLyAgICd3ZWxjb21lLnN1YnRpdGxlJzogJ1lvdXIgcGVyc29uYWwgQUkgYXNzaXN0YW50JyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKSxcbiAgLy8gICAnd2VsY29tZS5kZXNjcmlwdGlvbic6ICdHZXQgc3RhcnRlZCBieSBleHBsb3Jpbmcgb3VyIGZlYXR1cmVzJyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMjogVHJhbnNsYXRpb25zIHdpdGggaW50ZXJwb2xhdGlvblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJuYW1lOiBzdHJpbmcsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAndXNlci53ZWxjb21lJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSBiYWNrLCB7e3VzZXJuYW1lfX0hJyxcbiAgICAgIHBhcmFtczoge3VzZXJuYW1lfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5ub3RpZmljYXRpb25zJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUge3tjb3VudH19IG5ldyBub3RpZmljYXRpb25zJyxcbiAgICAgIHBhcmFtczoge2NvdW50OiA1fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5sYXN0TG9naW4nLFxuICAgICAgZmFsbGJhY2s6ICdMYXN0IGxvZ2luOiB7e2RhdGV9fScsXG4gICAgICBwYXJhbXM6IHtkYXRlOiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3VzZXIud2VsY29tZSc6ICdXZWxjb21lIGJhY2ssIEFsaWNlIScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKSxcbiAgLy8gICAndXNlci5ub3RpZmljYXRpb25zJzogJ1lvdSBoYXZlIDUgbmV3IG5vdGlmaWNhdGlvbnMnIChvciB0cmFuc2xhdGVkIHdpdGggaW50ZXJwb2xhdGlvbiksXG4gIC8vICAgJ3VzZXIubGFzdExvZ2luJzogJ0xhc3QgbG9naW46IDEvMTUvMjAyNScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMzogTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE11bHRpTGFuZ3VhZ2VDb250ZW50KGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgLy8gR2V0IGNvbnRlbnQgaW4gbXVsdGlwbGUgbGFuZ3VhZ2VzXG4gIGNvbnN0IGxhbmd1YWdlczogTG9jYWxlW10gPSBbJ2VuJywgJ2VzJywgJ2ZyJ107XG4gIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxMb2NhbGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge30gYXMgYW55O1xuXG4gIGZvcihjb25zdCBsb2NhbGUgb2YgbGFuZ3VhZ2VzKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAubmFtZScsXG4gICAgICAgIGZhbGxiYWNrOiAnVG9yY2hPbmUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAudGFnbGluZScsXG4gICAgICAgIGZhbGxiYWNrOiAnWW91ciBBSSBBc3Npc3RhbnQnXG4gICAgICB9XG4gICAgXTtcblxuICAgIHJlc3VsdHNbbG9jYWxlXSA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG4gIC8vIFJldHVybnM6IHtcbiAgLy8gICBlbjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnWW91ciBBSSBBc3Npc3RhbnQnIH0sXG4gIC8vICAgZXM6IHsgJ2FwcC5uYW1lJzogJ1RvcmNoT25lJywgJ2FwcC50YWdsaW5lJzogJ1R1IEFzaXN0ZW50ZSBkZSBJQScgfSxcbiAgLy8gICBmcjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnVm90cmUgQXNzaXN0YW50IElBJyB9XG4gIC8vIH1cbn1cblxuLy8gRXhhbXBsZSA0OiBFcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2tzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Um9idXN0VHJhbnNsYXRpb25zKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZXJyb3Iubm90Rm91bmQnLFxuICAgICAgZmFsbGJhY2s6ICdDb250ZW50IG5vdCBmb3VuZCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Vycm9yLnNlcnZlckVycm9yJyxcbiAgICAgIGZhbGxiYWNrOiAnU2VydmVyIGVycm9yIG9jY3VycmVkJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnc3VjY2Vzcy5zYXZlZCcsXG4gICAgICBmYWxsYmFjazogJ0NvbnRlbnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgIH1cbiAgXTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdUcmFuc2xhdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgLy8gUmV0dXJuIGZhbGxiYWNrcyBpZiB0cmFuc2xhdGlvbiBmYWlsc1xuICAgIHJldHVybiB0cmFuc2xhdGlvbnMucmVkdWNlKChhY2MsIHQpID0+IHtcbiAgICAgIGFjY1t0LmtleV0gPSB0LmZhbGxiYWNrIHx8ICcnO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbiAgfVxufVxuXG4vLyBFeGFtcGxlIDU6IEJhdGNoIHByb2Nlc3Npbmcgd2l0aCBmbHVzaFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NMYXJnZVRyYW5zbGF0aW9uQmF0Y2goY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIC8vIENyZWF0ZSBhIGxhcmdlIGJhdGNoIG9mIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXTtcblxuICBmb3IobGV0IGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7XG4gICAgdHJhbnNsYXRpb25zLnB1c2goe1xuICAgICAga2V5OiBgaXRlbS4ke2l9LnRpdGxlYCxcbiAgICAgIGZhbGxiYWNrOiBgSXRlbSAke2l9IFRpdGxlYCxcbiAgICAgIHBhcmFtczoge251bWJlcjogaX1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdGhlIGJhdGNoXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG4gIC8vIEVuc3VyZSBhbGwgcGVuZGluZyB0cmFuc2xhdGlvbnMgYXJlIHByb2Nlc3NlZFxuICBhd2FpdCBmbHVzaCgpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEV4YW1wbGUgNjogRXJyb3IgaGFuZGxpbmcgd2l0aCBmYWxsYmFja3NcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIGVycm9yQ29kZTogc3RyaW5nLCBsb2NhbGU6IExvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogYGVycm9yLiR7ZXJyb3JDb2RlfWAsXG4gICAgICBmYWxsYmFjazogYEFuIGVycm9yIG9jY3VycmVkOiAke2Vycm9yQ29kZX1gLFxuICAgICAgcGFyYW1zOiB7ZXJyb3JDb2RlfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZXJyb3IuY29udGFjdFN1cHBvcnQnLFxuICAgICAgZmFsbGJhY2s6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nLFxuICAgICAgcGFyYW1zOiB7fVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICAvLyBJZiBkYXRhYmFzZSBpcyB1bmF2YWlsYWJsZSwgd2lsbCByZXR1cm4gZmFsbGJhY2tzOlxuICAvLyB7XG4gIC8vICAgJ2Vycm9yLklOVkFMSURfRU1BSUwnOiAnQW4gZXJyb3Igb2NjdXJyZWQ6IElOVkFMSURfRU1BSUwnLFxuICAvLyAgICdlcnJvci5jb250YWN0U3VwcG9ydCc6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nXG4gIC8vIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBFeGFtcGxlIDc6IENvbXBsZXggZW1haWwgdGVtcGxhdGUgd2l0aCBtdWx0aXBsZSBpbnRlcnBvbGF0aW9uc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWxUZW1wbGF0ZShcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBvcmRlcklkOiBzdHJpbmc7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBpdGVtczogbnVtYmVyO1xuICB9LFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbikge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCcsXG4gICAgICBmYWxsYmFjazogJ09yZGVyIHt7b3JkZXJJZH19IENvbmZpcm1lZCcsXG4gICAgICBwYXJhbXM6IHtvcmRlcklkOiB1c2VyRGF0YS5vcmRlcklkfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uZ3JlZXRpbmcnLFxuICAgICAgZmFsbGJhY2s6ICdIZWxsbyB7e25hbWV9fSwnLFxuICAgICAgcGFyYW1zOiB7bmFtZTogdXNlckRhdGEubmFtZX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmJvZHknLFxuICAgICAgZmFsbGJhY2s6ICdZb3VyIG9yZGVyIHt7b3JkZXJJZH19IGhhcyBiZWVuIGNvbmZpcm1lZC4gVG90YWw6ICR7e3RvdGFsfX0gZm9yIHt7aXRlbXN9fSBpdGVtcy4nLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG9yZGVySWQ6IHVzZXJEYXRhLm9yZGVySWQsXG4gICAgICAgIHRvdGFsOiB1c2VyRGF0YS50b3RhbCxcbiAgICAgICAgaXRlbXM6IHVzZXJEYXRhLml0ZW1zXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5mb290ZXInLFxuICAgICAgZmFsbGJhY2s6ICdUaGFuayB5b3UgZm9yIHlvdXIgcHVyY2hhc2UhJ1xuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4ge1xuICAgIHN1YmplY3Q6IHJlc3VsdFsnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCddLFxuICAgIGdyZWV0aW5nOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmdyZWV0aW5nJ10sXG4gICAgYm9keTogcmVzdWx0WydlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5ib2R5J10sXG4gICAgZm9vdGVyOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmZvb3RlciddXG4gIH07XG59XG5cbi8vIEV4YW1wbGUgODogTm90aWZpY2F0aW9uIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2NlbmFyaW9zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ud2VsY29tZScsXG4gICAgICBmYWxsYmFjazogJ1dlbGNvbWUgdG8gVG9yY2hPbmUhJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWZpY2F0aW9uLnZlcmlmaWNhdGlvbicsXG4gICAgICBmYWxsYmFjazogJ1BsZWFzZSB2ZXJpZnkgeW91ciBhY2NvdW50LidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5wYXNzd29yZFJlc2V0JyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ucGVyc29uYVVwZGF0ZScsXG4gICAgICBmYWxsYmFjazogJ1lvdXIgcGVyc29uYSBoYXMgYmVlbiB1cGRhdGVkLidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5uZXdNZXNzYWdlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUgYSBuZXcgbWVzc2FnZSBmcm9tIHt7c2VuZGVyfX0uJyxcbiAgICAgIHBhcmFtczoge3NlbmRlcjogJ0pvaG4gRG9lJ31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRXhhbXBsZSA5OiBQZXJmb3JtYW5jZSBjb21wYXJpc29uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybWFuY2VDb21wYXJpc29uKGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgY29uc3Qga2V5cyA9IFtcbiAgICAnd2VsY29tZScsICd2ZXJpZmljYXRpb24nLCAncGFzc3dvcmRSZXNldCcsICdwZXJzb25hVXBkYXRlJyxcbiAgICAnZW1haWwuc3ViamVjdCcsICdlbWFpbC5ib2R5JywgJ3Ntcy53ZWxjb21lJywgJ3Ntcy52ZXJpZmljYXRpb24nXG4gIF07XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0ga2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICBrZXksXG4gICAgZmFsbGJhY2s6IGBGYWxsYmFjayBmb3IgJHtrZXl9YFxuICB9KSk7XG5cbiAgY29uc29sZS50aW1lKCdCYXRjaCB0cmFuc2xhdGlvbicpO1xuICBjb25zdCBiYXRjaFJlc3VsdHMgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgJ2VuJyk7XG4gIGNvbnNvbGUudGltZUVuZCgnQmF0Y2ggdHJhbnNsYXRpb24nKTtcblxuICByZXR1cm4gYmF0Y2hSZXN1bHRzO1xufVxuXG4vLyBFeGFtcGxlIDEwOiBEeW5hbWljIGNvbnRlbnQgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJHcmVldGluZyhcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckxvY2FsZT86IHN0cmluZyxcbiAgdXNlcm5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9ICh1c2VyTG9jYWxlIGFzIExvY2FsZSkgfHwgJ2VuJztcblxuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcubW9ybmluZycsXG4gICAgICBmYWxsYmFjazogJ0dvb2QgbW9ybmluZyEnLFxuICAgICAgcGFyYW1zOiB1c2VybmFtZSA/IHt1c2VybmFtZX0gOiB7fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcuYWZ0ZXJub29uJyxcbiAgICAgIGZhbGxiYWNrOiAnR29vZCBhZnRlcm5vb24hJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dyZWV0aW5nLmV2ZW5pbmcnLFxuICAgICAgZmFsbGJhY2s6ICdHb29kIGV2ZW5pbmchJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgLy8gUmV0dXJuIGFwcHJvcHJpYXRlIGdyZWV0aW5nIGJhc2VkIG9uIHRpbWUgb2YgZGF5XG4gIGNvbnN0IGhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gIGlmKGhvdXIgPCAxMikge1xuICAgIHJldHVybiByZXN1bHRbJ2dyZWV0aW5nLm1vcm5pbmcnXTtcbiAgfVxuICBpZihob3VyIDwgMTgpIHtcbiAgICByZXR1cm4gcmVzdWx0WydncmVldGluZy5hZnRlcm5vb24nXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0WydncmVldGluZy5ldmVuaW5nJ107XG59XG5cbi8vIEV4YW1wbGUgMTE6IEZvcmNlIGZsdXNoIHBlbmRpbmcgdHJhbnNsYXRpb25zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCkge1xuICAvLyBGb3JjZSBwcm9jZXNzIGFueSBwZW5kaW5nIHRyYW5zbGF0aW9uIGJhdGNoZXNcbiAgYXdhaXQgZmx1c2goKTtcbiAgY29uc29sZS5sb2coJ0FsbCB0cmFuc2xhdGlvbiBiYXRjaGVzIHByb2Nlc3NlZCcpO1xufVxuXG4vLyBVc2FnZSBleGFtcGxlczpcbi8vIGNvbnN0IGNvbnRleHQgPSB7IGRhdGFiYXNlTmFtZTogJ3RvcmNob25lLWRldicsIHNlc3Npb246IHsgdXNlcklkOiAndXNlcjEyMycgfSB9O1xuLy9cbi8vIC8vIEJhc2ljIHVzYWdlXG4vLyBjb25zdCB3ZWxjb21lTWVzc2FnZXMgPSBhd2FpdCBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dCwgJ2VuJyk7XG4vL1xuLy8gLy8gV2l0aCBpbnRlcnBvbGF0aW9uXG4vLyBjb25zdCBwZXJzb25hbGl6ZWRNZXNzYWdlcyA9IGF3YWl0IGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQsICdKb2huJywgJ2VzJyk7XG4vL1xuLy8gLy8gTXVsdGktbGFuZ3VhZ2UgY29udGVudFxuLy8gY29uc3QgbXVsdGlMYW5ndWFnZUNvbnRlbnQgPSBhd2FpdCBnZXRNdWx0aUxhbmd1YWdlQ29udGVudChjb250ZXh0KTtcbi8vXG4vLyAvLyBFcnJvciBoYW5kbGluZ1xuLy8gY29uc3QgZXJyb3JNZXNzYWdlcyA9IGF3YWl0IGdldFJvYnVzdFRyYW5zbGF0aW9ucyhjb250ZXh0LCAnZGUnKTtcbi8vXG4vLyAvLyBDb21wbGV4IHRlbXBsYXRlXG4vLyBjb25zdCBlbWFpbFRlbXBsYXRlID0gYXdhaXQgZ2VuZXJhdGVFbWFpbFRlbXBsYXRlKGNvbnRleHQsIHtcbi8vICAgbmFtZTogJ01hcmlhJyxcbi8vICAgZW1haWw6ICdtYXJpYUBleGFtcGxlLmNvbScsXG4vLyAgIG9yZGVySWQ6ICdPUkQtMTIzJyxcbi8vICAgdG90YWw6IDk5Ljk5LFxuLy8gICBpdGVtczogM1xuLy8gfSwgJ3B0Jyk7XG4vL1xuLy8gLy8gTm90aWZpY2F0aW9uc1xuLy8gY29uc3Qgbm90aWZpY2F0aW9ucyA9IGF3YWl0IGdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzKGNvbnRleHQsICdmcicpO1xuLy9cbi8vIC8vIFBlcmZvcm1hbmNlIHRlc3Rcbi8vIGNvbnN0IHBlcmYgPSBhd2FpdCBwZXJmb3JtYW5jZUNvbXBhcmlzb24oY29udGV4dCk7XG4vL1xuLy8gLy8gRHluYW1pYyBncmVldGluZ1xuLy8gY29uc3QgZ3JlZXRpbmcgPSBhd2FpdCBnZXRVc2VyR3JlZXRpbmcoY29udGV4dCwgJ2VuJywgJ0pvaG4nKTtcbi8vXG4vLyAvLyBGb3JjZSBmbHVzaFxuLy8gYXdhaXQgZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCk7XG4iXSwibmFtZXMiOlsiZmx1c2giLCJpMThuIiwiZ2V0V2VsY29tZU1lc3NhZ2VzIiwiY29udGV4dCIsImxvY2FsZSIsInRyYW5zbGF0aW9ucyIsImtleSIsImZhbGxiYWNrIiwicmVzdWx0IiwiZ2V0UGVyc29uYWxpemVkTWVzc2FnZXMiLCJ1c2VybmFtZSIsInBhcmFtcyIsImNvdW50IiwiZGF0ZSIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJnZXRNdWx0aUxhbmd1YWdlQ29udGVudCIsImxhbmd1YWdlcyIsInJlc3VsdHMiLCJnZXRSb2J1c3RUcmFuc2xhdGlvbnMiLCJlcnJvciIsImNvbnNvbGUiLCJyZWR1Y2UiLCJhY2MiLCJ0IiwicHJvY2Vzc0xhcmdlVHJhbnNsYXRpb25CYXRjaCIsImkiLCJwdXNoIiwibnVtYmVyIiwiZ2V0RXJyb3JNZXNzYWdlcyIsImVycm9yQ29kZSIsImdlbmVyYXRlRW1haWxUZW1wbGF0ZSIsInVzZXJEYXRhIiwib3JkZXJJZCIsIm5hbWUiLCJ0b3RhbCIsIml0ZW1zIiwic3ViamVjdCIsImdyZWV0aW5nIiwiYm9keSIsImZvb3RlciIsImdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzIiwic2VuZGVyIiwicGVyZm9ybWFuY2VDb21wYXJpc29uIiwia2V5cyIsIm1hcCIsInRpbWUiLCJiYXRjaFJlc3VsdHMiLCJ0aW1lRW5kIiwiZ2V0VXNlckdyZWV0aW5nIiwidXNlckxvY2FsZSIsImhvdXIiLCJnZXRIb3VycyIsImVuc3VyZUFsbFRyYW5zbGF0aW9uc1Byb2Nlc3NlZCIsImxvZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0NBUUMsR0FFRCxTQUFRQSxLQUFLLEVBQUVDLElBQUksUUFBK0Isd0JBQXdCO0FBSzFFLDJFQUEyRTtBQUMzRSxP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
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUuZXhhbXBsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIG9mIHRoZSB0cmFuc2xhdGlvbiBxdWV1ZSBzeXN0ZW0gd2l0aCBHb29nbGUgVHJhbnNsYXRlIGludGVncmF0aW9uXG4gKlxuICogVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgbmV3IHRyYW5zbGF0aW9uIHF1ZXVlIHRoYXQgYXV0b21hdGljYWxseVxuICogdHJhbnNsYXRlcyBjb250ZW50IHVzaW5nIEdvb2dsZSBUcmFuc2xhdGUgQVBJIHdoZW4gbmVlZGVkLlxuICovXG5cbmltcG9ydCB7Zmx1c2gsIGkxOG4sIHR5cGUgVHJhbnNsYXRpb25PYmplY3R9IGZyb20gJy4vdHJhbnNsYXRpb25RdWV1ZS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtMb2NhbGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuXG4vLyBFeGFtcGxlIDE6IEJhc2ljIHRyYW5zbGF0aW9ucyAtIHdpbGwgdXNlIGRhdGFiYXNlIG9yIHRyYW5zbGF0ZSBhcyBuZWVkZWRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLnN1YnRpdGxlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwZXJzb25hbCBBSSBhc3Npc3RhbnQnXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd3ZWxjb21lLmRlc2NyaXB0aW9uJyxcbiAgICAgIGZhbGxiYWNrOiAnR2V0IHN0YXJ0ZWQgYnkgZXhwbG9yaW5nIG91ciBmZWF0dXJlcydcbiAgICB9XG4gIF07XG5cbiAgLy8gVGhpcyB3aWxsOlxuICAvLyAxLiBDaGVjayBkYXRhYmFzZSBmb3IgZXhpc3RpbmcgdHJhbnNsYXRpb25zXG4gIC8vIDIuIElmIG5vdCBmb3VuZCBhbmQgbG9jYWxlIGlzIGRlZmF1bHQgKGVuKSwgc2F2ZSBmYWxsYmFjayB0byBEQlxuICAvLyAzLiBJZiBub3QgZm91bmQgYW5kIGxvY2FsZSBpcyBkaWZmZXJlbnQsIHRyYW5zbGF0ZSBmcm9tIGRlZmF1bHQgbG9jYWxlXG4gIC8vIDQuIFNhdmUgdHJhbnNsYXRlZCBjb250ZW50IHRvIERCIGZvciBmdXR1cmUgdXNlXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4gKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3dlbGNvbWUudGl0bGUnOiAnV2VsY29tZSB0byBUb3JjaE9uZSEnIChvciB0cmFuc2xhdGVkIHZlcnNpb24pLFxuICAvLyAgICd3ZWxjb21lLnN1YnRpdGxlJzogJ1lvdXIgcGVyc29uYWwgQUkgYXNzaXN0YW50JyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKSxcbiAgLy8gICAnd2VsY29tZS5kZXNjcmlwdGlvbic6ICdHZXQgc3RhcnRlZCBieSBleHBsb3Jpbmcgb3VyIGZlYXR1cmVzJyAob3IgdHJhbnNsYXRlZCB2ZXJzaW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMjogVHJhbnNsYXRpb25zIHdpdGggaW50ZXJwb2xhdGlvblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJuYW1lOiBzdHJpbmcsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAndXNlci53ZWxjb21lJyxcbiAgICAgIGZhbGxiYWNrOiAnV2VsY29tZSBiYWNrLCB7e3VzZXJuYW1lfX0hJyxcbiAgICAgIHBhcmFtczoge3VzZXJuYW1lfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5ub3RpZmljYXRpb25zJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUge3tjb3VudH19IG5ldyBub3RpZmljYXRpb25zJyxcbiAgICAgIHBhcmFtczoge2NvdW50OiA1fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAndXNlci5sYXN0TG9naW4nLFxuICAgICAgZmFsbGJhY2s6ICdMYXN0IGxvZ2luOiB7e2RhdGV9fScsXG4gICAgICBwYXJhbXM6IHtkYXRlOiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4gcmVzdWx0O1xuICAvLyBSZXR1cm5zOiB7XG4gIC8vICAgJ3VzZXIud2VsY29tZSc6ICdXZWxjb21lIGJhY2ssIEFsaWNlIScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKSxcbiAgLy8gICAndXNlci5ub3RpZmljYXRpb25zJzogJ1lvdSBoYXZlIDUgbmV3IG5vdGlmaWNhdGlvbnMnIChvciB0cmFuc2xhdGVkIHdpdGggaW50ZXJwb2xhdGlvbiksXG4gIC8vICAgJ3VzZXIubGFzdExvZ2luJzogJ0xhc3QgbG9naW46IDEvMTUvMjAyNScgKG9yIHRyYW5zbGF0ZWQgd2l0aCBpbnRlcnBvbGF0aW9uKVxuICAvLyB9XG59XG5cbi8vIEV4YW1wbGUgMzogTXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE11bHRpTGFuZ3VhZ2VDb250ZW50KGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgLy8gR2V0IGNvbnRlbnQgaW4gbXVsdGlwbGUgbGFuZ3VhZ2VzXG4gIGNvbnN0IGxhbmd1YWdlczogTG9jYWxlW10gPSBbJ2VuJywgJ2VzJywgJ2ZyJ107XG4gIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxMb2NhbGUsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge30gYXMgYW55O1xuXG4gIGZvcihjb25zdCBsb2NhbGUgb2YgbGFuZ3VhZ2VzKSB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAubmFtZScsXG4gICAgICAgIGZhbGxiYWNrOiAnVG9yY2hPbmUnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdhcHAudGFnbGluZScsXG4gICAgICAgIGZhbGxiYWNrOiAnWW91ciBBSSBBc3Npc3RhbnQnXG4gICAgICB9XG4gICAgXTtcblxuICAgIHJlc3VsdHNbbG9jYWxlXSA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG4gIC8vIFJldHVybnM6IHtcbiAgLy8gICBlbjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnWW91ciBBSSBBc3Npc3RhbnQnIH0sXG4gIC8vICAgZXM6IHsgJ2FwcC5uYW1lJzogJ1RvcmNoT25lJywgJ2FwcC50YWdsaW5lJzogJ1R1IEFzaXN0ZW50ZSBkZSBJQScgfSxcbiAgLy8gICBmcjogeyAnYXBwLm5hbWUnOiAnVG9yY2hPbmUnLCAnYXBwLnRhZ2xpbmUnOiAnVm90cmUgQXNzaXN0YW50IElBJyB9XG4gIC8vIH1cbn1cblxuLy8gRXhhbXBsZSA0OiBFcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2tzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Um9idXN0VHJhbnNsYXRpb25zKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlID0gJ2VuJykge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZXJyb3Iubm90Rm91bmQnLFxuICAgICAgZmFsbGJhY2s6ICdDb250ZW50IG5vdCBmb3VuZCdcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2Vycm9yLnNlcnZlckVycm9yJyxcbiAgICAgIGZhbGxiYWNrOiAnU2VydmVyIGVycm9yIG9jY3VycmVkJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnc3VjY2Vzcy5zYXZlZCcsXG4gICAgICBmYWxsYmFjazogJ0NvbnRlbnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgIH1cbiAgXTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdUcmFuc2xhdGlvbiBlcnJvcjonLCBlcnJvcik7XG4gICAgLy8gUmV0dXJuIGZhbGxiYWNrcyBpZiB0cmFuc2xhdGlvbiBmYWlsc1xuICAgIHJldHVybiB0cmFuc2xhdGlvbnMucmVkdWNlKChhY2MsIHQpID0+IHtcbiAgICAgIGFjY1t0LmtleV0gPSB0LmZhbGxiYWNrIHx8ICcnO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcbiAgfVxufVxuXG4vLyBFeGFtcGxlIDU6IEJhdGNoIHByb2Nlc3Npbmcgd2l0aCBmbHVzaFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NMYXJnZVRyYW5zbGF0aW9uQmF0Y2goY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIC8vIENyZWF0ZSBhIGxhcmdlIGJhdGNoIG9mIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXTtcblxuICBmb3IobGV0IGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7XG4gICAgdHJhbnNsYXRpb25zLnB1c2goe1xuICAgICAga2V5OiBgaXRlbS4ke2l9LnRpdGxlYCxcbiAgICAgIGZhbGxiYWNrOiBgSXRlbSAke2l9IFRpdGxlYCxcbiAgICAgIHBhcmFtczoge251bWJlcjogaX1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgdGhlIGJhdGNoXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGkxOG4oY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG4gIC8vIEVuc3VyZSBhbGwgcGVuZGluZyB0cmFuc2xhdGlvbnMgYXJlIHByb2Nlc3NlZFxuICBhd2FpdCBmbHVzaCgpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEV4YW1wbGUgNjogRXJyb3IgaGFuZGxpbmcgd2l0aCBmYWxsYmFja3NcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VzKGNvbnRleHQ6IEFwaUNvbnRleHQsIGVycm9yQ29kZTogc3RyaW5nLCBsb2NhbGU6IExvY2FsZSA9ICdlbicpIHtcbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0gW1xuICAgIHtcbiAgICAgIGtleTogYGVycm9yLiR7ZXJyb3JDb2RlfWAsXG4gICAgICBmYWxsYmFjazogYEFuIGVycm9yIG9jY3VycmVkOiAke2Vycm9yQ29kZX1gLFxuICAgICAgcGFyYW1zOiB7ZXJyb3JDb2RlfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZXJyb3IuY29udGFjdFN1cHBvcnQnLFxuICAgICAgZmFsbGJhY2s6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nLFxuICAgICAgcGFyYW1zOiB7fVxuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICAvLyBJZiBkYXRhYmFzZSBpcyB1bmF2YWlsYWJsZSwgd2lsbCByZXR1cm4gZmFsbGJhY2tzOlxuICAvLyB7XG4gIC8vICAgJ2Vycm9yLklOVkFMSURfRU1BSUwnOiAnQW4gZXJyb3Igb2NjdXJyZWQ6IElOVkFMSURfRU1BSUwnLFxuICAvLyAgICdlcnJvci5jb250YWN0U3VwcG9ydCc6ICdQbGVhc2UgY29udGFjdCBzdXBwb3J0IGlmIHRoaXMgcHJvYmxlbSBwZXJzaXN0cy4nXG4gIC8vIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBFeGFtcGxlIDc6IENvbXBsZXggZW1haWwgdGVtcGxhdGUgd2l0aCBtdWx0aXBsZSBpbnRlcnBvbGF0aW9uc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1haWxUZW1wbGF0ZShcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckRhdGE6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBvcmRlcklkOiBzdHJpbmc7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBpdGVtczogbnVtYmVyO1xuICB9LFxuICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbikge1xuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCcsXG4gICAgICBmYWxsYmFjazogJ09yZGVyIHt7b3JkZXJJZH19IENvbmZpcm1lZCcsXG4gICAgICBwYXJhbXM6IHtvcmRlcklkOiB1c2VyRGF0YS5vcmRlcklkfVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZW1haWwub3JkZXJDb25maXJtYXRpb24uZ3JlZXRpbmcnLFxuICAgICAgZmFsbGJhY2s6ICdIZWxsbyB7e25hbWV9fSwnLFxuICAgICAgcGFyYW1zOiB7bmFtZTogdXNlckRhdGEubmFtZX1cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmJvZHknLFxuICAgICAgZmFsbGJhY2s6ICdZb3VyIG9yZGVyIHt7b3JkZXJJZH19IGhhcyBiZWVuIGNvbmZpcm1lZC4gVG90YWw6ICR7e3RvdGFsfX0gZm9yIHt7aXRlbXN9fSBpdGVtcy4nLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG9yZGVySWQ6IHVzZXJEYXRhLm9yZGVySWQsXG4gICAgICAgIHRvdGFsOiB1c2VyRGF0YS50b3RhbCxcbiAgICAgICAgaXRlbXM6IHVzZXJEYXRhLml0ZW1zXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5mb290ZXInLFxuICAgICAgZmFsbGJhY2s6ICdUaGFuayB5b3UgZm9yIHlvdXIgcHVyY2hhc2UhJ1xuICAgIH1cbiAgXTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgbG9jYWxlKTtcblxuICByZXR1cm4ge1xuICAgIHN1YmplY3Q6IHJlc3VsdFsnZW1haWwub3JkZXJDb25maXJtYXRpb24uc3ViamVjdCddLFxuICAgIGdyZWV0aW5nOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmdyZWV0aW5nJ10sXG4gICAgYm9keTogcmVzdWx0WydlbWFpbC5vcmRlckNvbmZpcm1hdGlvbi5ib2R5J10sXG4gICAgZm9vdGVyOiByZXN1bHRbJ2VtYWlsLm9yZGVyQ29uZmlybWF0aW9uLmZvb3RlciddXG4gIH07XG59XG5cbi8vIEV4YW1wbGUgODogTm90aWZpY2F0aW9uIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgc2NlbmFyaW9zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uTWVzc2FnZXMoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYWxlOiBMb2NhbGUgPSAnZW4nKSB7XG4gIGNvbnN0IHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ud2VsY29tZScsXG4gICAgICBmYWxsYmFjazogJ1dlbGNvbWUgdG8gVG9yY2hPbmUhJ1xuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWZpY2F0aW9uLnZlcmlmaWNhdGlvbicsXG4gICAgICBmYWxsYmFjazogJ1BsZWFzZSB2ZXJpZnkgeW91ciBhY2NvdW50LidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5wYXNzd29yZFJlc2V0JyxcbiAgICAgIGZhbGxiYWNrOiAnWW91ciBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4nXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdub3RpZmljYXRpb24ucGVyc29uYVVwZGF0ZScsXG4gICAgICBmYWxsYmFjazogJ1lvdXIgcGVyc29uYSBoYXMgYmVlbiB1cGRhdGVkLidcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ25vdGlmaWNhdGlvbi5uZXdNZXNzYWdlJyxcbiAgICAgIGZhbGxiYWNrOiAnWW91IGhhdmUgYSBuZXcgbWVzc2FnZSBmcm9tIHt7c2VuZGVyfX0uJyxcbiAgICAgIHBhcmFtczoge3NlbmRlcjogJ0pvaG4gRG9lJ31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gRXhhbXBsZSA5OiBQZXJmb3JtYW5jZSBjb21wYXJpc29uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybWFuY2VDb21wYXJpc29uKGNvbnRleHQ6IEFwaUNvbnRleHQpIHtcbiAgY29uc3Qga2V5cyA9IFtcbiAgICAnd2VsY29tZScsICd2ZXJpZmljYXRpb24nLCAncGFzc3dvcmRSZXNldCcsICdwZXJzb25hVXBkYXRlJyxcbiAgICAnZW1haWwuc3ViamVjdCcsICdlbWFpbC5ib2R5JywgJ3Ntcy53ZWxjb21lJywgJ3Ntcy52ZXJpZmljYXRpb24nXG4gIF07XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdID0ga2V5cy5tYXAoKGtleSkgPT4gKHtcbiAgICBrZXksXG4gICAgZmFsbGJhY2s6IGBGYWxsYmFjayBmb3IgJHtrZXl9YFxuICB9KSk7XG5cbiAgY29uc29sZS50aW1lKCdCYXRjaCB0cmFuc2xhdGlvbicpO1xuICBjb25zdCBiYXRjaFJlc3VsdHMgPSBhd2FpdCBpMThuKGNvbnRleHQsIHRyYW5zbGF0aW9ucywgJ2VuJyk7XG4gIGNvbnNvbGUudGltZUVuZCgnQmF0Y2ggdHJhbnNsYXRpb24nKTtcblxuICByZXR1cm4gYmF0Y2hSZXN1bHRzO1xufVxuXG4vLyBFeGFtcGxlIDEwOiBEeW5hbWljIGNvbnRlbnQgYmFzZWQgb24gdXNlciBwcmVmZXJlbmNlc1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVzZXJHcmVldGluZyhcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlckxvY2FsZT86IHN0cmluZyxcbiAgdXNlcm5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBsb2NhbGU6IExvY2FsZSA9ICh1c2VyTG9jYWxlIGFzIExvY2FsZSkgfHwgJ2VuJztcblxuICBjb25zdCB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uT2JqZWN0W10gPSBbXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcubW9ybmluZycsXG4gICAgICBmYWxsYmFjazogJ0dvb2QgbW9ybmluZyEnLFxuICAgICAgcGFyYW1zOiB1c2VybmFtZSA/IHt1c2VybmFtZX0gOiB7fVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnZ3JlZXRpbmcuYWZ0ZXJub29uJyxcbiAgICAgIGZhbGxiYWNrOiAnR29vZCBhZnRlcm5vb24hJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2dyZWV0aW5nLmV2ZW5pbmcnLFxuICAgICAgZmFsbGJhY2s6ICdHb29kIGV2ZW5pbmchJyxcbiAgICAgIHBhcmFtczogdXNlcm5hbWUgPyB7dXNlcm5hbWV9IDoge31cbiAgICB9XG4gIF07XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaTE4bihjb250ZXh0LCB0cmFuc2xhdGlvbnMsIGxvY2FsZSk7XG5cbiAgLy8gUmV0dXJuIGFwcHJvcHJpYXRlIGdyZWV0aW5nIGJhc2VkIG9uIHRpbWUgb2YgZGF5XG4gIGNvbnN0IGhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gIGlmKGhvdXIgPCAxMikge1xuICAgIHJldHVybiByZXN1bHRbJ2dyZWV0aW5nLm1vcm5pbmcnXTtcbiAgfVxuICBpZihob3VyIDwgMTgpIHtcbiAgICByZXR1cm4gcmVzdWx0WydncmVldGluZy5hZnRlcm5vb24nXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0WydncmVldGluZy5ldmVuaW5nJ107XG59XG5cbi8vIEV4YW1wbGUgMTE6IEZvcmNlIGZsdXNoIHBlbmRpbmcgdHJhbnNsYXRpb25zXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCkge1xuICAvLyBGb3JjZSBwcm9jZXNzIGFueSBwZW5kaW5nIHRyYW5zbGF0aW9uIGJhdGNoZXNcbiAgYXdhaXQgZmx1c2goKTtcbiAgY29uc29sZS5sb2coJ0FsbCB0cmFuc2xhdGlvbiBiYXRjaGVzIHByb2Nlc3NlZCcpO1xufVxuXG4vLyBVc2FnZSBleGFtcGxlczpcbi8vIGNvbnN0IGNvbnRleHQgPSB7IGRhdGFiYXNlTmFtZTogJ3RvcmNob25lLWRldicsIHNlc3Npb246IHsgdXNlcklkOiAndXNlcjEyMycgfSB9O1xuLy9cbi8vIC8vIEJhc2ljIHVzYWdlXG4vLyBjb25zdCB3ZWxjb21lTWVzc2FnZXMgPSBhd2FpdCBnZXRXZWxjb21lTWVzc2FnZXMoY29udGV4dCwgJ2VuJyk7XG4vL1xuLy8gLy8gV2l0aCBpbnRlcnBvbGF0aW9uXG4vLyBjb25zdCBwZXJzb25hbGl6ZWRNZXNzYWdlcyA9IGF3YWl0IGdldFBlcnNvbmFsaXplZE1lc3NhZ2VzKGNvbnRleHQsICdKb2huJywgJ2VzJyk7XG4vL1xuLy8gLy8gTXVsdGktbGFuZ3VhZ2UgY29udGVudFxuLy8gY29uc3QgbXVsdGlMYW5ndWFnZUNvbnRlbnQgPSBhd2FpdCBnZXRNdWx0aUxhbmd1YWdlQ29udGVudChjb250ZXh0KTtcbi8vXG4vLyAvLyBFcnJvciBoYW5kbGluZ1xuLy8gY29uc3QgZXJyb3JNZXNzYWdlcyA9IGF3YWl0IGdldFJvYnVzdFRyYW5zbGF0aW9ucyhjb250ZXh0LCAnZGUnKTtcbi8vXG4vLyAvLyBDb21wbGV4IHRlbXBsYXRlXG4vLyBjb25zdCBlbWFpbFRlbXBsYXRlID0gYXdhaXQgZ2VuZXJhdGVFbWFpbFRlbXBsYXRlKGNvbnRleHQsIHtcbi8vICAgbmFtZTogJ01hcmlhJyxcbi8vICAgZW1haWw6ICdtYXJpYUBleGFtcGxlLmNvbScsXG4vLyAgIG9yZGVySWQ6ICdPUkQtMTIzJyxcbi8vICAgdG90YWw6IDk5Ljk5LFxuLy8gICBpdGVtczogM1xuLy8gfSwgJ3B0Jyk7XG4vL1xuLy8gLy8gTm90aWZpY2F0aW9uc1xuLy8gY29uc3Qgbm90aWZpY2F0aW9ucyA9IGF3YWl0IGdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzKGNvbnRleHQsICdmcicpO1xuLy9cbi8vIC8vIFBlcmZvcm1hbmNlIHRlc3Rcbi8vIGNvbnN0IHBlcmYgPSBhd2FpdCBwZXJmb3JtYW5jZUNvbXBhcmlzb24oY29udGV4dCk7XG4vL1xuLy8gLy8gRHluYW1pYyBncmVldGluZ1xuLy8gY29uc3QgZ3JlZXRpbmcgPSBhd2FpdCBnZXRVc2VyR3JlZXRpbmcoY29udGV4dCwgJ2VuJywgJ0pvaG4nKTtcbi8vXG4vLyAvLyBGb3JjZSBmbHVzaFxuLy8gYXdhaXQgZW5zdXJlQWxsVHJhbnNsYXRpb25zUHJvY2Vzc2VkKCk7XG4iXSwibmFtZXMiOlsiZmx1c2giLCJpMThuIiwiZ2V0V2VsY29tZU1lc3NhZ2VzIiwiY29udGV4dCIsImxvY2FsZSIsInRyYW5zbGF0aW9ucyIsImtleSIsImZhbGxiYWNrIiwicmVzdWx0IiwiZ2V0UGVyc29uYWxpemVkTWVzc2FnZXMiLCJ1c2VybmFtZSIsInBhcmFtcyIsImNvdW50IiwiZGF0ZSIsIkRhdGUiLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJnZXRNdWx0aUxhbmd1YWdlQ29udGVudCIsImxhbmd1YWdlcyIsInJlc3VsdHMiLCJnZXRSb2J1c3RUcmFuc2xhdGlvbnMiLCJlcnJvciIsImNvbnNvbGUiLCJyZWR1Y2UiLCJhY2MiLCJ0IiwicHJvY2Vzc0xhcmdlVHJhbnNsYXRpb25CYXRjaCIsImkiLCJwdXNoIiwibnVtYmVyIiwiZ2V0RXJyb3JNZXNzYWdlcyIsImVycm9yQ29kZSIsImdlbmVyYXRlRW1haWxUZW1wbGF0ZSIsInVzZXJEYXRhIiwib3JkZXJJZCIsIm5hbWUiLCJ0b3RhbCIsIml0ZW1zIiwic3ViamVjdCIsImdyZWV0aW5nIiwiYm9keSIsImZvb3RlciIsImdldE5vdGlmaWNhdGlvbk1lc3NhZ2VzIiwic2VuZGVyIiwicGVyZm9ybWFuY2VDb21wYXJpc29uIiwia2V5cyIsIm1hcCIsInRpbWUiLCJiYXRjaFJlc3VsdHMiLCJ0aW1lRW5kIiwiZ2V0VXNlckdyZWV0aW5nIiwidXNlckxvY2FsZSIsImhvdXIiLCJnZXRIb3VycyIsImVuc3VyZUFsbFRyYW5zbGF0aW9uc1Byb2Nlc3NlZCIsImxvZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0NBUUMsR0FFRCxTQUFRQSxLQUFLLEVBQUVDLElBQUksUUFBK0Isd0JBQXdC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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { getContentWithFallback } from '../actions/content.js';
5
5
  class TranslationQueue {
6
6
  batches = new Map();
@@ -110,4 +110,4 @@ export const flush = ()=>translationQueue.flush();
110
110
  export const clear = ()=>translationQueue.clear();
111
111
  export { translationQueue };
112
112
 
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IHtnZXRDb250ZW50V2l0aEZhbGxiYWNrfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uUmVxdWVzdCB7XG4gIGtleTogc3RyaW5nO1xuICBmYWxsYmFjazogc3RyaW5nO1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsb2NhbGU6IExvY2FsZTtcbiAgcmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uQmF0Y2gge1xuICBjb250ZXh0OiBBcGlDb250ZXh0O1xuICByZXF1ZXN0czogVHJhbnNsYXRpb25SZXF1ZXN0W107XG4gIHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25PYmplY3Qge1xuICBrZXk6IHN0cmluZztcbiAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmNsYXNzIFRyYW5zbGF0aW9uUXVldWUge1xuICBwcml2YXRlIGJhdGNoZXM6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uQmF0Y2g+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGJhdGNoVGltZW91dCA9IDUwO1xuICBwcml2YXRlIG1heEJhdGNoU2l6ZSA9IDIwO1xuXG4gIGFzeW5jIHRyYW5zbGF0ZShcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSxcbiAgICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgaWYodHJhbnNsYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gdHJhbnNsYXRpb25zLm1hcCgoe2tleSwgZmFsbGJhY2sgPSAnJywgcGFyYW1zID0ge319KSA9PlxuICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihjb250ZXh0LCBrZXksIGZhbGxiYWNrLCBwYXJhbXMsIGxvY2FsZSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGNvbnN0IHJlc3VsdE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyYW5zbGF0aW9ucy5mb3JFYWNoKCh7a2V5fSwgaW5kZXgpID0+IHtcbiAgICAgIHJlc3VsdE1hcFtrZXldID0gcmVzdWx0c1tpbmRleF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbihcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoS2V5ID0gdGhpcy5nZXRCYXRjaEtleShjb250ZXh0LCBsb2NhbGUpO1xuICAgICAgY29uc3QgcmVxdWVzdDogVHJhbnNsYXRpb25SZXF1ZXN0ID0ge2tleSwgZmFsbGJhY2ssIHBhcmFtcywgbG9jYWxlLCByZXNvbHZlLCByZWplY3R9O1xuXG4gICAgICBpZighdGhpcy5iYXRjaGVzLmhhcyhiYXRjaEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0JhdGNoKGJhdGNoS2V5KTtcbiAgICAgICAgfSwgdGhpcy5iYXRjaFRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMuYmF0Y2hlcy5zZXQoYmF0Y2hLZXksIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlcXVlc3RzOiBbcmVxdWVzdF0sXG4gICAgICAgICAgdGltZW91dFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaGVzLmdldChiYXRjaEtleSkhO1xuICAgICAgICBiYXRjaC5yZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xuXG4gICAgICAgIGlmKGJhdGNoLnJlcXVlc3RzLmxlbmd0aCA+PSB0aGlzLm1heEJhdGNoU2l6ZSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NCYXRjaChiYXRjaEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoS2V5cyA9IEFycmF5LmZyb20odGhpcy5iYXRjaGVzLmtleXMoKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2hLZXlzLm1hcCgoa2V5KSA9PiB0aGlzLnByb2Nlc3NCYXRjaChrZXkpKSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJhdGNoZXMuZm9yRWFjaCgoYmF0Y2gpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgIGJhdGNoLnJlcXVlc3RzLmZvckVhY2goKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZWplY3QobmV3IEVycm9yKCdUcmFuc2xhdGlvbiBxdWV1ZSBjbGVhcmVkJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5iYXRjaGVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhdGNoS2V5KGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29udGV4dC5kYXRhYmFzZU5hbWV9OiR7bG9jYWxlfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NCYXRjaChiYXRjaEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJhdGNoZXMuZ2V0KGJhdGNoS2V5KTtcbiAgICBpZighYmF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhdGNoZXMuZGVsZXRlKGJhdGNoS2V5KTtcbiAgICBjbGVhclRpbWVvdXQoYmF0Y2gudGltZW91dCk7XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IGJhdGNoLnJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYmF0Y2guY29udGV4dCxcbiAgICAgICAgICByZXF1ZXN0LmtleSxcbiAgICAgICAgICByZXF1ZXN0LmZhbGxiYWNrLFxuICAgICAgICAgIHJlcXVlc3QubG9jYWxlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29udGVudCA9IHRoaXMuaW50ZXJwb2xhdGUoY29udGVudCwgcmVxdWVzdC5wYXJhbXMpO1xuICAgICAgICByZXR1cm4ge3JlcXVlc3QsIHJlc3VsdDogaW50ZXJwb2xhdGVkQ29udGVudH07XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRlZEZhbGxiYWNrID0gdGhpcy5pbnRlcnBvbGF0ZShyZXF1ZXN0LmZhbGxiYWNrLCByZXF1ZXN0LnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7cmVxdWVzdCwgcmVzdWx0OiBpbnRlcnBvbGF0ZWRGYWxsYmFja307XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcblxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICBpZihyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICByZXN1bHQudmFsdWUucmVxdWVzdC5yZXNvbHZlKHJlc3VsdC52YWx1ZS5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3JlcXVlc3R9ID0gcmVzdWx0LnJlYXNvbjtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkRmFsbGJhY2sgPSB0aGlzLmludGVycG9sYXRlKHJlcXVlc3QuZmFsbGJhY2ssIHJlcXVlc3QucGFyYW1zKTtcbiAgICAgICAgcmVxdWVzdC5yZXNvbHZlKGludGVycG9sYXRlZEZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJwb2xhdGUoY29udGVudDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXFx7XFx7KFxcdyspXFx9XFx9L2csIChtYXRjaCwga2V5KSA9PiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCA/IFN0cmluZyhwYXJhbXNba2V5XSkgOiBtYXRjaCkpO1xuICB9XG59XG5cbmNvbnN0IHRyYW5zbGF0aW9uUXVldWUgPSBuZXcgVHJhbnNsYXRpb25RdWV1ZSgpO1xuXG5leHBvcnQgY29uc3QgaTE4biA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdLFxuICBsb2NhbGU/OiBMb2NhbGVcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPT4gdHJhbnNsYXRpb25RdWV1ZS50cmFuc2xhdGUoY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG5leHBvcnQgY29uc3QgZmx1c2ggPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0cmFuc2xhdGlvblF1ZXVlLmZsdXNoKCk7XG5leHBvcnQgY29uc3QgY2xlYXIgPSAoKTogdm9pZCA9PiB0cmFuc2xhdGlvblF1ZXVlLmNsZWFyKCk7XG5cbmV4cG9ydCB0eXBlIHtUcmFuc2xhdGlvbk9iamVjdH07XG5cbiAgZXhwb3J0IHt0cmFuc2xhdGlvblF1ZXVlfTtcbiJdLCJuYW1lcyI6WyJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiVHJhbnNsYXRpb25RdWV1ZSIsImJhdGNoZXMiLCJNYXAiLCJiYXRjaFRpbWVvdXQiLCJtYXhCYXRjaFNpemUiLCJ0cmFuc2xhdGUiLCJjb250ZXh0IiwidHJhbnNsYXRpb25zIiwibG9jYWxlIiwibGVuZ3RoIiwicHJvbWlzZXMiLCJtYXAiLCJrZXkiLCJmYWxsYmFjayIsInBhcmFtcyIsImdldFRyYW5zbGF0aW9uIiwicmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJyZXN1bHRNYXAiLCJmb3JFYWNoIiwiaW5kZXgiLCJyZXNvbHZlIiwicmVqZWN0IiwiYmF0Y2hLZXkiLCJnZXRCYXRjaEtleSIsInJlcXVlc3QiLCJoYXMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInByb2Nlc3NCYXRjaCIsInNldCIsInJlcXVlc3RzIiwiYmF0Y2giLCJnZXQiLCJwdXNoIiwiY2xlYXJUaW1lb3V0IiwiZmx1c2giLCJiYXRjaEtleXMiLCJBcnJheSIsImZyb20iLCJrZXlzIiwiY2xlYXIiLCJFcnJvciIsImRhdGFiYXNlTmFtZSIsImRlbGV0ZSIsImNvbnRlbnQiLCJpbnRlcnBvbGF0ZWRDb250ZW50IiwiaW50ZXJwb2xhdGUiLCJyZXN1bHQiLCJlcnJvciIsImludGVycG9sYXRlZEZhbGxiYWNrIiwiYWxsU2V0dGxlZCIsInN0YXR1cyIsInZhbHVlIiwicmVhc29uIiwicmVwbGFjZSIsIm1hdGNoIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwidHJhbnNsYXRpb25RdWV1ZSIsImkxOG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLHNCQUFzQixRQUFPLHdCQUF3QjtBQTBCN0QsTUFBTUM7SUFDSUMsVUFBeUMsSUFBSUMsTUFBTTtJQUNuREMsZUFBZSxHQUFHO0lBQ2xCQyxlQUFlLEdBQUc7SUFFMUIsTUFBTUMsVUFDSkMsT0FBbUIsRUFDbkJDLFlBQWlDLEVBQ2pDQyxTQUFpQixJQUFJLEVBQ1k7UUFDakMsSUFBR0QsYUFBYUUsTUFBTSxLQUFLLEdBQUc7WUFDNUIsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNQyxXQUFXSCxhQUFhSSxHQUFHLENBQUMsQ0FBQyxFQUFDQyxHQUFHLEVBQUVDLFdBQVcsRUFBRSxFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEdBQ2xFLElBQUksQ0FBQ0MsY0FBYyxDQUFDVCxTQUFTTSxLQUFLQyxVQUFVQyxRQUFRTjtRQUd0RCxNQUFNUSxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ1I7UUFFbEMsTUFBTVMsWUFBb0MsQ0FBQztRQUMzQ1osYUFBYWEsT0FBTyxDQUFDLENBQUMsRUFBQ1IsR0FBRyxFQUFDLEVBQUVTO1lBQzNCRixTQUFTLENBQUNQLElBQUksR0FBR0ksT0FBTyxDQUFDSyxNQUFNO1FBQ2pDO1FBRUEsT0FBT0Y7SUFDVDtJQUVBLE1BQWNKLGVB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
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL3V0aWxzL3RyYW5zbGF0aW9uUXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cblxuaW1wb3J0IHtnZXRDb250ZW50V2l0aEZhbGxiYWNrfSBmcm9tICcuLi9hY3Rpb25zL2NvbnRlbnQuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7TG9jYWxlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uUmVxdWVzdCB7XG4gIGtleTogc3RyaW5nO1xuICBmYWxsYmFjazogc3RyaW5nO1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBsb2NhbGU6IExvY2FsZTtcbiAgcmVzb2x2ZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlamVjdDogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIFRyYW5zbGF0aW9uQmF0Y2gge1xuICBjb250ZXh0OiBBcGlDb250ZXh0O1xuICByZXF1ZXN0czogVHJhbnNsYXRpb25SZXF1ZXN0W107XG4gIHRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0O1xufVxuXG5pbnRlcmZhY2UgVHJhbnNsYXRpb25PYmplY3Qge1xuICBrZXk6IHN0cmluZztcbiAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmNsYXNzIFRyYW5zbGF0aW9uUXVldWUge1xuICBwcml2YXRlIGJhdGNoZXM6IE1hcDxzdHJpbmcsIFRyYW5zbGF0aW9uQmF0Y2g+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGJhdGNoVGltZW91dCA9IDUwO1xuICBwcml2YXRlIG1heEJhdGNoU2l6ZSA9IDIwO1xuXG4gIGFzeW5jIHRyYW5zbGF0ZShcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25PYmplY3RbXSxcbiAgICBsb2NhbGU6IExvY2FsZSA9ICdlbidcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgaWYodHJhbnNsYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2VzID0gdHJhbnNsYXRpb25zLm1hcCgoe2tleSwgZmFsbGJhY2sgPSAnJywgcGFyYW1zID0ge319KSA9PlxuICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbihjb250ZXh0LCBrZXksIGZhbGxiYWNrLCBwYXJhbXMsIGxvY2FsZSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgIGNvbnN0IHJlc3VsdE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyYW5zbGF0aW9ucy5mb3JFYWNoKCh7a2V5fSwgaW5kZXgpID0+IHtcbiAgICAgIHJlc3VsdE1hcFtrZXldID0gcmVzdWx0c1tpbmRleF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0TWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2xhdGlvbihcbiAgICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgbG9jYWxlOiBMb2NhbGUgPSAnZW4nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhdGNoS2V5ID0gdGhpcy5nZXRCYXRjaEtleShjb250ZXh0LCBsb2NhbGUpO1xuICAgICAgY29uc3QgcmVxdWVzdDogVHJhbnNsYXRpb25SZXF1ZXN0ID0ge2tleSwgZmFsbGJhY2ssIHBhcmFtcywgbG9jYWxlLCByZXNvbHZlLCByZWplY3R9O1xuXG4gICAgICBpZighdGhpcy5iYXRjaGVzLmhhcyhiYXRjaEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0JhdGNoKGJhdGNoS2V5KTtcbiAgICAgICAgfSwgdGhpcy5iYXRjaFRpbWVvdXQpO1xuXG4gICAgICAgIHRoaXMuYmF0Y2hlcy5zZXQoYmF0Y2hLZXksIHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHJlcXVlc3RzOiBbcmVxdWVzdF0sXG4gICAgICAgICAgdGltZW91dFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaGVzLmdldChiYXRjaEtleSkhO1xuICAgICAgICBiYXRjaC5yZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xuXG4gICAgICAgIGlmKGJhdGNoLnJlcXVlc3RzLmxlbmd0aCA+PSB0aGlzLm1heEJhdGNoU2l6ZSkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NCYXRjaChiYXRjaEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoS2V5cyA9IEFycmF5LmZyb20odGhpcy5iYXRjaGVzLmtleXMoKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2hLZXlzLm1hcCgoa2V5KSA9PiB0aGlzLnByb2Nlc3NCYXRjaChrZXkpKSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJhdGNoZXMuZm9yRWFjaCgoYmF0Y2gpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChiYXRjaC50aW1lb3V0KTtcbiAgICAgIGJhdGNoLnJlcXVlc3RzLmZvckVhY2goKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmVxdWVzdC5yZWplY3QobmV3IEVycm9yKCdUcmFuc2xhdGlvbiBxdWV1ZSBjbGVhcmVkJykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5iYXRjaGVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhdGNoS2V5KGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2FsZTogTG9jYWxlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29udGV4dC5kYXRhYmFzZU5hbWV9OiR7bG9jYWxlfWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NCYXRjaChiYXRjaEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLmJhdGNoZXMuZ2V0KGJhdGNoS2V5KTtcbiAgICBpZighYmF0Y2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJhdGNoZXMuZGVsZXRlKGJhdGNoS2V5KTtcbiAgICBjbGVhclRpbWVvdXQoYmF0Y2gudGltZW91dCk7XG5cbiAgICBjb25zdCBwcm9taXNlcyA9IGJhdGNoLnJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGdldENvbnRlbnRXaXRoRmFsbGJhY2soXG4gICAgICAgICAgYmF0Y2guY29udGV4dCxcbiAgICAgICAgICByZXF1ZXN0LmtleSxcbiAgICAgICAgICByZXF1ZXN0LmZhbGxiYWNrLFxuICAgICAgICAgIHJlcXVlc3QubG9jYWxlXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29udGVudCA9IHRoaXMuaW50ZXJwb2xhdGUoY29udGVudCwgcmVxdWVzdC5wYXJhbXMpO1xuICAgICAgICByZXR1cm4ge3JlcXVlc3QsIHJlc3VsdDogaW50ZXJwb2xhdGVkQ29udGVudH07XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGludGVycG9sYXRlZEZhbGxiYWNrID0gdGhpcy5pbnRlcnBvbGF0ZShyZXF1ZXN0LmZhbGxiYWNrLCByZXF1ZXN0LnBhcmFtcyk7XG4gICAgICAgIHJldHVybiB7cmVxdWVzdCwgcmVzdWx0OiBpbnRlcnBvbGF0ZWRGYWxsYmFja307XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcblxuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICBpZihyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICByZXN1bHQudmFsdWUucmVxdWVzdC5yZXNvbHZlKHJlc3VsdC52YWx1ZS5yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3JlcXVlc3R9ID0gcmVzdWx0LnJlYXNvbjtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkRmFsbGJhY2sgPSB0aGlzLmludGVycG9sYXRlKHJlcXVlc3QuZmFsbGJhY2ssIHJlcXVlc3QucGFyYW1zKTtcbiAgICAgICAgcmVxdWVzdC5yZXNvbHZlKGludGVycG9sYXRlZEZhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW50ZXJwb2xhdGUoY29udGVudDogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXFx7XFx7KFxcdyspXFx9XFx9L2csIChtYXRjaCwga2V5KSA9PiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCA/IFN0cmluZyhwYXJhbXNba2V5XSkgOiBtYXRjaCkpO1xuICB9XG59XG5cbmNvbnN0IHRyYW5zbGF0aW9uUXVldWUgPSBuZXcgVHJhbnNsYXRpb25RdWV1ZSgpO1xuXG5leHBvcnQgY29uc3QgaTE4biA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbk9iamVjdFtdLFxuICBsb2NhbGU/OiBMb2NhbGVcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPT4gdHJhbnNsYXRpb25RdWV1ZS50cmFuc2xhdGUoY29udGV4dCwgdHJhbnNsYXRpb25zLCBsb2NhbGUpO1xuXG5leHBvcnQgY29uc3QgZmx1c2ggPSAoKTogUHJvbWlzZTx2b2lkPiA9PiB0cmFuc2xhdGlvblF1ZXVlLmZsdXNoKCk7XG5leHBvcnQgY29uc3QgY2xlYXIgPSAoKTogdm9pZCA9PiB0cmFuc2xhdGlvblF1ZXVlLmNsZWFyKCk7XG5cbmV4cG9ydCB0eXBlIHtUcmFuc2xhdGlvbk9iamVjdH07XG5cbiAgZXhwb3J0IHt0cmFuc2xhdGlvblF1ZXVlfTtcbiJdLCJuYW1lcyI6WyJnZXRDb250ZW50V2l0aEZhbGxiYWNrIiwiVHJhbnNsYXRpb25RdWV1ZSIsImJhdGNoZXMiLCJNYXAiLCJiYXRjaFRpbWVvdXQiLCJtYXhCYXRjaFNpemUiLCJ0cmFuc2xhdGUiLCJjb250ZXh0IiwidHJhbnNsYXRpb25zIiwibG9jYWxlIiwibGVuZ3RoIiwicHJvbWlzZXMiLCJtYXAiLCJrZXkiLCJmYWxsYmFjayIsInBhcmFtcyIsImdldFRyYW5zbGF0aW9uIiwicmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJyZXN1bHRNYXAiLCJmb3JFYWNoIiwiaW5kZXgiLCJyZXNvbHZlIiwicmVqZWN0IiwiYmF0Y2hLZXkiLCJnZXRCYXRjaEtleSIsInJlcXVlc3QiLCJoYXMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInByb2Nlc3NCYXRjaCIsInNldCIsInJlcXVlc3RzIiwiYmF0Y2giLCJnZXQiLCJwdXNoIiwiY2xlYXJUaW1lb3V0IiwiZmx1c2giLCJiYXRjaEtleXMiLCJBcnJheSIsImZyb20iLCJrZXlzIiwiY2xlYXIiLCJFcnJvciIsImRhdGFiYXNlTmFtZSIsImRlbGV0ZSIsImNvbnRlbnQiLCJpbnRlcnBvbGF0ZWRDb250ZW50IiwiaW50ZXJwb2xhdGUiLCJyZXN1bHQiLCJlcnJvciIsImludGVycG9sYXRlZEZhbGxiYWNrIiwiYWxsU2V0dGxlZCIsInN0YXR1cyIsInZhbHVlIiwicmVhc29uIiwicmVwbGFjZSIsIm1hdGNoIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwidHJhbnNsYXRpb25RdWV1ZSIsImkxOG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLHNCQUFzQixRQUFPLHdCQUF3QjtBQTBCN0QsTUFBTUM7SUFDSUMsVUFBeUMsSUFBSUMsTUFBTTtJQUNuREMsZUFBZSxHQUFHO0lBQ2xCQyxlQUFlLEdBQUc7SUFFMUIsTUFBTUMsVUFDSkMsT0FBbUIsRUFDbkJDLFlBQWlDLEVBQ2pDQyxTQUFpQixJQUFJLEVBQ1k7UUFDakMsSUFBR0QsYUFBYUUsTUFBTSxLQUFLLEdBQUc7WUFDNUIsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNQyxXQUFXSCxhQUFhSSxHQUFHLENBQUMsQ0FBQyxFQUFDQyxHQUFHLEVBQUVDLFdBQVcsRUFBRSxFQUFFQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEdBQ2xFLElBQUksQ0FBQ0MsY0FBYyxDQUFDVCxTQUFTTSxLQUFLQyxVQUFVQyxRQUFRTjtRQUd0RCxNQUFNUSxVQUFVLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ1I7UUFFbEMsTUFBTVMsWUFBb0MsQ0FBQztRQUMzQ1osYUFBYWEsT0FBTyxDQUFDLENBQUMsRUFBQ1IsR0FBRyxFQUFDLEVBQUVTO1lBQzNCRixTQUFTLENBQUNQLElBQUksR0FBR0ksT0FBTyxDQUFDSyxNQUFNO1FBQ2pDO1FBRUEsT0FB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
@@ -63,4 +63,4 @@ export const createMediaConvertBackfillHandler = (configureReaktor)=>async ()=>{
63
63
  return mediaConvertBackfillHandler();
64
64
  };
65
65
 
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3ZpZGVvUHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7RXZlbnRCcmlkZ2VFdmVudH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nLFxuICBmYWlsVmlkZW9Qcm9jZXNzaW5nLFxuICBxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGxcbn0gZnJvbSAnLi9hY3Rpb25zL3ZpZGVvcy5qcyc7XG5cbnR5cGUgTWVkaWFDb252ZXJ0Sm9iU3RhdGUgPSB7XG4gIHJlYWRvbmx5IGpvYklkPzogc3RyaW5nO1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJNZXRhZGF0YT86IHtcbiAgICByZWFkb25seSBobHNLZXk/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGxheWJhY2tLZXk/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdmlkZW9JZD86IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JDb25maWd1cmVIYW5kbGVyID0gKCkgPT4gdm9pZDtcblxuY29uc3QgY3JlYXRlUHJvY2Vzc2luZ0NvbnRleHQgPSAoKTogQXBpQ29udGV4dCA9PiAoe1xuICBjb25maWc6IHtcbiAgICBkZXRhaWxzOiB7XG4gICAgICBuYW1lOiBDb25maWcuZ2V0KCdkZXRhaWxzLm5hbWUnKSxcbiAgICAgIHN1cHBvcnRFbWFpbDogQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0RW1haWwnKSxcbiAgICAgIHN1cHBvcnROYW1lOiBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnROYW1lJylcbiAgICB9XG4gIH0sXG4gIGRhdGFiYXNlTmFtZTogQ29uZmlnLmdldCgnYXJhbmdvZGIuZGF0YWJhc2UnKSxcbiAgc2Vzc2lvbjoge31cbn0gYXMgQXBpQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBtZWRpYUNvbnZlcnRIYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogRXZlbnRCcmlkZ2VFdmVudDwnTWVkaWFDb252ZXJ0IEpvYiBTdGF0ZSBDaGFuZ2UnLCBNZWRpYUNvbnZlcnRKb2JTdGF0ZT5cbik6IFByb21pc2U8e3N0YXR1c0NvZGU6IG51bWJlcn0+ID0+IHtcbiAgY29uc3QgZGV0YWlsID0gZXZlbnQ/LmRldGFpbCB8fCB7fTtcbiAgY29uc3Qgc3RhdHVzID0gU3RyaW5nKGRldGFpbD8uc3RhdHVzIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCB1c2VyTWV0YWRhdGEgPSBkZXRhaWw/LnVzZXJNZXRhZGF0YSB8fCB7fTtcbiAgY29uc3QgdmlkZW9JZCA9IFN0cmluZyh1c2VyTWV0YWRhdGE/LnZpZGVvSWQgfHwgJycpO1xuICBjb25zdCBjb250ZXh0ID0gY3JlYXRlUHJvY2Vzc2luZ0NvbnRleHQoKTtcblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiB7c3RhdHVzQ29kZTogMjAyfTtcbiAgfVxuXG4gIGlmKHN0YXR1cyA9PT0gJ0NPTVBMRVRFJykge1xuICAgIGF3YWl0IGNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nKGNvbnRleHQsIHZpZGVvSWQsIHtcbiAgICAgIGhsc0tleTogU3RyaW5nKHVzZXJNZXRhZGF0YT8uaGxzS2V5IHx8ICcnKSxcbiAgICAgIHBsYXliYWNrS2V5OiBTdHJpbmcodXNlck1ldGFkYXRhPy5wbGF5YmFja0tleSB8fCAnJyksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncmVhZHknLFxuICAgICAgc3RyZWFtVHlwZTogU3RyaW5nKHVzZXJNZXRhZGF0YT8uc3RyZWFtVHlwZSB8fCAncHJvZ3Jlc3NpdmUnKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtzdGF0dXNDb2RlOiAyMDB9O1xuICB9XG5cbiAgaWYoWydDQU5DRUxFRCcsICdFUlJPUiddLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICBhd2FpdCBmYWlsVmlkZW9Qcm9jZXNzaW5nKGNvbnRleHQsIHZpZGVvSWQpO1xuICB9XG5cbiAgcmV0dXJuIHtzdGF0dXNDb2RlOiAyMDB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPHtib2R5OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlcn0+ID0+IHtcbiAgY29uc3QgbGltaXQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuVklERU9fVFJBTlNDT0RFX0JBQ0tGSUxMX0xJTUlUIHx8IDEwKTtcbiAgY29uc3Qgam9iSWRzID0gYXdhaXQgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsKGNyZWF0ZVByb2Nlc3NpbmdDb250ZXh0KCksIGxpbWl0KTtcblxuICByZXR1cm4ge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtqb2JJZHMsIHF1ZXVlZDogam9iSWRzLmxlbmd0aH0pLFxuICAgIHN0YXR1c0NvZGU6IDIwMFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1lZGlhQ29udmVydEhhbmRsZXIgPSAoY29uZmlndXJlUmVha3RvcjogUmVha3RvckNvbmZpZ3VyZUhhbmRsZXIpID0+IGFzeW5jIChcbiAgZXZlbnQ6IEV2ZW50QnJpZGdlRXZlbnQ8J01lZGlhQ29udmVydCBKb2IgU3RhdGUgQ2hhbmdlJywgTWVkaWFDb252ZXJ0Sm9iU3RhdGU+XG4pOiBQcm9taXNlPHtzdGF0dXNDb2RlOiBudW1iZXJ9PiA9PiB7XG4gIGNvbmZpZ3VyZVJlYWt0b3IoKTtcbiAgcmV0dXJuIG1lZGlhQ29udmVydEhhbmRsZXIoZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciA9IChjb25maWd1cmVSZWFrdG9yOiBSZWFrdG9yQ29uZmlndXJlSGFuZGxlcikgPT4gYXN5bmMgKCk6IFByb21pc2U8e1xuICBib2R5OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbn0+ID0+IHtcbiAgY29uZmlndXJlUmVha3RvcigpO1xuICByZXR1cm4gbWVkaWFDb252ZXJ0QmFja2ZpbGxIYW5kbGVyKCk7XG59O1xuIl0sIm5hbWVzIjpbIkNvbmZpZyIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsImNyZWF0ZVByb2Nlc3NpbmdDb250ZXh0IiwiY29uZmlnIiwiZGV0YWlscyIsIm5hbWUiLCJnZXQiLCJzdXBwb3J0RW1haWwiLCJzdXBwb3J0TmFtZSIsImRhdGFiYXNlTmFtZSIsInNlc3Npb24iLCJtZWRpYUNvbnZlcnRIYW5kbGVyIiwiZXZlbnQiLCJkZXRhaWwiLCJzdGF0dXMiLCJTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsInVzZXJNZXRhZGF0YSIsInZpZGVvSWQiLCJjb250ZXh0Iiwic3RhdHVzQ29kZSIsImhsc0tleSIsInBsYXliYWNrS2V5IiwicHJvY2Vzc2luZ1N0YXR1cyIsInN0cmVhbVR5cGUiLCJpbmNsdWRlcyIsIm1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciIsImxpbWl0IiwiTnVtYmVyIiwicHJvY2VzcyIsImVudiIsIlZJREVPX1RSQU5TQ09ERV9CQUNLRklMTF9MSU1JVCIsImpvYklkcyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicXVldWVkIiwibGVuZ3RoIiwiY3JlYXRlTWVkaWFDb252ZXJ0SGFuZGxlciIsImNvbmZpZ3VyZVJlYWt0b3IiLCJjcmVhdGVNZWRpYUNvbnZlcnRCYWNrZmlsbEhhbmRsZXIiXSwibWFwcGluZ3MiOiJBQUVBLFNBQVFBLE1BQU0sUUFBTyxjQUFjO0FBRW5DLFNBQ0VDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQywyQkFBMkIsUUFDdEIsc0JBQXNCO0FBZ0I3QixNQUFNQywwQkFBMEIsSUFBbUIsQ0FBQTtRQUNqREMsUUFBUTtZQUNOQyxTQUFTO2dCQUNQQyxNQUFNUCxPQUFPUSxHQUFHLENBQUM7Z0JBQ2pCQyxjQUFjVCxPQUFPUSxHQUFHLENBQUM7Z0JBQ3pCRSxhQUFhVixPQUFPUSxHQUFHLENBQUM7WUFDMUI7UUFDRjtRQUNBRyxjQUFjWCxPQUFPUSxHQUFHLENBQUM7UUFDekJJLFNBQVMsQ0FBQztJQUNaLENBQUE7QUFFQSxPQUFPLE1BQU1DLHNCQUFzQixPQUNqQ0M7SUFFQSxNQUFNQyxTQUFTRCxPQUFPQyxVQUFVLENBQUM7SUFDakMsTUFBTUMsU0FBU0MsT0FBT0YsUUFBUUMsVUFBVSxJQUFJRSxXQUFXO0lBQ3ZELE1BQU1DLGVBQWVKLFFBQVFJLGdCQUFnQixDQUFDO0lBQzlDLE1BQU1DLFVBQVVILE9BQU9FLGNBQWNDLFdBQVc7SUFDaEQsTUFBTUMsVUFBVWpCO0lBRWhCLElBQUcsQ0FBQ2dCLFNBQVM7UUFDWCxPQUFPO1lBQUNFLFlBQVk7UUFBRztJQUN6QjtJQUVBLElBQUdOLFdBQVcsWUFBWTtRQUN4QixNQUFNZix3QkFBd0JvQixTQUFTRCxTQUFTO1lBQzlDRyxRQUFRTixPQUFPRSxjQUFjSSxVQUFVO1lBQ3ZDQyxhQUFhUCxPQUFPRSxjQUFjSyxlQUFlO1lBQ2pEQyxrQkFBa0I7WUFDbEJDLFlBQVlULE9BQU9FLGNBQWNPLGNBQWM7UUFDakQ7UUFFQSxPQUFPO1lBQUNKLFlBQVk7UUFBRztJQUN6QjtJQUVBLElBQUc7UUFBQztRQUFZO0tBQVEsQ0FBQ0ssUUFBUSxDQUFDWCxTQUFTO1FBQ3pDLE1BQU1kLG9CQUFvQm1CLFNBQVNEO0lBQ3JDO0lBRUEsT0FBTztRQUFDRSxZQUFZO0lBQUc7QUFDekIsRUFBRTtBQUVGLE9BQU8sTUFBTU0sOEJBQThCO0lBQ3pDLE1BQU1DLFFBQVFDLE9BQU9DLFFBQVFDLEdBQUcsQ0FBQ0MsOEJBQThCLElBQUk7SUFDbkUsTUFBTUMsU0FBUyxNQUFNL0IsNEJBQTRCQywyQkFBMkJ5QjtJQUU1RSxPQUFPO1FBQ0xNLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQztZQUFDSDtZQUFRSSxRQUFRSixPQUFPSyxNQUFNO1FBQUE7UUFDbkRqQixZQUFZO0lBQ2Q7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNa0IsNEJBQTRCLENBQUNDLG1CQUE4QyxPQUN0RjNCO1FBRUEyQjtRQUNBLE9BQU81QixvQkFBb0JDO0lBQzdCLEVBQUU7QUFFRixPQUFPLE1BQU00QixvQ0FBb0MsQ0FBQ0QsbUJBQThDO1FBSTlGQTtRQUNBLE9BQU9iO0lBQ1QsRUFBRSJ9
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL3ZpZGVvUHJvY2Vzc2luZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7RXZlbnRCcmlkZ2VFdmVudH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuL2NvbmZpZy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nLFxuICBmYWlsVmlkZW9Qcm9jZXNzaW5nLFxuICBxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGxcbn0gZnJvbSAnLi9hY3Rpb25zL3ZpZGVvcy5qcyc7XG5cbnR5cGUgTWVkaWFDb252ZXJ0Sm9iU3RhdGUgPSB7XG4gIHJlYWRvbmx5IGpvYklkPzogc3RyaW5nO1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJNZXRhZGF0YT86IHtcbiAgICByZWFkb25seSBobHNLZXk/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGxheWJhY2tLZXk/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgICByZWFkb25seSB1c2VySWQ/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdmlkZW9JZD86IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JDb25maWd1cmVIYW5kbGVyID0gKCkgPT4gdm9pZDtcblxuY29uc3QgY3JlYXRlUHJvY2Vzc2luZ0NvbnRleHQgPSAoKTogQXBpQ29udGV4dCA9PiAoe1xuICBjb25maWc6IHtcbiAgICBkZXRhaWxzOiB7XG4gICAgICBuYW1lOiBDb25maWcuZ2V0KCdkZXRhaWxzLm5hbWUnKSxcbiAgICAgIHN1cHBvcnRFbWFpbDogQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0RW1haWwnKSxcbiAgICAgIHN1cHBvcnROYW1lOiBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnROYW1lJylcbiAgICB9XG4gIH0sXG4gIGRhdGFiYXNlTmFtZTogQ29uZmlnLmdldCgnYXJhbmdvZGIuZGF0YWJhc2UnKSxcbiAgc2Vzc2lvbjoge31cbn0gYXMgQXBpQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBtZWRpYUNvbnZlcnRIYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogRXZlbnRCcmlkZ2VFdmVudDwnTWVkaWFDb252ZXJ0IEpvYiBTdGF0ZSBDaGFuZ2UnLCBNZWRpYUNvbnZlcnRKb2JTdGF0ZT5cbik6IFByb21pc2U8e3N0YXR1c0NvZGU6IG51bWJlcn0+ID0+IHtcbiAgY29uc3QgZGV0YWlsID0gZXZlbnQ/LmRldGFpbCB8fCB7fTtcbiAgY29uc3Qgc3RhdHVzID0gU3RyaW5nKGRldGFpbD8uc3RhdHVzIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICBjb25zdCB1c2VyTWV0YWRhdGEgPSBkZXRhaWw/LnVzZXJNZXRhZGF0YSB8fCB7fTtcbiAgY29uc3QgdmlkZW9JZCA9IFN0cmluZyh1c2VyTWV0YWRhdGE/LnZpZGVvSWQgfHwgJycpO1xuICBjb25zdCBjb250ZXh0ID0gY3JlYXRlUHJvY2Vzc2luZ0NvbnRleHQoKTtcblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiB7c3RhdHVzQ29kZTogMjAyfTtcbiAgfVxuXG4gIGlmKHN0YXR1cyA9PT0gJ0NPTVBMRVRFJykge1xuICAgIGF3YWl0IGNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nKGNvbnRleHQsIHZpZGVvSWQsIHtcbiAgICAgIGhsc0tleTogU3RyaW5nKHVzZXJNZXRhZGF0YT8uaGxzS2V5IHx8ICcnKSxcbiAgICAgIHBsYXliYWNrS2V5OiBTdHJpbmcodXNlck1ldGFkYXRhPy5wbGF5YmFja0tleSB8fCAnJyksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncmVhZHknLFxuICAgICAgc3RyZWFtVHlwZTogU3RyaW5nKHVzZXJNZXRhZGF0YT8uc3RyZWFtVHlwZSB8fCAncHJvZ3Jlc3NpdmUnKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtzdGF0dXNDb2RlOiAyMDB9O1xuICB9XG5cbiAgaWYoWydDQU5DRUxFRCcsICdFUlJPUiddLmluY2x1ZGVzKHN0YXR1cykpIHtcbiAgICBhd2FpdCBmYWlsVmlkZW9Qcm9jZXNzaW5nKGNvbnRleHQsIHZpZGVvSWQpO1xuICB9XG5cbiAgcmV0dXJuIHtzdGF0dXNDb2RlOiAyMDB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPHtib2R5OiBzdHJpbmc7IHN0YXR1c0NvZGU6IG51bWJlcn0+ID0+IHtcbiAgY29uc3QgbGltaXQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuVklERU9fVFJBTlNDT0RFX0JBQ0tGSUxMX0xJTUlUIHx8IDEwKTtcbiAgY29uc3Qgam9iSWRzID0gYXdhaXQgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsKGNyZWF0ZVByb2Nlc3NpbmdDb250ZXh0KCksIGxpbWl0KTtcblxuICByZXR1cm4ge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtqb2JJZHMsIHF1ZXVlZDogam9iSWRzLmxlbmd0aH0pLFxuICAgIHN0YXR1c0NvZGU6IDIwMFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1lZGlhQ29udmVydEhhbmRsZXIgPSAoY29uZmlndXJlUmVha3RvcjogUmVha3RvckNvbmZpZ3VyZUhhbmRsZXIpID0+IGFzeW5jIChcbiAgZXZlbnQ6IEV2ZW50QnJpZGdlRXZlbnQ8J01lZGlhQ29udmVydCBKb2IgU3RhdGUgQ2hhbmdlJywgTWVkaWFDb252ZXJ0Sm9iU3RhdGU+XG4pOiBQcm9taXNlPHtzdGF0dXNDb2RlOiBudW1iZXJ9PiA9PiB7XG4gIGNvbmZpZ3VyZVJlYWt0b3IoKTtcbiAgcmV0dXJuIG1lZGlhQ29udmVydEhhbmRsZXIoZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciA9IChjb25maWd1cmVSZWFrdG9yOiBSZWFrdG9yQ29uZmlndXJlSGFuZGxlcikgPT4gYXN5bmMgKCk6IFByb21pc2U8e1xuICBib2R5OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbn0+ID0+IHtcbiAgY29uZmlndXJlUmVha3RvcigpO1xuICByZXR1cm4gbWVkaWFDb252ZXJ0QmFja2ZpbGxIYW5kbGVyKCk7XG59O1xuIl0sIm5hbWVzIjpbIkNvbmZpZyIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsImNyZWF0ZVByb2Nlc3NpbmdDb250ZXh0IiwiY29uZmlnIiwiZGV0YWlscyIsIm5hbWUiLCJnZXQiLCJzdXBwb3J0RW1haWwiLCJzdXBwb3J0TmFtZSIsImRhdGFiYXNlTmFtZSIsInNlc3Npb24iLCJtZWRpYUNvbnZlcnRIYW5kbGVyIiwiZXZlbnQiLCJkZXRhaWwiLCJzdGF0dXMiLCJTdHJpbmciLCJ0b1VwcGVyQ2FzZSIsInVzZXJNZXRhZGF0YSIsInZpZGVvSWQiLCJjb250ZXh0Iiwic3RhdHVzQ29kZSIsImhsc0tleSIsInBsYXliYWNrS2V5IiwicHJvY2Vzc2luZ1N0YXR1cyIsInN0cmVhbVR5cGUiLCJpbmNsdWRlcyIsIm1lZGlhQ29udmVydEJhY2tmaWxsSGFuZGxlciIsImxpbWl0IiwiTnVtYmVyIiwicHJvY2VzcyIsImVudiIsIlZJREVPX1RSQU5TQ09ERV9CQUNLRklMTF9MSU1JVCIsImpvYklkcyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicXVldWVkIiwibGVuZ3RoIiwiY3JlYXRlTWVkaWFDb252ZXJ0SGFuZGxlciIsImNvbmZpZ3VyZVJlYWt0b3IiLCJjcmVhdGVNZWRpYUNvbnZlcnRCYWNrZmlsbEhhbmRsZXIiXSwibWFwcGluZ3MiOiJBQUVBLFNBQVFBLE1BQU0sUUFBTyxjQUFjO0FBRW5DLFNBQ0VDLHVCQUF1QixFQUN2QkMsbUJBQW1CLEVBQ25CQywyQkFBMkIsUUFDdEIsc0JBQXNCO0FBZ0I3QixNQUFNQywwQkFBMEIsSUFBbUIsQ0FBQTtRQUNqREMsUUFBUTtZQUNOQyxTQUFTO2dCQUNQQyxNQUFNUCxPQUFPUSxHQUFHLENBQUM7Z0JBQ2pCQyxjQUFjVCxPQUFPUSxHQUFHLENBQUM7Z0JBQ3pCRSxhQUFhVixPQUFPUSxHQUFHLENBQUM7WUFDMUI7UUFDRjtRQUNBRyxjQUFjWCxPQUFPUSxHQUFHLENBQUM7UUFDekJJLFNBQVMsQ0FBQztJQUNaLENBQUE7QUFFQSxPQUFPLE1BQU1DLHNCQUFzQixPQUNqQ0M7SUFFQSxNQUFNQyxTQUFTRCxPQUFPQyxVQUFVLENBQUM7SUFDakMsTUFBTUMsU0FBU0MsT0FBT0YsUUFBUUMsVUFBVSxJQUFJRSxXQUFXO0lBQ3ZELE1BQU1DLGVBQWVKLFFBQVFJLGdCQUFnQixDQUFDO0lBQzlDLE1BQU1DLFVBQVVILE9BQU9FLGNBQWNDLFdBQVc7SUFDaEQsTUFBTUMsVUFBVWpCO0lBRWhCLElBQUcsQ0FBQ2dCLFNBQVM7UUFDWCxPQUFPO1lBQUNFLFlBQVk7UUFBRztJQUN6QjtJQUVBLElBQUdOLFdBQVcsWUFBWTtRQUN4QixNQUFNZix3QkFBd0JvQixTQUFTRCxTQUFTO1lBQzlDRyxRQUFRTixPQUFPRSxjQUFjSSxVQUFVO1lBQ3ZDQyxhQUFhUCxPQUFPRSxjQUFjSyxlQUFlO1lBQ2pEQyxrQkFBa0I7WUFDbEJDLFlBQVlULE9BQU9FLGNBQWNPLGNBQWM7UUFDakQ7UUFFQSxPQUFPO1lBQUNKLFlBQVk7UUFBRztJQUN6QjtJQUVBLElBQUc7UUFBQztRQUFZO0tBQVEsQ0FBQ0ssUUFBUSxDQUFDWCxTQUFTO1FBQ3pDLE1BQU1kLG9CQUFvQm1CLFNBQVNEO0lBQ3JDO0lBRUEsT0FBTztRQUFDRSxZQUFZO0lBQUc7QUFDekIsRUFBRTtBQUVGLE9BQU8sTUFBTU0sOEJBQThCO0lBQ3pDLE1BQU1DLFFBQVFDLE9BQU9DLFFBQVFDLEdBQUcsQ0FBQ0MsOEJBQThCLElBQUk7SUFDbkUsTUFBTUMsU0FBUyxNQUFNL0IsNEJBQTRCQywyQkFBMkJ5QjtJQUU1RSxPQUFPO1FBQ0xNLE1BQU1DLEtBQUtDLFNBQVMsQ0FBQztZQUFDSDtZQUFRSSxRQUFRSixPQUFPSyxNQUFNO1FBQUE7UUFDbkRqQixZQUFZO0lBQ2Q7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNa0IsNEJBQTRCLENBQUNDLG1CQUE4QyxPQUN0RjNCO1FBRUEyQjtRQUNBLE9BQU81QixvQkFBb0JDO0lBQzdCLEVBQUU7QUFFRixPQUFPLE1BQU00QixvQ0FBb0MsQ0FBQ0QsbUJBQThDO1FBSTlGQTtRQUNBLE9BQU9iO0lBQ1QsRUFBRSJ9
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@nlabs/reaktor",
3
- "version": "1.6.3",
4
- "description": "Reaktor",
5
- "license": "Apache-2.0",
3
+ "version": "1.7.0",
4
+ "description": "GraphQL and ArangoDB application platform for typed actions, authentication, billing, media, messaging, and realtime services.",
5
+ "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
7
7
  "main": "./lib/index.js",
8
8
  "module": "./lib/index.js",
@@ -27,11 +27,23 @@
27
27
  }
28
28
  },
29
29
  "keywords": [
30
- "reaktor",
31
- "nitrogenlabs",
32
- "react",
30
+ "api",
31
+ "arangodb",
33
32
  "arkhamjs",
34
- "graphql"
33
+ "authentication",
34
+ "aws-lambda",
35
+ "backend",
36
+ "billing",
37
+ "database",
38
+ "graphql",
39
+ "messaging",
40
+ "nitrogenlabs",
41
+ "reaktor",
42
+ "realtime",
43
+ "serverless",
44
+ "stripe",
45
+ "typescript",
46
+ "websocket"
35
47
  ],
36
48
  "author": {
37
49
  "name": "Giraldo Rosales",
@@ -40,18 +52,22 @@
40
52
  },
41
53
  "repository": {
42
54
  "type": "git",
43
- "url": "git+https://github.com/nitrogenlabs/reaktor.git"
55
+ "url": "git+https://github.com/nitrogenlabs/reaktor.git",
56
+ "directory": "packages/reaktor"
44
57
  },
45
- "homepage": "https://github.com/nitrogenlabs/reaktor",
58
+ "homepage": "https://reaktor.nitrogenx.co",
46
59
  "bugs": {
47
60
  "url": "https://github.com/nitrogenlabs/reaktor/issues"
48
61
  },
62
+ "publishConfig": {
63
+ "access": "public"
64
+ },
49
65
  "scripts": {
50
66
  "build": "lex compile --remove --config tsconfig.build.json",
51
67
  "build:dev": "APP_ENV=dev NODE_ENV=development lex compile --remove --config tsconfig.build.json",
52
68
  "build:prod": "APP_ENV=prod NODE_ENV=production lex compile --remove --config tsconfig.build.json",
53
69
  "clean": "lex clean",
54
- "lint": "lex lint --fix",
70
+ "lint": "lex lint --fix --config ../../eslint.config.mjs --maxWarnings 0",
55
71
  "prepack": "npm run build && npm run verify:package",
56
72
  "preversion": "npm run build && npm run verify:package",
57
73
  "publish:major": "npm version major && npm run publish:tags && npm publish",
@@ -65,19 +81,19 @@
65
81
  "watch": "lex compile --remove --watch"
66
82
  },
67
83
  "dependencies": {
68
- "@aws-sdk/client-apigatewaymanagementapi": "^3.1111.0",
69
- "@aws-sdk/client-dynamodb": "^3.1111.0",
70
- "@aws-sdk/client-mediaconvert": "^3.1111.0",
71
- "@aws-sdk/client-rum": "^3.1112.0",
72
- "@aws-sdk/client-s3": "^3.1111.0",
73
- "@aws-sdk/client-ses": "^3.1111.0",
74
- "@aws-sdk/client-sns": "^3.1111.0",
75
- "@aws-sdk/s3-request-presigner": "^3.1111.0",
76
- "@nlabs/arkhamjs": "^3.31.11",
84
+ "@aws-sdk/client-apigatewaymanagementapi": "^3.1116.0",
85
+ "@aws-sdk/client-dynamodb": "^3.1116.0",
86
+ "@aws-sdk/client-mediaconvert": "^3.1116.0",
87
+ "@aws-sdk/client-rum": "^3.1116.0",
88
+ "@aws-sdk/client-s3": "^3.1116.0",
89
+ "@aws-sdk/client-ses": "^3.1116.0",
90
+ "@aws-sdk/client-sns": "^3.1116.0",
91
+ "@aws-sdk/s3-request-presigner": "^3.1116.0",
92
+ "@nlabs/arkhamjs": "3.31.14",
77
93
  "@nlabs/rip-hunter": "^3.1.1",
78
- "@nlabs/utils": "^2.10.5",
94
+ "@nlabs/utils": "^2.10.7",
79
95
  "apn": "npm:@parse/node-apn@^8.1.0",
80
- "arangojs": "^10.3.1",
96
+ "arangojs": "^10.4.0",
81
97
  "busboy": "^1.6.0",
82
98
  "child_process": "^1.0.2",
83
99
  "core-js": "^3.50.0",
@@ -87,7 +103,7 @@
87
103
  "graphql": "^16.14.2",
88
104
  "graphql-compose": "^9.1.0",
89
105
  "graphql-fields": "^2.0.3",
90
- "i18next": "^26.3.6",
106
+ "i18next": "^26.4.0",
91
107
  "jsonwebtoken": "^9.0.3",
92
108
  "luxon": "^3.7.2",
93
109
  "mime-types": "^3.0.2",
@@ -102,68 +118,15 @@
102
118
  "zod": "^4.4.3"
103
119
  },
104
120
  "devDependencies": {
105
- "@nlabs/lex": "^1.59.5",
121
+ "@nlabs/lex": "^2.0.4",
106
122
  "@types/aws-lambda": "^8.10.162",
107
123
  "@types/busboy": "^1.5.4",
108
- "@types/history": "^5.0.0",
109
- "@types/luxon": "^3.7.4",
124
+ "@types/luxon": "^3.7.5",
110
125
  "@types/node": "^26.2.0",
111
- "@types/stripe": "^8.0.417",
112
- "@types/twilio": "^3.19.3",
126
+ "@vitest/coverage-v8": "^4.1.11",
113
127
  "chokidar": "^5.0.0",
114
128
  "graphql-tools": "^9.0.34",
115
- "typescript": "^6.0.3",
116
- "vitest": "^4.1.10"
117
- },
118
- "overrides": {
119
- "@swc/cli": "0.8.1",
120
- "@swc/core": "1.15.47",
121
- "@xhmikosr/decompress": "11.1.4",
122
- "@xmldom/xmldom": "0.9.10",
123
- "axios": "1.19.0",
124
- "body-parser": "2.3.0",
125
- "brace-expansion": "2.1.4",
126
- "css-loader": "7.1.4",
127
- "cross-spawn": "7.0.6",
128
- "fast-uri": "3.1.5",
129
- "fast-xml-parser": "5.7.3",
130
- "file-type": "$file-type",
131
- "follow-redirects": "1.16.0",
132
- "form-data": "4.0.6",
133
- "got": "11.8.6",
134
- "http-cache-semantics": "4.2.0",
135
- "http-proxy-middleware": "2.0.10",
136
- "icss-utils": "5.1.0",
137
- "is-svg": "6.1.0",
138
- "js-yaml": "4.3.1",
139
- "jsonwebtoken": "$jsonwebtoken",
140
- "lodash": "4.18.1",
141
- "lodash-es": "4.18.1",
142
- "minimist": "1.2.8",
143
- "nanoid": "3.3.18",
144
- "node-forge": "1.4.0",
145
- "path-to-regexp": "8.4.2",
146
- "picomatch": "4.0.4",
147
- "piscina": "4.9.3",
148
- "postcss": "8.5.26",
149
- "postcss-modules-extract-imports": "3.1.0",
150
- "postcss-modules-local-by-default": "4.2.0",
151
- "postcss-modules-scope": "3.2.1",
152
- "postcss-modules-values": "4.0.0",
153
- "postcss-simple-vars": "7.0.1",
154
- "postcss-url": {
155
- ".": "10.1.3",
156
- "minimatch": "3.1.4"
157
- },
158
- "semver-regex": "4.0.5",
159
- "serialize-javascript": "7.0.5",
160
- "sharp": "0.35.3",
161
- "tmp": "0.2.7",
162
- "typescript-eslint": "8.65.0",
163
- "vite": "8.2.1",
164
- "webpack-plugin-serve": {
165
- "ws": "7.5.13"
166
- },
167
- "yaml": "2.9.0"
129
+ "typescript": "^7.0.2",
130
+ "vitest": "^4.1.11"
168
131
  }
169
132
  }
@@ -1,20 +0,0 @@
1
- import { ApiContext } from '../types/auth.types.js';
2
- import type { WebsocketConnection } from '../types/websockets.types.js';
3
- export declare const addSocket: (socketId: string, token: string) => Promise<WebsocketConnection>;
4
- export declare const getSocketByUser: (userId: string) => Promise<WebsocketConnection>;
5
- export declare const getSocketById: (socketId: string) => Promise<any>;
6
- export declare const getConnectionByConversation: (context: ApiContext, conversationId: string) => Promise<any>;
7
- export declare const removeSocket: (socketId: string) => Promise<WebsocketConnection>;
8
- export interface WebSocketClientContext {
9
- readonly requestContext?: {
10
- readonly apiId: string;
11
- readonly domainName: string;
12
- readonly stage: string;
13
- };
14
- }
15
- export declare class WebsocketClient {
16
- client: any;
17
- constructor(config?: any);
18
- setupClient({ requestContext }: WebSocketClientContext): Promise<void>;
19
- send(connection: any, payload: any): Promise<boolean>;
20
- }
@@ -1,164 +0,0 @@
1
- /**
2
- * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
- */ import { ApiGatewayManagementApi } from '@aws-sdk/client-apigatewaymanagementapi';
5
- import { createHash, parseId, parseString } from '@nlabs/utils/parsers/strings';
6
- import { aql } from 'arangojs';
7
- import { Config } from '../config.js';
8
- import { useDb } from '../utils/arangodbUtils.js';
9
- import { getUserByToken } from './users.js';
10
- import { ErrorTypes } from '../types/error.types.js';
11
- import { logError } from '../utils/analyticsUtils.js';
12
- export const addSocket = async (socketId, token)=>{
13
- const action = 'addSocket';
14
- const formatSocketId = parseString(socketId, 32);
15
- const formatToken = parseString(token);
16
- try {
17
- const databaseName = process.env.ARANGODB_DATABASE || '';
18
- const database = useDb(databaseName);
19
- const user = await getUserByToken({
20
- config: Config.get(),
21
- databaseName
22
- }, formatToken);
23
- if (!user) {
24
- throw new Error('Unauthorized');
25
- }
26
- const update = {
27
- socketId: formatSocketId,
28
- modified: Date.now()
29
- };
30
- const insert = {
31
- ...update,
32
- _key: createHash(`socket-${formatSocketId}`),
33
- userId: user.userId
34
- };
35
- const aqlQry = aql`UPSERT {userId: ${user.userId}}
36
- INSERT ${insert}
37
- UPDATE ${update}
38
- IN sockets RETURN NEW`;
39
- return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
40
- throw logError({
41
- action,
42
- category: 'websockets',
43
- value: ErrorTypes.DATABASE_ERROR
44
- }, error, {});
45
- });
46
- } catch (error) {
47
- throw new Error('Unauthorized');
48
- }
49
- };
50
- export const getSocketByUser = (userId)=>{
51
- const formatUserId = parseId(userId);
52
- const databaseName = process.env.ARANGODB_DATABASE || '';
53
- const database = useDb(databaseName);
54
- const aqlQry = aql`FOR s IN sockets
55
- FILTER s.userId == ${formatUserId}
56
- LIMIT 1
57
- RETURN s`;
58
- return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
59
- throw error;
60
- });
61
- };
62
- export const getSocketById = (socketId)=>{
63
- const formatSocketId = parseId(socketId);
64
- const databaseName = process.env.ARANGODB_DATABASE || '';
65
- const database = useDb(databaseName);
66
- const aqlQry = aql`FOR s IN sockets
67
- FILTER s.socketId == ${formatSocketId}
68
- LET user = FIRST(
69
- FOR u IN users
70
- FILTER u.sub == s.sub
71
- LIMIT 1
72
- RETURN u;
73
- )
74
- LIMIT 1
75
- RETURN MERGE(s, {user})`;
76
- return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
77
- throw error;
78
- });
79
- };
80
- export const getConnectionByConversation = (context, conversationId)=>{
81
- const { databaseName, session: { userId: sessionId } = {} } = context;
82
- const sessionDocId = `users/${parseId(sessionId)}`;
83
- const conversationDocId = `conversations/${parseId(conversationId)}`;
84
- const database = useDb(databaseName);
85
- const aqlQry = aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
86
- FILTER c._id == ${conversationDocId}
87
- LIMIT 1
88
- LET u = (
89
- FOR inUser, inEdge IN 1..1 INBOUND ${conversationDocId} hasConversation
90
- FOR n IN connections
91
- FILTER inUser.sub == n.sub
92
- RETURN n.connectionId
93
- )
94
- RETURN u`;
95
- return database.query(aqlQry).then((cursor)=>cursor.all()).catch((error)=>{
96
- throw error;
97
- });
98
- };
99
- export const removeSocket = (socketId)=>{
100
- const action = 'removeSocket';
101
- const formatSocketId = parseString(socketId, 32);
102
- const databaseName = process.env.ARANGODB_DATABASE || '';
103
- const database = useDb(databaseName);
104
- const aqlQry = aql`FOR s IN sockets
105
- FILTER s.socketId == ${formatSocketId}
106
- LIMIT 1
107
- REMOVE s IN sockets
108
- RETURN OLD`;
109
- return database.query(aqlQry).then((cursor)=>cursor.next()).catch((error)=>{
110
- throw logError({
111
- action,
112
- category: 'websockets',
113
- value: ErrorTypes.DATABASE_ERROR
114
- }, error, {});
115
- });
116
- };
117
- export class WebsocketClient {
118
- client;
119
- constructor(config){
120
- if (config) {
121
- this.setupClient(config || {});
122
- }
123
- }
124
- // Allow just passing a single event to setup the client for ease of use
125
- async setupClient({ requestContext }) {
126
- if (!this.client && requestContext) {
127
- const { apiId, domainName, stage } = requestContext;
128
- let updatedDomainName = domainName;
129
- if (apiId) {
130
- updatedDomainName = `${apiId}.execute-api.${process.env.API_REGION}.amazonaws.com`;
131
- }
132
- this.client = new ApiGatewayManagementApi({
133
- credentials: Config.get('aws.credentials'),
134
- endpoint: `https://${updatedDomainName}/${stage}`,
135
- region: Config.get('aws.region')
136
- });
137
- }
138
- }
139
- async send(connection, payload) {
140
- console.log(connection, payload);
141
- // Cheat and allow event to be passed in this also lets us default to setupClient too
142
- let socketId;
143
- if (connection?.requestContext) {
144
- await this.setupClient(connection);
145
- const { socketId: updatedSocketId } = connection.requestContext;
146
- socketId = updatedSocketId;
147
- } else {
148
- socketId = connection;
149
- }
150
- await this.client.postToConnection({
151
- ConnectionId: socketId,
152
- Data: JSON.stringify(payload)
153
- }).promise().catch(async (postError)=>{
154
- console.log(JSON.stringify(postError));
155
- if (postError.statusCode === 410) {
156
- // Disconnect client
157
- await removeSocket(socketId);
158
- }
159
- });
160
- return true;
161
- }
162
- }
163
-
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvd2Vic29ja2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtBcGlHYXRld2F5TWFuYWdlbWVudEFwaX0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWFwaWdhdGV3YXltYW5hZ2VtZW50YXBpJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWwsIERhdGFiYXNlfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5VG9rZW59IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtXZWJzb2NrZXRDb25uZWN0aW9ufSBmcm9tICcuLi90eXBlcy93ZWJzb2NrZXRzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IGFkZFNvY2tldCA9IGFzeW5jIChzb2NrZXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRTb2NrZXQnO1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlU3RyaW5nKHNvY2tldElkLCAzMik7XG4gIGNvbnN0IGZvcm1hdFRva2VuID0gcGFyc2VTdHJpbmcodG9rZW4pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvY2Vzcy5lbnYuQVJBTkdPREJfREFUQUJBU0UgfHwgJyc7XG4gICAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgZ2V0VXNlckJ5VG9rZW4oe2NvbmZpZzogQ29uZmlnLmdldCgpLCBkYXRhYmFzZU5hbWV9LCBmb3JtYXRUb2tlbik7XG5cbiAgICBpZighdXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBzb2NrZXRJZDogZm9ybWF0U29ja2V0SWQsXG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKVxuICAgIH07XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgLi4udXBkYXRlLFxuICAgICAgX2tleTogY3JlYXRlSGFzaChgc29ja2V0LSR7Zm9ybWF0U29ja2V0SWR9YCksXG4gICAgICB1c2VySWQ6IHVzZXIudXNlcklkXG4gICAgfTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7dXNlcklkOiAke3VzZXIudXNlcklkfX1cbiAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgIElOIHNvY2tldHMgUkVUVVJOIE5FV2A7XG5cbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6ICd3ZWJzb2NrZXRzJyxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwge30pO1xuICAgICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYXV0aG9yaXplZCcpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U29ja2V0QnlVc2VyID0gKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvY2Vzcy5lbnYuQVJBTkdPREJfREFUQUJBU0UgfHwgJyc7XG4gIGNvbnN0IGRhdGFiYXNlOiBEYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgcyBJTiBzb2NrZXRzXG4gICAgRklMVEVSIHMudXNlcklkID09ICR7Zm9ybWF0VXNlcklkfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gc2A7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTb2NrZXRCeUlkID0gKHNvY2tldElkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlSWQoc29ja2V0SWQpO1xuICBjb25zdCBkYXRhYmFzZU5hbWUgPSBwcm9jZXNzLmVudi5BUkFOR09EQl9EQVRBQkFTRSB8fCAnJztcbiAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBzIElOIHNvY2tldHNcbiAgICBGSUxURVIgcy5zb2NrZXRJZCA9PSAke2Zvcm1hdFNvY2tldElkfVxuICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSIHUuc3ViID09IHMuc3ViXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gdTtcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShzLCB7dXNlcn0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25CeUNvbnZlcnNhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3BhcnNlSWQoc2Vzc2lvbklkKX1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcbiAgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgTElNSVQgMVxuICBMRVQgdSA9IChcbiAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZPUiBuIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSIGluVXNlci5zdWIgPT0gbi5zdWJcbiAgICBSRVRVUk4gbi5jb25uZWN0aW9uSWRcbiAgKVxuICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVNvY2tldCA9IChzb2NrZXRJZDogc3RyaW5nKTogUHJvbWlzZTxXZWJzb2NrZXRDb25uZWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZW1vdmVTb2NrZXQnO1xuICBjb25zdCBmb3JtYXRTb2NrZXRJZCA9IHBhcnNlU3RyaW5nKHNvY2tldElkLCAzMik7XG4gIGNvbnN0IGRhdGFiYXNlTmFtZSA9IHByb2Nlc3MuZW52LkFSQU5HT0RCX0RBVEFCQVNFIHx8ICcnO1xuICBjb25zdCBkYXRhYmFzZTogRGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIHMgSU4gc29ja2V0c1xuICAgICAgRklMVEVSIHMuc29ja2V0SWQgPT0gJHtmb3JtYXRTb2NrZXRJZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBzIElOIHNvY2tldHNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiAnd2Vic29ja2V0cycsXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwge30pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBXZWJTb2NrZXRDbGllbnRDb250ZXh0IHtcbiAgcmVhZG9ubHkgcmVxdWVzdENvbnRleHQ/OiB7XG4gICAgcmVhZG9ubHkgYXBpSWQ6IHN0cmluZztcbiAgICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcbiAgfTtcbn1cbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xuICBjbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnPykge1xuICAgIGlmKGNvbmZpZykge1xuICAgICAgdGhpcy5zZXR1cENsaWVudChjb25maWcgfHwge30pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFsbG93IGp1c3QgcGFzc2luZyBhIHNpbmdsZSBldmVudCB0byBzZXR1cCB0aGUgY2xpZW50IGZvciBlYXNlIG9mIHVzZVxuICBhc3luYyBzZXR1cENsaWVudCh7cmVxdWVzdENvbnRleHR9OiBXZWJTb2NrZXRDbGllbnRDb250ZXh0KSB7XG4gICAgaWYoIXRoaXMuY2xpZW50ICYmIHJlcXVlc3RDb250ZXh0KSB7XG4gICAgICBjb25zdCB7YXBpSWQsIGRvbWFpbk5hbWUsIHN0YWdlfSA9IHJlcXVlc3RDb250ZXh0O1xuICAgICAgbGV0IHVwZGF0ZWREb21haW5OYW1lID0gZG9tYWluTmFtZTtcblxuICAgICAgaWYoYXBpSWQpIHtcbiAgICAgICAgdXBkYXRlZERvbWFpbk5hbWUgPSBgJHthcGlJZH0uZXhlY3V0ZS1hcGkuJHtwcm9jZXNzLmVudi5BUElfUkVHSU9OfS5hbWF6b25hd3MuY29tYDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgQXBpR2F0ZXdheU1hbmFnZW1lbnRBcGkoe1xuICAgICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICAgIGVuZHBvaW50OiBgaHR0cHM6Ly8ke3VwZGF0ZWREb21haW5OYW1lfS8ke3N0YWdlfWAsXG4gICAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kKGNvbm5lY3Rpb24sIHBheWxvYWQpIHtcbiAgICBjb25zb2xlLmxvZyhjb25uZWN0aW9uLCBwYXlsb2FkKTtcblxuICAgIC8vIENoZWF0IGFuZCBhbGxvdyBldmVudCB0byBiZSBwYXNzZWQgaW4gdGhpcyBhbHNvIGxldHMgdXMgZGVmYXVsdCB0byBzZXR1cENsaWVudCB0b29cbiAgICBsZXQgc29ja2V0SWQ7XG5cbiAgICBpZihjb25uZWN0aW9uPy5yZXF1ZXN0Q29udGV4dCkge1xuICAgICAgYXdhaXQgdGhpcy5zZXR1cENsaWVudChjb25uZWN0aW9uKTtcbiAgICAgIGNvbnN0IHtzb2NrZXRJZDogdXBkYXRlZFNvY2tldElkfSA9IGNvbm5lY3Rpb24ucmVxdWVzdENvbnRleHQ7XG4gICAgICBzb2NrZXRJZCA9IHVwZGF0ZWRTb2NrZXRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc29ja2V0SWQgPSBjb25uZWN0aW9uO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY2xpZW50LnBvc3RUb0Nvbm5lY3Rpb24oe0Nvbm5lY3Rpb25JZDogc29ja2V0SWQsIERhdGE6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpfSlcbiAgICAgIC5wcm9taXNlKClcbiAgICAgIC5jYXRjaChhc3luYyAocG9zdEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBvc3RFcnJvcikpO1xuXG4gICAgICAgIGlmKHBvc3RFcnJvci5zdGF0dXNDb2RlID09PSA0MTApIHtcbiAgICAgICAgICAvLyBEaXNjb25uZWN0IGNsaWVudFxuICAgICAgICAgIGF3YWl0IHJlbW92ZVNvY2tldChzb2NrZXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJBcGlHYXRld2F5TWFuYWdlbWVudEFwaSIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJDb25maWciLCJ1c2VEYiIsImdldFVzZXJCeVRva2VuIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYWRkU29ja2V0Iiwic29ja2V0SWQiLCJ0b2tlbiIsImFjdGlvbiIsImZvcm1hdFNvY2tldElkIiwiZm9ybWF0VG9rZW4iLCJkYXRhYmFzZU5hbWUiLCJwcm9jZXNzIiwiZW52IiwiQVJBTkdPREJfREFUQUJBU0UiLCJkYXRhYmFzZSIsInVzZXIiLCJjb25maWciLCJnZXQiLCJFcnJvciIsInVwZGF0ZSIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsImluc2VydCIsIl9rZXkiLCJ1c2VySWQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFNvY2tldEJ5VXNlciIsImZvcm1hdFVzZXJJZCIsImdldFNvY2tldEJ5SWQiLCJnZXRDb25uZWN0aW9uQnlDb252ZXJzYXRpb24iLCJjb250ZXh0IiwiY29udmVyc2F0aW9uSWQiLCJzZXNzaW9uIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJhbGwiLCJyZW1vdmVTb2NrZXQiLCJXZWJzb2NrZXRDbGllbnQiLCJjbGllbnQiLCJzZXR1cENsaWVudCIsInJlcXVlc3RDb250ZXh0IiwiYXBpSWQiLCJkb21haW5OYW1lIiwic3RhZ2UiLCJ1cGRhdGVkRG9tYWluTmFtZSIsIkFQSV9SRUdJT04iLCJjcmVkZW50aWFscyIsImVuZHBvaW50IiwicmVnaW9uIiwic2VuZCIsImNvbm5lY3Rpb24iLCJwYXlsb2FkIiwiY29uc29sZSIsImxvZyIsInVwZGF0ZWRTb2NrZXRJZCIsInBvc3RUb0Nvbm5lY3Rpb24iLCJDb25uZWN0aW9uSWQiLCJEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsInByb21pc2UiLCJwb3N0RXJyb3IiLCJzdGF0dXNDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSx1QkFBdUIsUUFBTywwQ0FBMEM7QUFDaEYsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDOUUsU0FBUUMsR0FBRyxRQUFpQixXQUFXO0FBR3ZDLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBRXBDLFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsY0FBYyxRQUFPLGFBQWE7QUFFMUMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUVuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBRXBELE9BQU8sTUFBTUMsWUFBWSxPQUFPQyxVQUFrQkM7SUFDaEQsTUFBTUMsU0FBUztJQUNmLE1BQU1DLGlCQUFpQlgsWUFBWVEsVUFBVTtJQUM3QyxNQUFNSSxjQUFjWixZQUFZUztJQUVoQyxJQUFJO1FBQ0YsTUFBTUksZUFBZUMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUIsSUFBSTtRQUN0RCxNQUFNQyxXQUFxQmQsTUFBTVU7UUFDakMsTUFBTUssT0FBTyxNQUFNZCxlQUFlO1lBQUNlLFFBQVFqQixPQUFPa0IsR0FBRztZQUFJUDtRQUFZLEdBQUdEO1FBRXhFLElBQUcsQ0FBQ00sTUFBTTtZQUNSLE1BQU0sSUFBSUcsTUFBTTtRQUNsQjtRQUVBLE1BQU1DLFNBQVM7WUFDYmQsVUFBVUc7WUFDVlksVUFBVUMsS0FBS0MsR0FBRztRQUNwQjtRQUNBLE1BQU1DLFNBQVM7WUFDYixHQUFHSixNQUFNO1lBQ1RLLE1BQU03QixXQUFXLENBQUMsT0FBTyxFQUFFYSxn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
Binary file