@nlabs/reaktor 1.18.0 → 1.19.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 (273) hide show
  1. package/docs/GENERATION.md +38 -16
  2. package/lib/actions/alfredFaq.js +1 -1
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.js +1 -1
  5. package/lib/actions/connections.js +1 -1
  6. package/lib/actions/content.js +1 -1
  7. package/lib/actions/contentGeneration.d.ts +3 -0
  8. package/lib/actions/contentGeneration.js +62 -9
  9. package/lib/actions/contentGenerationErrors.js +1 -1
  10. package/lib/actions/conversations.js +1 -1
  11. package/lib/actions/crm.js +1 -1
  12. package/lib/actions/crud.js +1 -1
  13. package/lib/actions/databaseAccounts.js +1 -1
  14. package/lib/actions/databaseProvisioningLease.js +1 -1
  15. package/lib/actions/dynamodb.js +1 -1
  16. package/lib/actions/email.js +1 -1
  17. package/lib/actions/files.js +1 -1
  18. package/lib/actions/flags.js +1 -1
  19. package/lib/actions/geminiVideo.js +1 -1
  20. package/lib/actions/groups.js +1 -1
  21. package/lib/actions/higgsfield.js +1 -1
  22. package/lib/actions/imageGeneration.js +1 -1
  23. package/lib/actions/images.js +1 -1
  24. package/lib/actions/index.js +1 -1
  25. package/lib/actions/ios.js +1 -1
  26. package/lib/actions/locations.js +1 -1
  27. package/lib/actions/messages.js +1 -1
  28. package/lib/actions/notifications.js +1 -1
  29. package/lib/actions/ollamaGeneration.js +1 -1
  30. package/lib/actions/openaiResponseSession.js +1 -1
  31. package/lib/actions/payments.js +1 -1
  32. package/lib/actions/personas.js +1 -1
  33. package/lib/actions/phoneSupport.js +1 -1
  34. package/lib/actions/posts.js +1 -1
  35. package/lib/actions/query.js +1 -1
  36. package/lib/actions/reactions.js +1 -1
  37. package/lib/actions/rum.js +1 -1
  38. package/lib/actions/s3.js +1 -1
  39. package/lib/actions/search.js +1 -1
  40. package/lib/actions/sms.js +1 -1
  41. package/lib/actions/statistics.js +1 -1
  42. package/lib/actions/subscriptions.js +1 -1
  43. package/lib/actions/tags.js +1 -1
  44. package/lib/actions/users.js +1 -1
  45. package/lib/actions/videoGeneration.js +1 -1
  46. package/lib/actions/videos.js +1 -1
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +1 -1
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/geminiGenerationAdapter.js +1 -1
  51. package/lib/adapters/higgsfieldAdapter.js +1 -1
  52. package/lib/adapters/higgsfieldModelCatalog.js +1 -1
  53. package/lib/adapters/higgsfieldModels.js +1 -1
  54. package/lib/adapters/imageAdapter.js +1 -1
  55. package/lib/adapters/imageGenerationAdapter.js +1 -1
  56. package/lib/adapters/index.js +1 -1
  57. package/lib/adapters/messageAdapter.js +1 -1
  58. package/lib/adapters/postAdapter.js +1 -1
  59. package/lib/adapters/reaktorAdapter.js +1 -1
  60. package/lib/adapters/tagAdapter.js +1 -1
  61. package/lib/adapters/userAdapter.js +1 -1
  62. package/lib/assistant/core.js +1 -1
  63. package/lib/assistant/faq.js +1 -1
  64. package/lib/assistant/faqCore.js +1 -1
  65. package/lib/assistant/index.js +1 -1
  66. package/lib/assistant/service.js +1 -1
  67. package/lib/config.js +1 -1
  68. package/lib/constants/collections.js +1 -1
  69. package/lib/durableChat/conversations.js +1 -1
  70. package/lib/durableChat/errors.js +1 -1
  71. package/lib/durableChat/events.js +1 -1
  72. package/lib/durableChat/index.js +1 -1
  73. package/lib/durableChat/membership.js +1 -1
  74. package/lib/durableChat/messageTypes.js +1 -1
  75. package/lib/durableChat/messages.js +1 -1
  76. package/lib/durableChat/transaction.js +1 -1
  77. package/lib/durableChat/types.js +1 -1
  78. package/lib/handlers/graphqlHandler.js +1 -1
  79. package/lib/index.js +1 -1
  80. package/lib/lambdas/actions/websockets.js +1 -1
  81. package/lib/lambdas/authorizer.js +1 -1
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.js +1 -1
  85. package/lib/mocks/conversation.js +1 -1
  86. package/lib/mocks/file.js +1 -1
  87. package/lib/mocks/group.js +1 -1
  88. package/lib/mocks/image.js +1 -1
  89. package/lib/mocks/post.js +1 -1
  90. package/lib/mocks/tag.js +1 -1
  91. package/lib/mocks/user.js +1 -1
  92. package/lib/mocks/video.js +1 -1
  93. package/lib/mutations/analytics/analytics.js +1 -1
  94. package/lib/mutations/content/content.js +1 -1
  95. package/lib/mutations/crm/crm.js +1 -1
  96. package/lib/mutations/events/events.js +1 -1
  97. package/lib/mutations/flags/flags.js +1 -1
  98. package/lib/mutations/groups/groups.js +1 -1
  99. package/lib/mutations/higgsfield/higgsfield.js +1 -1
  100. package/lib/mutations/images/images.js +1 -1
  101. package/lib/mutations/index.js +1 -1
  102. package/lib/mutations/locations/locations.js +1 -1
  103. package/lib/mutations/messages/messages.js +1 -1
  104. package/lib/mutations/personas/personas.js +1 -1
  105. package/lib/mutations/posts/posts.js +1 -1
  106. package/lib/mutations/reactions/reactions.js +1 -1
  107. package/lib/mutations/rum/rum.js +1 -1
  108. package/lib/mutations/statistics/statistics.js +1 -1
  109. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  110. package/lib/mutations/tags/tags.js +1 -1
  111. package/lib/mutations/users/users.js +1 -1
  112. package/lib/mutations/videos/videos.js +1 -1
  113. package/lib/nativePush/graphql.js +1 -1
  114. package/lib/nativePush/index.js +1 -1
  115. package/lib/nativePush/migrations.js +1 -1
  116. package/lib/nativePush/nativePushContract.fixture.js +1 -1
  117. package/lib/nativePush/payload.js +1 -1
  118. package/lib/nativePush/repository.js +1 -1
  119. package/lib/nativePush/service.js +1 -1
  120. package/lib/nativePush/snsProvider.js +1 -1
  121. package/lib/nativePush/types.js +1 -1
  122. package/lib/objectTypes/analytics.js +1 -1
  123. package/lib/objectTypes/app.js +1 -1
  124. package/lib/objectTypes/bankAccount.js +1 -1
  125. package/lib/objectTypes/connection.js +1 -1
  126. package/lib/objectTypes/content.js +1 -1
  127. package/lib/objectTypes/contentGeneration.js +1 -1
  128. package/lib/objectTypes/conversation.js +1 -1
  129. package/lib/objectTypes/creditCard.js +1 -1
  130. package/lib/objectTypes/crm.js +1 -1
  131. package/lib/objectTypes/document.js +1 -1
  132. package/lib/objectTypes/error.js +1 -1
  133. package/lib/objectTypes/event.js +1 -1
  134. package/lib/objectTypes/external.js +1 -1
  135. package/lib/objectTypes/file.js +1 -1
  136. package/lib/objectTypes/filter.js +1 -1
  137. package/lib/objectTypes/flag.js +1 -1
  138. package/lib/objectTypes/group.js +1 -1
  139. package/lib/objectTypes/higgsfield.js +1 -1
  140. package/lib/objectTypes/iapSubscription.js +1 -1
  141. package/lib/objectTypes/image.js +1 -1
  142. package/lib/objectTypes/imageGeneration.js +1 -1
  143. package/lib/objectTypes/index.js +1 -1
  144. package/lib/objectTypes/location.js +1 -1
  145. package/lib/objectTypes/message.js +1 -1
  146. package/lib/objectTypes/passcode.js +1 -1
  147. package/lib/objectTypes/persona.js +1 -1
  148. package/lib/objectTypes/plan.js +1 -1
  149. package/lib/objectTypes/post.js +1 -1
  150. package/lib/objectTypes/query.js +1 -1
  151. package/lib/objectTypes/reaction.js +1 -1
  152. package/lib/objectTypes/relation.js +1 -1
  153. package/lib/objectTypes/rum.js +1 -1
  154. package/lib/objectTypes/search.js +1 -1
  155. package/lib/objectTypes/statistics.js +1 -1
  156. package/lib/objectTypes/subscription.js +1 -1
  157. package/lib/objectTypes/tag.js +1 -1
  158. package/lib/objectTypes/user.js +1 -1
  159. package/lib/objectTypes/video.js +1 -1
  160. package/lib/objectTypes/videoGeneration.js +1 -1
  161. package/lib/organizations/accountLifecycle.js +1 -1
  162. package/lib/organizations/authorization.js +1 -1
  163. package/lib/organizations/billing.js +1 -1
  164. package/lib/organizations/billingProvider.js +1 -1
  165. package/lib/organizations/billingUpdates.js +1 -1
  166. package/lib/organizations/index.js +1 -1
  167. package/lib/organizations/mail.js +1 -1
  168. package/lib/organizations/memberDirectory.js +1 -1
  169. package/lib/organizations/membership.js +1 -1
  170. package/lib/organizations/passwordRecovery.js +1 -1
  171. package/lib/organizations/plans.js +1 -1
  172. package/lib/organizations/providerPagination.js +1 -1
  173. package/lib/organizations/reconciliation.js +1 -1
  174. package/lib/organizations/signup.js +1 -1
  175. package/lib/organizations/store.js +1 -1
  176. package/lib/organizations/types.js +1 -1
  177. package/lib/organizations/verification.js +1 -1
  178. package/lib/queries/analytics/analytics.js +1 -1
  179. package/lib/queries/content/content.js +1 -1
  180. package/lib/queries/crm/crm.js +1 -1
  181. package/lib/queries/events/events.js +1 -1
  182. package/lib/queries/flags/flags.js +1 -1
  183. package/lib/queries/groups/groups.js +1 -1
  184. package/lib/queries/higgsfield/higgsfield.js +1 -1
  185. package/lib/queries/images/images.js +1 -1
  186. package/lib/queries/index.js +1 -1
  187. package/lib/queries/locations/locations.js +1 -1
  188. package/lib/queries/messages/messages.js +1 -1
  189. package/lib/queries/personas/personas.js +1 -1
  190. package/lib/queries/posts/posts.js +1 -1
  191. package/lib/queries/query/query.js +1 -1
  192. package/lib/queries/reactions/reactions.js +1 -1
  193. package/lib/queries/statistics/statistics.js +1 -1
  194. package/lib/queries/subscriptions/subscriptions.js +1 -1
  195. package/lib/queries/tags/tags.js +1 -1
  196. package/lib/queries/users/users.js +1 -1
  197. package/lib/queries/videos/videos.js +1 -1
  198. package/lib/templates/email/layout.js +1 -1
  199. package/lib/templates/email/passwordForgot.js +1 -1
  200. package/lib/templates/email/passwordRecovery.js +1 -1
  201. package/lib/templates/email/verifyEmail.js +1 -1
  202. package/lib/templates/email/welcome.js +1 -1
  203. package/lib/templates/sms/passwordForgot.js +1 -1
  204. package/lib/templates/sms/passwordRecovery.js +1 -1
  205. package/lib/templates/sms/verifyEmail.js +1 -1
  206. package/lib/templates/sms/verifyPhone.js +1 -1
  207. package/lib/templates/sms/welcome.js +1 -1
  208. package/lib/types/analytics.types.js +1 -1
  209. package/lib/types/apps.types.js +1 -1
  210. package/lib/types/arangodb.types.js +1 -1
  211. package/lib/types/auth.types.js +1 -1
  212. package/lib/types/connections.types.js +1 -1
  213. package/lib/types/content.types.js +1 -1
  214. package/lib/types/conversations.types.js +1 -1
  215. package/lib/types/crm.types.js +1 -1
  216. package/lib/types/databaseCredentials.types.js +1 -1
  217. package/lib/types/email.types.js +1 -1
  218. package/lib/types/error.types.js +1 -1
  219. package/lib/types/files.types.js +1 -1
  220. package/lib/types/flags.types.js +1 -1
  221. package/lib/types/google.types.js +1 -1
  222. package/lib/types/groups.types.js +1 -1
  223. package/lib/types/images.types.js +1 -1
  224. package/lib/types/index.js +1 -1
  225. package/lib/types/locations.types.js +1 -1
  226. package/lib/types/messages.types.js +1 -1
  227. package/lib/types/notifications.types.js +1 -1
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.js +1 -1
  230. package/lib/types/posts.types.js +1 -1
  231. package/lib/types/rum.types.js +1 -1
  232. package/lib/types/statistics.types.js +1 -1
  233. package/lib/types/tags.types.js +1 -1
  234. package/lib/types/users.types.js +1 -1
  235. package/lib/types/videos.types.js +1 -1
  236. package/lib/types/websockets.types.js +1 -1
  237. package/lib/upload.js +1 -1
  238. package/lib/utils/adapterUtils.js +1 -1
  239. package/lib/utils/analyticsUtils.js +1 -1
  240. package/lib/utils/appContext.js +1 -1
  241. package/lib/utils/aqlHelpers.js +1 -1
  242. package/lib/utils/arangodbUtils.js +1 -1
  243. package/lib/utils/authUtils.js +1 -1
  244. package/lib/utils/awsUtils.js +1 -1
  245. package/lib/utils/collectionRegistry.js +1 -1
  246. package/lib/utils/contextUtils.js +1 -1
  247. package/lib/utils/databaseCredentials.js +1 -1
  248. package/lib/utils/dbI18n.example.js +1 -1
  249. package/lib/utils/dbI18n.js +1 -1
  250. package/lib/utils/generationCallback.js +1 -1
  251. package/lib/utils/googleTranslate.js +1 -1
  252. package/lib/utils/graphqlUtils.js +1 -1
  253. package/lib/utils/imageUtils.js +1 -1
  254. package/lib/utils/index.js +1 -1
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.example.js +1 -1
  257. package/lib/utils/localeUtils.js +1 -1
  258. package/lib/utils/mediaAccess.js +1 -1
  259. package/lib/utils/middlewareUtils.js +1 -1
  260. package/lib/utils/nodeRealtime.js +1 -1
  261. package/lib/utils/opaqueToken.js +1 -1
  262. package/lib/utils/queryBuilder.js +1 -1
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/secretDatabase.js +1 -1
  265. package/lib/utils/sessionUtils.js +1 -1
  266. package/lib/utils/stripeUtils.js +1 -1
  267. package/lib/utils/stripeUtils.ts.bak +1 -1
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +1 -1
  270. package/lib/utils/translationQueue.example.js +1 -1
  271. package/lib/utils/translationQueue.js +1 -1
  272. package/lib/videoProcessing.js +1 -1
  273. package/package.json +1 -1
