@nlabs/reaktor 1.7.0 → 1.9.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 (230) hide show
  1. package/README.md +75 -0
  2. package/lib/actions/analytics.js +1 -1
  3. package/lib/actions/apps.js +1 -1
  4. package/lib/actions/connections.js +1 -1
  5. package/lib/actions/content.js +1 -1
  6. package/lib/actions/conversations.js +1 -1
  7. package/lib/actions/crm.d.ts +7 -1
  8. package/lib/actions/crm.js +224 -17
  9. package/lib/actions/crud.js +1 -1
  10. package/lib/actions/dynamodb.js +1 -1
  11. package/lib/actions/email.js +1 -1
  12. package/lib/actions/files.js +1 -1
  13. package/lib/actions/flags.js +1 -1
  14. package/lib/actions/groups.js +1 -1
  15. package/lib/actions/images.js +1 -1
  16. package/lib/actions/index.js +1 -1
  17. package/lib/actions/ios.js +1 -1
  18. package/lib/actions/locations.js +1 -1
  19. package/lib/actions/messages.js +1 -1
  20. package/lib/actions/notifications.js +1 -1
  21. package/lib/actions/payments.js +1 -1
  22. package/lib/actions/personas.js +1 -1
  23. package/lib/actions/posts.js +1 -1
  24. package/lib/actions/query.js +1 -1
  25. package/lib/actions/reactions.js +1 -1
  26. package/lib/actions/rum.js +14 -9
  27. package/lib/actions/s3.js +1 -1
  28. package/lib/actions/search.js +1 -1
  29. package/lib/actions/sms.js +1 -1
  30. package/lib/actions/statistics.js +1 -1
  31. package/lib/actions/subscriptions.js +1 -1
  32. package/lib/actions/tags.js +1 -1
  33. package/lib/actions/users.d.ts +4 -1
  34. package/lib/actions/users.js +28 -7
  35. package/lib/actions/videos.js +1 -1
  36. package/lib/adapters/arangoAdapter.js +1 -1
  37. package/lib/adapters/contentAdapter.js +1 -1
  38. package/lib/adapters/fileAdapter.js +1 -1
  39. package/lib/adapters/imageAdapter.js +1 -1
  40. package/lib/adapters/index.js +1 -1
  41. package/lib/adapters/messageAdapter.js +1 -1
  42. package/lib/adapters/postAdapter.js +1 -1
  43. package/lib/adapters/reaktorAdapter.js +1 -1
  44. package/lib/adapters/tagAdapter.js +1 -1
  45. package/lib/adapters/userAdapter.js +1 -1
  46. package/lib/config.js +1 -1
  47. package/lib/constants/collections.d.ts +12 -0
  48. package/lib/constants/collections.js +13 -1
  49. package/lib/durableChat/conversations.d.ts +62 -0
  50. package/lib/durableChat/conversations.js +729 -0
  51. package/lib/durableChat/errors.d.ts +6 -0
  52. package/lib/durableChat/errors.js +11 -0
  53. package/lib/durableChat/events.d.ts +22 -0
  54. package/lib/durableChat/events.js +50 -0
  55. package/lib/durableChat/index.d.ts +8 -0
  56. package/lib/durableChat/index.js +10 -0
  57. package/lib/durableChat/membership.d.ts +24 -0
  58. package/lib/durableChat/membership.js +85 -0
  59. package/lib/durableChat/messageTypes.d.ts +76 -0
  60. package/lib/durableChat/messageTypes.js +3 -0
  61. package/lib/durableChat/messages.d.ts +16 -0
  62. package/lib/durableChat/messages.js +257 -0
  63. package/lib/durableChat/transaction.d.ts +10 -0
  64. package/lib/durableChat/transaction.js +53 -0
  65. package/lib/durableChat/types.d.ts +81 -0
  66. package/lib/durableChat/types.js +3 -0
  67. package/lib/handlers/graphqlHandler.js +1 -1
  68. package/lib/index.d.ts +4 -1
  69. package/lib/index.js +4 -2
  70. package/lib/lambdas/actions/websockets.js +1 -1
  71. package/lib/lambdas/authorizer.js +1 -1
  72. package/lib/lambdas/connection.js +1 -1
  73. package/lib/lambdas/utils/message.js +1 -1
  74. package/lib/lambdas/utils/websocket.js +1 -1
  75. package/lib/mocks/conversation.js +1 -1
  76. package/lib/mocks/file.js +1 -1
  77. package/lib/mocks/group.js +1 -1
  78. package/lib/mocks/image.js +1 -1
  79. package/lib/mocks/post.js +1 -1
  80. package/lib/mocks/tag.js +1 -1
  81. package/lib/mocks/user.js +1 -1
  82. package/lib/mocks/video.js +1 -1
  83. package/lib/mutations/analytics/analytics.js +1 -1
  84. package/lib/mutations/content/content.js +1 -1
  85. package/lib/mutations/crm/crm.js +43 -11
  86. package/lib/mutations/events/events.js +1 -1
  87. package/lib/mutations/flags/flags.js +1 -1
  88. package/lib/mutations/groups/groups.js +1 -1
  89. package/lib/mutations/images/images.js +1 -1
  90. package/lib/mutations/index.js +1 -1
  91. package/lib/mutations/locations/locations.js +1 -1
  92. package/lib/mutations/messages/messages.js +1 -1
  93. package/lib/mutations/personas/personas.js +1 -1
  94. package/lib/mutations/posts/posts.js +1 -1
  95. package/lib/mutations/reactions/reactions.js +1 -1
  96. package/lib/mutations/rum/rum.js +1 -1
  97. package/lib/mutations/statistics/statistics.js +1 -1
  98. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  99. package/lib/mutations/tags/tags.js +1 -1
  100. package/lib/mutations/users/users.js +1 -1
  101. package/lib/mutations/videos/videos.js +1 -1
  102. package/lib/objectTypes/analytics.js +1 -1
  103. package/lib/objectTypes/app.js +1 -1
  104. package/lib/objectTypes/bankAccount.js +1 -1
  105. package/lib/objectTypes/connection.js +1 -1
  106. package/lib/objectTypes/content.js +1 -1
  107. package/lib/objectTypes/conversation.js +1 -1
  108. package/lib/objectTypes/creditCard.js +1 -1
  109. package/lib/objectTypes/crm.js +5 -1
  110. package/lib/objectTypes/document.js +1 -1
  111. package/lib/objectTypes/error.js +1 -1
  112. package/lib/objectTypes/event.js +1 -1
  113. package/lib/objectTypes/external.js +1 -1
  114. package/lib/objectTypes/file.js +1 -1
  115. package/lib/objectTypes/filter.js +1 -1
  116. package/lib/objectTypes/flag.js +5 -2
  117. package/lib/objectTypes/group.js +1 -1
  118. package/lib/objectTypes/iapSubscription.js +1 -1
  119. package/lib/objectTypes/image.js +1 -1
  120. package/lib/objectTypes/index.js +1 -1
  121. package/lib/objectTypes/location.js +1 -1
  122. package/lib/objectTypes/message.js +1 -1
  123. package/lib/objectTypes/passcode.js +1 -1
  124. package/lib/objectTypes/persona.js +1 -1
  125. package/lib/objectTypes/plan.js +1 -1
  126. package/lib/objectTypes/post.js +1 -1
  127. package/lib/objectTypes/query.js +1 -1
  128. package/lib/objectTypes/reaction.js +1 -1
  129. package/lib/objectTypes/relation.js +1 -1
  130. package/lib/objectTypes/rum.js +1 -1
  131. package/lib/objectTypes/search.js +1 -1
  132. package/lib/objectTypes/statistics.js +1 -1
  133. package/lib/objectTypes/subscription.js +1 -1
  134. package/lib/objectTypes/tag.js +1 -1
  135. package/lib/objectTypes/user.js +9 -1
  136. package/lib/objectTypes/video.js +1 -1
  137. package/lib/queries/analytics/analytics.js +1 -1
  138. package/lib/queries/content/content.js +1 -1
  139. package/lib/queries/crm/crm.js +41 -13
  140. package/lib/queries/events/events.js +1 -1
  141. package/lib/queries/flags/flags.js +1 -1
  142. package/lib/queries/groups/groups.js +1 -1
  143. package/lib/queries/images/images.js +1 -1
  144. package/lib/queries/index.js +1 -1
  145. package/lib/queries/locations/locations.js +1 -1
  146. package/lib/queries/messages/messages.js +1 -1
  147. package/lib/queries/personas/personas.js +1 -1
  148. package/lib/queries/posts/posts.js +1 -1
  149. package/lib/queries/query/query.js +1 -1
  150. package/lib/queries/reactions/reactions.js +1 -1
  151. package/lib/queries/statistics/statistics.js +1 -1
  152. package/lib/queries/subscriptions/subscriptions.js +1 -1
  153. package/lib/queries/tags/tags.js +1 -1
  154. package/lib/queries/users/users.js +1 -1
  155. package/lib/queries/videos/videos.js +1 -1
  156. package/lib/templates/email/layout.js +1 -1
  157. package/lib/templates/email/passwordForgot.js +1 -1
  158. package/lib/templates/email/passwordRecovery.js +1 -1
  159. package/lib/templates/email/verifyEmail.js +1 -1
  160. package/lib/templates/email/welcome.js +1 -1
  161. package/lib/templates/sms/passwordForgot.js +1 -1
  162. package/lib/templates/sms/passwordRecovery.js +1 -1
  163. package/lib/templates/sms/verifyEmail.js +1 -1
  164. package/lib/templates/sms/verifyPhone.js +1 -1
  165. package/lib/templates/sms/welcome.js +1 -1
  166. package/lib/types/analytics.types.js +1 -1
  167. package/lib/types/apps.types.js +1 -1
  168. package/lib/types/arangodb.types.d.ts +1 -1
  169. package/lib/types/arangodb.types.js +1 -1
  170. package/lib/types/auth.types.d.ts +1 -0
  171. package/lib/types/auth.types.js +1 -1
  172. package/lib/types/connections.types.js +1 -1
  173. package/lib/types/content.types.js +1 -1
  174. package/lib/types/conversations.types.js +1 -1
  175. package/lib/types/crm.types.d.ts +20 -1
  176. package/lib/types/crm.types.js +1 -1
  177. package/lib/types/email.types.js +1 -1
  178. package/lib/types/error.types.js +1 -1
  179. package/lib/types/files.types.js +1 -1
  180. package/lib/types/flags.types.js +1 -1
  181. package/lib/types/google.types.js +1 -1
  182. package/lib/types/groups.types.js +1 -1
  183. package/lib/types/images.types.js +1 -1
  184. package/lib/types/index.js +1 -1
  185. package/lib/types/locations.types.js +1 -1
  186. package/lib/types/messages.types.js +1 -1
  187. package/lib/types/notifications.types.js +1 -1
  188. package/lib/types/payments.types.js +1 -1
  189. package/lib/types/personas.types.js +1 -1
  190. package/lib/types/posts.types.js +1 -1
  191. package/lib/types/rum.types.js +1 -1
  192. package/lib/types/statistics.types.js +1 -1
  193. package/lib/types/tags.types.js +1 -1
  194. package/lib/types/users.types.d.ts +1 -0
  195. package/lib/types/users.types.js +1 -1
  196. package/lib/types/videos.types.js +1 -1
  197. package/lib/types/websockets.types.js +1 -1
  198. package/lib/upload.js +1 -1
  199. package/lib/utils/adapterUtils.js +1 -1
  200. package/lib/utils/analyticsUtils.js +1 -1
  201. package/lib/utils/appContext.d.ts +2 -0
  202. package/lib/utils/appContext.js +10 -0
  203. package/lib/utils/aqlHelpers.js +1 -1
  204. package/lib/utils/arangodbUtils.js +1 -1
  205. package/lib/utils/authUtils.js +1 -1
  206. package/lib/utils/awsUtils.js +1 -1
  207. package/lib/utils/collectionRegistry.js +1 -1
  208. package/lib/utils/contextUtils.js +1 -1
  209. package/lib/utils/dbI18n.example.js +1 -1
  210. package/lib/utils/dbI18n.js +1 -1
  211. package/lib/utils/googleTranslate.js +1 -1
  212. package/lib/utils/graphqlUtils.d.ts +1 -0
  213. package/lib/utils/graphqlUtils.js +1 -1
  214. package/lib/utils/imageUtils.js +1 -1
  215. package/lib/utils/index.js +1 -1
  216. package/lib/utils/languageDetection.js +1 -1
  217. package/lib/utils/localeUtils.example.js +1 -1
  218. package/lib/utils/localeUtils.js +1 -1
  219. package/lib/utils/middlewareUtils.js +1 -1
  220. package/lib/utils/queryBuilder.js +1 -1
  221. package/lib/utils/schemaUtils.js +1 -1
  222. package/lib/utils/sessionUtils.d.ts +4 -0
  223. package/lib/utils/sessionUtils.js +1 -1
  224. package/lib/utils/stripeUtils.js +2 -1
  225. package/lib/utils/templateUtils.js +1 -1
  226. package/lib/utils/testUtils.js +1 -1
  227. package/lib/utils/translationQueue.example.js +1 -1
  228. package/lib/utils/translationQueue.js +1 -1
  229. package/lib/videoProcessing.js +1 -1
  230. package/package.json +19 -19
@@ -336,4 +336,4 @@ export const deleteUserFromConversation = (context, { conversationId, userId })=
336
336
  }, error, context));
337
337
  };
338
338
 
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL2Nsb25lJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCBzb3J0SWRzLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSwgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtnZXRVc2VyQnlJZH0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXQsIEVkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29udmVyc2F0aW9uT3B0aW9ucyxcbiAgQ29udmVyc2F0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uVXNlcnNQYXJhbXMsXG4gIERpcmVjdENvbnZlcnNhdGlvblBhcmFtcyxcbiAgVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xufSBmcm9tICcuLi90eXBlcy9jb252ZXJzYXRpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NvbnZlcnNhdGlvbnMnO1xuY29uc3QgaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0NvbnZlcnNhdGlvbicpO1xuXG5jb25zdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVXNlcklkOiBzdHJpbmcsXG4gIHRvVXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBbZnJvbVVzZXIsIHRvVXNlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZnJvbVVzZXJJZH0pLFxuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHRvVXNlcklkfSlcbiAgXSk7XG4gIGNvbnN0IGZyb21QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhmcm9tVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHRvUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcodG9Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighZnJvbVBlcnNvbmFJZCB8fCAhdG9QZXJzb25hSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCB0b1BlcnNvbmFJZCwgZnJvbVBlcnNvbmFJZCk7XG5cbiAgaWYoIXJlbGF0aW9uc2hpcC5pc0ZyaWVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uczogQ29udmVyc2F0aW9uVHlwZVtdID0gW11cbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY29udmVyc2F0aW9ucztcbiAgfVxuXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChjb252ZXJzYXRpb25zLm1hcChhc3luYyAoY29udmVyc2F0aW9uKSA9PiB7XG4gICAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSkpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgcGFydGljaXBhbnRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGFydGljaXBhbnRQZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBhcnRpY2lwYW50UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gY29udmVyc2F0aW9ucy5maWx0ZXIoKF9jb252ZXJzYXRpb24sIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbklkICYmICFjb252ZXJzYXRpb24/Ll9rZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBzZXNzaW9uVXNlcklkKVxuICAgIDogbnVsbDtcbiAgY29uc3QgcGFydGljaXBhbnRVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8udXNlcklkIHx8IHBhcnRpY2lwYW50Py5fa2V5IHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIXBhcnRpY2lwYW50VXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIHNlc3Npb25Vc2VySWQsIHBhcnRpY2lwYW50VXNlcklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7dXNlcklkfWA7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7dXNlckRvY0lkfSAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICBTT1JUIGMuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiB1Ll9pZCAhPSAke3VzZXJEb2NJZH1cbiAgICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIE1FUkdFKGMsIHt1c2Vyc30pXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4gZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMoY29udGV4dCwgY29udmVyc2F0aW9ucykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIGZvcm1hdEZyb21JZCwgZm9ybWF0VG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkRGlyZWN0Q29udmVyc2F0aW9uKGNvbnRleHQsIHtmcm9tSWQsIHRvSWQsIHRvVXNlcjogdXNlcn0pO1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG5cbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGlzRGlyZWN0OiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgYWRkSXRlbTxDb252ZXJzYXRpb25UeXBlPihjb250ZXh0LCAnY29udmVyc2F0aW9ucycsIGluc2VydCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb25Vc2VyTGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25CeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZlcnNhdGlvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIGlzRGlyZWN0LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWRcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXJUb0NvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LSR7Zm9ybWF0VXNlcklkfWApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sIm5hbWVzIjpbImNsb25lRGVlcCIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwiYXFsIiwibGl0ZXJhbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImdldExpbWl0Iiwic29ydElkcyIsInVzZURiIiwiYWRkSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZ2V0VXNlckJ5SWQiLCJldmVudENhdGVnb3J5IiwiaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiIsImVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAiLCJjb250ZXh0IiwiZnJvbVVzZXJJZCIsInRvVXNlcklkIiwiZnJvbVVzZXIiLCJ0b1VzZXIiLCJQcm9taXNlIiwiYWxsIiwidXNlcklkIiwiZnJvbVBlcnNvbmFJZCIsIlN0cmluZyIsInBlcnNvbmFJZCIsInRvUGVyc29uYUlkIiwiRXJyb3IiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyIsImNvbnZlcnNhdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvbiIsImxlbmd0aCIsInZpc2liaWxpdHkiLCJtYXAiLCJjb252ZXJzYXRpb24iLCJpc0RpcmVjdCIsInBhcnRpY2lwYW50IiwiQXJyYXkiLCJpc0FycmF5IiwidXNlcnMiLCJmaW5kIiwidXNlciIsIl9rZXkiLCJwYXJ0aWNpcGFudFBlcnNvbmFJZCIsImZpbHRlciIsIl9jb252ZXJzYXRpb24iLCJpbmRleCIsImVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQiLCJjb252ZXJzYXRpb25JZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJzZXNzaW9uVXNlcklkIiwicGFydGljaXBhbnRVc2VySWQiLCJwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwidXNlckRvY0lkIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldERpcmVjdENvbnZlcnNhdGlvbiIsImZyb21JZCIsInRvSWQiLCJmb3JtYXRGcm9tSWQiLCJmb3JtYXRUb0lkIiwidXNlcklkcyIsInNvcnRlZFVzZXJJZHMiLCJqb2luIiwibmV4dCIsImFkZERpcmVjdENvbnZlcnNhdGlvbiIsImRhdGFiYXNlRXJyb3IiLCJpbnNlcnQiLCJ1cGRhdGVkQ29udmVyc2F0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJEYXRlIiwibm93IiwiaW5zZXJ0RWRnZVF1ZXJ5IiwiZ2V0Q29ubmVjdGlvblVzZXJMaXN0IiwiaW5jbHVkZUFsbCIsImZpbHRlcnMiLCJwdXNoIiwiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCJzZXNzaW9uSWQiLCJzZXNzaW9uRG9jSWQiLCJjb252ZXJzYXRpb25Eb2NJZCIsInVwZGF0ZUNvbnZlcnNhdGlvbiIsIm5hbWUiLCJmb3JtYXRDb252ZXJzYXRpb25JZCIsInVwZGF0ZSIsImFkZFVzZXJUb0NvbnZlcnNhdGlvbiIsImZvcm1hdFVzZXJJZCIsImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyw2QkFBNkI7QUFDckQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ2pFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBQ3JDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNuRSxTQUFRQyxPQUFPLFFBQU8sWUFBWTtBQUNsQyxTQUFRQywyQkFBMkIsRUFBRUMsMEJBQTBCLFFBQU8sZ0JBQWdCO0FBQ3RGLFNBQVFDLFdBQVcsUUFBTyxhQUFhO0FBZ0J2QyxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsNEJBQTRCWCxRQUFRO0FBRTFDLE1BQU1ZLHFDQUFxQyxPQUN6Q0MsU0FDQUMsWUFDQUM7SUFFQSxNQUFNLENBQUNDLFVBQVVDLE9BQU8sR0FBRyxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDM0NWLFlBQVlJLFNBQVM7WUFBQ08sUUFBUU47UUFBVTtRQUN4Q0wsWUFBWUksU0FBUztZQUFDTyxR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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL2Nsb25lJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCBzb3J0SWRzLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSwgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtnZXRVc2VyQnlJZH0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXQsIEVkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29udmVyc2F0aW9uT3B0aW9ucyxcbiAgQ29udmVyc2F0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uVXNlcnNQYXJhbXMsXG4gIERpcmVjdENvbnZlcnNhdGlvblBhcmFtcyxcbiAgVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xufSBmcm9tICcuLi90eXBlcy9jb252ZXJzYXRpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NvbnZlcnNhdGlvbnMnO1xuY29uc3QgaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0NvbnZlcnNhdGlvbicpO1xuXG5jb25zdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVXNlcklkOiBzdHJpbmcsXG4gIHRvVXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBbZnJvbVVzZXIsIHRvVXNlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZnJvbVVzZXJJZH0pLFxuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHRvVXNlcklkfSlcbiAgXSk7XG4gIGNvbnN0IGZyb21QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhmcm9tVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHRvUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcodG9Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighZnJvbVBlcnNvbmFJZCB8fCAhdG9QZXJzb25hSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCB0b1BlcnNvbmFJZCwgZnJvbVBlcnNvbmFJZCk7XG5cbiAgaWYoIXJlbGF0aW9uc2hpcC5pc0ZyaWVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uczogQ29udmVyc2F0aW9uVHlwZVtdID0gW11cbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY29udmVyc2F0aW9ucztcbiAgfVxuXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChjb252ZXJzYXRpb25zLm1hcChhc3luYyAoY29udmVyc2F0aW9uKSA9PiB7XG4gICAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSkpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgcGFydGljaXBhbnRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGFydGljaXBhbnRQZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBhcnRpY2lwYW50UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gY29udmVyc2F0aW9ucy5maWx0ZXIoKF9jb252ZXJzYXRpb24sIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbklkICYmICFjb252ZXJzYXRpb24/Ll9rZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBzZXNzaW9uVXNlcklkKVxuICAgIDogbnVsbDtcbiAgY29uc3QgcGFydGljaXBhbnRVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8udXNlcklkIHx8IHBhcnRpY2lwYW50Py5fa2V5IHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIXBhcnRpY2lwYW50VXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIHNlc3Npb25Vc2VySWQsIHBhcnRpY2lwYW50VXNlcklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7dXNlcklkfWA7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7dXNlckRvY0lkfSAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICBTT1JUIGMuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiB1Ll9pZCAhPSAke3VzZXJEb2NJZH1cbiAgICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIE1FUkdFKGMsIHt1c2Vyc30pXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4gZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMoY29udGV4dCwgY29udmVyc2F0aW9ucykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIGZvcm1hdEZyb21JZCwgZm9ybWF0VG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkRGlyZWN0Q29udmVyc2F0aW9uKGNvbnRleHQsIHtmcm9tSWQsIHRvSWQsIHRvVXNlcjogdXNlcn0pO1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG5cbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGlzRGlyZWN0OiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgYWRkSXRlbTxDb252ZXJzYXRpb25UeXBlPihjb250ZXh0LCAnY29udmVyc2F0aW9ucycsIGluc2VydCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb25Vc2VyTGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25CeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZlcnNhdGlvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIGlzRGlyZWN0LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWRcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXJUb0NvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LSR7Zm9ybWF0VXNlcklkfWApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sIm5hbWVzIjpbImNsb25lRGVlcCIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwiYXFsIiwibGl0ZXJhbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImdldExpbWl0Iiwic29ydElkcyIsInVzZURiIiwiYWRkSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZ2V0VXNlckJ5SWQiLCJldmVudENhdGVnb3J5IiwiaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiIsImVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAiLCJjb250ZXh0IiwiZnJvbVVzZXJJZCIsInRvVXNlcklkIiwiZnJvbVVzZXIiLCJ0b1VzZXIiLCJQcm9taXNlIiwiYWxsIiwidXNlcklkIiwiZnJvbVBlcnNvbmFJZCIsIlN0cmluZyIsInBlcnNvbmFJZCIsInRvUGVyc29uYUlkIiwiRXJyb3IiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyIsImNvbnZlcnNhdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvbiIsImxlbmd0aCIsInZpc2liaWxpdHkiLCJtYXAiLCJjb252ZXJzYXRpb24iLCJpc0RpcmVjdCIsInBhcnRpY2lwYW50IiwiQXJyYXkiLCJpc0FycmF5IiwidXNlcnMiLCJmaW5kIiwidXNlciIsIl9rZXkiLCJwYXJ0aWNpcGFudFBlcnNvbmFJZCIsImZpbHRlciIsIl9jb252ZXJzYXRpb24iLCJpbmRleCIsImVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQiLCJjb252ZXJzYXRpb25JZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJzZXNzaW9uVXNlcklkIiwicGFydGljaXBhbnRVc2VySWQiLCJwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwidXNlckRvY0lkIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldERpcmVjdENvbnZlcnNhdGlvbiIsImZyb21JZCIsInRvSWQiLCJmb3JtYXRGcm9tSWQiLCJmb3JtYXRUb0lkIiwidXNlcklkcyIsInNvcnRlZFVzZXJJZHMiLCJqb2luIiwibmV4dCIsImFkZERpcmVjdENvbnZlcnNhdGlvbiIsImRhdGFiYXNlRXJyb3IiLCJpbnNlcnQiLCJ1cGRhdGVkQ29udmVyc2F0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJEYXRlIiwibm93IiwiaW5zZXJ0RWRnZVF1ZXJ5IiwiZ2V0Q29ubmVjdGlvblVzZXJMaXN0IiwiaW5jbHVkZUFsbCIsImZpbHRlcnMiLCJwdXNoIiwiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCJzZXNzaW9uSWQiLCJzZXNzaW9uRG9jSWQiLCJjb252ZXJzYXRpb25Eb2NJZCIsInVwZGF0ZUNvbnZlcnNhdGlvbiIsIm5hbWUiLCJmb3JtYXRDb252ZXJzYXRpb25JZCIsInVwZGF0ZSIsImFkZFVzZXJUb0NvbnZlcnNhdGlvbiIsImZvcm1hdFVzZXJJZCIsImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyw2QkFBNkI7QUFDckQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ2pFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBQ3JDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNuRSxTQUFRQyxPQUFPLFFBQU8sWUFBWTtBQUNsQyxTQUFRQywyQkFBMkIsRUFBRUMsMEJBQTBCLFFBQU8sZ0JBQWdCO0FBQ3RGLFNBQVFDLFdBQVcsUUFBTyxhQUFhO0FBZ0J2QyxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsNEJBQTRCWCxRQUFRO0FBRTFDLE1BQU1ZLHFDQUFxQyxPQUN6Q0MsU0FDQUMsWUFDQUM7SUFFQSxNQUFNLENBQUNDLFVBQVVDLE9BQU8sR0FBRyxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDM0NWLFlBQVlJLFNBQVM7WUFBQ08sUUFBUU47UUFBVTtRQUN4Q0wsWUFB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
@@ -1,6 +1,8 @@
1
1
  import type { ApiContext } from '../types/auth.types.js';