@@ -1195,4 +1195,4 @@ export const deleteVideo = async (context, videoId)=>{
1195
1195
  }
1196
1196
  };
1197
1197
 
1198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIENyZWF0ZUpvYkNvbW1hbmQsXG4gIERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCxcbiAgTWVkaWFDb252ZXJ0Q2xpZW50XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1tZWRpYWNvbnZlcnQnO1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb25zQnlVc2VyfSBmcm9tICcuLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5pbXBvcnQge3dzQ2xpZW50fSBmcm9tICcuLi9sYW1iZGFzL3V0aWxzL3dlYnNvY2tldC5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRSZWFjdGlvbkNvdW50UXVlcnksIGJ1aWxkVGFnc1F1ZXJ5fSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEF3c0NyZWRlbnRpYWxzfSBmcm9tICcuLi91dGlscy9hd3NVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtcbiAgczNBYm9ydE11bHRpcGFydFVwbG9hZCxcbiAgczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCxcbiAgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzRGVsZXRlLFxuICBzM0RlbGV0ZUxpc3QsXG4gIHMzR2V0QnVja2V0LFxuICBzM0dldFNpZ25lZFVybCxcbiAgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsLFxuICBzM1B1dFxufSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFZpZGVvRWRnZVR5cGUsXG4gIFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZSxcbiAgVmlkZW9PcHRpb25zLFxuICBWaWRlb1R5cGUsXG4gIFZpZGVvVXBsb2FkUGFydElucHV0LFxuICBWaWRlb1VwbG9hZFBhcnRVcmwsXG4gIFZpZGVvVXJsRGF0YVxufSBmcm9tICcuLi90eXBlcy92aWRlb3MudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3ZpZGVvcyc7XG5jb25zdCBoYXNNZWRpYUNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19NRURJQSk7XG5jb25zdCBERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuY29uc3QgVklERU9fUExBWUJBQ0tfRElSID0gJ3ZpZGVvLXBsYXliYWNrJztcblxubGV0IG1lZGlhQ29udmVydEVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydENsaWVudCA9IChlbmRwb2ludD86IHN0cmluZyk6IE1lZGlhQ29udmVydENsaWVudCA9PiBuZXcgTWVkaWFDb252ZXJ0Q2xpZW50KHtcbiAgY3JlZGVudGlhbHM6IGdldEF3c0NyZWRlbnRpYWxzKCksXG4gIGVuZHBvaW50LFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydEVuZHBvaW50ID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LmVuZHBvaW50Jyk7XG5cbiAgaWYobWVkaWFDb252ZXJ0RW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoKTtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCh7TWF4UmVzdWx0czogMX0pKTtcbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBlbmRwb2ludHMuRW5kcG9pbnRzPy5bMF0/LlVybDtcblxuICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG59O1xuXG5jb25zdCBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYocGFyc2VkRG9jSWQpIHtcbiAgICByZXR1cm4gW3BhcnNlZERvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke2l0ZW1LZXl9YCxcbiAgICBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtpdGVtS2V5fWBcbiAgXTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld1ZpZGVvID0gKFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxpc3Q6IEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+LFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICBjb25zdCBpc093bmVyID0gISFzZXNzaW9uVXNlcklkICYmICEhb3duZXJVc2VySWQgJiYgc2Vzc2lvblVzZXJJZCA9PT0gb3duZXJVc2VySWQ7XG5cbiAgaWYoaXNPd25lcikge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogdHJ1ZSxcbiAgICAgIGNhblZpZXdWaXA6IHRydWUsXG4gICAgICBpc093bmVyOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblZpZXdGcmllbmRzOiBmYWxzZSxcbiAgICAgIGNhblZpZXdWaXA6IGZhbHNlLFxuICAgICAgaXNPd25lcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gIGxldCBjYW5WaWV3VmlwID0gZmFsc2U7XG4gIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgY29uc3QgbWVkaWFJdGVtVHlwZSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgaWYobWVkaWFJdGVtVHlwZSA9PT0gQ09MTEVDVElPTlMuUEVSU09OQVMgJiYgbWVkaWFJdGVtS2V5KSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgY2FuVmlld1ZpcCA9IGF3YWl0IGhhc1N1YnNjcmlwdGlvblRvSXRlbShjb250ZXh0LCBtZWRpYUl0ZW1LZXksIENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FuVmlld0ZyaWVuZHMsXG4gICAgY2FuVmlld1ZpcCxcbiAgICBpc093bmVyOiBmYWxzZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmlkZW9PcHRpb25zID0gKG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtmcm9tID0gMCwgdG8gPSAzMCwgdHlwZSA9ICdkZWZhdWx0J30gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb09wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICBjb25zdCByZWFjdGlvblF1ZXJ5ID0gYnVpbGRSZWFjdGlvbkNvdW50UXVlcnkoZmllbGQucmVwbGFjZSgnQ291bnQnLCAnJyksICd2JywgJ3ZpZGVvcycpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocmVhY3Rpb25RdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChgJHtmaWVsZH06JHtmaWVsZH1gKTtcbiAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChGT1IgdmlkZW8sIHIgSU4gSU5CT1VORCB2Ll9pZCByZWFjdGlvbnMgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtcyBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWdzJzoge1xuICAgICAgICBjb25zdCB0YWdzUXVlcnkgPSBidWlsZFRhZ3NRdWVyeSgndicpO1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaCh0YWdzUXVlcnkpO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdi51c2VySWQgPT0gdS5fa2V5IExJTUlUIDEgUkVUVVJOIHUpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd1c2Vyczp1c2VycycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByaXZhY3knOiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9zQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjdXN0b21RdWVyaWVzID0gW1xuICAgIGBMRVQgdXNlciA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB1Ll9rZXkgPT0gZG9jLnVzZXJJZCBMSU1JVCAxIFJFVFVSTiB1KWBcbiAgXTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFZpZGVvVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAndmlkZW9zJyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWR9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gICAgfVxuICApLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9Db3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0NvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgdiBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHYuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgdi50eXBlID09IFwidmlkZW9cIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9zQnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogVmlkZW9PcHRpb25zID0ge31cbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgIExFVCB2ID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwodilcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIHYuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodiwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd2Jyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uVXNlcklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IGNhblZpZXdWaWRlbyh2aWRlbywgc2Vzc2lvblVzZXJJZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBWaWRlb09wdGlvbnNcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJ2aWRlb3NcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB2LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSBoYXNSZWFjdGlvblxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidmlkZW9zXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsIElOIElOQk9VTkQgdi5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IG1lZGlhID8gbWVkaWEuaXRlbUtleSA6IG51bGwsXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IG1lZGlhID8gbWVkaWEuaXRlbVR5cGUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uSWQpO1xuXG4gICAgaWYoYWNjZXNzLmlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25JZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW8nO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICByZXR1cm4gZ2V0SXRlbUJ5PFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHtfa2V5OiBmb3JtYXRWaWRlb0lkfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFVzZXJWaWRlb3MgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ3ZpZGVvcycpOiBzdHJpbmcgPT4ge1xuICBsZXQgZmlsZW5hbWUgPSB2aWRlb0lkO1xuXG4gIHN3aXRjaCh2aWRlb1R5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2Uvd2VicCc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYnBgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3dlYm0nOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJtYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3F1aWNrdGltZSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1vdmA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tcDRgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvRmlsZW5hbWUgPSAodmlkZW9JZDogc3RyaW5nLCB2aWRlb1R5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVuYW1lO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWRLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+XG4gIGdldFBhdGhVc2VyVmlkZW9zKHVzZXJJZCwgdmlkZW9JZCwgZmlsZVR5cGUsICd2aWRlb3MnKTtcblxuY29uc3Qgc2F2ZVZpZGVvVGh1bWJuYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHRodW1iQmFzZTY0OiBzdHJpbmcgPSAnJyxcbiAgdGh1bWJGaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXRodW1iQmFzZTY0IHx8ICF0aHVtYkJhc2U2NC5pbmNsdWRlcygnLCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0QmFzZTY0ID0gdGh1bWJCYXNlNjQuc3Vic3RyKHRodW1iQmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcblxuICBpZighYnVmZmVyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IHMzUHV0KHtcbiAgICBCb2R5OiBidWZmZXIsXG4gICAgQnVja2V0OiBudWxsLFxuICAgIENvbnRlbnRUeXBlOiB0aHVtYkZpbGVUeXBlLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCB0aHVtYkZpbGVUeXBlLCAndmlkZW8tdGh1bWJzJylcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBnZXRWaWRlb1VwbG9hZERvYyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIHZpZGVvSWQpO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighdmlkZW8gfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpICE9PSBzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlbztcbn07XG5cbmNvbnN0IGdldFZpZGVvUGFydFVybHMgPSBhc3luYyAoXG4gIGtleTogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW11cbik6IFByb21pc2U8VmlkZW9VcGxvYWRQYXJ0VXJsW10+ID0+IFByb21pc2UuYWxsKHBhcnROdW1iZXJzLm1hcChhc3luYyAocGFydE51bWJlcikgPT4gKHtcbiAgcGFydE51bWJlcixcbiAgdXJsOiBhd2FpdCBzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwoe1xuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBLZXk6IGtleSxcbiAgICBQYXJ0TnVtYmVyOiBwYXJ0TnVtYmVyLFxuICAgIFVwbG9hZElkOiB1cGxvYWRJZFxuICB9KVxufSkpKTtcblxuY29uc3QgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuXG4gIGlmKCFvd25lclVzZXJJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgZ2V0Q29ubmVjdGlvbnNCeVVzZXIob3duZXJVc2VySWQpLmNhdGNoKCgpID0+IFtdKTtcbiAgY29uc3QgY29ubmVjdGlvbklkcyA9IGNvbm5lY3Rpb25zXG4gICAgLm1hcCgoY29ubmVjdGlvbikgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbj8uY29ubmVjdGlvbklkIHx8IGNvbm5lY3Rpb24/LnNvY2tldElkIHx8ICcnLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoIWNvbm5lY3Rpb25JZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgd3NDbGllbnQuc2VuZChjb25uZWN0aW9uSWRzLCB7XG4gICAgYWN0aW9uOiAndmlkZW8ucHJvY2Vzc2luZy5jb21wbGV0ZWQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHZpZGVvXG4gICAgfVxuICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbn07XG5cbmNvbnN0IGdldFZpZGVvUGxheWJhY2tLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsICd2aWRlby9tcDQnLCBWSURFT19QTEFZQkFDS19ESVIpO1xuXG5jb25zdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlb1NvdXJjZU9iamVjdCc7XG4gIGNvbnN0IHNvdXJjZUtleSA9IFN0cmluZyh2aWRlbz8uc291cmNlS2V5IHx8IHZpZGVvPy51cGxvYWRLZXkgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGxheWJhY2tLZXkgPSBTdHJpbmcodmlkZW8/LnBsYXliYWNrS2V5IHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNvdXJjZUtleSB8fCBzb3VyY2VLZXkgPT09IHBsYXliYWNrS2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzM0RlbGV0ZSh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBLZXk6IHNvdXJjZUtleVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3NvdXJjZUtleSwgdmlkZW9JZDogdmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXl9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBzaG91bGRUcmFuc2NvZGVWaWRlbyA9ICh2aWRlbzogVmlkZW9UeXBlID0ge30pOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBTdHJpbmcodmlkZW8/LmZpbGVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmKCFmaWxlVHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuICFbXG4gICAgJ3ZpZGVvL21wNCcsXG4gICAgJ3ZpZGVvL3dlYm0nXG4gIF0uaW5jbHVkZXMoZmlsZVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2InO1xuICBjb25zdCByb2xlQXJuID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucm9sZUFybicpIHx8ICcnKTtcbiAgY29uc3QgYnVja2V0ID0gczNHZXRCdWNrZXQoKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0Jyk7XG4gIGNvbnN0IHZpZGVvSWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udmlkZW9JZCB8fCB2aWRlbz8uX2tleSB8fCAnJykpO1xuICBjb25zdCB1c2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKTtcblxuICBpZighcm9sZUFybiB8fCAhYnVja2V0IHx8ICF2aWRlb0lkIHx8ICF1c2VySWQgfHwgIXNvdXJjZUtleSkge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBbXG4gICAgICAgICAgIXJvbGVBcm4gPyAnbWlzc2luZ19tZWRpYWNvbnZlcnRfcm9sZV9hcm4nIDogJycsXG4gICAgICAgICAgIWJ1Y2tldCA/ICdtaXNzaW5nX3MzX2J1Y2tldCcgOiAnJyxcbiAgICAgICAgICAhdXNlcklkID8gJ21pc3NpbmdfdXNlcl9pZCcgOiAnJyxcbiAgICAgICAgICAhc291cmNlS2V5ID8gJ21pc3Npbmdfc291cmNlX2tleScgOiAnJ1xuICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsJyksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldE1lZGlhQ29udmVydENsaWVudChlbmRwb2ludCk7XG4gICAgY29uc3QgcXVldWUgPSBTdHJpbmcoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5xdWV1ZUFybicpIHx8ICcnKTtcbiAgICBjb25zdCBvdXRwdXREZXN0aW5hdGlvbiA9IGBzMzovLyR7YnVja2V0fS91c2Vycy8ke3VzZXJJZH0vJHtWSURFT19QTEFZQkFDS19ESVJ9L2A7XG4gICAgY29uc3Qgam9iID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUpvYkNvbW1hbmQoe1xuICAgICAgLi4uKHF1ZXVlID8ge1F1ZXVlOiBxdWV1ZX0gOiB7fSksXG4gICAgICBSb2xlOiByb2xlQXJuLFxuICAgICAgU2V0dGluZ3M6IHtcbiAgICAgICAgSW5wdXRzOiBbe1xuICAgICAgICAgIEF1ZGlvU2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAnQXVkaW8gU2VsZWN0b3IgMSc6IHtcbiAgICAgICAgICAgICAgRGVmYXVsdFNlbGVjdGlvbjogJ0RFRkFVTFQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBGaWxlSW5wdXQ6IGBzMzovLyR7YnVja2V0fS8ke3NvdXJjZUtleX1gLFxuICAgICAgICAgIFRpbWVjb2RlU291cmNlOiAnWkVST0JBU0VEJyxcbiAgICAgICAgICBWaWRlb1NlbGVjdG9yOiB7XG4gICAgICAgICAgICBSb3RhdGU6ICdBVVRPJ1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIE91dHB1dEdyb3VwczogW3tcbiAgICAgICAgICBOYW1lOiAnTVA0JyxcbiAgICAgICAgICBPdXRwdXRHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICBGaWxlR3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBEZXN0aW5hdGlvbjogb3V0cHV0RGVzdGluYXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUeXBlOiAnRklMRV9HUk9VUF9TRVRUSU5HUydcbiAgICAgICAgICB9LFxuICAgICAgICAgIE91dHB1dHM6IFt7XG4gICAgICAgICAgICBBdWRpb0Rlc2NyaXB0aW9uczogW3tcbiAgICAgICAgICAgICAgQXVkaW9Tb3VyY2VOYW1lOiAnQXVkaW8gU2VsZWN0b3IgMScsXG4gICAgICAgICAgICAgIENvZGVjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBBYWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgQml0cmF0ZTogMTI4MDAwLFxuICAgICAgICAgICAgICAgICAgQ29kaW5nTW9kZTogJ0NPRElOR19NT0RFXzJfMCcsXG4gICAgICAgICAgICAgICAgICBTYW1wbGVSYXRlOiA0ODAwMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29kZWM6ICdBQUMnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgQ29udGFpbmVyU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiAnTVA0JyxcbiAgICAgICAgICAgICAgTXA0U2V0dGluZ3M6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVmlkZW9EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQ29kZWM6ICdIXzI2NCcsXG4gICAgICAgICAgICAgICAgSDI2NFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICBNYXhCaXRyYXRlOiBOdW1iZXIoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5tYXhCaXRyYXRlJywgNTAwMDAwMCkpLFxuICAgICAgICAgICAgICAgICAgUmF0ZUNvbnRyb2xNb2RlOiAnUVZCUicsXG4gICAgICAgICAgICAgICAgICBTY2VuZUNoYW5nZURldGVjdDogJ1RSQU5TSVRJT05fREVURUNUSU9OJyxcbiAgICAgICAgICAgICAgICAgIFF1YWxpdHlUdW5pbmdMZXZlbDogJ1NJTkdMRV9QQVNTJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAgVXNlck1ldGFkYXRhOiB7XG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdmlkZW9JZFxuICAgICAgfVxuICAgIH0gYXMgYW55KSk7XG5cbiAgICBjb25zdCBqb2JJZCA9IFN0cmluZyhqb2I/LkpvYj8uSWQgfHwgJycpO1xuXG4gICAgaWYoam9iSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtZWRpYUNvbnZlcnRKb2JJZDogam9iSWQsXG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwbGF5YmFja0ZpbGVUeXBlOiAndmlkZW8vbXA0JyxcbiAgICAgICAgcGxheWJhY2tLZXk6IGdldFZpZGVvUGxheWJhY2tLZXkodXNlcklkLCB2aWRlb0lkKSxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCcsXG4gICAgICAgIHN0cmVhbVR5cGU6ICdwcm9ncmVzc2l2ZSdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYodmlkZW9JZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwcm9jZXNzaW5nRXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ21lZGlhY29udmVydF9qb2JfZmFpbGVkJyxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHVzZXJJZCwgdmlkZW9JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB7XG4gICAgaGxzS2V5ID0gJycsXG4gICAgcGxheWJhY2tGaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIHBsYXliYWNrS2V5ID0gJycsXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyA9ICdyZWFkeScsXG4gICAgc3RyZWFtVHlwZSA9ICdwcm9ncmVzc2l2ZSdcbiAgfToge1xuICAgIGhsc0tleT86IHN0cmluZztcbiAgICBwbGF5YmFja0ZpbGVUeXBlPzogc3RyaW5nO1xuICAgIHBsYXliYWNrS2V5Pzogc3RyaW5nO1xuICAgIHByb2Nlc3NpbmdTdGF0dXM/OiBzdHJpbmc7XG4gICAgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFZpZGVvID0gYXdhaXQgZ2V0VmlkZW8oY29udGV4dCwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IGZvcm1hdFBsYXliYWNrS2V5ID0gcGxheWJhY2tLZXkgfHwgZ2V0VmlkZW9QbGF5YmFja0tleShTdHJpbmcoY3VycmVudFZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkKTtcbiAgY29uc3Qgc291cmNlRGVsZXRlZCA9IHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeSdcbiAgICA/IGF3YWl0IGRlbGV0ZVZpZGVvU291cmNlT2JqZWN0KGNvbnRleHQsIHtcbiAgICAgIC4uLmN1cnJlbnRWaWRlbyxcbiAgICAgIHBsYXliYWNrS2V5OiBmb3JtYXRQbGF5YmFja0tleVxuICAgIH0gYXMgVmlkZW9UeXBlKVxuICAgIDogZmFsc2U7XG4gIGNvbnN0IHVwZGF0ZWRWaWRlbyA9IGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIC4uLihobHNLZXkgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwbGF5YmFja0ZpbGVUeXBlLFxuICAgIC4uLihmb3JtYXRQbGF5YmFja0tleSA/IHtwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXl9IDoge30pLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMsXG4gICAgLi4uKHNvdXJjZURlbGV0ZWQgPyB7c291cmNlS2V5OiAnJywgdXBsb2FkS2V5OiAnJ30gOiB7fSksXG4gICAgc3RyZWFtVHlwZVxuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuXG4gIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICBhd2FpdCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkVmlkZW87XG59O1xuXG5leHBvcnQgY29uc3QgZmFpbFZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nXG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaW1pdDogbnVtYmVyID0gMTBcbik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3F1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2FmZUxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKGxpbWl0IHx8IDEwKSwgNTApKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiBJTiB2aWRlb3NcbiAgICAgIEZJTFRFUiB2LnVwbG9hZFN0YXR1cyA9PSBcInVwbG9hZGVkXCJcbiAgICAgIEZJTFRFUiB2LnByb2Nlc3NpbmdTdGF0dXMgIT0gXCJyZWFkeVwiXG4gICAgICBGSUxURVIgdi5maWxlVHlwZSAhPSBcInZpZGVvL21wNFwiXG4gICAgICBGSUxURVIgIUhBUyh2LCBcIm1lZGlhQ29udmVydEpvYklkXCIpIHx8IHYubWVkaWFDb252ZXJ0Sm9iSWQgPT0gXCJcIlxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgIExJTUlUICR7c2FmZUxpbWl0fVxuICAgICAgUkVUVVJOIHZcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFZpZGVvVHlwZVtdKTtcbiAgICBjb25zdCBqb2JJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IoY29uc3QgdmlkZW8gb2YgbGlzdCkge1xuICAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB2aWRlbyk7XG5cbiAgICAgIGlmKGpvYklkKSB7XG4gICAgICAgIGpvYklkcy5wdXNoKGpvYklkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9iSWRzO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBWaWRlb1VybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ3ZpZGVvcycsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB2aWRlb0lkXG59OiBWaWRlb1VybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCF2aWRlb0lkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCB2aWRlb05hbWUgPSBnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3QgdmlkZW9VcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHt2aWRlb05hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9VcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGltYWdlRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvSWQsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBhbnkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGtleURpciA9IHZpZGVvRGlyIHx8IGltYWdlRGlyIHx8ICd2aWRlb3MnO1xuICBjb25zdCB2aWRlb0tleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2tleURpcn0vJHtnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbiAgICB9XG4gICAgY2FzZSAncHVibGljJzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHt2aWRlb0tleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvU2lnbmVkS2V5VXJsID0gYXN5bmMgKGtleTogc3RyaW5nID0gJycsIGJ1Y2tldD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHZpZGVvS2V5ID0gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCF2aWRlb0tleSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0JywgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHZpZGVvT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgS2V5OiBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJylcbiAgfTtcblxuICBhd2FpdCBzM1B1dCh2aWRlb09iaik7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZSxcbiAgICB2aWRlb0lkXG4gIH0gYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUgJiB7ZmlsZU5hbWU/OiBzdHJpbmc7IGZpbGVTaXplPzogbnVtYmVyOyBwYXJ0Q291bnQ/OiBudW1iZXJ9LFxuICBwYXJ0Q291bnQ6IG51bWJlciA9IDFcbik6IFByb21pc2U8VmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBmaWxlU2l6ZSxcbiAgICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHRodW1iQmFzZTY0ID0gJycsXG4gICAgdGh1bWJGaWxlVHlwZSA9ICdpbWFnZS9qcGVnJyxcbiAgICB0eXBlID0gJ3ZpZGVvJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCkgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9LSR7RGF0ZS5ub3coKX0tJHtTdHJpbmcodmlkZW8/LmZpbGVOYW1lIHx8ICcnKX1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGtleSA9IGdldFZpZGVvVXBsb2FkS2V5KHNlc3Npb25JZCwgZm9ybWF0VmlkZW9JZCwgZmlsZVR5cGUpO1xuICBjb25zdCBzYWZlUGFydENvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKHBhcnRDb3VudCB8fCB2aWRlbz8ucGFydENvdW50IHx8IDEpLCAxMDAwMCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBsb2FkID0gYXdhaXQgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCB8fCAnJyxcbiAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlIHx8ICcnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdmlkZW9JZDogZm9ybWF0VmlkZW9JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHVwbG9hZElkID0gU3RyaW5nKHVwbG9hZD8uVXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIXVwbG9hZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgdmlkZW8gdXBsb2FkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaGFzVGh1bWIgPSBhd2FpdCBzYXZlVmlkZW9UaHVtYm5haWwoY29udGV4dCwgZm9ybWF0VmlkZW9JZCwgdGh1bWJCYXNlNjQsIHRodW1iRmlsZVR5cGUpO1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogZm9ybWF0VmlkZW9JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGZpbGVTaXplLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtb2RpZmllZDogbm93LFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdwZW5kaW5nX3VwbG9hZCcsXG4gICAgICBzb3VyY2VLZXk6IGtleSxcbiAgICAgIC4uLihoYXNUaHVtYiA/IHt0aHVtYkZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIHR5cGUsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHVwbG9hZEtleToga2V5LFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkaW5nJyxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG4gICAgY29uc3QgbmV3VmlkZW8gPSBhd2FpdCBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydCk7XG5cbiAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgIGF3YWl0IGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnROdW1iZXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBzYWZlUGFydENvdW50fSwgKF92YWx1ZSwgaW5kZXgpID0+IGluZGV4ICsgMSk7XG4gICAgY29uc3QgcGFydFVybHMgPSBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgdXBsb2FkSWQsIHBhcnROdW1iZXJzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWNrZXQ6IHMzR2V0QnVja2V0KCksXG4gICAgICBrZXksXG4gICAgICBwYXJ0U2l6ZTogREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFLFxuICAgICAgcGFydFVybHMsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHZpZGVvOiBuZXdWaWRlbyxcbiAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICB9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb011bHRpcGFydFVwbG9hZFR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnROdW1iZXJzOiBudW1iZXJbXSA9IFtdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIHBhcnNlSWQodmlkZW9JZCksIHZpZGVvPy5maWxlVHlwZSkpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG5cbiAgICBpZigha2V5IHx8ICFmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgZm9ybWF0VXBsb2FkSWQsIHBhcnROdW1iZXJzLm1hcCgocGFydE51bWJlcikgPT4gTnVtYmVyKHBhcnROdW1iZXIpKS5maWx0ZXIoQm9vbGVhbikpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb1VwbG9hZFBhcnRVcmxbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydHM6IFZpZGVvVXBsb2FkUGFydElucHV0W10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCB1cGxvYWRQYXJ0cyA9IHBhcnRzXG4gICAgICAubWFwKChwYXJ0KSA9PiAoe1xuICAgICAgICBFVGFnOiBTdHJpbmcocGFydD8uZXRhZyB8fCAnJykudHJpbSgpLFxuICAgICAgICBQYXJ0TnVtYmVyOiBOdW1iZXIocGFydD8ucGFydE51bWJlciB8fCAwKVxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LkVUYWcgJiYgcGFydC5QYXJ0TnVtYmVyID4gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLlBhcnROdW1iZXIgLSBiLlBhcnROdW1iZXIpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQgfHwgIXVwbG9hZFBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHZpZGVvIHVwbG9hZCBkYXRhLicpO1xuICAgIH1cblxuICAgIGF3YWl0IHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNdWx0aXBhcnRVcGxvYWQ6IHtcbiAgICAgICAgUGFydHM6IHVwbG9hZFBhcnRzXG4gICAgICB9LFxuICAgICAgVXBsb2FkSWQ6IGZvcm1hdFVwbG9hZElkXG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgLi4uKHNob3VsZFRyYW5zY29kZVZpZGVvKHZpZGVvKVxuICAgICAgICA/IHtwcm9jZXNzaW5nU3RhdHVzOiAncXVldWVkJ31cbiAgICAgICAgOiB7XG4gICAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogdmlkZW8/LmZpbGVUeXBlIHx8ICd2aWRlby9tcDQnLFxuICAgICAgICAgIHBsYXliYWNrS2V5OiBrZXksXG4gICAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3JlYWR5JyxcbiAgICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICAgIH0pLFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkZWQnXG4gICAgfSk7XG5cbiAgICBpZihzaG91bGRUcmFuc2NvZGVWaWRlbyh1cGRhdGVkVmlkZW8pKSB7XG4gICAgICB2b2lkIGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2Fib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcblxuICAgIGlmKGtleSAmJiBmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgYXdhaXQgczNBYm9ydE11bHRpcGFydFVwbG9hZCh7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgS2V5OiBrZXksXG4gICAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBwYXJzZUlkKHZpZGVvSWQpLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ2Fib3J0ZWQnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVmlkZW8gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBwcml2YWN5LCB0eXBlID0gJ3ZpZGVvJywgcHJvdmlkZXIsIGV4dGVybmFsSWQsIGV4dGVybmFsVXJsfSA9IHZpZGVvO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IHZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gc2F2ZVZpZGVvKGNvbnRleHQsIHZpZGVvSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigoc2F2ZWQ6IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICAgIC4uLnNhdmVkLFxuICAgICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3ksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVmlkZW9FZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7dmlkZW9JZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSB2aWRlb0VkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLXZpZGVvLSR7dmlkZW9JZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYHZpZGVvcy8ke2Zvcm1hdFZpZGVvSWR9YDtcblxuICBjb25zdCBlZGdlOiBWaWRlb0VkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ3ZpZGVvJ1xuICB9IGFzIFZpZGVvRWRnZVR5cGU7XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogdmlkZW9CdWZmZXIsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBleHRlcm5hbElkLFxuICAgIGV4dGVybmFsVXJsLFxuICAgIGZpbGVUeXBlLFxuICAgIGhsc0tleSxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICBwbGF5YmFja0tleSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIHByaXZhY3ksXG4gICAgcHJvdmlkZXIsXG4gICAgc3RyZWFtVHlwZSxcbiAgICB0eXBlLFxuICAgIHVwbG9hZFN0YXR1cyxcbiAgICB1cmwgPSAnJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcblxuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gdmlkZW9JZCB8fCBjcmVhdGVIYXNoKGB2aWRlby0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG5cbiAgaWYodHlwZSA9PT0gJ2V4dGVybmFsJyAmJiAoZXh0ZXJuYWxJZCB8fCBleHRlcm5hbFVybCkpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBpZihiYXNlNjQgfHwgdmlkZW9CdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSB2aWRlb0J1ZmZlciBhcyBCdWZmZXI7XG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVkRmlsZVR5cGUgPSBmaWxlVHlwZTtcbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCB2UGFyYW1zOiBWaWRlb1R5cGUgPSB7YnVmZmVyLCBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlLCB1c2VySWQ6IHNlc3Npb25JZCwgdmlkZW9JZDogZm9ybWF0VmlkZW9JZH0gYXMgVmlkZW9UeXBlO1xuICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB7Li4udlBhcmFtcywgZGVzY3JpcHRpb24sIHByaXZhY3l9LCBzM09wdGlvbnMpXG4gICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklNQUdFX1JFUVVFU1QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZGVzY3JpcHRpb24sIGZpbGVUeXBlOiBjb250ZW50VHlwZSwgcHJpdmFjeSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICAgICAgcmV0dXJuIGFkZFZpZGVvKGNvbnRleHQsIHZQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodmlkZW9JZCAhPT0gJycpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIC4uLihobHNLZXkgIT09IHVuZGVmaW5lZCA/IHtobHNLZXl9IDoge30pLFxuICAgICAgLi4uKHBsYXliYWNrRmlsZVR5cGUgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0ZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0tleSAhPT0gdW5kZWZpbmVkID8ge3BsYXliYWNrS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7cHJvY2Vzc2luZ1N0YXR1c30gOiB7fSksXG4gICAgICAuLi4ocHJpdmFjeSAhPT0gdW5kZWZpbmVkID8ge3ByaXZhY3l9IDoge30pLFxuICAgICAgLi4uKHN0cmVhbVR5cGUgIT09IHVuZGVmaW5lZCA/IHtzdHJlYW1UeXBlfSA6IHt9KSxcbiAgICAgIC4uLih1cGxvYWRTdGF0dXMgIT09IHVuZGVmaW5lZCA/IHt1cGxvYWRTdGF0dXN9IDoge30pXG4gICAgfTtcbiAgICByZXR1cm4gdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB1cGRhdGUpXG4gICAgICAudGhlbigodXBkYXRlZFZpZGVvKSA9PiB7XG4gICAgICAgIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVZpZGVvID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBkZWxldGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUEsIEVER0VTLkhBU19SRUFDVElPTl0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKHZpZGVvKSB7XG4gICAgICBjb25zdCB7X2tleTogdktleSwgZmlsZVR5cGUsIGhsc0tleSwgcGxheWJhY2tLZXksIHNvdXJjZUtleSwgdGh1bWJGaWxlVHlwZSwgdXBsb2FkS2V5fSA9IHZpZGVvO1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgc291cmNlS2V5LFxuICAgICAgICB1cGxvYWRLZXksXG4gICAgICAgIHBsYXliYWNrS2V5LFxuICAgICAgICBobHNLZXksXG4gICAgICAgIGB1c2Vycy8ke3Nlc3Npb25JZH0vdmlkZW9zLyR7dktleX0ubXA0YCxcbiAgICAgICAgZmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIGZpbGVUeXBlLCAndmlkZW9zJykgOiAnJyxcbiAgICAgICAgdGh1bWJGaWxlVHlwZSA/IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdktleSwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpIDogJydcbiAgICAgIF1cbiAgICAgICAgLm1hcCgoa2V5KSA9PiBTdHJpbmcoa2V5IHx8ICcnKS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmZpbHRlcigoa2V5LCBpbmRleCwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGtleSkgPT09IGluZGV4KTtcbiAgICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBrZXlzLm1hcCgoS2V5KSA9PiAoe0tleX0pKSxcbiAgICAgICAgICBRdWlldDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gdmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQ3JlYXRlSm9iQ29tbWFuZCIsIkRlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCIsIk1lZGlhQ29udmVydENsaWVudCIsImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiZ2V0Q29ubmVjdGlvbnNCeVVzZXIiLCJ3c0NsaWVudCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJnZXREb2NJZCIsImdldExpbWl0IiwidXNlRGIiLCJnZXRBd3NDcmVkZW50aWFscyIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzQWJvcnRNdWx0aXBhcnRVcGxvYWQiLCJzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQiLCJzM0RlbGV0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0QnVja2V0IiwiczNHZXRTaWduZWRVcmwiLCJzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUiLCJWSURFT19QTEFZQkFDS19ESVIiLCJtZWRpYUNvbnZlcnRFbmRwb2ludCIsImdldE1lZGlhQ29udmVydENsaWVudCIsImVuZHBvaW50IiwiY3JlZGVudGlhbHMiLCJyZWdpb24iLCJnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCIsImNsaWVudCIsImVuZHBvaW50cyIsInNlbmQiLCJNYXhSZXN1bHRzIiwiRW5kcG9pbnRzIiwiVXJsIiwiZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMiLCJpdGVtSWQiLCJwYXJzZWREb2NJZCIsIml0ZW1LZXkiLCJVU0VSUyIsIlBFUlNPTkFTIiwibm9ybWFsaXplVmlkZW9Qcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdWaWRlbyIsInZpZGVvIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInJlc29sdmVWaWRlb1ZpZXdlckFjY2VzcyIsImNvbnRleHQiLCJsaXN0Iiwic2Vzc2lvblVzZXJJZCIsIm93bmVyVXNlcklkIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwicGFyc2VWaWRlb09wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwidHlwZSIsImxpbWl0IiwiZ2V0VmlkZW9PcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwicmVhY3Rpb25RdWVyeSIsInJlcGxhY2UiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJ0YWdzUXVlcnkiLCJnZXRWaWRlb3NCeVVzZXIiLCJhY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJjdXN0b21RdWVyaWVzIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbU9iamVjdHMiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0VmlkZW9Db3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRWaWRlb3NCeUl0ZW0iLCJzZXNzaW9uIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwiYWxsIiwiZmlsdGVyIiwiZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJzZXNzaW9uSWQiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJtYXAiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJnZXRWaWRlbyIsInZpZGVvSWQiLCJmb3JtYXRWaWRlb0lkIiwiX2tleSIsImdldFBhdGhVc2VyVmlkZW9zIiwidmlkZW9UeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRWaWRlb0ZpbGVuYW1lIiwiZ2V0VmlkZW9VcGxvYWRLZXkiLCJmaWxlVHlwZSIsInNhdmVWaWRlb1RodW1ibmFpbCIsInRodW1iQmFzZTY0IiwidGh1bWJGaWxlVHlwZSIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJidWZmZXIiLCJCdWZmZXIiLCJCb2R5IiwiQnVja2V0IiwiQ29udGVudFR5cGUiLCJLZXkiLCJnZXRWaWRlb1VwbG9hZERvYyIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImdldFZpZGVvUGFydFVybHMiLCJrZXkiLCJ1cGxvYWRJZCIsInBhcnROdW1iZXJzIiwiUHJvbWlzZSIsInBhcnROdW1iZXIiLCJ1cmwiLCJQYXJ0TnVtYmVyIiwiVXBsb2FkSWQiLCJlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb25JZHMiLCJjb25uZWN0aW9uIiwiY29ubmVjdGlvbklkIiwic29ja2V0SWQiLCJCb29sZWFuIiwiaW5kZXgiLCJkYXRhIiwiZ2V0VmlkZW9QbGF5YmFja0tleSIsImRlbGV0ZVZpZGVvU291cmNlT2JqZWN0Iiwic291cmNlS2V5IiwidXBsb2FkS2V5IiwicGxheWJhY2tLZXkiLCJzaG91bGRUcmFuc2NvZGVWaWRlbyIsImNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iIiwicm9sZUFybiIsImJ1Y2tldCIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsInByb2Nlc3NpbmdFcnJvciIsInByb2Nlc3NpbmdTdGF0dXMiLCJxdWV1ZSIsIm91dHB1dERlc3RpbmF0aW9uIiwiam9iIiwiUXVldWUiLCJSb2xlIiwiU2V0dGluZ3MiLCJJbnB1dHMiLCJBdWRpb1NlbGVjdG9ycyIsIkRlZmF1bHRTZWxlY3Rpb24iLCJGaWxlSW5wdXQiLCJUaW1lY29kZVNvdXJjZSIsIlZpZGVvU2VsZWN0b3IiLCJSb3RhdGUiLCJPdXRwdXRHcm91cHMiLCJOYW1lIiwiT3V0cHV0R3JvdXBTZXR0aW5ncyIsIkZpbGVHcm91cFNldHRpbmdzIiwiRGVzdGluYXRpb24iLCJUeXBlIiwiT3V0cHV0cyIsIkF1ZGlvRGVzY3JpcHRpb25zIiwiQXVkaW9Tb3VyY2VOYW1lIiwiQ29kZWNTZXR0aW5ncyIsIkFhY1NldHRpbmdzIiwiQml0cmF0ZSIsIkNvZGluZ01vZGUiLCJTYW1wbGVSYXRlIiwiQ29kZWMiLCJDb250YWluZXJTZXR0aW5ncyIsIkNvbnRhaW5lciIsIk1wNFNldHRpbmdzIiwiVmlkZW9EZXNjcmlwdGlvbiIsIkgyNjRTZXR0aW5ncyIsIk1heEJpdHJhdGUiLCJOdW1iZXIiLCJSYXRlQ29udHJvbE1vZGUiLCJTY2VuZUNoYW5nZURldGVjdCIsIlF1YWxpdHlUdW5pbmdMZXZlbCIsIlVzZXJNZXRhZGF0YSIsImpvYklkIiwiSm9iIiwiSWQiLCJtZWRpYUNvbnZlcnRKb2JJZCIsInBsYXliYWNrRmlsZVR5cGUiLCJzdHJlYW1UeXBlIiwibWVzc2FnZSIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiaGxzS2V5IiwiY3VycmVudFZpZGVvIiwiZm9ybWF0UGxheWJhY2tLZXkiLCJzb3VyY2VEZWxldGVkIiwidXBkYXRlZFZpZGVvIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsInNhZmVMaW1pdCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJqb2JJZHMiLCJnZXRBcHBWaWRlb1VybCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwidmlkZW9OYW1lIiwidmlkZW9VcmwiLCJnZXRWaWRlb1VybCIsImltYWdlRGlyIiwidmlkZW9EaXIiLCJ1cmxUeXBlIiwia2V5RGlyIiwidmlkZW9LZXkiLCJkZWZhdWx0QnVja2V0IiwiRXhwaXJlcyIsImdldFZpZGVvU2lnbmVkS2V5VXJsIiwic2F2ZVZpZGVvIiwiczNPcHRpb25zIiwidmlkZW9PYmoiLCJmaWxlU2l6ZSIsImNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydENvdW50IiwiZGVzY3JpcHRpb24iLCJpdGVtVHlwZSIsImZpbGVOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZm9ybWF0SXRlbVR5cGUiLCJzYWZlUGFydENvdW50IiwidXBsb2FkIiwiTWV0YWRhdGEiLCJoYXNUaHVtYiIsImluc2VydCIsImFkZGVkIiwidXBsb2FkU3RhdHVzIiwibmV3VmlkZW8iLCJ2aWRlb0VkZ2UiLCJhZGRWaWRlb0VkZ2UiLCJBcnJheSIsIl92YWx1ZSIsInBhcnRVcmxzIiwicGFydFNpemUiLCJnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzIiwiZm9ybWF0VXBsb2FkSWQiLCJjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydHMiLCJ1cGxvYWRQYXJ0cyIsInBhcnQiLCJFVGFnIiwiZXRhZyIsImEiLCJiIiwiTXVsdGlwYXJ0VXBsb2FkIiwiUGFydHMiLCJhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwiYWRkVmlkZW8iLCJwcm92aWRlciIsImV4dGVybmFsSWQiLCJleHRlcm5hbFVybCIsInNhdmVkIiwiZWRnZUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY29sbGVjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlVmlkZW8iLCJiYXNlNjQiLCJ2aWRlb0J1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJ2UGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsInVuZGVmaW5lZCIsImRlbGV0ZVZpZGVvIiwiY2FzY2FkZSIsIkhBU19SRUFDVElPTiIsIm93bmVyc2hpcCIsInZLZXkiLCJrZXlzIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMsa0JBQWtCLFFBQ2IsK0JBQStCO0FBRXRDLFNBQVFDLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxX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
1198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIENyZWF0ZUpvYkNvbW1hbmQsXG4gIERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCxcbiAgTWVkaWFDb252ZXJ0Q2xpZW50XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1tZWRpYWNvbnZlcnQnO1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb25zQnlVc2VyfSBmcm9tICcuLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5pbXBvcnQge3dzQ2xpZW50fSBmcm9tICcuLi9sYW1iZGFzL3V0aWxzL3dlYnNvY2tldC5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRSZWFjdGlvbkNvdW50UXVlcnksIGJ1aWxkVGFnc1F1ZXJ5fSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEF3c0NyZWRlbnRpYWxzfSBmcm9tICcuLi91dGlscy9hd3NVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtcbiAgczNBYm9ydE11bHRpcGFydFVwbG9hZCxcbiAgczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCxcbiAgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzRGVsZXRlLFxuICBzM0RlbGV0ZUxpc3QsXG4gIHMzR2V0QnVja2V0LFxuICBzM0dldFNpZ25lZFVybCxcbiAgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsLFxuICBzM1B1dFxufSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFZpZGVvRWRnZVR5cGUsXG4gIFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZSxcbiAgVmlkZW9PcHRpb25zLFxuICBWaWRlb1R5cGUsXG4gIFZpZGVvVXBsb2FkUGFydElucHV0LFxuICBWaWRlb1VwbG9hZFBhcnRVcmwsXG4gIFZpZGVvVXJsRGF0YVxufSBmcm9tICcuLi90eXBlcy92aWRlb3MudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3ZpZGVvcyc7XG5jb25zdCBoYXNNZWRpYUNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19NRURJQSk7XG5jb25zdCBERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuY29uc3QgVklERU9fUExBWUJBQ0tfRElSID0gJ3ZpZGVvLXBsYXliYWNrJztcblxubGV0IG1lZGlhQ29udmVydEVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydENsaWVudCA9IChlbmRwb2ludD86IHN0cmluZyk6IE1lZGlhQ29udmVydENsaWVudCA9PiBuZXcgTWVkaWFDb252ZXJ0Q2xpZW50KHtcbiAgY3JlZGVudGlhbHM6IGdldEF3c0NyZWRlbnRpYWxzKCksXG4gIGVuZHBvaW50LFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydEVuZHBvaW50ID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LmVuZHBvaW50Jyk7XG5cbiAgaWYobWVkaWFDb252ZXJ0RW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoKTtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCh7TWF4UmVzdWx0czogMX0pKTtcbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBlbmRwb2ludHMuRW5kcG9pbnRzPy5bMF0/LlVybDtcblxuICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG59O1xuXG5jb25zdCBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYocGFyc2VkRG9jSWQpIHtcbiAgICByZXR1cm4gW3BhcnNlZERvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke2l0ZW1LZXl9YCxcbiAgICBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtpdGVtS2V5fWBcbiAgXTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld1ZpZGVvID0gKFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxpc3Q6IEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+LFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICBjb25zdCBpc093bmVyID0gISFzZXNzaW9uVXNlcklkICYmICEhb3duZXJVc2VySWQgJiYgc2Vzc2lvblVzZXJJZCA9PT0gb3duZXJVc2VySWQ7XG5cbiAgaWYoaXNPd25lcikge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogdHJ1ZSxcbiAgICAgIGNhblZpZXdWaXA6IHRydWUsXG4gICAgICBpc093bmVyOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblZpZXdGcmllbmRzOiBmYWxzZSxcbiAgICAgIGNhblZpZXdWaXA6IGZhbHNlLFxuICAgICAgaXNPd25lcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gIGxldCBjYW5WaWV3VmlwID0gZmFsc2U7XG4gIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgY29uc3QgbWVkaWFJdGVtVHlwZSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgaWYobWVkaWFJdGVtVHlwZSA9PT0gQ09MTEVDVElPTlMuUEVSU09OQVMgJiYgbWVkaWFJdGVtS2V5KSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgY2FuVmlld1ZpcCA9IGF3YWl0IGhhc1N1YnNjcmlwdGlvblRvSXRlbShjb250ZXh0LCBtZWRpYUl0ZW1LZXksIENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FuVmlld0ZyaWVuZHMsXG4gICAgY2FuVmlld1ZpcCxcbiAgICBpc093bmVyOiBmYWxzZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmlkZW9PcHRpb25zID0gKG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtmcm9tID0gMCwgdG8gPSAzMCwgdHlwZSA9ICdkZWZhdWx0J30gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb09wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICBjb25zdCByZWFjdGlvblF1ZXJ5ID0gYnVpbGRSZWFjdGlvbkNvdW50UXVlcnkoZmllbGQucmVwbGFjZSgnQ291bnQnLCAnJyksICd2JywgJ3ZpZGVvcycpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocmVhY3Rpb25RdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChgJHtmaWVsZH06JHtmaWVsZH1gKTtcbiAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChGT1IgdmlkZW8sIHIgSU4gSU5CT1VORCB2Ll9pZCByZWFjdGlvbnMgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtcyBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWdzJzoge1xuICAgICAgICBjb25zdCB0YWdzUXVlcnkgPSBidWlsZFRhZ3NRdWVyeSgndicpO1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaCh0YWdzUXVlcnkpO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdi51c2VySWQgPT0gdS5fa2V5IExJTUlUIDEgUkVUVVJOIHUpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd1c2Vyczp1c2VycycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByaXZhY3knOiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9zQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjdXN0b21RdWVyaWVzID0gW1xuICAgIGBMRVQgdXNlciA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB1Ll9rZXkgPT0gZG9jLnVzZXJJZCBMSU1JVCAxIFJFVFVSTiB1KWBcbiAgXTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFZpZGVvVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAndmlkZW9zJyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWR9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gICAgfVxuICApLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9Db3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0NvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgdiBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHYuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgdi50eXBlID09IFwidmlkZW9cIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9zQnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogVmlkZW9PcHRpb25zID0ge31cbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgIExFVCB2ID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwodilcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIHYuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodiwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd2Jyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uVXNlcklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IGNhblZpZXdWaWRlbyh2aWRlbywgc2Vzc2lvblVzZXJJZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBWaWRlb09wdGlvbnNcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJ2aWRlb3NcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB2LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSBoYXNSZWFjdGlvblxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidmlkZW9zXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsIElOIElOQk9VTkQgdi5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IG1lZGlhID8gbWVkaWEuaXRlbUtleSA6IG51bGwsXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IG1lZGlhID8gbWVkaWEuaXRlbVR5cGUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uSWQpO1xuXG4gICAgaWYoYWNjZXNzLmlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25JZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW8nO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICByZXR1cm4gZ2V0SXRlbUJ5PFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHtfa2V5OiBmb3JtYXRWaWRlb0lkfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFVzZXJWaWRlb3MgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ3ZpZGVvcycpOiBzdHJpbmcgPT4ge1xuICBsZXQgZmlsZW5hbWUgPSB2aWRlb0lkO1xuXG4gIHN3aXRjaCh2aWRlb1R5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2Uvd2VicCc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYnBgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3dlYm0nOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJtYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3F1aWNrdGltZSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1vdmA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tcDRgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvRmlsZW5hbWUgPSAodmlkZW9JZDogc3RyaW5nLCB2aWRlb1R5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVuYW1lO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWRLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+XG4gIGdldFBhdGhVc2VyVmlkZW9zKHVzZXJJZCwgdmlkZW9JZCwgZmlsZVR5cGUsICd2aWRlb3MnKTtcblxuY29uc3Qgc2F2ZVZpZGVvVGh1bWJuYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHRodW1iQmFzZTY0OiBzdHJpbmcgPSAnJyxcbiAgdGh1bWJGaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXRodW1iQmFzZTY0IHx8ICF0aHVtYkJhc2U2NC5pbmNsdWRlcygnLCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0QmFzZTY0ID0gdGh1bWJCYXNlNjQuc3Vic3RyKHRodW1iQmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcblxuICBpZighYnVmZmVyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IHMzUHV0KHtcbiAgICBCb2R5OiBidWZmZXIsXG4gICAgQnVja2V0OiBudWxsLFxuICAgIENvbnRlbnRUeXBlOiB0aHVtYkZpbGVUeXBlLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCB0aHVtYkZpbGVUeXBlLCAndmlkZW8tdGh1bWJzJylcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBnZXRWaWRlb1VwbG9hZERvYyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIHZpZGVvSWQpO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighdmlkZW8gfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpICE9PSBzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlbztcbn07XG5cbmNvbnN0IGdldFZpZGVvUGFydFVybHMgPSBhc3luYyAoXG4gIGtleTogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW11cbik6IFByb21pc2U8VmlkZW9VcGxvYWRQYXJ0VXJsW10+ID0+IFByb21pc2UuYWxsKHBhcnROdW1iZXJzLm1hcChhc3luYyAocGFydE51bWJlcikgPT4gKHtcbiAgcGFydE51bWJlcixcbiAgdXJsOiBhd2FpdCBzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwoe1xuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBLZXk6IGtleSxcbiAgICBQYXJ0TnVtYmVyOiBwYXJ0TnVtYmVyLFxuICAgIFVwbG9hZElkOiB1cGxvYWRJZFxuICB9KVxufSkpKTtcblxuY29uc3QgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuXG4gIGlmKCFvd25lclVzZXJJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgZ2V0Q29ubmVjdGlvbnNCeVVzZXIob3duZXJVc2VySWQpLmNhdGNoKCgpID0+IFtdKTtcbiAgY29uc3QgY29ubmVjdGlvbklkcyA9IGNvbm5lY3Rpb25zXG4gICAgLm1hcCgoY29ubmVjdGlvbikgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbj8uY29ubmVjdGlvbklkIHx8IGNvbm5lY3Rpb24/LnNvY2tldElkIHx8ICcnLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoIWNvbm5lY3Rpb25JZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgd3NDbGllbnQuc2VuZChjb25uZWN0aW9uSWRzLCB7XG4gICAgYWN0aW9uOiAndmlkZW8ucHJvY2Vzc2luZy5jb21wbGV0ZWQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHZpZGVvXG4gICAgfVxuICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbn07XG5cbmNvbnN0IGdldFZpZGVvUGxheWJhY2tLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsICd2aWRlby9tcDQnLCBWSURFT19QTEFZQkFDS19ESVIpO1xuXG5jb25zdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlb1NvdXJjZU9iamVjdCc7XG4gIGNvbnN0IHNvdXJjZUtleSA9IFN0cmluZyh2aWRlbz8uc291cmNlS2V5IHx8IHZpZGVvPy51cGxvYWRLZXkgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGxheWJhY2tLZXkgPSBTdHJpbmcodmlkZW8/LnBsYXliYWNrS2V5IHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNvdXJjZUtleSB8fCBzb3VyY2VLZXkgPT09IHBsYXliYWNrS2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzM0RlbGV0ZSh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBLZXk6IHNvdXJjZUtleVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3NvdXJjZUtleSwgdmlkZW9JZDogdmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXl9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBzaG91bGRUcmFuc2NvZGVWaWRlbyA9ICh2aWRlbzogVmlkZW9UeXBlID0ge30pOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBTdHJpbmcodmlkZW8/LmZpbGVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmKCFmaWxlVHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuICFbXG4gICAgJ3ZpZGVvL21wNCcsXG4gICAgJ3ZpZGVvL3dlYm0nXG4gIF0uaW5jbHVkZXMoZmlsZVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2InO1xuICBjb25zdCByb2xlQXJuID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucm9sZUFybicpIHx8ICcnKTtcbiAgY29uc3QgYnVja2V0ID0gczNHZXRCdWNrZXQoKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0Jyk7XG4gIGNvbnN0IHZpZGVvSWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udmlkZW9JZCB8fCB2aWRlbz8uX2tleSB8fCAnJykpO1xuICBjb25zdCB1c2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKTtcblxuICBpZighcm9sZUFybiB8fCAhYnVja2V0IHx8ICF2aWRlb0lkIHx8ICF1c2VySWQgfHwgIXNvdXJjZUtleSkge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBbXG4gICAgICAgICAgIXJvbGVBcm4gPyAnbWlzc2luZ19tZWRpYWNvbnZlcnRfcm9sZV9hcm4nIDogJycsXG4gICAgICAgICAgIWJ1Y2tldCA/ICdtaXNzaW5nX3MzX2J1Y2tldCcgOiAnJyxcbiAgICAgICAgICAhdXNlcklkID8gJ21pc3NpbmdfdXNlcl9pZCcgOiAnJyxcbiAgICAgICAgICAhc291cmNlS2V5ID8gJ21pc3Npbmdfc291cmNlX2tleScgOiAnJ1xuICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsJyksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldE1lZGlhQ29udmVydENsaWVudChlbmRwb2ludCk7XG4gICAgY29uc3QgcXVldWUgPSBTdHJpbmcoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5xdWV1ZUFybicpIHx8ICcnKTtcbiAgICBjb25zdCBvdXRwdXREZXN0aW5hdGlvbiA9IGBzMzovLyR7YnVja2V0fS91c2Vycy8ke3VzZXJJZH0vJHtWSURFT19QTEFZQkFDS19ESVJ9L2A7XG4gICAgY29uc3Qgam9iID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUpvYkNvbW1hbmQoe1xuICAgICAgLi4uKHF1ZXVlID8ge1F1ZXVlOiBxdWV1ZX0gOiB7fSksXG4gICAgICBSb2xlOiByb2xlQXJuLFxuICAgICAgU2V0dGluZ3M6IHtcbiAgICAgICAgSW5wdXRzOiBbe1xuICAgICAgICAgIEF1ZGlvU2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAnQXVkaW8gU2VsZWN0b3IgMSc6IHtcbiAgICAgICAgICAgICAgRGVmYXVsdFNlbGVjdGlvbjogJ0RFRkFVTFQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBGaWxlSW5wdXQ6IGBzMzovLyR7YnVja2V0fS8ke3NvdXJjZUtleX1gLFxuICAgICAgICAgIFRpbWVjb2RlU291cmNlOiAnWkVST0JBU0VEJyxcbiAgICAgICAgICBWaWRlb1NlbGVjdG9yOiB7XG4gICAgICAgICAgICBSb3RhdGU6ICdBVVRPJ1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIE91dHB1dEdyb3VwczogW3tcbiAgICAgICAgICBOYW1lOiAnTVA0JyxcbiAgICAgICAgICBPdXRwdXRHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICBGaWxlR3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBEZXN0aW5hdGlvbjogb3V0cHV0RGVzdGluYXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUeXBlOiAnRklMRV9HUk9VUF9TRVRUSU5HUydcbiAgICAgICAgICB9LFxuICAgICAgICAgIE91dHB1dHM6IFt7XG4gICAgICAgICAgICBBdWRpb0Rlc2NyaXB0aW9uczogW3tcbiAgICAgICAgICAgICAgQXVkaW9Tb3VyY2VOYW1lOiAnQXVkaW8gU2VsZWN0b3IgMScsXG4gICAgICAgICAgICAgIENvZGVjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBBYWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgQml0cmF0ZTogMTI4MDAwLFxuICAgICAgICAgICAgICAgICAgQ29kaW5nTW9kZTogJ0NPRElOR19NT0RFXzJfMCcsXG4gICAgICAgICAgICAgICAgICBTYW1wbGVSYXRlOiA0ODAwMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29kZWM6ICdBQUMnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgQ29udGFpbmVyU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiAnTVA0JyxcbiAgICAgICAgICAgICAgTXA0U2V0dGluZ3M6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVmlkZW9EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQ29kZWM6ICdIXzI2NCcsXG4gICAgICAgICAgICAgICAgSDI2NFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICBNYXhCaXRyYXRlOiBOdW1iZXIoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5tYXhCaXRyYXRlJywgNTAwMDAwMCkpLFxuICAgICAgICAgICAgICAgICAgUmF0ZUNvbnRyb2xNb2RlOiAnUVZCUicsXG4gICAgICAgICAgICAgICAgICBTY2VuZUNoYW5nZURldGVjdDogJ1RSQU5TSVRJT05fREVURUNUSU9OJyxcbiAgICAgICAgICAgICAgICAgIFF1YWxpdHlUdW5pbmdMZXZlbDogJ1NJTkdMRV9QQVNTJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAgVXNlck1ldGFkYXRhOiB7XG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdmlkZW9JZFxuICAgICAgfVxuICAgIH0gYXMgYW55KSk7XG5cbiAgICBjb25zdCBqb2JJZCA9IFN0cmluZyhqb2I/LkpvYj8uSWQgfHwgJycpO1xuXG4gICAgaWYoam9iSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtZWRpYUNvbnZlcnRKb2JJZDogam9iSWQsXG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwbGF5YmFja0ZpbGVUeXBlOiAndmlkZW8vbXA0JyxcbiAgICAgICAgcGxheWJhY2tLZXk6IGdldFZpZGVvUGxheWJhY2tLZXkodXNlcklkLCB2aWRlb0lkKSxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCcsXG4gICAgICAgIHN0cmVhbVR5cGU6ICdwcm9ncmVzc2l2ZSdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYodmlkZW9JZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwcm9jZXNzaW5nRXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ21lZGlhY29udmVydF9qb2JfZmFpbGVkJyxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHVzZXJJZCwgdmlkZW9JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB7XG4gICAgaGxzS2V5ID0gJycsXG4gICAgcGxheWJhY2tGaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIHBsYXliYWNrS2V5ID0gJycsXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyA9ICdyZWFkeScsXG4gICAgc3RyZWFtVHlwZSA9ICdwcm9ncmVzc2l2ZSdcbiAgfToge1xuICAgIGhsc0tleT86IHN0cmluZztcbiAgICBwbGF5YmFja0ZpbGVUeXBlPzogc3RyaW5nO1xuICAgIHBsYXliYWNrS2V5Pzogc3RyaW5nO1xuICAgIHByb2Nlc3NpbmdTdGF0dXM/OiBzdHJpbmc7XG4gICAgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFZpZGVvID0gYXdhaXQgZ2V0VmlkZW8oY29udGV4dCwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IGZvcm1hdFBsYXliYWNrS2V5ID0gcGxheWJhY2tLZXkgfHwgZ2V0VmlkZW9QbGF5YmFja0tleShTdHJpbmcoY3VycmVudFZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkKTtcbiAgY29uc3Qgc291cmNlRGVsZXRlZCA9IHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeSdcbiAgICA/IGF3YWl0IGRlbGV0ZVZpZGVvU291cmNlT2JqZWN0KGNvbnRleHQsIHtcbiAgICAgIC4uLmN1cnJlbnRWaWRlbyxcbiAgICAgIHBsYXliYWNrS2V5OiBmb3JtYXRQbGF5YmFja0tleVxuICAgIH0gYXMgVmlkZW9UeXBlKVxuICAgIDogZmFsc2U7XG4gIGNvbnN0IHVwZGF0ZWRWaWRlbyA9IGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIC4uLihobHNLZXkgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwbGF5YmFja0ZpbGVUeXBlLFxuICAgIC4uLihmb3JtYXRQbGF5YmFja0tleSA/IHtwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXl9IDoge30pLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMsXG4gICAgLi4uKHNvdXJjZURlbGV0ZWQgPyB7c291cmNlS2V5OiAnJywgdXBsb2FkS2V5OiAnJ30gOiB7fSksXG4gICAgc3RyZWFtVHlwZVxuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuXG4gIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICBhd2FpdCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkVmlkZW87XG59O1xuXG5leHBvcnQgY29uc3QgZmFpbFZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nXG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaW1pdDogbnVtYmVyID0gMTBcbik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3F1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2FmZUxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKGxpbWl0IHx8IDEwKSwgNTApKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiBJTiB2aWRlb3NcbiAgICAgIEZJTFRFUiB2LnVwbG9hZFN0YXR1cyA9PSBcInVwbG9hZGVkXCJcbiAgICAgIEZJTFRFUiB2LnByb2Nlc3NpbmdTdGF0dXMgIT0gXCJyZWFkeVwiXG4gICAgICBGSUxURVIgdi5maWxlVHlwZSAhPSBcInZpZGVvL21wNFwiXG4gICAgICBGSUxURVIgIUhBUyh2LCBcIm1lZGlhQ29udmVydEpvYklkXCIpIHx8IHYubWVkaWFDb252ZXJ0Sm9iSWQgPT0gXCJcIlxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgIExJTUlUICR7c2FmZUxpbWl0fVxuICAgICAgUkVUVVJOIHZcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFZpZGVvVHlwZVtdKTtcbiAgICBjb25zdCBqb2JJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IoY29uc3QgdmlkZW8gb2YgbGlzdCkge1xuICAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB2aWRlbyk7XG5cbiAgICAgIGlmKGpvYklkKSB7XG4gICAgICAgIGpvYklkcy5wdXNoKGpvYklkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9iSWRzO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBWaWRlb1VybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ3ZpZGVvcycsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB2aWRlb0lkXG59OiBWaWRlb1VybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCF2aWRlb0lkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCB2aWRlb05hbWUgPSBnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3QgdmlkZW9VcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHt2aWRlb05hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9VcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGltYWdlRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvSWQsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBhbnkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGtleURpciA9IHZpZGVvRGlyIHx8IGltYWdlRGlyIHx8ICd2aWRlb3MnO1xuICBjb25zdCB2aWRlb0tleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2tleURpcn0vJHtnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbiAgICB9XG4gICAgY2FzZSAncHVibGljJzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHt2aWRlb0tleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvU2lnbmVkS2V5VXJsID0gYXN5bmMgKGtleTogc3RyaW5nID0gJycsIGJ1Y2tldD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHZpZGVvS2V5ID0gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCF2aWRlb0tleSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0JywgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHZpZGVvT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgS2V5OiBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJylcbiAgfTtcblxuICBhd2FpdCBzM1B1dCh2aWRlb09iaik7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZSxcbiAgICB2aWRlb0lkXG4gIH0gYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUgJiB7ZmlsZU5hbWU/OiBzdHJpbmc7IGZpbGVTaXplPzogbnVtYmVyOyBwYXJ0Q291bnQ/OiBudW1iZXJ9LFxuICBwYXJ0Q291bnQ6IG51bWJlciA9IDFcbik6IFByb21pc2U8VmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBmaWxlU2l6ZSxcbiAgICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHRodW1iQmFzZTY0ID0gJycsXG4gICAgdGh1bWJGaWxlVHlwZSA9ICdpbWFnZS9qcGVnJyxcbiAgICB0eXBlID0gJ3ZpZGVvJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCkgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9LSR7RGF0ZS5ub3coKX0tJHtTdHJpbmcodmlkZW8/LmZpbGVOYW1lIHx8ICcnKX1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGtleSA9IGdldFZpZGVvVXBsb2FkS2V5KHNlc3Npb25JZCwgZm9ybWF0VmlkZW9JZCwgZmlsZVR5cGUpO1xuICBjb25zdCBzYWZlUGFydENvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKHBhcnRDb3VudCB8fCB2aWRlbz8ucGFydENvdW50IHx8IDEpLCAxMDAwMCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBsb2FkID0gYXdhaXQgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCB8fCAnJyxcbiAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlIHx8ICcnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdmlkZW9JZDogZm9ybWF0VmlkZW9JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHVwbG9hZElkID0gU3RyaW5nKHVwbG9hZD8uVXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIXVwbG9hZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgdmlkZW8gdXBsb2FkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaGFzVGh1bWIgPSBhd2FpdCBzYXZlVmlkZW9UaHVtYm5haWwoY29udGV4dCwgZm9ybWF0VmlkZW9JZCwgdGh1bWJCYXNlNjQsIHRodW1iRmlsZVR5cGUpO1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogZm9ybWF0VmlkZW9JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGZpbGVTaXplLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtb2RpZmllZDogbm93LFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdwZW5kaW5nX3VwbG9hZCcsXG4gICAgICBzb3VyY2VLZXk6IGtleSxcbiAgICAgIC4uLihoYXNUaHVtYiA/IHt0aHVtYkZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIHR5cGUsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHVwbG9hZEtleToga2V5LFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkaW5nJyxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG4gICAgY29uc3QgbmV3VmlkZW8gPSBhd2FpdCBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydCk7XG5cbiAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgIGF3YWl0IGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnROdW1iZXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBzYWZlUGFydENvdW50fSwgKF92YWx1ZSwgaW5kZXgpID0+IGluZGV4ICsgMSk7XG4gICAgY29uc3QgcGFydFVybHMgPSBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgdXBsb2FkSWQsIHBhcnROdW1iZXJzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWNrZXQ6IHMzR2V0QnVja2V0KCksXG4gICAgICBrZXksXG4gICAgICBwYXJ0U2l6ZTogREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFLFxuICAgICAgcGFydFVybHMsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHZpZGVvOiBuZXdWaWRlbyxcbiAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICB9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb011bHRpcGFydFVwbG9hZFR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnROdW1iZXJzOiBudW1iZXJbXSA9IFtdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIHBhcnNlSWQodmlkZW9JZCksIHZpZGVvPy5maWxlVHlwZSkpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG5cbiAgICBpZigha2V5IHx8ICFmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgZm9ybWF0VXBsb2FkSWQsIHBhcnROdW1iZXJzLm1hcCgocGFydE51bWJlcikgPT4gTnVtYmVyKHBhcnROdW1iZXIpKS5maWx0ZXIoQm9vbGVhbikpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb1VwbG9hZFBhcnRVcmxbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydHM6IFZpZGVvVXBsb2FkUGFydElucHV0W10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCB1cGxvYWRQYXJ0cyA9IHBhcnRzXG4gICAgICAubWFwKChwYXJ0KSA9PiAoe1xuICAgICAgICBFVGFnOiBTdHJpbmcocGFydD8uZXRhZyB8fCAnJykudHJpbSgpLFxuICAgICAgICBQYXJ0TnVtYmVyOiBOdW1iZXIocGFydD8ucGFydE51bWJlciB8fCAwKVxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LkVUYWcgJiYgcGFydC5QYXJ0TnVtYmVyID4gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLlBhcnROdW1iZXIgLSBiLlBhcnROdW1iZXIpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQgfHwgIXVwbG9hZFBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHZpZGVvIHVwbG9hZCBkYXRhLicpO1xuICAgIH1cblxuICAgIGF3YWl0IHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNdWx0aXBhcnRVcGxvYWQ6IHtcbiAgICAgICAgUGFydHM6IHVwbG9hZFBhcnRzXG4gICAgICB9LFxuICAgICAgVXBsb2FkSWQ6IGZvcm1hdFVwbG9hZElkXG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgLi4uKHNob3VsZFRyYW5zY29kZVZpZGVvKHZpZGVvKVxuICAgICAgICA/IHtwcm9jZXNzaW5nU3RhdHVzOiAncXVldWVkJ31cbiAgICAgICAgOiB7XG4gICAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogdmlkZW8/LmZpbGVUeXBlIHx8ICd2aWRlby9tcDQnLFxuICAgICAgICAgIHBsYXliYWNrS2V5OiBrZXksXG4gICAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3JlYWR5JyxcbiAgICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICAgIH0pLFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkZWQnXG4gICAgfSk7XG5cbiAgICBpZihzaG91bGRUcmFuc2NvZGVWaWRlbyh1cGRhdGVkVmlkZW8pKSB7XG4gICAgICB2b2lkIGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2Fib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcblxuICAgIGlmKGtleSAmJiBmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgYXdhaXQgczNBYm9ydE11bHRpcGFydFVwbG9hZCh7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgS2V5OiBrZXksXG4gICAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBwYXJzZUlkKHZpZGVvSWQpLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ2Fib3J0ZWQnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVmlkZW8gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBwcml2YWN5LCB0eXBlID0gJ3ZpZGVvJywgcHJvdmlkZXIsIGV4dGVybmFsSWQsIGV4dGVybmFsVXJsfSA9IHZpZGVvO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IHZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gc2F2ZVZpZGVvKGNvbnRleHQsIHZpZGVvSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigoc2F2ZWQ6IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICAgIC4uLnNhdmVkLFxuICAgICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3ksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVmlkZW9FZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7dmlkZW9JZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSB2aWRlb0VkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLXZpZGVvLSR7dmlkZW9JZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYHZpZGVvcy8ke2Zvcm1hdFZpZGVvSWR9YDtcblxuICBjb25zdCBlZGdlOiBWaWRlb0VkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ3ZpZGVvJ1xuICB9IGFzIFZpZGVvRWRnZVR5cGU7XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogdmlkZW9CdWZmZXIsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBleHRlcm5hbElkLFxuICAgIGV4dGVybmFsVXJsLFxuICAgIGZpbGVUeXBlLFxuICAgIGhsc0tleSxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICBwbGF5YmFja0tleSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIHByaXZhY3ksXG4gICAgcHJvdmlkZXIsXG4gICAgc3RyZWFtVHlwZSxcbiAgICB0eXBlLFxuICAgIHVwbG9hZFN0YXR1cyxcbiAgICB1cmwgPSAnJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcblxuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gdmlkZW9JZCB8fCBjcmVhdGVIYXNoKGB2aWRlby0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG5cbiAgaWYodHlwZSA9PT0gJ2V4dGVybmFsJyAmJiAoZXh0ZXJuYWxJZCB8fCBleHRlcm5hbFVybCkpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBpZihiYXNlNjQgfHwgdmlkZW9CdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSB2aWRlb0J1ZmZlciBhcyBCdWZmZXI7XG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVkRmlsZVR5cGUgPSBmaWxlVHlwZTtcbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCB2UGFyYW1zOiBWaWRlb1R5cGUgPSB7YnVmZmVyLCBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlLCB1c2VySWQ6IHNlc3Npb25JZCwgdmlkZW9JZDogZm9ybWF0VmlkZW9JZH0gYXMgVmlkZW9UeXBlO1xuICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB7Li4udlBhcmFtcywgZGVzY3JpcHRpb24sIHByaXZhY3l9LCBzM09wdGlvbnMpXG4gICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklNQUdFX1JFUVVFU1QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZGVzY3JpcHRpb24sIGZpbGVUeXBlOiBjb250ZW50VHlwZSwgcHJpdmFjeSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICAgICAgcmV0dXJuIGFkZFZpZGVvKGNvbnRleHQsIHZQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodmlkZW9JZCAhPT0gJycpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIC4uLihobHNLZXkgIT09IHVuZGVmaW5lZCA/IHtobHNLZXl9IDoge30pLFxuICAgICAgLi4uKHBsYXliYWNrRmlsZVR5cGUgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0ZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0tleSAhPT0gdW5kZWZpbmVkID8ge3BsYXliYWNrS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7cHJvY2Vzc2luZ1N0YXR1c30gOiB7fSksXG4gICAgICAuLi4ocHJpdmFjeSAhPT0gdW5kZWZpbmVkID8ge3ByaXZhY3l9IDoge30pLFxuICAgICAgLi4uKHN0cmVhbVR5cGUgIT09IHVuZGVmaW5lZCA/IHtzdHJlYW1UeXBlfSA6IHt9KSxcbiAgICAgIC4uLih1cGxvYWRTdGF0dXMgIT09IHVuZGVmaW5lZCA/IHt1cGxvYWRTdGF0dXN9IDoge30pXG4gICAgfTtcbiAgICByZXR1cm4gdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB1cGRhdGUpXG4gICAgICAudGhlbigodXBkYXRlZFZpZGVvKSA9PiB7XG4gICAgICAgIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVZpZGVvID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBkZWxldGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUEsIEVER0VTLkhBU19SRUFDVElPTl0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKHZpZGVvKSB7XG4gICAgICBjb25zdCB7X2tleTogdktleSwgZmlsZVR5cGUsIGhsc0tleSwgcGxheWJhY2tLZXksIHNvdXJjZUtleSwgdGh1bWJGaWxlVHlwZSwgdXBsb2FkS2V5fSA9IHZpZGVvO1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgc291cmNlS2V5LFxuICAgICAgICB1cGxvYWRLZXksXG4gICAgICAgIHBsYXliYWNrS2V5LFxuICAgICAgICBobHNLZXksXG4gICAgICAgIGB1c2Vycy8ke3Nlc3Npb25JZH0vdmlkZW9zLyR7dktleX0ubXA0YCxcbiAgICAgICAgZmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIGZpbGVUeXBlLCAndmlkZW9zJykgOiAnJyxcbiAgICAgICAgdGh1bWJGaWxlVHlwZSA/IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdktleSwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpIDogJydcbiAgICAgIF1cbiAgICAgICAgLm1hcCgoa2V5KSA9PiBTdHJpbmcoa2V5IHx8ICcnKS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmZpbHRlcigoa2V5LCBpbmRleCwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGtleSkgPT09IGluZGV4KTtcbiAgICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBrZXlzLm1hcCgoS2V5KSA9PiAoe0tleX0pKSxcbiAgICAgICAgICBRdWlldDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gdmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQ3JlYXRlSm9iQ29tbWFuZCIsIkRlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCIsIk1lZGlhQ29udmVydENsaWVudCIsImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiZ2V0Q29ubmVjdGlvbnNCeVVzZXIiLCJ3c0NsaWVudCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJnZXREb2NJZCIsImdldExpbWl0IiwidXNlRGIiLCJnZXRBd3NDcmVkZW50aWFscyIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzQWJvcnRNdWx0aXBhcnRVcGxvYWQiLCJzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQiLCJzM0RlbGV0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0QnVja2V0IiwiczNHZXRTaWduZWRVcmwiLCJzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUiLCJWSURFT19QTEFZQkFDS19ESVIiLCJtZWRpYUNvbnZlcnRFbmRwb2ludCIsImdldE1lZGlhQ29udmVydENsaWVudCIsImVuZHBvaW50IiwiY3JlZGVudGlhbHMiLCJyZWdpb24iLCJnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCIsImNsaWVudCIsImVuZHBvaW50cyIsInNlbmQiLCJNYXhSZXN1bHRzIiwiRW5kcG9pbnRzIiwiVXJsIiwiZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMiLCJpdGVtSWQiLCJwYXJzZWREb2NJZCIsIml0ZW1LZXkiLCJVU0VSUyIsIlBFUlNPTkFTIiwibm9ybWFsaXplVmlkZW9Qcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdWaWRlbyIsInZpZGVvIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInJlc29sdmVWaWRlb1ZpZXdlckFjY2VzcyIsImNvbnRleHQiLCJsaXN0Iiwic2Vzc2lvblVzZXJJZCIsIm93bmVyVXNlcklkIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwicGFyc2VWaWRlb09wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwidHlwZSIsImxpbWl0IiwiZ2V0VmlkZW9PcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwicmVhY3Rpb25RdWVyeSIsInJlcGxhY2UiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJ0YWdzUXVlcnkiLCJnZXRWaWRlb3NCeVVzZXIiLCJhY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJjdXN0b21RdWVyaWVzIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbU9iamVjdHMiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0VmlkZW9Db3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRWaWRlb3NCeUl0ZW0iLCJzZXNzaW9uIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwiYWxsIiwiZmlsdGVyIiwiZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJzZXNzaW9uSWQiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJtYXAiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJnZXRWaWRlbyIsInZpZGVvSWQiLCJmb3JtYXRWaWRlb0lkIiwiX2tleSIsImdldFBhdGhVc2VyVmlkZW9zIiwidmlkZW9UeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRWaWRlb0ZpbGVuYW1lIiwiZ2V0VmlkZW9VcGxvYWRLZXkiLCJmaWxlVHlwZSIsInNhdmVWaWRlb1RodW1ibmFpbCIsInRodW1iQmFzZTY0IiwidGh1bWJGaWxlVHlwZSIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJidWZmZXIiLCJCdWZmZXIiLCJCb2R5IiwiQnVja2V0IiwiQ29udGVudFR5cGUiLCJLZXkiLCJnZXRWaWRlb1VwbG9hZERvYyIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImdldFZpZGVvUGFydFVybHMiLCJrZXkiLCJ1cGxvYWRJZCIsInBhcnROdW1iZXJzIiwiUHJvbWlzZSIsInBhcnROdW1iZXIiLCJ1cmwiLCJQYXJ0TnVtYmVyIiwiVXBsb2FkSWQiLCJlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb25JZHMiLCJjb25uZWN0aW9uIiwiY29ubmVjdGlvbklkIiwic29ja2V0SWQiLCJCb29sZWFuIiwiaW5kZXgiLCJkYXRhIiwiZ2V0VmlkZW9QbGF5YmFja0tleSIsImRlbGV0ZVZpZGVvU291cmNlT2JqZWN0Iiwic291cmNlS2V5IiwidXBsb2FkS2V5IiwicGxheWJhY2tLZXkiLCJzaG91bGRUcmFuc2NvZGVWaWRlbyIsImNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iIiwicm9sZUFybiIsImJ1Y2tldCIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsInByb2Nlc3NpbmdFcnJvciIsInByb2Nlc3NpbmdTdGF0dXMiLCJxdWV1ZSIsIm91dHB1dERlc3RpbmF0aW9uIiwiam9iIiwiUXVldWUiLCJSb2xlIiwiU2V0dGluZ3MiLCJJbnB1dHMiLCJBdWRpb1NlbGVjdG9ycyIsIkRlZmF1bHRTZWxlY3Rpb24iLCJGaWxlSW5wdXQiLCJUaW1lY29kZVNvdXJjZSIsIlZpZGVvU2VsZWN0b3IiLCJSb3RhdGUiLCJPdXRwdXRHcm91cHMiLCJOYW1lIiwiT3V0cHV0R3JvdXBTZXR0aW5ncyIsIkZpbGVHcm91cFNldHRpbmdzIiwiRGVzdGluYXRpb24iLCJUeXBlIiwiT3V0cHV0cyIsIkF1ZGlvRGVzY3JpcHRpb25zIiwiQXVkaW9Tb3VyY2VOYW1lIiwiQ29kZWNTZXR0aW5ncyIsIkFhY1NldHRpbmdzIiwiQml0cmF0ZSIsIkNvZGluZ01vZGUiLCJTYW1wbGVSYXRlIiwiQ29kZWMiLCJDb250YWluZXJTZXR0aW5ncyIsIkNvbnRhaW5lciIsIk1wNFNldHRpbmdzIiwiVmlkZW9EZXNjcmlwdGlvbiIsIkgyNjRTZXR0aW5ncyIsIk1heEJpdHJhdGUiLCJOdW1iZXIiLCJSYXRlQ29udHJvbE1vZGUiLCJTY2VuZUNoYW5nZURldGVjdCIsIlF1YWxpdHlUdW5pbmdMZXZlbCIsIlVzZXJNZXRhZGF0YSIsImpvYklkIiwiSm9iIiwiSWQiLCJtZWRpYUNvbnZlcnRKb2JJZCIsInBsYXliYWNrRmlsZVR5cGUiLCJzdHJlYW1UeXBlIiwibWVzc2FnZSIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiaGxzS2V5IiwiY3VycmVudFZpZGVvIiwiZm9ybWF0UGxheWJhY2tLZXkiLCJzb3VyY2VEZWxldGVkIiwidXBkYXRlZFZpZGVvIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsInNhZmVMaW1pdCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJqb2JJZHMiLCJnZXRBcHBWaWRlb1VybCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwidmlkZW9OYW1lIiwidmlkZW9VcmwiLCJnZXRWaWRlb1VybCIsImltYWdlRGlyIiwidmlkZW9EaXIiLCJ1cmxUeXBlIiwia2V5RGlyIiwidmlkZW9LZXkiLCJkZWZhdWx0QnVja2V0IiwiRXhwaXJlcyIsImdldFZpZGVvU2lnbmVkS2V5VXJsIiwic2F2ZVZpZGVvIiwiczNPcHRpb25zIiwidmlkZW9PYmoiLCJmaWxlU2l6ZSIsImNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydENvdW50IiwiZGVzY3JpcHRpb24iLCJpdGVtVHlwZSIsImZpbGVOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZm9ybWF0SXRlbVR5cGUiLCJzYWZlUGFydENvdW50IiwidXBsb2FkIiwiTWV0YWRhdGEiLCJoYXNUaHVtYiIsImluc2VydCIsImFkZGVkIiwidXBsb2FkU3RhdHVzIiwibmV3VmlkZW8iLCJ2aWRlb0VkZ2UiLCJhZGRWaWRlb0VkZ2UiLCJBcnJheSIsIl92YWx1ZSIsInBhcnRVcmxzIiwicGFydFNpemUiLCJnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzIiwiZm9ybWF0VXBsb2FkSWQiLCJjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydHMiLCJ1cGxvYWRQYXJ0cyIsInBhcnQiLCJFVGFnIiwiZXRhZyIsImEiLCJiIiwiTXVsdGlwYXJ0VXBsb2FkIiwiUGFydHMiLCJhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwiYWRkVmlkZW8iLCJwcm92aWRlciIsImV4dGVybmFsSWQiLCJleHRlcm5hbFVybCIsInNhdmVkIiwiZWRnZUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY29sbGVjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlVmlkZW8iLCJiYXNlNjQiLCJ2aWRlb0J1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJ2UGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsInVuZGVmaW5lZCIsImRlbGV0ZVZpZGVvIiwiY2FzY2FkZSIsIkhBU19SRUFDVElPTiIsIm93bmVyc2hpcCIsInZLZXkiLCJrZXlzIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMsa0JBQWtCLFFBQ2IsK0JBQStCO0FBRXRDLFNBQVFDLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFR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
@@ -65,4 +65,4 @@ const performDocumentTransformation = (doc)=>{
65
65
  });