2
- import type { CustomerNotificationType, CustomerOrderType, CrmCampaignInput, CrmCampaignType, CrmContactFilter, CrmFormSubmissionInput, CrmFormSubmissionType, MailingListType, ShopifyCustomerOrderInput, SupportTicketEventType, SupportTicketMessageType, SupportTicketStatus, SupportTicketTypeData } from '../types/crm.types.js';
2
+ import type { CustomerNotificationType, CustomerOrderType, CrmCampaignInput, CrmCampaignType, CrmContactFilter, CrmFormSubmissionInput, CrmFormSubmissionType, MailingListType, PublicSupportTicketFeed, PublicSupportTicketInput, ShopifyCustomerOrderInput, SupportTicketEventType, SupportTicketMessageType, SupportTicketStatus, SupportTicketTypeData } from '../types/crm.types.js';
3
3
  import type { UserType } from '../types/users.types.js';
4
+ declare const requireCrmAdmin: (context: ApiContext) => void;
5
+ export declare const requireCrmAdministrator: typeof requireCrmAdmin;
4
6
  export declare const submitCrmForm: (context: ApiContext, input: CrmFormSubmissionInput) => Promise<CrmFormSubmissionType>;
5
7
  export declare const getCrmFormSubmissions: (context: ApiContext) => Promise<CrmFormSubmissionType[]>;