66
66
  };
67
67
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvYXJhbmdvQWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RG9jdW1lbnRUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEFyYW5nb1ZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXJhbmdvVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBEb2N1bWVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfZnJvbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfb2xkUmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9yZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3RvOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFkZGVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGlmaWVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURvY3VtZW50SW5wdXQgPSAoZG9jOiB1bmtub3duKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBEb2N1bWVudElucHV0U2NoZW1hLnBhcnNlKGRvYyk7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBEb2N1bWVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gZXJyb3IuaXNzdWVzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyk7XG4gICAgICB0aHJvdyBuZXcgQXJhbmdvVmFsaWRhdGlvbkVycm9yKGBEb2N1bWVudCB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREb2N1bWVudE91dHB1dCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiBkb2M7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURvY3VtZW50ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24oZG9jKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgQXJhbmdvVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGFkZGVkLFxuICAgIGlkLFxuICAgIG1vZGlmaWVkXG4gIH0gPSBkb2M7XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4uZG9jLFxuICAgIC4uLihfaWQgJiYge19pZDogcGFyc2VBcmFuZ29JZChfaWQpfSksXG4gICAgLi4uKF9rZXkgJiYge19rZXk6IHBhcnNlSWQoX2tleSl9KSxcbiAgICAuLi4oYWRkZWQgIT09IHVuZGVmaW5lZCAmJiB7YWRkZWQ6IHBhcnNlTnVtKGFkZGVkLCAxMyl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCl9KSxcbiAgICAuLi4obW9kaWZpZWQgIT09IHVuZGVmaW5lZCAmJiB7bW9kaWZpZWQ6IHBhcnNlTnVtKG1vZGlmaWVkLCAxMyl9KVxuICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJBcmFuZ29WYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJEb2N1bWVudElucHV0U2NoZW1hIiwib2JqZWN0IiwiX2Zyb20iLCJzdHJpbmciLCJvcHRpb25hbCIsIl9pZCIsIl9rZXkiLCJfb2xkUmV2IiwiX3JldiIsIl90byIsImFkZGVkIiwibnVtYmVyIiwiaWQiLCJtb2RpZmllZCIsInBhc3N0aHJvdWdoIiwidmFsaWRhdGVEb2N1bWVudElucHV0IiwiZG9jIiwidmFsaWRhdGVkIiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiZmllbGRFcnJvcnMiLCJpc3N1ZXMiLCJtYXAiLCJlIiwicGF0aCIsImpvaW4iLCJmb3JtYXREb2N1bWVudE91dHB1dCIsInBhcnNlRG9jdW1lbnQiLCJwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxhQUFhLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDcEUsU0FBUUMsQ0FBQyxRQUFPLE1BQU07QUFHdEIsU0FBUUMsZUFBZSxRQUFPLDJCQUEyQjtBQUV6RCxPQUFPLE1BQU1DLDhCQUE4QkM7O0lBQ3pDLFlBQVlDLE9BQWUsRUFBRSxBQUFPQyxLQUFjLENBQUU7UUFDbEQsS0FBSyxDQUFDRCxlQUQ0QkMsUUFBQUE7UUFFbEMsSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsTUFBTUMsc0JBQXNCUCxFQUFFUSxNQUFNLENBQUM7SUFDbkNDLE9BQU9ULEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUMxQkMsS0FBS1osRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCRSxNQUFNYixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDekJHLFNBQVNkLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUM1QkksTUFBTWYsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCSyxLQUFLaEIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCTSxPQUFPakIsRUFBRWtCLE1BQU0sR0FBR1AsUUFBUTtJQUMxQlEsSUFBSW5CLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN2QlMsVUFBVXBCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7QUFDL0IsR0FBR1UsV0FBVztBQUVkLE9BQU8sTUFBTUMsd0JBQXdCLENBQUNDO0lBQ3BDLElBQUk7UUFDRixNQUFNQyxZQUFZakIsb0JBQW9Ca0IsS0FBSyxDQUFDRjtRQUM1QyxPQUFPQztJQUNULEVBQUUsT0FBTUUsT0FBTztRQUNiLElBQUdBLGlCQUFpQjFCLEVBQUUyQixRQUFRLEVBQUU7WUFDOUIsTUFBTUMsY0FBY0YsTUFBTUcsTUFBTSxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxHQUFHQSxFQUFFQyxJQUFJLENBQUNDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRUYsRUFBRTNCLE9BQU8sRUFBRSxFQUFFNkIsSUFBSSxDQUFDO1lBQ3RGLE1BQU0sSUFBSS9CLHNCQUFzQixDQUFDLDRCQUE0QixFQUFFMEIsYUFBYTtRQUM5RTtRQUNBLE1BQU1GO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNUSx1QkFBdUIsQ0FBQ1gsTUFBb0NBLElBQUk7QUFFN0UsT0FBTyxNQUFNWSxnQkFBZ0IsQ0FBQ1o7SUFDNUIsSUFBSTtRQUNGLE9BQU9hLDhCQUE4QmI7SUFDdkMsRUFBRSxPQUFNRyxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCeEIsdUJBQXVCO1lBQ3pDLE1BQU13QjtRQUNSO1FBQ0EsTUFBTSxJQUFJeEIsc0JBQXNCLENBQUMseUJBQXlCLEVBQUV3QixpQkFBaUJ2QixRQUFRdUIsTUFBTXRCLE9BQU8sR0FBRyxpQkFBaUI7SUFDeEg7QUFDRixFQUFFO0FBRUYsTUFBTWdDLGdDQUFnQyxDQUFDYjtJQUNyQyxNQUFNLEVBQ0pYLEdBQUcsRUFDSEMsSUFBSSxFQUNKSSxLQUFLLEVBQ0xFLEVBQUUsRUFDRkMsUUFBUSxFQUNULEdBQUdHO0lBRUosT0FBT3RCLGdCQUFnQjtRQUNyQixHQUFHc0IsR0FBRztRQUNOLEdBQUlYLE9BQU87WUFBQ0EsS0FBS2QsY0FBY2M7UUFBSSxDQUFDO1FBQ3BDLEdBQUlDLFFBQVE7WUFBQ0EsTUFBTWQsUUFBUWM7UUFBSyxDQUFDO1FBQ2pDLEdBQUlJLFVBQVVvQixhQUFhO1lBQUNwQixPQUFPcEIsU0FBU29CLE9BQU87UUFBRyxDQUFDO1FBQ3ZELEdBQUksQUFBQ0wsQ0FBQUEsT0FBT08sRUFBQyxLQUFNO1lBQUNBLElBQUlyQixjQUFjYyxPQUFPTztRQUFHLENBQUM7UUFDakQsR0FBSUMsYUFBYWlCLGFBQWE7WUFBQ2pCLFVBQVV2QixTQUFTdUIsVUFBVTtRQUFHLENBQUM7SUFDbEU7QUFDRiJ9
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvYXJhbmdvQWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RG9jdW1lbnRUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEFyYW5nb1ZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXJhbmdvVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBEb2N1bWVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfZnJvbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfb2xkUmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9yZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3RvOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFkZGVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGlmaWVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURvY3VtZW50SW5wdXQgPSAoZG9jOiB1bmtub3duKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBEb2N1bWVudElucHV0U2NoZW1hLnBhcnNlKGRvYyk7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBEb2N1bWVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gZXJyb3IuaXNzdWVzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyk7XG4gICAgICB0aHJvdyBuZXcgQXJhbmdvVmFsaWRhdGlvbkVycm9yKGBEb2N1bWVudCB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREb2N1bWVudE91dHB1dCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiBkb2M7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURvY3VtZW50ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24oZG9jKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgQXJhbmdvVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGFkZGVkLFxuICAgIGlkLFxuICAgIG1vZGlmaWVkXG4gIH0gPSBkb2M7XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4uZG9jLFxuICAgIC4uLihfaWQgJiYge19pZDogcGFyc2VBcmFuZ29JZChfaWQpfSksXG4gICAgLi4uKF9rZXkgJiYge19rZXk6IHBhcnNlSWQoX2tleSl9KSxcbiAgICAuLi4oYWRkZWQgIT09IHVuZGVmaW5lZCAmJiB7YWRkZWQ6IHBhcnNlTnVtKGFkZGVkLCAxMyl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCl9KSxcbiAgICAuLi4obW9kaWZpZWQgIT09IHVuZGVmaW5lZCAmJiB7bW9kaWZpZWQ6IHBhcnNlTnVtKG1vZGlmaWVkLCAxMyl9KVxuICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJBcmFuZ29WYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJEb2N1bWVudElucHV0U2NoZW1hIiwib2JqZWN0IiwiX2Zyb20iLCJzdHJpbmciLCJvcHRpb25hbCIsIl9pZCIsIl9rZXkiLCJfb2xkUmV2IiwiX3JldiIsIl90byIsImFkZGVkIiwibnVtYmVyIiwiaWQiLCJtb2RpZmllZCIsInBhc3N0aHJvdWdoIiwidmFsaWRhdGVEb2N1bWVudElucHV0IiwiZG9jIiwidmFsaWRhdGVkIiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiZmllbGRFcnJvcnMiLCJpc3N1ZXMiLCJtYXAiLCJlIiwicGF0aCIsImpvaW4iLCJmb3JtYXREb2N1bWVudE91dHB1dCIsInBhcnNlRG9jdW1lbnQiLCJwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxhQUFhLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDcEUsU0FBUUMsQ0FBQyxRQUFPLE1BQU07QUFHdEIsU0FBUUMsZUFBZSxRQUFPLDJCQUEyQjtBQUV6RCxPQUFPLE1BQU1DLDhCQUE4QkM7O0lBQ3pDLFlBQVlDLE9BQWUsRUFBRSxBQUFPQyxLQUFjLENBQUU7UUFDbEQsS0FBSyxDQUFDRCxlQUQ0QkMsUUFBQUE7UUFFbEMsSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsTUFBTUMsc0JBQXNCUCxFQUFFUSxNQUFNLENBQUM7SUFDbkNDLE9BQU9ULEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUMxQkMsS0FBS1osRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCRSxNQUFNYixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDekJHLFNBQVNkLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUM1QkksTUFBTWYsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCSyxLQUFLaEIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCTSxPQUFPakIsRUFBRWtCLE1BQU0sR0FBR1AsUUFBUTtJQUMxQlEsSUFBSW5CLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN2QlMsVUFBVXBCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7QUFDL0IsR0FBR1UsV0FBVztBQUVkLE9BQU8sTUFBTUMsd0JBQXdCLENBQUNDO0lBQ3BDLElBQUk7UUFDRixNQUFNQyxZQUFZakIsb0JBQW9Ca0IsS0FBSyxDQUFDRjtRQUM1QyxPQUFPQztJQUNULEVBQUUsT0FBTUUsT0FBTztRQUNiLElBQUdBLGlCQUFpQjFCLEVBQUUyQixRQUFRLEVBQUU7WUFDOUIsTUFBTUMsY0FBY0YsTUFBTUcsTUFBTSxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxHQUFHQSxFQUFFQyxJQUFJLENBQUNDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRUYsRUFBRTNCLE9BQU8sRUFBRSxFQUFFNkIsSUFBSSxDQUFDO1lBQ3RGLE1BQU0sSUFBSS9CLHNCQUFzQixDQUFDLDRCQUE0QixFQUFFMEIsYUFBYTtRQUM5RTtRQUNBLE1BQU1GO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNUSx1QkFBdUIsQ0FBQ1gsTUFBb0NBLElBQUk7QUFFN0UsT0FBTyxNQUFNWSxnQkFBZ0IsQ0FBQ1o7SUFDNUIsSUFBSTtRQUNGLE9BQU9hLDhCQUE4QmI7SUFDdkMsRUFBRSxPQUFNRyxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCeEIsdUJBQXVCO1lBQ3pDLE1BQU13QjtRQUNSO1FBQ0EsTUFBTSxJQUFJeEIsc0JBQXNCLENBQUMseUJBQXlCLEVBQUV3QixpQkFBaUJ2QixRQUFRdUIsTUFBTXRCLE9BQU8sR0FBRyxpQkFBaUI7SUFDeEg7QUFDRixFQUFFO0FBRUYsTUFBTWdDLGdDQUFnQyxDQUFDYjtJQUNyQyxNQUFNLEVBQ0pYLEdBQUcsRUFDSEMsSUFBSSxFQUNKSSxLQUFLLEVBQ0xFLEVBQUUsRUFDRkMsUUFBUSxFQUNULEdBQUdHO0lBRUosT0FBT3RCLGdCQUFnQjtRQUNyQixHQUFHc0IsR0FBRztRQUNOLEdBQUlYLE9BQU87WUFBQ0EsS0FBS2QsY0FBY2M7UUFBSSxDQUFDO1FBQ3BDLEdBQUlDLFFBQVE7WUFBQ0EsTUFBTWQsUUFBUWM7UUFBSyxDQUFDO1FBQ2pDLEdBQUlJLFVBQVVvQixhQUFhO1lBQUNwQixPQUFPcEIsU0FBU29CLE9BQU87UUFBRyxDQUFDO1FBQ3ZELEdBQUksQUFBQ0wsQ0FBQUEsT0FBT08sRUFBQyxLQUFNO1lBQUNBLElBQUlyQixjQUFjYyxPQUFPTztRQUFHLENBQUM7UUFDakQsR0FBSUMsYUFBYWlCLGFBQWE7WUFBQ2pCLFVBQVV2QixTQUFTdUIsVUFBVTtRQUFHLENBQUM7SUFDbEU7QUFDRiJ9
@@ -97,4 +97,4 @@ const performContentTransformation = (content)=>{
97
97
  };
98
98
  export const parseContentFromDb = (content)=>performContentTransformation(content);
99
99
 
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvY29udGVudEFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0NvbnRlbnRJbnB1dFR5cGUsIENvbnRlbnRUeXBlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcbmltcG9ydCB7cmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi91dGlscy9hZGFwdGVyVXRpbHMuanMnO1xuaW1wb3J0IHtwYXJzZURvY3VtZW50fSBmcm9tICcuL2FyYW5nb0FkYXB0ZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29udGVudFZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyA9IFsnZW4nLCAnZXMnLCAnZnInLCAnZGUnLCAncHQnLCAnaXQnXSBhcyBjb25zdDtcblxuY29uc3QgY29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLm1heCgyMDAsICdLZXkgbXVzdCBiZSBsZXNzIHRoYW4gMjAwIGNoYXJhY3RlcnMnKSxcbiAgbG9jYWxlOiB6LmVudW0oU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUywge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlcklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBjb250ZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KS5vcHRpb25hbCgpLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnQgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRJbnB1dCA9IChjb250ZW50OiBDb250ZW50SW5wdXRUeXBlKTogQ29udGVudElucHV0VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRJbnB1dFNjaGVtYS5wYXJzZShjb250ZW50KSBhcyBDb250ZW50SW5wdXRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgY29udGVudElkLFxuICAgIGlkLFxuICAgIGtleSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogY29udGVudFRleHQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUsXG4gICAgdXNlcklkXG4gIH0gPSBjb250ZW50O1xuXG4gIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xuICAgIC4uLnBhcnNlRG9jdW1lbnQoY29udGVudCksXG4gICAgLi4uKChfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2NvbnRlbnRJZDogcGFyc2VJZChfa2V5IHx8IGNvbnRlbnRJZCl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCB8fCBfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCBgY29udGVudC8ke19rZXkgfHwgY29udGVudElkfWApfSksXG4gICAga2V5OiBwYXJzZVN0cmluZyhrZXksIDIwMCksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnRUZXh0LCAxMDAwMCksXG4gICAgLi4uKGRlc2NyaXB0aW9uICYmIHtkZXNjcmlwdGlvbjogcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCl9KSxcbiAgICAuLi4oY2F0ZWdvcnkgJiYge2NhdGVnb3J5OiBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKX0pLFxuICAgIC4uLihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHtpc0FjdGl2ZX0pLFxuICAgIC4uLih1c2VySWQgJiYge3VzZXJJZDogcGFyc2VJZCh1c2VySWQpfSlcbiAgfTtcblxuICByZXR1cm4gcmVtb3ZlRW1wdHlLZXlzKHRyYW5zZm9ybWVkKSBhcyBDb250ZW50VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRGcm9tRGIgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnRlbnQpO1xuIl0sIm5hbWVzIjpbInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwicGFyc2VEb2N1bWVudCIsIkNvbnRlbnRWYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTIiwiY29udGVudFNjaGVtYSIsIm9iamVjdCIsImNvbnRlbnRJZCIsInN0cmluZyIsIm9wdGlvbmFsIiwia2V5IiwibWluIiwibWF4IiwibG9jYWxlIiwiZW51bSIsImNvbnRlbnQiLCJkZXNjcmlwdGlvbiIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJib29sZWFuIiwidXNlcklkIiwiY29udGVudElucHV0U2NoZW1hIiwicGFyc2VDb250ZW50IiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiaXNzdWVzIiwicGF0aCIsImpvaW4iLCJwYXJzZUNvbnRlbnRJbnB1dCIsInBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24iLCJfaWQiLCJfa2V5IiwiaWQiLCJjb250ZW50VGV4dCIsInRyYW5zZm9y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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvY29udGVudEFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0NvbnRlbnRJbnB1dFR5cGUsIENvbnRlbnRUeXBlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcbmltcG9ydCB7cmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi91dGlscy9hZGFwdGVyVXRpbHMuanMnO1xuaW1wb3J0IHtwYXJzZURvY3VtZW50fSBmcm9tICcuL2FyYW5nb0FkYXB0ZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29udGVudFZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyA9IFsnZW4nLCAnZXMnLCAnZnInLCAnZGUnLCAncHQnLCAnaXQnXSBhcyBjb25zdDtcblxuY29uc3QgY29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLm1heCgyMDAsICdLZXkgbXVzdCBiZSBsZXNzIHRoYW4gMjAwIGNoYXJhY3RlcnMnKSxcbiAgbG9jYWxlOiB6LmVudW0oU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUywge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlcklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBjb250ZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KS5vcHRpb25hbCgpLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnQgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRJbnB1dCA9IChjb250ZW50OiBDb250ZW50SW5wdXRUeXBlKTogQ29udGVudElucHV0VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRJbnB1dFNjaGVtYS5wYXJzZShjb250ZW50KSBhcyBDb250ZW50SW5wdXRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgY29udGVudElkLFxuICAgIGlkLFxuICAgIGtleSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogY29udGVudFRleHQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUsXG4gICAgdXNlcklkXG4gIH0gPSBjb250ZW50O1xuXG4gIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xuICAgIC4uLnBhcnNlRG9jdW1lbnQoY29udGVudCksXG4gICAgLi4uKChfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2NvbnRlbnRJZDogcGFyc2VJZChfa2V5IHx8IGNvbnRlbnRJZCl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCB8fCBfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCBgY29udGVudC8ke19rZXkgfHwgY29udGVudElkfWApfSksXG4gICAga2V5OiBwYXJzZVN0cmluZyhrZXksIDIwMCksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnRUZXh0LCAxMDAwMCksXG4gICAgLi4uKGRlc2NyaXB0aW9uICYmIHtkZXNjcmlwdGlvbjogcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCl9KSxcbiAgICAuLi4oY2F0ZWdvcnkgJiYge2NhdGVnb3J5OiBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKX0pLFxuICAgIC4uLihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHtpc0FjdGl2ZX0pLFxuICAgIC4uLih1c2VySWQgJiYge3VzZXJJZDogcGFyc2VJZCh1c2VySWQpfSlcbiAgfTtcblxuICByZXR1cm4gcmVtb3ZlRW1wdHlLZXlzKHRyYW5zZm9ybWVkKSBhcyBDb250ZW50VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRGcm9tRGIgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnRlbnQpO1xuIl0sIm5hbWVzIjpbInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwicGFyc2VEb2N1bWVudCIsIkNvbnRlbnRWYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTIiwiY29udGVudFNjaGVtYSIsIm9iamVjdCIsImNvbnRlbnRJZCIsInN0cmluZyIsIm9wdGlvbmFsIiwia2V5IiwibWluIiwibWF4IiwibG9jYWxlIiwiZW51bSIsImNvbnRlbnQiLCJkZXNjcmlwdGlvbiIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJib29sZWFuIiwidXNlcklkIiwiY29udGVudElucHV0U2NoZW1hIiwicGFyc2VDb250ZW50IiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiaXNzdWVzIiwicGF0aCIsImpvaW4iLCJwYXJzZUNvbnRlbnRJbnB1dCIsInBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24iLCJfaWQiLCJfa2V5IiwiaWQiLCJjb250ZW50VGV4dCIsInRyYW5z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