6
8
  export declare const getCrmContacts: (context: ApiContext, filter?: CrmContactFilter) => Promise<UserType[]>;
@@ -19,14 +21,18 @@ export declare const getEligibleMailingUsers: (context: ApiContext, options?: {
19
21
  export declare const ingestShopifyCustomerOrder: (context: ApiContext, input: ShopifyCustomerOrderInput) => Promise<CustomerOrderType>;
20
22
  export declare const getCustomerOrdersByUser: (context: ApiContext, userId: string) => Promise<CustomerOrderType[]>;
21
23
  export declare const createSupportTicket: (context: ApiContext, input: Partial<SupportTicketTypeData>) => Promise<SupportTicketTypeData>;
24
+ export declare const submitPublicSupportTicket: (context: ApiContext, input: PublicSupportTicketInput) => Promise<SupportTicketTypeData>;
25
+ export declare const getPublicSupportTicket: (context: ApiContext, ticketNumber: string, emailAddress: string) => Promise<PublicSupportTicketFeed | null>;
22
26
  export declare const getSupportTickets: (context: ApiContext, filters?: {
23
27
  readonly status?: string;
24
28
  readonly userId?: string;
25
29
  }) => Promise<SupportTicketTypeData[]>;
26
30
  export declare const updateSupportTicketStatus: (context: ApiContext, supportTicketId: string, status: SupportTicketStatus, resolutionSummary?: string) => Promise<SupportTicketTypeData>;
31
+ export declare const updateSupportTicketProgress: (context: ApiContext, supportTicketId: string, status: SupportTicketStatus, details: string) => Promise<SupportTicketTypeData>;
27
32
  export declare const addSupportTicketMessage: (context: ApiContext, input: Partial<SupportTicketMessageType>) => Promise<SupportTicketMessageType>;
28
33
  export declare const getSupportTicketMessages: (context: ApiContext, supportTicketId: string) => Promise<SupportTicketMessageType[]>;
29
34
  export declare const addSupportTicketEvent: (context: ApiContext, input: Partial<SupportTicketEventType>) => Promise<SupportTicketEventType>;
30
35
  export declare const getSupportTicketEvents: (context: ApiContext, supportTicketId: string) => Promise<SupportTicketEventType[]>;
31
36
  export declare const createCustomerNotification: (context: ApiContext, input: Partial<CustomerNotificationType>) => Promise<CustomerNotificationType>;
32
37
  export declare const getCustomerNotificationsByUser: (context: ApiContext, userId: string) => Promise<CustomerNotificationType[]>;
38
+ export {};