@nlabs/reaktor 1.17.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 (320) hide show
  1. package/README.md +182 -0
  2. package/docs/ASSISTANT.md +138 -0
  3. package/docs/GENERATION.md +42 -5
  4. package/docs/NATIVE_PUSH.md +56 -0
  5. package/lib/actions/alfredFaq.d.ts +80 -0
  6. package/lib/actions/alfredFaq.js +206 -0
  7. package/lib/actions/analytics.js +1 -1
  8. package/lib/actions/apps.js +1 -1
  9. package/lib/actions/connections.js +1 -1
  10. package/lib/actions/content.js +1 -1
  11. package/lib/actions/contentGeneration.d.ts +4 -0
  12. package/lib/actions/contentGeneration.js +82 -10
  13. package/lib/actions/contentGenerationErrors.js +1 -1
  14. package/lib/actions/conversations.d.ts +1 -1
  15. package/lib/actions/conversations.js +19 -9
  16. package/lib/actions/crm.js +1 -1
  17. package/lib/actions/crud.js +26 -1
  18. package/lib/actions/databaseAccounts.js +1 -1
  19. package/lib/actions/databaseProvisioningLease.js +1 -1
  20. package/lib/actions/dynamodb.js +1 -1
  21. package/lib/actions/email.js +1 -1
  22. package/lib/actions/files.js +1 -1
  23. package/lib/actions/flags.js +1 -1
  24. package/lib/actions/geminiVideo.js +1 -1
  25. package/lib/actions/groups.js +1 -1
  26. package/lib/actions/higgsfield.js +1 -1
  27. package/lib/actions/imageGeneration.js +1 -1
  28. package/lib/actions/images.js +1 -1
  29. package/lib/actions/index.d.ts +1 -0
  30. package/lib/actions/index.js +2 -1
  31. package/lib/actions/ios.js +1 -1
  32. package/lib/actions/locations.js +1 -1
  33. package/lib/actions/messages.js +23 -7
  34. package/lib/actions/notifications.js +1 -1
  35. package/lib/actions/ollamaGeneration.js +1 -1
  36. package/lib/actions/openaiResponseSession.js +1 -1
  37. package/lib/actions/payments.js +1 -1
  38. package/lib/actions/personas.js +1 -1
  39. package/lib/actions/phoneSupport.js +1 -1
  40. package/lib/actions/posts.js +1 -1
  41. package/lib/actions/query.js +1 -1
  42. package/lib/actions/reactions.js +1 -1
  43. package/lib/actions/rum.js +1 -1
  44. package/lib/actions/s3.js +1 -1
  45. package/lib/actions/search.js +1 -1
  46. package/lib/actions/sms.js +1 -1
  47. package/lib/actions/statistics.js +1 -1
  48. package/lib/actions/subscriptions.js +1 -1
  49. package/lib/actions/tags.js +1 -1
  50. package/lib/actions/users.js +57 -4
  51. package/lib/actions/videoGeneration.js +1 -1
  52. package/lib/actions/videos.js +1 -1
  53. package/lib/adapters/arangoAdapter.js +1 -1
  54. package/lib/adapters/contentAdapter.js +1 -1
  55. package/lib/adapters/fileAdapter.js +1 -1
  56. package/lib/adapters/geminiGenerationAdapter.js +1 -1
  57. package/lib/adapters/higgsfieldAdapter.js +1 -1
  58. package/lib/adapters/higgsfieldModelCatalog.js +1 -1
  59. package/lib/adapters/higgsfieldModels.js +1 -1
  60. package/lib/adapters/imageAdapter.js +1 -1
  61. package/lib/adapters/imageGenerationAdapter.js +1 -1
  62. package/lib/adapters/index.js +1 -1
  63. package/lib/adapters/messageAdapter.js +1 -1
  64. package/lib/adapters/postAdapter.js +1 -1
  65. package/lib/adapters/reaktorAdapter.js +1 -1
  66. package/lib/adapters/tagAdapter.js +1 -1
  67. package/lib/adapters/userAdapter.js +1 -1
  68. package/lib/assistant/core.d.ts +53 -0
  69. package/lib/assistant/core.js +123 -0
  70. package/lib/assistant/faq.d.ts +26 -0
  71. package/lib/assistant/faq.js +238 -0
  72. package/lib/assistant/faqCore.d.ts +23 -0
  73. package/lib/assistant/faqCore.js +20 -0
  74. package/lib/assistant/index.d.ts +7 -0
  75. package/lib/assistant/index.js +5 -0
  76. package/lib/assistant/service.d.ts +35 -0
  77. package/lib/assistant/service.js +201 -0
  78. package/lib/config.js +1 -1
  79. package/lib/constants/collections.js +1 -1
  80. package/lib/durableChat/conversations.d.ts +62 -0
  81. package/lib/durableChat/conversations.js +729 -0
  82. package/lib/durableChat/errors.d.ts +6 -0
  83. package/lib/durableChat/errors.js +11 -0
  84. package/lib/durableChat/events.d.ts +22 -0
  85. package/lib/durableChat/events.js +50 -0
  86. package/lib/durableChat/index.d.ts +8 -0
  87. package/lib/durableChat/index.js +10 -0
  88. package/lib/durableChat/membership.d.ts +24 -0
  89. package/lib/durableChat/membership.js +85 -0
  90. package/lib/durableChat/messageTypes.d.ts +76 -0
  91. package/lib/durableChat/messageTypes.js +3 -0
  92. package/lib/durableChat/messages.d.ts +16 -0
  93. package/lib/durableChat/messages.js +257 -0
  94. package/lib/durableChat/transaction.d.ts +10 -0
  95. package/lib/durableChat/transaction.js +53 -0
  96. package/lib/durableChat/types.d.ts +81 -0
  97. package/lib/durableChat/types.js +3 -0
  98. package/lib/handlers/graphqlHandler.js +1 -1
  99. package/lib/index.d.ts +4 -4
  100. package/lib/index.js +5 -3
  101. package/lib/lambdas/actions/websockets.js +4 -4
  102. package/lib/lambdas/authorizer.js +1 -1
  103. package/lib/lambdas/connection.js +1 -1
  104. package/lib/lambdas/utils/message.js +1 -1
  105. package/lib/lambdas/utils/websocket.js +1 -1
  106. package/lib/mocks/conversation.js +1 -1
  107. package/lib/mocks/file.js +1 -1
  108. package/lib/mocks/group.js +1 -1
  109. package/lib/mocks/image.js +1 -1
  110. package/lib/mocks/post.js +1 -1
  111. package/lib/mocks/tag.js +1 -1
  112. package/lib/mocks/user.js +1 -1
  113. package/lib/mocks/video.js +1 -1
  114. package/lib/mutations/analytics/analytics.js +1 -1
  115. package/lib/mutations/content/content.js +1 -1
  116. package/lib/mutations/crm/crm.js +1 -1
  117. package/lib/mutations/events/events.js +1 -1
  118. package/lib/mutations/flags/flags.js +1 -1
  119. package/lib/mutations/groups/groups.js +1 -1
  120. package/lib/mutations/higgsfield/higgsfield.js +1 -1
  121. package/lib/mutations/images/images.js +1 -1
  122. package/lib/mutations/index.js +1 -1
  123. package/lib/mutations/locations/locations.js +1 -1
  124. package/lib/mutations/messages/messages.js +1 -1
  125. package/lib/mutations/personas/personas.js +1 -1
  126. package/lib/mutations/posts/posts.js +1 -1
  127. package/lib/mutations/reactions/reactions.js +1 -1
  128. package/lib/mutations/rum/rum.js +1 -1
  129. package/lib/mutations/statistics/statistics.js +1 -1
  130. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  131. package/lib/mutations/tags/tags.js +1 -1
  132. package/lib/mutations/users/users.js +1 -1
  133. package/lib/mutations/videos/videos.js +1 -1
  134. package/lib/nativePush/graphql.d.ts +14 -0
  135. package/lib/nativePush/graphql.js +105 -0
  136. package/lib/nativePush/index.d.ts +7 -0
  137. package/lib/nativePush/index.js +9 -0
  138. package/lib/nativePush/migrations.d.ts +2 -0
  139. package/lib/nativePush/migrations.js +36 -0
  140. package/lib/nativePush/nativePushContract.fixture.d.ts +22 -0
  141. package/lib/nativePush/nativePushContract.fixture.js +27 -0
  142. package/lib/nativePush/payload.d.ts +2 -0
  143. package/lib/nativePush/payload.js +106 -0
  144. package/lib/nativePush/repository.d.ts +9 -0
  145. package/lib/nativePush/repository.js +120 -0
  146. package/lib/nativePush/service.d.ts +2 -0
  147. package/lib/nativePush/service.js +110 -0
  148. package/lib/nativePush/snsProvider.d.ts +17 -0
  149. package/lib/nativePush/snsProvider.js +165 -0
  150. package/lib/nativePush/types.d.ts +89 -0
  151. package/lib/nativePush/types.js +3 -0
  152. package/lib/objectTypes/analytics.js +1 -1
  153. package/lib/objectTypes/app.js +1 -1
  154. package/lib/objectTypes/bankAccount.js +1 -1
  155. package/lib/objectTypes/connection.js +1 -1
  156. package/lib/objectTypes/content.js +1 -1
  157. package/lib/objectTypes/contentGeneration.js +1 -1
  158. package/lib/objectTypes/conversation.js +1 -1
  159. package/lib/objectTypes/creditCard.js +1 -1
  160. package/lib/objectTypes/crm.js +1 -1
  161. package/lib/objectTypes/document.js +1 -1
  162. package/lib/objectTypes/error.js +1 -1
  163. package/lib/objectTypes/event.js +1 -1
  164. package/lib/objectTypes/external.js +1 -1
  165. package/lib/objectTypes/file.js +1 -1
  166. package/lib/objectTypes/filter.js +1 -1
  167. package/lib/objectTypes/flag.js +1 -1
  168. package/lib/objectTypes/group.js +1 -1
  169. package/lib/objectTypes/higgsfield.js +1 -1
  170. package/lib/objectTypes/iapSubscription.js +1 -1
  171. package/lib/objectTypes/image.js +1 -1
  172. package/lib/objectTypes/imageGeneration.js +1 -1
  173. package/lib/objectTypes/index.js +1 -1
  174. package/lib/objectTypes/location.js +1 -1
  175. package/lib/objectTypes/message.js +1 -1
  176. package/lib/objectTypes/passcode.js +1 -1
  177. package/lib/objectTypes/persona.js +1 -1
  178. package/lib/objectTypes/plan.js +1 -1
  179. package/lib/objectTypes/post.js +1 -1
  180. package/lib/objectTypes/query.js +1 -1
  181. package/lib/objectTypes/reaction.js +1 -1
  182. package/lib/objectTypes/relation.js +1 -1
  183. package/lib/objectTypes/rum.js +1 -1
  184. package/lib/objectTypes/search.js +1 -1
  185. package/lib/objectTypes/statistics.js +1 -1
  186. package/lib/objectTypes/subscription.js +1 -1
  187. package/lib/objectTypes/tag.js +1 -1
  188. package/lib/objectTypes/user.js +1 -1
  189. package/lib/objectTypes/video.js +1 -1
  190. package/lib/objectTypes/videoGeneration.js +1 -1
  191. package/lib/organizations/accountLifecycle.d.ts +7 -0
  192. package/lib/organizations/accountLifecycle.js +106 -0
  193. package/lib/organizations/authorization.d.ts +9 -0
  194. package/lib/organizations/authorization.js +40 -0
  195. package/lib/organizations/billing.d.ts +38 -0
  196. package/lib/organizations/billing.js +277 -0
  197. package/lib/organizations/billingProvider.d.ts +4 -0
  198. package/lib/organizations/billingProvider.js +287 -0
  199. package/lib/organizations/billingUpdates.d.ts +9 -0
  200. package/lib/organizations/billingUpdates.js +388 -0
  201. package/lib/organizations/index.d.ts +10 -0
  202. package/lib/organizations/index.js +12 -0
  203. package/lib/organizations/mail.d.ts +10 -0
  204. package/lib/organizations/mail.js +60 -0
  205. package/lib/organizations/memberDirectory.d.ts +15 -0
  206. package/lib/organizations/memberDirectory.js +28 -0
  207. package/lib/organizations/membership.d.ts +19 -0
  208. package/lib/organizations/membership.js +248 -0
  209. package/lib/organizations/passwordRecovery.d.ts +9 -0
  210. package/lib/organizations/passwordRecovery.js +50 -0
  211. package/lib/organizations/plans.d.ts +6 -0
  212. package/lib/organizations/plans.js +40 -0
  213. package/lib/organizations/providerPagination.d.ts +6 -0
  214. package/lib/organizations/providerPagination.js +23 -0
  215. package/lib/organizations/reconciliation.d.ts +11 -0
  216. package/lib/organizations/reconciliation.js +400 -0
  217. package/lib/organizations/signup.d.ts +25 -0
  218. package/lib/organizations/signup.js +169 -0
  219. package/lib/organizations/store.d.ts +25 -0
  220. package/lib/organizations/store.js +167 -0
  221. package/lib/organizations/types.d.ts +138 -0
  222. package/lib/organizations/types.js +3 -0
  223. package/lib/organizations/verification.d.ts +3 -0
  224. package/lib/organizations/verification.js +51 -0
  225. package/lib/queries/analytics/analytics.js +1 -1
  226. package/lib/queries/content/content.js +1 -1
  227. package/lib/queries/crm/crm.js +1 -1
  228. package/lib/queries/events/events.js +1 -1
  229. package/lib/queries/flags/flags.js +1 -1
  230. package/lib/queries/groups/groups.js +1 -1
  231. package/lib/queries/higgsfield/higgsfield.js +1 -1
  232. package/lib/queries/images/images.js +1 -1
  233. package/lib/queries/index.js +1 -1
  234. package/lib/queries/locations/locations.js +1 -1
  235. package/lib/queries/messages/messages.js +1 -1
  236. package/lib/queries/personas/personas.js +1 -1
  237. package/lib/queries/posts/posts.js +1 -1
  238. package/lib/queries/query/query.js +1 -1
  239. package/lib/queries/reactions/reactions.js +1 -1
  240. package/lib/queries/statistics/statistics.js +1 -1
  241. package/lib/queries/subscriptions/subscriptions.js +1 -1
  242. package/lib/queries/tags/tags.js +1 -1
  243. package/lib/queries/users/users.js +1 -1
  244. package/lib/queries/videos/videos.js +1 -1
  245. package/lib/templates/email/layout.js +1 -1
  246. package/lib/templates/email/passwordForgot.js +1 -1
  247. package/lib/templates/email/passwordRecovery.js +1 -1
  248. package/lib/templates/email/verifyEmail.js +1 -1
  249. package/lib/templates/email/welcome.js +1 -1
  250. package/lib/templates/sms/passwordForgot.js +1 -1
  251. package/lib/templates/sms/passwordRecovery.js +1 -1
  252. package/lib/templates/sms/verifyEmail.js +1 -1
  253. package/lib/templates/sms/verifyPhone.js +1 -1
  254. package/lib/templates/sms/welcome.js +1 -1
  255. package/lib/types/analytics.types.js +1 -1
  256. package/lib/types/apps.types.js +1 -1
  257. package/lib/types/arangodb.types.js +1 -1
  258. package/lib/types/auth.types.js +1 -1
  259. package/lib/types/connections.types.js +1 -1
  260. package/lib/types/content.types.js +1 -1
  261. package/lib/types/conversations.types.js +1 -1
  262. package/lib/types/crm.types.js +1 -1
  263. package/lib/types/databaseCredentials.types.js +1 -1
  264. package/lib/types/email.types.js +1 -1
  265. package/lib/types/error.types.js +1 -1
  266. package/lib/types/files.types.js +1 -1
  267. package/lib/types/flags.types.js +1 -1
  268. package/lib/types/google.types.js +1 -1
  269. package/lib/types/groups.types.js +1 -1
  270. package/lib/types/images.types.js +1 -1
  271. package/lib/types/index.js +1 -1
  272. package/lib/types/locations.types.js +1 -1
  273. package/lib/types/messages.types.js +1 -1
  274. package/lib/types/notifications.types.js +1 -1
  275. package/lib/types/payments.types.js +1 -1
  276. package/lib/types/personas.types.js +1 -1
  277. package/lib/types/posts.types.js +1 -1
  278. package/lib/types/rum.types.js +1 -1
  279. package/lib/types/statistics.types.js +1 -1
  280. package/lib/types/tags.types.js +1 -1
  281. package/lib/types/users.types.js +1 -1
  282. package/lib/types/videos.types.js +1 -1
  283. package/lib/types/websockets.types.js +1 -1
  284. package/lib/upload.js +1 -1
  285. package/lib/utils/adapterUtils.js +1 -1
  286. package/lib/utils/analyticsUtils.js +1 -1
  287. package/lib/utils/appContext.js +1 -1
  288. package/lib/utils/aqlHelpers.js +1 -1
  289. package/lib/utils/arangodbUtils.js +1 -1
  290. package/lib/utils/authUtils.js +1 -1
  291. package/lib/utils/awsUtils.js +1 -1
  292. package/lib/utils/collectionRegistry.js +1 -1
  293. package/lib/utils/contextUtils.js +1 -1
  294. package/lib/utils/databaseCredentials.js +1 -1
  295. package/lib/utils/dbI18n.example.js +1 -1
  296. package/lib/utils/dbI18n.js +1 -1
  297. package/lib/utils/generationCallback.js +1 -1
  298. package/lib/utils/googleTranslate.js +1 -1
  299. package/lib/utils/graphqlUtils.js +1 -1
  300. package/lib/utils/imageUtils.js +1 -1
  301. package/lib/utils/index.js +1 -1
  302. package/lib/utils/languageDetection.js +1 -1
  303. package/lib/utils/localeUtils.example.js +1 -1
  304. package/lib/utils/localeUtils.js +1 -1
  305. package/lib/utils/mediaAccess.js +1 -1
  306. package/lib/utils/middlewareUtils.js +1 -1
  307. package/lib/utils/nodeRealtime.js +1 -1
  308. package/lib/utils/opaqueToken.js +1 -1
  309. package/lib/utils/queryBuilder.js +1 -1
  310. package/lib/utils/schemaUtils.js +1 -1
  311. package/lib/utils/secretDatabase.js +1 -1
  312. package/lib/utils/sessionUtils.js +1 -1
  313. package/lib/utils/stripeUtils.js +1 -1
  314. package/lib/utils/stripeUtils.ts.bak +1 -1
  315. package/lib/utils/templateUtils.js +1 -1
  316. package/lib/utils/testUtils.js +1 -1
  317. package/lib/utils/translationQueue.example.js +1 -1
  318. package/lib/utils/translationQueue.js +1 -1
  319. package/lib/videoProcessing.js +1 -1
  320. package/package.json +16 -3
@@ -870,4 +870,4 @@ export const deleteImage = async (context, imageId)=>{
870
870
  }
871
871
  };
872
872
 
873
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbWFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgZXhpZlJlYWRlciBmcm9tICdleGlmLXJlYWRlcic7XG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEltYWdlRXh0ZW5zaW9ufSBmcm9tICcuLi91dGlscy9pbWFnZVV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldEdyb3VwRGV0YWlscywgaXNHcm91cGVkfSBmcm9tICcuL2dyb3Vwcy5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZX0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge3MzRGVsZXRlTGlzdCwgczNHZXRTaWduZWRVcmwsIHMzUHV0fSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7UXVlcnlGaWx0ZXJ9IGZyb20gJy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlRWRnZVR5cGUsIEltYWdlT3B0aW9ucywgSW1hZ2VUeXBlLCBJbWFnZVVybERhdGF9IGZyb20gJy4uL3R5cGVzL2ltYWdlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuXG4vLyBEZWZpbmUgaW50ZXJmYWNlIGZvciBIVFRQIHJlc3BvbnNlIHdpdGggYnVmZmVyIG1ldGhvZFxuaW50ZXJmYWNlIEh0dHBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcbiAgYnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPjtcbn1cblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdpbWFnZXMnO1xuY29uc3QgaGFzUmVhY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfUkVBQ1RJT04pO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgcGVyc29uYXNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG5jb25zdCBNRURJQV9JVEVNX0NPTExFQ1RJT05TOiByZWFkb25seSBBcmFuZ29EYkNvbGxlY3Rpb25bXSA9IFtcbiAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gIENPTExFQ1RJT05TLlVTRVJTLFxuICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgQ09MTEVDVElPTlMuR1JPVVBTXG5dO1xuXG50eXBlIFNoYXJwRm9ybWF0ID0gRXh0cmFjdDxQYXJhbWV0ZXJzPFJldHVyblR5cGU8dHlwZW9mIHNoYXJwPlsndG9Gb3JtYXQnXT5bMF0sIHN0cmluZz47XG5cbmNvbnN0IGdldE1lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb24pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGRvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKGRvY0lkKSB7XG4gICAgcmV0dXJuIFtkb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYoaXRlbVR5cGUgJiYgTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5pbmNsdWRlcyhpdGVtVHlwZSkpIHtcbiAgICByZXR1cm4gW2Ake2l0ZW1UeXBlfS8ke2l0ZW1LZXl9YF07XG4gIH1cblxuICByZXR1cm4gTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5tYXAoKGNvbGxlY3Rpb24pID0+IGAke2NvbGxlY3Rpb259LyR7aXRlbUtleX1gKTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlRm9ybWF0ID0gKGZvcm1hdDogc3RyaW5nKTogU2hhcnBGb3JtYXQgPT5cbiAgKGZvcm1hdCA9PT0gJ2pwZycgPyAnanBlZycgOiBmb3JtYXQpIGFzIFNoYXJwRm9ybWF0O1xuXG5jb25zdCBpbWFnZUV4aWZNZXRhZGF0YSA9IChleGlmPzogQnVmZmVyKSA9PiB7XG4gIGlmKCFleGlmKSByZXR1cm4ge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGV4aWZSZWFkZXIoZXhpZik7XG4gICAgY29uc3QgdGFrZW4gPSBtZXRhZGF0YS5QaG90bz8uRGF0ZVRpbWVPcmlnaW5hbDtcbiAgICByZXR1cm4ge1xuICAgICAgbWFrZTogbWV0YWRhdGEuSW1hZ2U/Lk1ha2UsXG4gICAgICBtb2RlbDogbWV0YWRhdGEuSW1hZ2U/Lk1vZGVsLFxuICAgICAgdGFrZW46IHRha2VuIGluc3RhbmNlb2YgRGF0ZSA/IHRha2VuLmdldFRpbWUoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VQcml2YWN5ID0gKHByaXZhY3k6IHVua25vd24pOiAnZnJpZW5kcycgfCAncHJpdmF0ZScgfCAncHVibGljJyB8ICd2aXAnID0+IHtcbiAgc3dpdGNoKFN0cmluZyhwcml2YWN5IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuICdmcmllbmRzJztcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiAncHJpdmF0ZSc7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiAndmlwJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG59O1xuXG5jb25zdCBjYW5WaWV3SW1hZ2UgPSAoXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHZpZXdlclVzZXJJZDogc3RyaW5nLFxuICBhY2Nlc3M6IHtcbiAgICByZWFkb25seSBjYW5WaWV3RnJpZW5kczogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYW5WaWV3VmlwOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGlzT3duZXI6IGJvb2xlYW47XG4gIH1cbikgPT4ge1xuICBjb25zdCBwcml2YWN5ID0gbm9ybWFsaXplSW1hZ2VQcml2YWN5KGltYWdlPy5wcml2YWN5KTtcblxuICBpZihhY2Nlc3MuaXNPd25lciB8fCBTdHJpbmcoaW1hZ2U/LnVzZXJJZCB8fCAnJykgPT09IHZpZXdlclVzZXJJZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoKHByaXZhY3kpIHtcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld0ZyaWVuZHM7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld1ZpcDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUltYWdlT3B0aW9ucyA9IChvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZU9wdGlvbmFsRmllbGRzID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnaW1hZ2VzJywgJ2knLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBpbWFnZSwgciBJTiBJTkJPVU5EIGkuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB0YWdzID0gKFxuICAgICAgICAgIEZPUiB0LCBwbCBJTiBJTkJPVU5EIGkuX2lkIGlzVGFnZ2VkXG4gICAgICAgICAgUkVUVVJOIHRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBpLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgIH1cbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyID0gMCxcbiAgdG86IG51bWJlciA9IDMwXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeVVzZXInO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCB7dXNlcklkOiBmb3JtYXRVc2VySWR9LCB7XG4gICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICBjdXN0b21RdWVyaWVzOiBbXG4gICAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gICAgXSxcbiAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZnJvbSwgdG8sIHVzZXJJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUNvdW50QnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlQ291bnRCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgaSBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIGkuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgaS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpdGVtSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEltYWdlT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlID0gb3B0aW9ucz8uaXRlbVR5cGUgPyBwYXJzZUNoYXIoU3RyaW5nKG9wdGlvbnMuaXRlbVR5cGUgfHwgJycpLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkLCBmb3JtYXRJdGVtVHlwZSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcImltYWdlXCJcbiAgICAgIExFVCBpID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwoaSlcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcblxuICAgIGNvbnN0IG93bmVyVXNlcklkID0gU3RyaW5nKGxpc3RbMF0/LnVzZXJJZCB8fCAnJyk7XG4gICAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gICAgaWYoaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuVmlld0ZyaWVuZHMgPSBmYWxzZTtcbiAgICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWVkaWFJdGVtS2V5ID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1LZXkgfHwgJycpO1xuICAgIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcoKGxpc3RbMF0gYXMgSW1hZ2VUeXBlICYge19tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1UeXBlIHx8ICcnKTtcblxuICAgIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgICBjYW5WaWV3RnJpZW5kcyA9ICEhcmVsYXRpb25zaGlwPy5pc0ZyaWVuZDtcbiAgICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChpbWFnZSkgPT4gY2FuVmlld0ltYWdlKGltYWdlLCBzZXNzaW9uVXNlcklkLCB7Y2FuVmlld0ZyaWVuZHMsIGNhblZpZXdWaXAsIGlzT3duZXJ9KSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7aXRlbUlkLCBvcHRpb25zOiB7Li4ub3B0aW9ucywgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlfX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUdyb3VwID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwYXJhbXM6IHtmaWx0ZXJzOiBRdWVyeUZpbHRlcltdLCBncm91cElkOiBzdHJpbmcsIGZyb206IG51bWJlciwgdG86IG51bWJlcn1cbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlc0J5R3JvdXAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtmaWx0ZXJzLCBncm91cElkLCBmcm9tLCB0b30gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICBmaWx0ZXJzXG4gICAgLm1hcCgoZmlsdGVyOiBRdWVyeUZpbHRlcikgPT4ge1xuICAgICAgY29uc3Qge2NvbmRpdGlvbmFsLCBuYW1lLCB2YWx1ZX0gPSBmaWx0ZXI7XG4gICAgICBsZXQgZm9ybWF0Q29uZCA9IGNvbmRpdGlvbmFsO1xuXG4gICAgICBpZihjb25kaXRpb25hbCAhPT0gJz49JyAmJiBjb25kaXRpb25hbCAhPT0gJzw9JyAmJiBjb25kaXRpb25hbCAhPT0gJz4nICYmIGNvbmRpdGlvbmFsICE9PSAnPCcpIHtcbiAgICAgICAgZm9ybWF0Q29uZCA9ICc9PSc7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICByZXR1cm4gYHAuYWRkZWQgJHtmb3JtYXRDb25kfSAke3BhcnNlTnVtKHZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gZ2V0R3JvdXBEZXRhaWxzKGNvbnRleHQsIGZvcm1hdEdyb3VwSWQpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGlmKGdyb3VwLnByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGZvcm1hdEdyb3VwSWR9KTtcbiAgICAgICAgY29uc3QgZmlsdGVyU3RyID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGkgSU4gRkxBVFRFTihcbiAgICAgICAgICAgIEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyU3RyKX1cbiAgICAgICAgICAgICAgTEVUIGltYWdlcyA9IChcbiAgICAgICAgICAgICAgICBGT1IgaSwgZSBJTiBPVVRCT1VORCBwLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgIFJFVFVSTiBpbWFnZXNcbiAgICAgICAgICApXG4gICAgICAgICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICBgO1xuXG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNHcm91cGVkKGNvbnRleHQsIHNlc3Npb25JZCwgZ3JvdXBJZClcbiAgICAgICAgLnRoZW4oKGdyb3VwZWQ6IEdyb3VwVXNlcikgPT4ge1xuICAgICAgICAgIGlmKGdyb3VwZWQuaXNWYWxpZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZ3JvdXBlZC5ncm91cElkfSk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0ID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgICAgICBGT1IgcCBJTiBwb3N0XG4gICAgICAgICAgICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJMaXN0KX1cbiAgICAgICAgICAgICAgICBGT1IgZiBJTiBwLmZpbGVzXG4gICAgICAgICAgICAgICAgICBGSUxURVIgZi50eXBlID09IFwiaW1hZ2UvanBlZ1wiIHx8IGYudHlwZSA9PSBcImltYWdlL3BuZ1wiXG4gICAgICAgICAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gZlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IEltYWdlT3B0aW9uc1xuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwiaW1hZ2VzXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBdO1xuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIGkuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShpLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ2knKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXRQZXJzb25hRG9jSWQgPSAocGVyc29uYUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBwYXJzZUFyYW5nb0lkKHBlcnNvbmFJZCk7XG5cbiAgaWYocGVyc29uYURvY0lkKSB7XG4gICAgcmV0dXJuIHBlcnNvbmFEb2NJZDtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFLZXkgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG4gIHJldHVybiBwZXJzb25hS2V5ID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGVyc29uYUtleX1gIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnLFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyc7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKTtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gZ2V0UGVyc29uYURvY0lkKHBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkKTtcbiAgY29uc3QgcmVhY3Rpb25OYW1lcyA9IEFycmF5LmlzQXJyYXkocmVhY3Rpb25zKVxuICAgID8gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikudG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmKCFwZXJzb25hRG9jSWQgfHwgIXJlYWN0aW9uTmFtZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaW1hZ2UsIHJlYWN0aW9uIElOIE9VVEJPVU5EICR7cGVyc29uYURvY0lkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbGluayBJTiBJTkJPVU5EIGltYWdlLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbGluay50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbGluay5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGxpbmsuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtwZXJzb25hc0NvbGxlY3Rpb259LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgIEZJTFRFUiBMT1dFUihyZWFjdGlvbi50eXBlIHx8IFwiXCIpIElOIFtcImltYWdlXCIsIFwiaW1hZ2VzXCJdXG4gICAgICBGSUxURVIgUE9TSVRJT04oJHtyZWFjdGlvbk5hbWVzfSwgTE9XRVIocmVhY3Rpb24ubmFtZSB8fCByZWFjdGlvbi52YWx1ZSB8fCBcIlwiKSlcbiAgICAgIFNPUlQgcmVhY3Rpb24uYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoaW1hZ2UsIHtcbiAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgfSlcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCBwZXJzb25hSWQsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgIGZpbHRlcnM6IFt7ZmllbGQ6ICdfa2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRJbWFnZUlkfV1cbiAgfSBhcyBhbnk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmaWx0ZXJzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VySW1hZ2VQYXRoID0gKHVzZXJJZDogc3RyaW5nLCBpbWFnZUlkOiBzdHJpbmcsIGltYWdlVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICdpbWFnZXMnKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBgJHtpbWFnZUlkfS4ke2dldEltYWdlRXh0ZW5zaW9uKGltYWdlVHlwZSl9YDtcblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcEltYWdlVXJsID0gKHtcbiAgYnVja2V0LFxuICBkaXJlY3RvcnkgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkXG59OiBJbWFnZVVybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgaWYoaW1hZ2VUeXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX2JrLmpwZ2A7XG4gICAgfVxuICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX3doLmpwZ2A7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IGltYWdlTmFtZSA9IGlzVGh1bWIgPyBgJHtpbWFnZUlkfS10aC4ke2ltYWdlVHlwZX1gIDogYCR7aW1hZ2VJZH0uJHtpbWFnZVR5cGUgPT09ICdwZXJzb25hJyB8fCBpbWFnZVR5cGUgPT09ICdvdGhlcicgPyAnanBnJyA6IGltYWdlVHlwZX1gO1xuICBjb25zdCBpbWFnZVVybCA9IENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWA7XG5cbiAgaWYodHlwZSA9PT0gJ2FwcHMnKSB7XG4gICAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7dHlwZUlkfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9IGFzeW5jICh7XG4gIGJ1Y2tldCxcbiAgaW1hZ2VEaXIgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB1cmxUeXBlID0gJ3B1YmxpYydcbn06IEltYWdlVXJsRGF0YSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBjb25maWd1cmVkSW1hZ2VVcmwgPSBTdHJpbmcoQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgJycpO1xuICBjb25zdCBjb25maWd1cmVkQXBwVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2FwcC51cmwnKSB8fCAnJyk7XG4gIGNvbnN0IHB1YmxpY0Jhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9ib3guJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG4gIGNvbnN0IGRldkJhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke2NvbmZpZ3VyZWRBcHBVcmx9YFxuICAgIDogKGNvbmZpZ3VyZWRJbWFnZVVybCB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gKTtcblxuICAvLyBBbHdheXMgdXNlIHNpZ25lZCBVUkxzIGZvciB0aHVtYm5haWxzXG4gIGlmKGlzVGh1bWIpIHtcbiAgICB1cmxUeXBlID0gJ3NpZ25lZCc7XG4gIH1cblxuICBjb25zdCB0aHVtYlN1ZmZpeCA9IGlzVGh1bWIgPyAnLXRoJyA6ICcnO1xuICBjb25zdCBpbWFnZUtleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2ltYWdlRGlyfS8ke2ltYWdlSWR9JHt0aHVtYlN1ZmZpeH0uJHtpbWFnZVR5cGV9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXROYW1lLCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IGltYWdlS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgJHtwdWJsaWNCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgJHtkZXZCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNpemVBbmRTYXZlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZycsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3Jlc2l6ZVNhdmVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGltZ1cgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdTaXplJyk7XG4gIGNvbnN0IGltZ1EgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdRdWFsaXR5Jyk7XG4gIGNvbnN0IGZvcm1hdCA9IChmaWxlVHlwZS5zcGxpdCgnLycpKVsxXSB8fCAnanBlZyc7XG4gIGNvbnN0IHNoYXJwRm9ybWF0ID0gbm9ybWFsaXplSW1hZ2VGb3JtYXQoZm9ybWF0KTtcbiAgbGV0IGltYWdlT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBidWZmZXI7XG4gIGxldCB0aHVtYk9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgaW1hZ2VJZGVudGl0eTogSW1hZ2VUeXBlID0ge1xuICAgIGZpbGVTaXplOiBidWZmZXIubGVuZ3RoLFxuICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgaW1hZ2VJZFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaW1hZ2VPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBzaGFycChidWZmZXIpXG4gICAgICAucm90YXRlKClcbiAgICAgIC5yZXNpemUoe1xuICAgICAgICBmaXQ6ICdpbnNpZGUnLFxuICAgICAgICBoZWlnaHQ6IGltZ1csXG4gICAgICAgIHdpZHRoOiBpbWdXLFxuICAgICAgICB3aXRob3V0RW5sYXJnZW1lbnQ6IHRydWVcbiAgICAgIH0pXG4gICAgICAudG9Gb3JtYXQoc2hhcnBGb3JtYXQsIHtxdWFsaXR5OiBpbWdRfSlcbiAgICAgIC50b0J1ZmZlcigpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2VPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IGltYWdlT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ2ltYWdlcycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dChpbWFnZU9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbaW1hZ2VNZXRhZGF0YSwgaW1hZ2VTdGF0cywgc291cmNlTWV0YWRhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpLm1ldGFkYXRhKCksXG4gICAgICBzaGFycChpbWFnZU9wdGltaXplZEJ1ZmZlcikuc3RhdHMoKSxcbiAgICAgIHNoYXJwKGJ1ZmZlcikubWV0YWRhdGEoKVxuICAgIF0pO1xuICAgIGNvbnN0IHtiLCBnLCByfSA9IGltYWdlU3RhdHMuZG9taW5hbnQ7XG4gICAgY29uc3QgY29sb3IgPSBbciwgZywgYl0ubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIGNvbnN0IGV4aWZNZXRhZGF0YSA9IGltYWdlRXhpZk1ldGFkYXRhKHNvdXJjZU1ldGFkYXRhLmV4aWYpO1xuXG4gICAgaW1hZ2VJZGVudGl0eSA9IHtcbiAgICAgIGNvbG9yLFxuICAgICAgZmlsZVNpemU6IGltYWdlT3B0aW1pemVkQnVmZmVyLmxlbmd0aCxcbiAgICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgICBoZWlnaHQ6IGltYWdlTWV0YWRhdGEuaGVpZ2h0IHx8IDAsXG4gICAgICBpbWFnZUlkLFxuICAgICAgLi4uZXhpZk1ldGFkYXRhLFxuICAgICAgb3JpZW50YXRpb246IGltYWdlTWV0YWRhdGEub3JpZW50YXRpb24gPyBTdHJpbmcoaW1hZ2VNZXRhZGF0YS5vcmllbnRhdGlvbikgOiB1bmRlZmluZWQsXG4gICAgICBxdWFsaXR5OiBpbWdRLFxuICAgICAgcmVzb2x1dGlvbjogaW1hZ2VNZXRhZGF0YS5kZW5zaXR5ID8gYCR7aW1hZ2VNZXRhZGF0YS5kZW5zaXR5fSBwcGlgIDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGg6IGltYWdlTWV0YWRhdGEud2lkdGggfHwgMFxuICAgIH07XG5cbiAgICBjb25zdCB0aG1XID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtU2l6ZScpO1xuICAgIGNvbnN0IHRobVEgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1RdWFsaXR5Jyk7XG4gICAgdGh1bWJPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBzaGFycChpbWFnZU9wdGltaXplZEJ1ZmZlcilcbiAgICAgIC5yZXNpemUoe1xuICAgICAgICBmaXQ6ICdjb3ZlcicsXG4gICAgICAgIGhlaWdodDogdGhtVyxcbiAgICAgICAgcG9zaXRpb246ICdjZW50cmUnLFxuICAgICAgICB3aWR0aDogdGhtV1xuICAgICAgfSlcbiAgICAgIC50b0Zvcm1hdChzaGFycEZvcm1hdCwge3F1YWxpdHk6IHRobVF9KVxuICAgICAgLnRvQnVmZmVyKCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0aHVtYk9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQm9keTogdGh1bWJPcHRpbWl6ZWRCdWZmZXIsXG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICAgIEtleTogZ2V0VXNlckltYWdlUGF0aChzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAndGh1bWJzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KHRodW1iT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW1hZ2VJZGVudGl0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGUsIGl0ZW1JZCwgaXRlbVR5cGUsIHByaXZhY3kgPSAncHVibGljJ30gPSBpbWFnZTtcblxuICByZXR1cm4gcmVzaXplQW5kU2F2ZUltYWdlKGNvbnRleHQsIGltYWdlSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigocmVzaXplZEltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogSW1hZ2VUeXBlID0ge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGltYWdlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgaW5zZXJ0KVxuICAgICAgICAudGhlbigoc2F2ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiBhZGRJbWFnZUVkZ2UoY29udGV4dCwge1xuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbUlkOiBpdGVtSWQgfHwgc2Vzc2lvbklkLFxuICAgICAgICAgIGl0ZW1UeXBlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCAndXNlcnMnLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICB9KS50aGVuKCgpID0+IHNhdmVkSW1hZ2UpKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFU0laRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2VFZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJbWFnZUVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGltYWdlRWRnZTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTWVkaWEtaW1hZ2UtJHtpbWFnZUlkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWxlRG9jSWQgPSBgaW1hZ2VzLyR7Zm9ybWF0SW1hZ2VJZH1gO1xuXG4gIGNvbnN0IGVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7XG4gICAgX2Zyb206IGl0ZW1Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmaWxlRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBpdGVtVHlwZSxcbiAgICB0eXBlOiAnaW1hZ2UnXG4gIH07XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGVkZ2UsXG4gICAgICAgICAgZmlsZURvY0lkLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbURvY0lkLFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBpdGVtVHlwZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IGltYWdlQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQsXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIGZpbGVUeXBlLFxuICAgIHByaXZhY3ksXG4gICAgdXJsID0gJydcbiAgfSA9IGltYWdlO1xuXG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBpbWFnZUlkIHx8IGNyZWF0ZUhhc2goYGltYWdlLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgY3VzdG9tUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICBwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcblxuICBpZihiYXNlNjQgfHwgaW1hZ2VCdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSBpbWFnZUJ1ZmZlcjtcblxuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG5cbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgICAgICAgICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFUVVFU1RcbiAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IChyZXMgYXMgSHR0cFJlc3BvbnNlKS5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGZpbGVUeXBlOiBjb250ZW50VHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAnaW1hZ2UnfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6ICdmZXRjaF9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZihpbWFnZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7ZGVzY3JpcHRpb259IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSl9IDoge30pXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHVwZGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGRlbGV0ZUl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZm9ybWF0SW1hZ2VJZCwge1xuICAgICAgY2FzY2FkZTogW0VER0VTLkhBU19NRURJQV0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKCFpbWFnZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIFMzIGZpbGVzXG4gICAgY29uc3Qge19rZXk6IGltYWdlS2V5fSA9IGltYWdlO1xuICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS9pbWFnZXMvJHtpbWFnZUtleX0uanBnYH0sXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS90aHVtYnMvJHtpbWFnZUtleX0uanBnYH1cbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJleGlmUmVhZGVyIiwic2hhcnAiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJ1c2VEYiIsImdldEltYWdlRXh0ZW5zaW9uIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiZ2V0R3JvdXBEZXRhaWxzIiwiaXNHcm91cGVkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiczNEZWxldGVMaXN0IiwiczNHZXRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJwZXJzb25hc0NvbGxlY3Rpb24iLCJQRVJTT05BUyIsIk1FRElBX0lURU1fQ09MTEVDVElPTlMiLCJVU0VSUyIsIlBPU1RTIiwiR1JPVVBTIiwiZ2V0TWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJkb2NJZCIsIml0ZW1LZXkiLCJpbmNsdWRlcyIsIm1hcCIsImNvbGxlY3Rpb24iLCJub3JtYWxpemVJbWFnZUZvcm1hdCIsImZvcm1hdCIsImltYWdlRXhpZk1ldGFkYXRhIiwiZXhpZiIsIm1ldGFkYXRhIiwidGFrZW4iLCJQaG90byIsIkRhdGVUaW1lT3JpZ2luYWwiLCJtYWtlIiwiSW1hZ2UiLCJNYWtlIiwibW9kZWwiLCJNb2RlbCIsIkRhdGUiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwibm9ybWFsaXplSW1hZ2VQcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdJbWFnZSIsImltYWdlIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInBhcnNlSW1hZ2VPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldEltYWdlT3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJnZXRJbWFnZUxpc3RCeVVzZXIiLCJjb250ZXh0IiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldEltYWdlQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0SW1hZ2VMaXN0QnlJdGVtIiwic2Vzc2lvbiIsInNlc3Npb25Vc2VySWQiLCJmb3JtYXRJdGVtVHlwZSIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImxpc3QiLCJhbGwiLCJvd25lclVzZXJJZCIsImZpbHRlciIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsImdldEltYWdlTGlzdEJ5R3JvdXAiLCJzZXNzaW9uSWQiLCJmaWx0ZXJzIiwiZ3JvdXBJZCIsImZvcm1hdEdyb3VwSWQiLCJjb25kaXRpb25hbCIsIm5hbWUiLCJmb3JtYXRDb25kIiwiZ3JvdXAiLCJmaWx0ZXJTdHIiLCJncm91cGVkIiwiaXNWYWxpZCIsImZpbHRlckxpc3QiLCJnZXRJbWFnZUxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9ucyIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZSIsImZpbHRlckJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFBlcnNvbmFEb2NJZCIsInBlcnNvbmFJZCIsInBlcnNvbmFEb2NJZCIsInBlcnNvbmFLZXkiLCJnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwicmVhY3Rpb25OYW1lcyIsIkFycmF5IiwiaXNBcnJheSIsIkJvb2xlYW4iLCJnZXRJbWFnZUJ5SWQiLCJpbWFnZUlkIiwiZm9ybWF0SW1hZ2VJZCIsIm9wZXJhdG9yIiwiZ2V0VXNlckltYWdlUGF0aCIsImltYWdlVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0QXBwSW1hZ2VVcmwiLCJidWNrZXQiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsImltYWdlTmFtZSIsImltYWdlVXJsIiwiZ2V0SW1hZ2VVcmwiLCJpbWFnZURpciIsInVybFR5cGUiLCJjb25maWd1cmVkSW1hZ2VVcmwiLCJjb25maWd1cmVkQXBwVXJsIiwicHVibGljQmFzZVVybCIsImRldkJhc2VVcmwiLCJ0aHVtYlN1ZmZpeCIsImltYWdlS2V5IiwiQnVja2V0IiwiRXhwaXJlcyIsIktleSIsInJlc2l6ZUFuZFNhdmVJbWFnZSIsImJ1ZmZlciIsImZpbGVUeXBlIiwiczNPcHRpb25zIiwiaW1nVyIsImltZ1EiLCJzcGxpdCIsInNoYXJwRm9ybWF0IiwiaW1hZ2VPcHRpbWl6ZWRCdWZmZXIiLCJ0aHVtYk9wdGltaXplZEJ1ZmZlciIsImltYWdlSWRlbnRpdHkiLCJmaWxlU2l6ZSIsInJvdGF0ZSIsInJlc2l6ZSIsImZpdCIsImhlaWdodCIsIndpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50IiwidG9Gb3JtYXQiLCJxdWFsaXR5IiwidG9CdWZmZXIiLCJJTUFHRV9TQVZFIiwiaW1hZ2VPYmoiLCJCb2R5IiwiQ29udGVudFR5cGUiLCJpbWFnZU1ldGFkYXRhIiwiaW1hZ2VTdGF0cyIsInNvdXJjZU1ldGFkYXRhIiwiUHJvbWlzZSIsInN0YXRzIiwiYiIsImciLCJyIiwiZG9taW5hbnQiLCJjb2xvciIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJleGlmTWV0YWRhdGEiLCJvcmllbnRhdGlvbiIsInJlc29sdXRpb24iLCJkZW5zaXR5IiwidGhtVyIsInRobVEiLCJwb3NpdGlvbiIsInRodW1iT2JqIiwiYWRkSW1hZ2UiLCJkZXNjcmlwdGlvbiIsInJlc2l6ZWRJbWFnZSIsImluc2VydCIsIl9rZXkiLCJzYXZlZEltYWdlIiwiYWRkSW1hZ2VFZGdlIiwiSU1BR0VfUkVTSVpFIiwiaW1hZ2VFZGdlIiwibm93IiwiZWRnZUlkIiwiZm9ybWF0SXRlbUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZUltYWdlIiwiYmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJ1cmwiLCJjdXN0b21QYXJhbXMiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiQnVmZmVyIiwidXBkYXRlZEZpbGVUeXBlIiwiZmlsZVR5cGVGcm9tQnVmZmVyIiwibWltZSIsImltZ1BhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJkZWxldGVJbWFnZSIsImNhc2NhZGUiLCJvd25lcnNoaXAiLCJEZWxldGUiLCJPYmplY3RzIiwiUXVpZXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDeEcsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FBQy9DLE9BQU9DLGdCQUFnQixjQUFjO0FBQ3JDLE9BQU9DLFdBQVcsUUFBUTtBQUUxQixTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLEVBQUVDLFlBQVksUUFBTyw2QkFBNkI7QUFDbEUsU0FBUUMsUUFBUSxF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
873
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbWFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgZXhpZlJlYWRlciBmcm9tICdleGlmLXJlYWRlcic7XG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yLCBsb2dFeGNlcHRpb259IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCBzZWxlY3RSZWFjdGlvbkNvdW50QnlUeXBlLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEltYWdlRXh0ZW5zaW9ufSBmcm9tICcuLi91dGlscy9pbWFnZVV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldEdyb3VwRGV0YWlscywgaXNHcm91cGVkfSBmcm9tICcuL2dyb3Vwcy5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZX0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge3MzRGVsZXRlTGlzdCwgczNHZXRTaWduZWRVcmwsIHMzUHV0fSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7UXVlcnlGaWx0ZXJ9IGZyb20gJy4uL3R5cGVzL2FwcHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0dyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ltYWdlRWRnZVR5cGUsIEltYWdlT3B0aW9ucywgSW1hZ2VUeXBlLCBJbWFnZVVybERhdGF9IGZyb20gJy4uL3R5cGVzL2ltYWdlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuXG4vLyBEZWZpbmUgaW50ZXJmYWNlIGZvciBIVFRQIHJlc3BvbnNlIHdpdGggYnVmZmVyIG1ldGhvZFxuaW50ZXJmYWNlIEh0dHBSZXNwb25zZSBleHRlbmRzIFJlc3BvbnNlIHtcbiAgYnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPjtcbn1cblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdpbWFnZXMnO1xuY29uc3QgaGFzUmVhY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfUkVBQ1RJT04pO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgcGVyc29uYXNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG5jb25zdCBNRURJQV9JVEVNX0NPTExFQ1RJT05TOiByZWFkb25seSBBcmFuZ29EYkNvbGxlY3Rpb25bXSA9IFtcbiAgQ09MTEVDVElPTlMuUEVSU09OQVMsXG4gIENPTExFQ1RJT05TLlVTRVJTLFxuICBDT0xMRUNUSU9OUy5QT1NUUyxcbiAgQ09MTEVDVElPTlMuR1JPVVBTXG5dO1xuXG50eXBlIFNoYXJwRm9ybWF0ID0gRXh0cmFjdDxQYXJhbWV0ZXJzPFJldHVyblR5cGU8dHlwZW9mIHNoYXJwPlsndG9Gb3JtYXQnXT5bMF0sIHN0cmluZz47XG5cbmNvbnN0IGdldE1lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb24pOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IGRvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKGRvY0lkKSB7XG4gICAgcmV0dXJuIFtkb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYoaXRlbVR5cGUgJiYgTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5pbmNsdWRlcyhpdGVtVHlwZSkpIHtcbiAgICByZXR1cm4gW2Ake2l0ZW1UeXBlfS8ke2l0ZW1LZXl9YF07XG4gIH1cblxuICByZXR1cm4gTUVESUFfSVRFTV9DT0xMRUNUSU9OUy5tYXAoKGNvbGxlY3Rpb24pID0+IGAke2NvbGxlY3Rpb259LyR7aXRlbUtleX1gKTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZUltYWdlRm9ybWF0ID0gKGZvcm1hdDogc3RyaW5nKTogU2hhcnBGb3JtYXQgPT5cbiAgKGZvcm1hdCA9PT0gJ2pwZycgPyAnanBlZycgOiBmb3JtYXQpIGFzIFNoYXJwRm9ybWF0O1xuXG5jb25zdCBpbWFnZUV4aWZNZXRhZGF0YSA9IChleGlmPzogQnVmZmVyKSA9PiB7XG4gIGlmKCFleGlmKSByZXR1cm4ge307XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IGV4aWZSZWFkZXIoZXhpZik7XG4gICAgY29uc3QgdGFrZW4gPSBtZXRhZGF0YS5QaG90bz8uRGF0ZVRpbWVPcmlnaW5hbDtcbiAgICByZXR1cm4ge1xuICAgICAgbWFrZTogbWV0YWRhdGEuSW1hZ2U/Lk1ha2UsXG4gICAgICBtb2RlbDogbWV0YWRhdGEuSW1hZ2U/Lk1vZGVsLFxuICAgICAgdGFrZW46IHRha2VuIGluc3RhbmNlb2YgRGF0ZSA/IHRha2VuLmdldFRpbWUoKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VQcml2YWN5ID0gKHByaXZhY3k6IHVua25vd24pOiAnZnJpZW5kcycgfCAncHJpdmF0ZScgfCAncHVibGljJyB8ICd2aXAnID0+IHtcbiAgc3dpdGNoKFN0cmluZyhwcml2YWN5IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuICdmcmllbmRzJztcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiAncHJpdmF0ZSc7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiAndmlwJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG59O1xuXG5jb25zdCBjYW5WaWV3SW1hZ2UgPSAoXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHZpZXdlclVzZXJJZDogc3RyaW5nLFxuICBhY2Nlc3M6IHtcbiAgICByZWFkb25seSBjYW5WaWV3RnJpZW5kczogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYW5WaWV3VmlwOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGlzT3duZXI6IGJvb2xlYW47XG4gIH1cbikgPT4ge1xuICBjb25zdCBwcml2YWN5ID0gbm9ybWFsaXplSW1hZ2VQcml2YWN5KGltYWdlPy5wcml2YWN5KTtcblxuICBpZihhY2Nlc3MuaXNPd25lciB8fCBTdHJpbmcoaW1hZ2U/LnVzZXJJZCB8fCAnJykgPT09IHZpZXdlclVzZXJJZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoKHByaXZhY3kpIHtcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld0ZyaWVuZHM7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld1ZpcDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUltYWdlT3B0aW9ucyA9IChvcHRpb25zOiBJbWFnZU9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMCxcbiAgICB0eXBlID0gJ2RlZmF1bHQnXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZU9wdGlvbmFsRmllbGRzID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgnaW1hZ2VzJywgJ2knLCBmaWVsZCwgc2VsZWN0cyk7XG4gICAgfVxuXG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBpbWFnZSwgciBJTiBJTkJPVU5EIGkuX2lkIHJlYWN0aW9uc1xuICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICApYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB0YWdzID0gKFxuICAgICAgICAgIEZPUiB0LCBwbCBJTiBJTkJPVU5EIGkuX2lkIGlzVGFnZ2VkXG4gICAgICAgICAgUkVUVVJOIHRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBpLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgIH1cbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyID0gMCxcbiAgdG86IG51bWJlciA9IDMwXG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeVVzZXInO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG5cbiAgcmV0dXJuIGdldExpc3RCeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCB7dXNlcklkOiBmb3JtYXRVc2VySWR9LCB7XG4gICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICBjdXN0b21RdWVyaWVzOiBbXG4gICAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gICAgXSxcbiAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7ZnJvbSwgdG8sIHVzZXJJZH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUNvdW50QnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlQ291bnRCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgaSBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIGkuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgaS50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpdGVtSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlTGlzdEJ5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEltYWdlT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJbWFnZXNCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlID0gb3B0aW9ucz8uaXRlbVR5cGUgPyBwYXJzZUNoYXIoU3RyaW5nKG9wdGlvbnMuaXRlbVR5cGUgfHwgJycpLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRNZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkLCBmb3JtYXRJdGVtVHlwZSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUltYWdlT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0SW1hZ2VPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcImltYWdlXCJcbiAgICAgIExFVCBpID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwoaSlcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UoaSwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCdpJyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKTtcblxuICAgIGNvbnN0IG93bmVyVXNlcklkID0gU3RyaW5nKGxpc3RbMF0/LnVzZXJJZCB8fCAnJyk7XG4gICAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gICAgaWYoaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigoaW1hZ2UpID0+IG5vcm1hbGl6ZUltYWdlUHJpdmFjeShpbWFnZT8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuVmlld0ZyaWVuZHMgPSBmYWxzZTtcbiAgICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWVkaWFJdGVtS2V5ID0gU3RyaW5nKChsaXN0WzBdIGFzIEltYWdlVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1LZXkgfHwgJycpO1xuICAgIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcoKGxpc3RbMF0gYXMgSW1hZ2VUeXBlICYge19tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfSk/Ll9tZWRpYUl0ZW1UeXBlIHx8ICcnKTtcblxuICAgIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgICBjYW5WaWV3RnJpZW5kcyA9ICEhcmVsYXRpb25zaGlwPy5pc0ZyaWVuZDtcbiAgICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKChpbWFnZSkgPT4gY2FuVmlld0ltYWdlKGltYWdlLCBzZXNzaW9uVXNlcklkLCB7Y2FuVmlld0ZyaWVuZHMsIGNhblZpZXdWaXAsIGlzT3duZXJ9KSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7aXRlbUlkLCBvcHRpb25zOiB7Li4ub3B0aW9ucywgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlfX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZUxpc3RCeUdyb3VwID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwYXJhbXM6IHtmaWx0ZXJzOiBRdWVyeUZpbHRlcltdLCBncm91cElkOiBzdHJpbmcsIGZyb206IG51bWJlciwgdG86IG51bWJlcn1cbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlc0J5R3JvdXAnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtmaWx0ZXJzLCBncm91cElkLCBmcm9tLCB0b30gPSBwYXJhbXM7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICBmaWx0ZXJzXG4gICAgLm1hcCgoZmlsdGVyOiBRdWVyeUZpbHRlcikgPT4ge1xuICAgICAgY29uc3Qge2NvbmRpdGlvbmFsLCBuYW1lLCB2YWx1ZX0gPSBmaWx0ZXI7XG4gICAgICBsZXQgZm9ybWF0Q29uZCA9IGNvbmRpdGlvbmFsO1xuXG4gICAgICBpZihjb25kaXRpb25hbCAhPT0gJz49JyAmJiBjb25kaXRpb25hbCAhPT0gJzw9JyAmJiBjb25kaXRpb25hbCAhPT0gJz4nICYmIGNvbmRpdGlvbmFsICE9PSAnPCcpIHtcbiAgICAgICAgZm9ybWF0Q29uZCA9ICc9PSc7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICByZXR1cm4gYHAuYWRkZWQgJHtmb3JtYXRDb25kfSAke3BhcnNlTnVtKHZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gZ2V0R3JvdXBEZXRhaWxzKGNvbnRleHQsIGZvcm1hdEdyb3VwSWQpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IHtcbiAgICAgIGlmKGdyb3VwLnByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaCh7Y29uZGl0aW9uYWw6ICc9PScsIG5hbWU6ICdncm91cElkJywgdmFsdWU6IGZvcm1hdEdyb3VwSWR9KTtcbiAgICAgICAgY29uc3QgZmlsdGVyU3RyID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGkgSU4gRkxBVFRFTihcbiAgICAgICAgICAgIEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyU3RyKX1cbiAgICAgICAgICAgICAgTEVUIGltYWdlcyA9IChcbiAgICAgICAgICAgICAgICBGT1IgaSwgZSBJTiBPVVRCT1VORCBwLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICAgICAgICAgIEZJTFRFUiBlLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgIFJFVFVSTiBpbWFnZXNcbiAgICAgICAgICApXG4gICAgICAgICAgICBTT1JUIGkuYWRkZWQgREVTQ1xuICAgICAgICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICAgICAgICBSRVRVUk4gaVxuICAgICAgICBgO1xuXG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNHcm91cGVkKGNvbnRleHQsIHNlc3Npb25JZCwgZ3JvdXBJZClcbiAgICAgICAgLnRoZW4oKGdyb3VwZWQ6IEdyb3VwVXNlcikgPT4ge1xuICAgICAgICAgIGlmKGdyb3VwZWQuaXNWYWxpZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZ3JvdXBlZC5ncm91cElkfSk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0ID0gZmlsdGVycy5qb2luKCcgJiYgJyk7XG4gICAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgICAgICAgICBGT1IgcCBJTiBwb3N0XG4gICAgICAgICAgICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJMaXN0KX1cbiAgICAgICAgICAgICAgICBGT1IgZiBJTiBwLmZpbGVzXG4gICAgICAgICAgICAgICAgICBGSUxURVIgZi50eXBlID09IFwiaW1hZ2UvanBlZ1wiIHx8IGYudHlwZSA9PSBcImltYWdlL3BuZ1wiXG4gICAgICAgICAgICAgICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgICAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICAgICAgICBSRVRVUk4gZlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAgIHBhcmFtczoge2ZpbHRlcnMsIGZyb20sIGdyb3VwSWQsIHRvfSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IEltYWdlT3B0aW9uc1xuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SW1hZ2VMaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwiaW1hZ2VzXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBdO1xuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIGkuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJpbWFnZVwiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRShpLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ2knKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXRQZXJzb25hRG9jSWQgPSAocGVyc29uYUlkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwZXJzb25hRG9jSWQgPSBwYXJzZUFyYW5nb0lkKHBlcnNvbmFJZCk7XG5cbiAgaWYocGVyc29uYURvY0lkKSB7XG4gICAgcmV0dXJuIHBlcnNvbmFEb2NJZDtcbiAgfVxuXG4gIGNvbnN0IHBlcnNvbmFLZXkgPSBwYXJzZUlkKHBlcnNvbmFJZCk7XG4gIHJldHVybiBwZXJzb25hS2V5ID8gYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7cGVyc29uYUtleX1gIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VMaXN0QnlQZXJzb25hUmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwZXJzb25hSWQ6IHN0cmluZyA9ICcnLFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEltYWdlTGlzdEJ5UGVyc29uYVJlYWN0aW9ucyc7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKTtcbiAgY29uc3QgcGVyc29uYURvY0lkID0gZ2V0UGVyc29uYURvY0lkKHBlcnNvbmFJZCB8fCBzZXNzaW9uUGVyc29uYUlkKTtcbiAgY29uc3QgcmVhY3Rpb25OYW1lcyA9IEFycmF5LmlzQXJyYXkocmVhY3Rpb25zKVxuICAgID8gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikudG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgOiBbXTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuXG4gIGlmKCFwZXJzb25hRG9jSWQgfHwgIXJlYWN0aW9uTmFtZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgaW1hZ2UsIHJlYWN0aW9uIElOIE9VVEJPVU5EICR7cGVyc29uYURvY0lkfSAke2hhc1JlYWN0aW9uQ29sbGVjdGlvbn1cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbGluayBJTiBJTkJPVU5EIGltYWdlLl9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbGluay50eXBlID09IFwiaW1hZ2VcIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsaW5rLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbGluay5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGxpbmsuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtwZXJzb25hc0NvbGxlY3Rpb259LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgIEZJTFRFUiBMT1dFUihyZWFjdGlvbi50eXBlIHx8IFwiXCIpIElOIFtcImltYWdlXCIsIFwiaW1hZ2VzXCJdXG4gICAgICBGSUxURVIgUE9TSVRJT04oJHtyZWFjdGlvbk5hbWVzfSwgTE9XRVIocmVhY3Rpb24ubmFtZSB8fCByZWFjdGlvbi52YWx1ZSB8fCBcIlwiKSlcbiAgICAgIFNPUlQgcmVhY3Rpb24uYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoaW1hZ2UsIHtcbiAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgfSlcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCBwZXJzb25hSWQsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRJbWFnZUlkID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyR3JvdXAgPSB7XG4gICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgIGZpbHRlcnM6IFt7ZmllbGQ6ICdfa2V5Jywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBmb3JtYXRJbWFnZUlkfV1cbiAgfSBhcyBhbnk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxJbWFnZVR5cGU+KGNvbnRleHQsICdpbWFnZXMnLCBmaWx0ZXJzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VySW1hZ2VQYXRoID0gKHVzZXJJZDogc3RyaW5nLCBpbWFnZUlkOiBzdHJpbmcsIGltYWdlVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICdpbWFnZXMnKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBgJHtpbWFnZUlkfS4ke2dldEltYWdlRXh0ZW5zaW9uKGltYWdlVHlwZSl9YDtcblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcEltYWdlVXJsID0gKHtcbiAgYnVja2V0LFxuICBkaXJlY3RvcnkgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkXG59OiBJbWFnZVVybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgaWYoaW1hZ2VUeXBlID09PSAncGVyc29uYScpIHtcbiAgICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX2JrLmpwZ2A7XG4gICAgfVxuICAgIHJldHVybiBgJHtDb25maWcuZ2V0KCdpbWFnZS5kZWZhdWx0VXJsJyl9L3VzZXJzX3doLmpwZ2A7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IGltYWdlTmFtZSA9IGlzVGh1bWIgPyBgJHtpbWFnZUlkfS10aC4ke2ltYWdlVHlwZX1gIDogYCR7aW1hZ2VJZH0uJHtpbWFnZVR5cGUgPT09ICdwZXJzb25hJyB8fCBpbWFnZVR5cGUgPT09ICdvdGhlcicgPyAnanBnJyA6IGltYWdlVHlwZX1gO1xuICBjb25zdCBpbWFnZVVybCA9IENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWA7XG5cbiAgaWYodHlwZSA9PT0gJ2FwcHMnKSB7XG4gICAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke2ltYWdlVXJsfS8ke3R5cGV9LyR7dHlwZUlkfS8ke2RpcmVjdG9yeX0vJHtpbWFnZU5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbWFnZVVybCA9IGFzeW5jICh7XG4gIGJ1Y2tldCxcbiAgaW1hZ2VEaXIgPSAnaW1hZ2VzJyxcbiAgaW1hZ2VJZCxcbiAgaW1hZ2VUeXBlID0gJ2pwZycsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB1cmxUeXBlID0gJ3B1YmxpYydcbn06IEltYWdlVXJsRGF0YSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmKCFpbWFnZUlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCBjb25maWd1cmVkSW1hZ2VVcmwgPSBTdHJpbmcoQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgJycpO1xuICBjb25zdCBjb25maWd1cmVkQXBwVXJsID0gU3RyaW5nKENvbmZpZy5nZXQoJ2FwcC51cmwnKSB8fCAnJyk7XG4gIGNvbnN0IHB1YmxpY0Jhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9ib3guJHtjb25maWd1cmVkQXBwVXJsfWBcbiAgICA6IChjb25maWd1cmVkSW1hZ2VVcmwgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YCk7XG4gIGNvbnN0IGRldkJhc2VVcmwgPSBjb25maWd1cmVkQXBwVXJsXG4gICAgPyBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke2NvbmZpZ3VyZWRBcHBVcmx9YFxuICAgIDogKGNvbmZpZ3VyZWRJbWFnZVVybCB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gKTtcblxuICAvLyBBbHdheXMgdXNlIHNpZ25lZCBVUkxzIGZvciB0aHVtYm5haWxzXG4gIGlmKGlzVGh1bWIpIHtcbiAgICB1cmxUeXBlID0gJ3NpZ25lZCc7XG4gIH1cblxuICBjb25zdCB0aHVtYlN1ZmZpeCA9IGlzVGh1bWIgPyAnLXRoJyA6ICcnO1xuICBjb25zdCBpbWFnZUtleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2ltYWdlRGlyfS8ke2ltYWdlSWR9JHt0aHVtYlN1ZmZpeH0uJHtpbWFnZVR5cGV9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXROYW1lLCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IGltYWdlS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgJHtwdWJsaWNCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgJHtkZXZCYXNlVXJsfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXNpemVBbmRTYXZlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZycsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3Jlc2l6ZVNhdmVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGltZ1cgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdTaXplJyk7XG4gIGNvbnN0IGltZ1EgPSBDb25maWcuZ2V0KCdpbWFnZS5pbWdRdWFsaXR5Jyk7XG4gIGNvbnN0IGZvcm1hdCA9IChmaWxlVHlwZS5zcGxpdCgnLycpKVsxXSB8fCAnanBlZyc7XG4gIGNvbnN0IHNoYXJwRm9ybWF0ID0gbm9ybWFsaXplSW1hZ2VGb3JtYXQoZm9ybWF0KTtcbiAgbGV0IGltYWdlT3B0aW1pemVkQnVmZmVyOiBCdWZmZXIgPSBidWZmZXI7XG4gIGxldCB0aHVtYk9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYnVmZmVyO1xuICBsZXQgaW1hZ2VJZGVudGl0eTogSW1hZ2VUeXBlID0ge1xuICAgIGZpbGVTaXplOiBidWZmZXIubGVuZ3RoLFxuICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgaW1hZ2VJZFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaW1hZ2VPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBzaGFycChidWZmZXIpXG4gICAgICAucm90YXRlKClcbiAgICAgIC5yZXNpemUoe1xuICAgICAgICBmaXQ6ICdpbnNpZGUnLFxuICAgICAgICBoZWlnaHQ6IGltZ1csXG4gICAgICAgIHdpZHRoOiBpbWdXLFxuICAgICAgICB3aXRob3V0RW5sYXJnZW1lbnQ6IHRydWVcbiAgICAgIH0pXG4gICAgICAudG9Gb3JtYXQoc2hhcnBGb3JtYXQsIHtxdWFsaXR5OiBpbWdRfSlcbiAgICAgIC50b0J1ZmZlcigpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2VPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJvZHk6IGltYWdlT3B0aW1pemVkQnVmZmVyLFxuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgICBLZXk6IGdldFVzZXJJbWFnZVBhdGgoc2Vzc2lvbklkLCBpbWFnZUlkLCBmaWxlVHlwZSwgJ2ltYWdlcycpXG4gICAgfTtcbiAgICBhd2FpdCBzM1B1dChpbWFnZU9iaik7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbaW1hZ2VNZXRhZGF0YSwgaW1hZ2VTdGF0cywgc291cmNlTWV0YWRhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc2hhcnAoaW1hZ2VPcHRpbWl6ZWRCdWZmZXIpLm1ldGFkYXRhKCksXG4gICAgICBzaGFycChpbWFnZU9wdGltaXplZEJ1ZmZlcikuc3RhdHMoKSxcbiAgICAgIHNoYXJwKGJ1ZmZlcikubWV0YWRhdGEoKVxuICAgIF0pO1xuICAgIGNvbnN0IHtiLCBnLCByfSA9IGltYWdlU3RhdHMuZG9taW5hbnQ7XG4gICAgY29uc3QgY29sb3IgPSBbciwgZywgYl0ubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIGNvbnN0IGV4aWZNZXRhZGF0YSA9IGltYWdlRXhpZk1ldGFkYXRhKHNvdXJjZU1ldGFkYXRhLmV4aWYpO1xuXG4gICAgaW1hZ2VJZGVudGl0eSA9IHtcbiAgICAgIGNvbG9yLFxuICAgICAgZmlsZVNpemU6IGltYWdlT3B0aW1pemVkQnVmZmVyLmxlbmd0aCxcbiAgICAgIGZpbGVUeXBlOiBmb3JtYXQsXG4gICAgICBoZWlnaHQ6IGltYWdlTWV0YWRhdGEuaGVpZ2h0IHx8IDAsXG4gICAgICBpbWFnZUlkLFxuICAgICAgLi4uZXhpZk1ldGFkYXRhLFxuICAgICAgb3JpZW50YXRpb246IGltYWdlTWV0YWRhdGEub3JpZW50YXRpb24gPyBTdHJpbmcoaW1hZ2VNZXRhZGF0YS5vcmllbnRhdGlvbikgOiB1bmRlZmluZWQsXG4gICAgICBxdWFsaXR5OiBpbWdRLFxuICAgICAgcmVzb2x1dGlvbjogaW1hZ2VNZXRhZGF0YS5kZW5zaXR5ID8gYCR7aW1hZ2VNZXRhZGF0YS5kZW5zaXR5fSBwcGlgIDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGg6IGltYWdlTWV0YWRhdGEud2lkdGggfHwgMFxuICAgIH07XG5cbiAgICBjb25zdCB0aG1XID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtU2l6ZScpO1xuICAgIGNvbnN0IHRobVEgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1RdWFsaXR5Jyk7XG4gICAgdGh1bWJPcHRpbWl6ZWRCdWZmZXIgPSBhd2FpdCBzaGFycChpbWFnZU9wdGltaXplZEJ1ZmZlcilcbiAgICAgIC5yZXNpemUoe1xuICAgICAgICBmaXQ6ICdjb3ZlcicsXG4gICAgICAgIGhlaWdodDogdGhtVyxcbiAgICAgICAgcG9zaXRpb246ICdjZW50cmUnLFxuICAgICAgICB3aWR0aDogdGhtV1xuICAgICAgfSlcbiAgICAgIC50b0Zvcm1hdChzaGFycEZvcm1hdCwge3F1YWxpdHk6IHRobVF9KVxuICAgICAgLnRvQnVmZmVyKCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9TQVZFXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0aHVtYk9iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgICAgQm9keTogdGh1bWJPcHRpbWl6ZWRCdWZmZXIsXG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICAgIEtleTogZ2V0VXNlckltYWdlUGF0aChzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAndGh1bWJzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KHRodW1iT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW1hZ2VJZGVudGl0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSW1hZ2UnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7aW1hZ2VJZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGUsIGl0ZW1JZCwgaXRlbVR5cGUsIHByaXZhY3kgPSAncHVibGljJ30gPSBpbWFnZTtcblxuICByZXR1cm4gcmVzaXplQW5kU2F2ZUltYWdlKGNvbnRleHQsIGltYWdlSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigocmVzaXplZEltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogSW1hZ2VUeXBlID0ge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGltYWdlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgcHJpdmFjeTogbm9ybWFsaXplSW1hZ2VQcml2YWN5KHByaXZhY3kpLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgaW5zZXJ0KVxuICAgICAgICAudGhlbigoc2F2ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiBhZGRJbWFnZUVkZ2UoY29udGV4dCwge1xuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbUlkOiBpdGVtSWQgfHwgc2Vzc2lvbklkLFxuICAgICAgICAgIGl0ZW1UeXBlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCAndXNlcnMnLCAzMikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICB9KS50aGVuKCgpID0+IHNhdmVkSW1hZ2UpKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFU0laRVxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW1hZ2VFZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJbWFnZUVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGltYWdlRWRnZTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTWVkaWEtaW1hZ2UtJHtpbWFnZUlkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWxlRG9jSWQgPSBgaW1hZ2VzLyR7Zm9ybWF0SW1hZ2VJZH1gO1xuXG4gIGNvbnN0IGVkZ2U6IEltYWdlRWRnZVR5cGUgPSB7XG4gICAgX2Zyb206IGl0ZW1Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmaWxlRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBpdGVtVHlwZSxcbiAgICB0eXBlOiAnaW1hZ2UnXG4gIH07XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGVkZ2UsXG4gICAgICAgICAgZmlsZURvY0lkLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgaXRlbURvY0lkLFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBpdGVtVHlwZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZTogSW1hZ2VUeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IGltYWdlQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGltYWdlSWQsXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIGZpbGVUeXBlLFxuICAgIHByaXZhY3ksXG4gICAgdXJsID0gJydcbiAgfSA9IGltYWdlO1xuXG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBpbWFnZUlkIHx8IGNyZWF0ZUhhc2goYGltYWdlLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgY3VzdG9tUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICBwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSksXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcblxuICBpZihiYXNlNjQgfHwgaW1hZ2VCdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSBpbWFnZUJ1ZmZlcjtcblxuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG5cbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgIC4uLmN1c3RvbVBhcmFtcyxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFkZEltYWdlKGNvbnRleHQsIGltZ1BhcmFtcywgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKGltYWdlOiBJbWFnZVR5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFZGdlOiBJbWFnZUVkZ2VUeXBlID0ge1xuICAgICAgICAgICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkLFxuICAgICAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFUVVFU1RcbiAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IChyZXMgYXMgSHR0cFJlc3BvbnNlKS5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGZpbGVUeXBlOiBjb250ZW50VHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAnaW1hZ2UnfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6ICdmZXRjaF9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZihpbWFnZUlkKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgLi4uKGRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyB7ZGVzY3JpcHRpb259IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5OiBub3JtYWxpemVJbWFnZVByaXZhY3kocHJpdmFjeSl9IDoge30pXG4gICAgfTtcblxuICAgIHJldHVybiB1cGRhdGVJdGVtPEltYWdlVHlwZT4oY29udGV4dCwgJ2ltYWdlcycsIGZvcm1hdEltYWdlSWQsIHVwZGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZCA9IHBhcnNlSWQoaW1hZ2VJZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGRlbGV0ZUl0ZW08SW1hZ2VUeXBlPihjb250ZXh0LCAnaW1hZ2VzJywgZm9ybWF0SW1hZ2VJZCwge1xuICAgICAgY2FzY2FkZTogW0VER0VTLkhBU19NRURJQV0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKCFpbWFnZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGVsZXRlIFMzIGZpbGVzXG4gICAgY29uc3Qge19rZXk6IGltYWdlS2V5fSA9IGltYWdlO1xuICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS9pbWFnZXMvJHtpbWFnZUtleX0uanBnYH0sXG4gICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS90aHVtYnMvJHtpbWFnZUtleX0uanBnYH1cbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7aW1hZ2VJZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJleGlmUmVhZGVyIiwic2hhcnAiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwibG9nRXhjZXB0aW9uIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJ1c2VEYiIsImdldEltYWdlRXh0ZW5zaW9uIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiZ2V0R3JvdXBEZXRhaWxzIiwiaXNHcm91cGVkIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiczNEZWxldGVMaXN0IiwiczNHZXRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNSZWFjdGlvbkNvbGxlY3Rpb24iLCJIQVNfUkVBQ1RJT04iLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJwZXJzb25hc0NvbGxlY3Rpb24iLCJQRVJTT05BUyIsIk1FRElBX0lURU1fQ09MTEVDVElPTlMiLCJVU0VSUyIsIlBPU1RTIiwiR1JPVVBTIiwiZ2V0TWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJkb2NJZCIsIml0ZW1LZXkiLCJpbmNsdWRlcyIsIm1hcCIsImNvbGxlY3Rpb24iLCJub3JtYWxpemVJbWFnZUZvcm1hdCIsImZvcm1hdCIsImltYWdlRXhpZk1ldGFkYXRhIiwiZXhpZiIsIm1ldGFkYXRhIiwidGFrZW4iLCJQaG90byIsIkRhdGVUaW1lT3JpZ2luYWwiLCJtYWtlIiwiSW1hZ2UiLCJNYWtlIiwibW9kZWwiLCJNb2RlbCIsIkRhdGUiLCJnZXRUaW1lIiwidW5kZWZpbmVkIiwibm9ybWFsaXplSW1hZ2VQcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdJbWFnZSIsImltYWdlIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInBhcnNlSW1hZ2VPcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldEltYWdlT3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJnZXRJbWFnZUxpc3RCeVVzZXIiLCJjb250ZXh0IiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbVF1ZXJpZXMiLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwicGFyYW1zIiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldEltYWdlQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0SW1hZ2VMaXN0QnlJdGVtIiwic2Vzc2lvbiIsInNlc3Npb25Vc2VySWQiLCJmb3JtYXRJdGVtVHlwZSIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImxpc3QiLCJhbGwiLCJvd25lclVzZXJJZCIsImZpbHRlciIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsImdldEltYWdlTGlzdEJ5R3JvdXAiLCJzZXNzaW9uSWQiLCJmaWx0ZXJzIiwiZ3JvdXBJZCIsImZvcm1hdEdyb3VwSWQiLCJjb25kaXRpb25hbCIsIm5hbWUiLCJmb3JtYXRDb25kIiwiZ3JvdXAiLCJmaWx0ZXJTdHIiLCJncm91cGVkIiwiaXNWYWxpZCIsImZpbHRlckxpc3QiLCJnZXRJbWFnZUxpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9ucyIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsInJlYWN0aW9uTmFtZSIsImZpbHRlckJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFBlcnNvbmFEb2NJZCIsInBlcnNvbmFJZCIsInBlcnNvbmFEb2NJZCIsInBlcnNvbmFLZXkiLCJnZXRJbWFnZUxpc3RCeVBlcnNvbmFSZWFjdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwicmVhY3Rpb25OYW1lcyIsIkFycmF5IiwiaXNBcnJheSIsIkJvb2xlYW4iLCJnZXRJbWFnZUJ5SWQiLCJpbWFnZUlkIiwiZm9ybWF0SW1hZ2VJZCIsIm9wZXJhdG9yIiwiZ2V0VXNlckltYWdlUGF0aCIsImltYWdlVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0QXBwSW1hZ2VVcmwiLCJidWNrZXQiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsImltYWdlTmFtZSIsImltYWdlVXJsIiwiZ2V0SW1hZ2VVcmwiLCJpbWFnZURpciIsInVybFR5cGUiLCJjb25maWd1cmVkSW1hZ2VVcmwiLCJjb25maWd1cmVkQXBwVXJsIiwicHVibGljQmFzZVVybCIsImRldkJhc2VVcmwiLCJ0aHVtYlN1ZmZpeCIsImltYWdlS2V5IiwiQnVja2V0IiwiRXhwaXJlcyIsIktleSIsInJlc2l6ZUFuZFNhdmVJbWFnZSIsImJ1ZmZlciIsImZpbGVUeXBlIiwiczNPcHRpb25zIiwiaW1nVyIsImltZ1EiLCJzcGxpdCIsInNoYXJwRm9ybWF0IiwiaW1hZ2VPcHRpbWl6ZWRCdWZmZXIiLCJ0aHVtYk9wdGltaXplZEJ1ZmZlciIsImltYWdlSWRlbnRpdHkiLCJmaWxlU2l6ZSIsInJvdGF0ZSIsInJlc2l6ZSIsImZpdCIsImhlaWdodCIsIndpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50IiwidG9Gb3JtYXQiLCJxdWFsaXR5IiwidG9CdWZmZXIiLCJJTUFHRV9TQVZFIiwiaW1hZ2VPYmoiLCJCb2R5IiwiQ29udGVudFR5cGUiLCJpbWFnZU1ldGFkYXRhIiwiaW1hZ2VTdGF0cyIsInNvdXJjZU1ldGFkYXRhIiwiUHJvbWlzZSIsInN0YXRzIiwiYiIsImciLCJyIiwiZG9taW5hbnQiLCJjb2xvciIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJleGlmTWV0YWRhdGEiLCJvcmllbnRhdGlvbiIsInJlc29sdXRpb24iLCJkZW5zaXR5IiwidGhtVyIsInRobVEiLCJwb3NpdGlvbiIsInRodW1iT2JqIiwiYWRkSW1hZ2UiLCJkZXNjcmlwdGlvbiIsInJlc2l6ZWRJbWFnZSIsImluc2VydCIsIl9rZXkiLCJzYXZlZEltYWdlIiwiYWRkSW1hZ2VFZGdlIiwiSU1BR0VfUkVTSVpFIiwiaW1hZ2VFZGdlIiwibm93IiwiZWRnZUlkIiwiZm9ybWF0SXRlbUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZUltYWdlIiwiYmFzZTY0IiwiaW1hZ2VCdWZmZXIiLCJ1cmwiLCJjdXN0b21QYXJhbXMiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiQnVmZmVyIiwidXBkYXRlZEZpbGVUeXBlIiwiZmlsZVR5cGVGcm9tQnVmZmVyIiwibWltZSIsImltZ1BhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJkZWxldGVJbWFnZSIsImNhc2NhZGUiLCJvd25lcnNoaXAiLCJEZWxldGUiLCJPYmplY3RzIiwiUXVpZXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUVELFNBQVFBLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDeEcsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FBQy9DLE9BQU9DLGdCQUFnQixjQUFjO0FBQ3JDLE9BQU9DLFdBQVcsUUFBUTtBQUUxQixTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLEVBQUVDLFlBQVksUUFBTyw2QkFBNkI7QUFDbEUsU0FBUUMsUUFB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
@@ -39,3 +39,4 @@ export * from './videoGeneration.js';
39
39
  export * from './geminiVideo.js';
40
40
  export * from './openaiResponseSession.js';
41
41
  export * from './phoneSupport.js';
42
+ export * from './alfredFaq.js';
@@ -38,5 +38,6 @@ export * from './videoGeneration.js';
38
38
  export * from './geminiVideo.js';
39
39
  export * from './openaiResponseSession.js';
40
40
  export * from './phoneSupport.js';
41
+ export * from './alfredFaq.js';
41
42
 
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9hcHBzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYW5hbHl0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhYmFzZVByb3Zpc2lvbmluZ0xlYXNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWJhc2VBY2NvdW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcm0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hpZ2dzZmllbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGVyc29uYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zMy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Ntcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRpc3RpY3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlkZW9zLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9pbWFnZUdlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnRHZW5lcmF0aW9uLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi92aWRlb0dlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2dlbWluaVZpZGVvLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9vcGVuYWlSZXNwb25zZVNlc3Npb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waG9uZVN1cHBvcnQuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGNBQWMsWUFBWTtBQUMxQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLGlDQUFpQztBQUMvQyxjQUFjLHdCQUF3QjtBQUN0QyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFdBQVc7QUFDekIsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYztBQUU1QixjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLHlCQUF5QjtBQUV2QyxjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLG1CQUFtQjtBQUVqQyxjQUFjLDZCQUE2QjtBQUMzQyxjQUFjLG9CQUFvQiJ9
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9hcHBzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYW5hbHl0aWNzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhYmFzZVByb3Zpc2lvbmluZ0xlYXNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YWJhc2VBY2NvdW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcm0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hpZ2dzZmllbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGVyc29uYXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9ydW0uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zMy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Ntcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRpc3RpY3MuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFncy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXJzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdmlkZW9zLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9pbWFnZUdlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRlbnRHZW5lcmF0aW9uLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi92aWRlb0dlbmVyYXRpb24uanMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2dlbWluaVZpZGVvLmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9vcGVuYWlSZXNwb25zZVNlc3Npb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9waG9uZVN1cHBvcnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hbGZyZWRGYXEuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGNBQWMsWUFBWTtBQUMxQixjQUFjLGlCQUFpQjtBQUMvQixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLGlDQUFpQztBQUMvQyxjQUFjLHdCQUF3QjtBQUN0QyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFdBQVc7QUFDekIsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsYUFBYTtBQUMzQixjQUFjLGFBQWE7QUFDM0IsY0FBYyxjQUFjO0FBQzVCLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsY0FBYztBQUM1QixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxnQkFBZ0I7QUFDOUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsV0FBVztBQUN6QixjQUFjLFVBQVU7QUFDeEIsY0FBYyxjQUFjO0FBQzVCLGNBQWMsV0FBVztBQUN6QixjQUFjLGtCQUFrQjtBQUNoQyxjQUFjLHFCQUFxQjtBQUNuQyxjQUFjLFlBQVk7QUFDMUIsY0FBYyxhQUFhO0FBQzNCLGNBQWMsY0FBYztBQUU1QixjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLHlCQUF5QjtBQUV2QyxjQUFjLHVCQUF1QjtBQUVyQyxjQUFjLG1CQUFtQjtBQUVqQyxjQUFjLDZCQUE2QjtBQUMzQyxjQUFjLG9CQUFvQjtBQUNsQyxjQUFjLGlCQUFpQiJ9
@@ -227,4 +227,4 @@ export const getIosInApp = (context)=>{
227
227
  }, error, context).then(()=>null));
228
228
  };
229
229
 
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQYXltZW50SU9TSW5BcHBFcnJvcixcbiAgUGF5bWVudElPU1N1YnNjcmlwdGlvbkluZm8sXG4gIFBheW1lbnRJT1NTdWJzY3JpcHRpb25VcGRhdGUsXG4gIFBheW1lbnRTdWJzY3JpcHRpb25cbn0gZnJvbSAnLi4vdHlwZXMvcGF5bWVudHMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW9zJztcblxuZXhwb3J0IGNvbnN0IGdldElvc0luQXBwRXJyb3IgPSAoc3RhdHVzQ29kZTogc3RyaW5nKTogUGF5bWVudElPU0luQXBwRXJyb3IgPT4ge1xuICBjb25zdCBjb2RlcyA9IHtcbiAgICBbMF06IHtlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdBY3RpdmUnLCB2YWxpZDogdHJ1ZX0sXG4gICAgWzIxMDAwXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfcmVjZWlwdF91bnJlYWRhYmxlJywgbWVzc2FnZTogJ0FwcCBzdG9yZSBjb3VsZCBub3QgcmVhZCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDAyXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfZGF0YV9tYWxmb3JtZWQnLCBtZXNzYWdlOiAnRGF0YSB3YXMgbWFsZm9ybWVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDNdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9yZWNlaXB0X3VuYXV0aG9yaXplZCcsIG1lc3NhZ2U6ICdSZWNlaXB0IG5vdCBhdXRoZW50aWNhdGVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDRdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlY3JldCcsIG1lc3NhZ2U6ICdTaGFyZWQgc2VjcmV0IGRvZXMgbm90IG1hdGNoJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDVdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9zZXJ2ZXJfdW5hdmFpbGFibGUnLCBtZXNzYWdlOiAnUmVjZWlwdCBzZXJ2ZXIgdW5hdmFpbGFibGUnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwNl06IHtcbiAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgIGlkOiAncGF5bWVudF9zdWJzY3JpcHRpb25fZXhwaXJlZCcsXG4gICAgICBtZXNzYWdlOiAnUmVjZWlwdCB2YWxpZCBidXQgc3ViIGV4cGlyZWQnLFxuICAgICAgdmFsaWQ6IHRydWVcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIHNwZWNpYWwgY2FzZSBmb3IgYXBwIHJldmlldyBoYW5kbGluZyAtIGZvcndhcmQgYW55IHJlcXVlc3QgdGhhdCBpcyBpbnRlbmRlZCBmb3IgdGhlIFNhbmRib3ggYnV0IHdhcyBzZW50IHRvXG4gICAgICogUHJvZHVjdGlvbiwgdGhpcyBpcyB3aGF0IHRoZSBhcHAgcmV2aWV3IHRlYW0gZG9lc1xuICAgICAqL1xuICAgIFsyMTAwN106IHtcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgaWQ6ICdwYXltZW50X2ludmFsaWRfc2VydmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTYW5kYm94IHJlY2VpcHQgc2VudCB0byBQcm9kdWN0aW9uIGVudmlyb25tZW50JyxcbiAgICAgIHJlZGlyZWN0OiB0cnVlLFxuICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgfSxcbiAgICBbMjEwMDhdOiB7XG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlcnZlcicsXG4gICAgICBtZXNzYWdlOiAnUHJvZHVjdGlvbiByZWNlaXB0IHNlbnQgdG8gU2FuZGJveCBlbnZpcm9ubWVudCcsXG4gICAgICB2YWxpZDogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGNvZGVzW3N0YXR1c0NvZGVdIHx8IHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlvc1N1YnNjcmlwdGlvblVwZGF0ZSA9IChcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmcsXG4gIHN1YnNjcmlwdGlvblVwZGF0ZTogUGF5bWVudElPU1N1YnNjcmlwdGlvblVwZGF0ZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdpb3NTdWJzY3JpcHRpb25VcGRhdGUnO1xuICBjb25zdCB7XG4gICAgYXV0b19yZW5ld19hZGFtX2lkOiBwbGFuSWQsXG4gICAgY2FuY2VsbGF0aW9uX2RhdGU6IGNhbmNlbERhdGUsXG4gICAgbm90aWZpY2F0aW9uX3R5cGU6IHN0YXR1cyxcbiAgICBsYXRlc3RfcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbiAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHQ6IGV4cGlyZWRSZWNlaXB0LFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbzogZXhwaXJlZEluZm8sXG4gICAgb3JpZ2luYWxfdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbiAgfSA9IHN1YnNjcmlwdGlvblVwZGF0ZTtcbiAgY29uc3QgZm9ybWF0U3RhdHVzID0gKHN0YXR1cyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVjZWlwdEluZm86IFBheW1lbnRJT1NTdWJzY3JpcHRpb25JbmZvW10gPSBsYXRlc3RJbmZvIHx8IGV4cGlyZWRJbmZvO1xuICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuXG4gIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICBjYW5jZWxEYXRlLFxuICAgIGlzVmFsaWQ6IHJlY2VpcHRJbmZvWzBdLmV4cGlyZXNfZGF0ZV9tcyA+IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBsYW5JZCxcbiAgICByZWNlaXB0OiBsYXRlc3RSZWNlaXB0IHx8IGV4cGlyZWRSZWNlaXB0LFxuICAgIHN0YXR1czogZm9ybWF0U3RhdHVzXG4gIH07XG4gIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnaW9zX3BheW1lbnQnXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuICAgICBMSU1JVCAxYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gbnVsbClcbiAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGJFcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGFkZElvc0luQXBwID0gKFxuLy8gICBjb250ZXh0OiBBcGlDb250ZXh0LFxuLy8gICBhcHAsXG4vLyAgIHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvblxuLy8gKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4vLyAgIGNvbnN0IGFjdGlvbiA9ICdhZGRJb3NJbkFwcCc7XG4vLyAgIGNvbnN0IHtpc1Byb2R1Y3Rpb24sIHJlY2VpcHR9ID0gc3Vic2NyaXB0aW9uO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG5cbi8vICAgY29uc3QgcHJvZHVjdGlvbkhvc3QgPSAnYnV5Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBzYW5kYm94SG9zdCA9ICdzYW5kYm94Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBlbmRwb2ludCA9IGlzUHJvZHVjdGlvbiA/IHByb2R1Y3Rpb25Ib3N0IDogc2FuZGJveEhvc3Q7XG4vLyAgIGNvbnN0IHZlcmlmeVVybCA9IGBodHRwczovLyR7ZW5kcG9pbnR9L3ZlcmlmeVJlY2VpcHRgO1xuLy8gICBjb25zdCBwYXlsb2FkOiBvYmplY3QgPSB7XG4vLyAgICAgcGFzc3dvcmQ6IGFwcC5pYXAsXG4vLyAgICAgJ3JlY2VpcHQtZGF0YSc6IGRlY29kZVVSSUNvbXBvbmVudChyZWNlaXB0KVxuLy8gICB9O1xuLy8gICBjb25zdCBvcHRpb25zOiBvYmplY3QgPSB7XG4vLyAgICAgaGVhZGVyczoge1xuLy8gICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4vLyAgICAgfVxuLy8gICB9O1xuXG4vLyAgIHJldHVybiBwb3N0KHZlcmlmeVVybCwgcGF5bG9hZCwgb3B0aW9ucylcbi8vICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuLy8gICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmVzdWx0cyk7XG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGxhdGVzdF9yZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuLy8gICAgICAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuLy8gICAgICAgICBzdGF0dXNcbi8vICAgICAgIH0gPSBqc29uO1xuXG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGlzX3RyaWFsX3BlcmlvZDogdHJpYWxQZXJpb2QsXG4vLyAgICAgICAgIG9yaWdpbmFsX3B1cmNoYXNlX2RhdGVfbXM6IGFkZGVkLFxuLy8gICAgICAgICBleHBpcmVzX2RhdGU6IGV4cGlyZXMsXG4vLyAgICAgICAgIHByb2R1Y3RfaWQ6IHBsYW5JZCxcbi8vICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbi8vICAgICAgIH0gPSBsYXRlc3RJbmZvO1xuXG4vLyAgICAgICBpZihzdGF0dXMgPT09IDAgfHwgc3RhdHVzID09PSAyMTAwNikge1xuLy8gICAgICAgICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuLy8gICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuLy8gICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4vLyAgICAgICAgICAgZXhwaXJlcyxcbi8vICAgICAgICAgICBpc1RyaWFsOiB0cmlhbFBlcmlvZCA9PT0gJ3RydWUnLFxuLy8gICAgICAgICAgIGlzVmFsaWQ6IGV4cGlyZXMgPiBub3csXG4vLyAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbi8vICAgICAgICAgICBwbGFuSWQsXG4vLyAgICAgICAgICAgcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbi8vICAgICAgICAgICB0cmFuc2FjdGlvbklkLFxuLy8gICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4vLyAgICAgICAgIH07XG4vLyAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbi8vICAgICAgICAgICAuLi51cGRhdGUsXG4vLyAgICAgICAgICAgX2tleTogaWQsXG4vLyAgICAgICAgICAgYWRkZWQsXG4vLyAgICAgICAgICAgdHlwZTogJ2lvc19wYXltZW50J1xuLy8gICAgICAgICB9O1xuXG4vLyAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuLy8gICAgICAgICAgICAgICBJTlNFUlQgJHtpbnNlcnR9XG4vLyAgICAgICAgICAgICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuLy8gICAgICAgICAgICAgICBSRVRVUk4gTkVXYDtcblxuLy8gICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4vLyAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRTdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbi8vICAgICAgICAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4vLyAgICAgICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4vLyAgICAgICAgICAgfSwgZGJFcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4vLyAgICAgICB9XG5cbi8vICAgICAgIC8vIEVycm9yc1xuLy8gICAgICAgY29uc3QgZXJyb3I6IFBheW1lbnRJT1NJbkFwcEVycm9yID0gZ2V0SW9zSW5BcHBFcnJvcihyZXN1bHRzLnN0YXR1cyk7XG5cbi8vICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuLy8gICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuLy8gICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InLFxuLy8gICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuLy8gICAgICAgICB2YWx1ZTogZXJyb3IuaWRcbi8vICAgICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0SW9zU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldElvc1N1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25zXG4gICAgICBGSUxURVIgcy51c2VySWQgPT0gJHtzZXNzaW9uSWR9ICYmIHMudHlwZSA9PSBcImlvc19wYXltZW50XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW9zSW5BcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2FkZGVkID0gbm93LCBwbGFuSWQsIHJlY2VpcHQsIHRyYW5zYWN0aW9uSWQsIHRyaWFsRW5kfSA9IHN1YnNjcmlwdGlvbjtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBjcmVhdGVIYXNoKGBzdWJzY3JpcHRpb24tJHt0cmFuc2FjdGlvbklkfWApO1xuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgX2tleTogc3Vic2NyaXB0aW9uSWQsXG4gICAgYWRkZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBwbGFuSWQsXG4gICAgcmVjZWlwdCxcbiAgICB0cmFuc2FjdGlvbklkLFxuICAgIHRyaWFsRW5kLFxuICAgIHR5cGU6ICdpb3Nfc3Vic2NyaXB0aW9uJyxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gc3Vic2NyaXB0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZFN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbikgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJb3NJbkFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25cbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy50eXBlID09IFwiaW9zXCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJhcWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRJb3NJbkFwcEVycm9yIiwic3RhdHVzQ29kZSIsImNvZGVzIiwiZXJyb3IiLCJtZXNzYWdlIiwidmFsaWQiLCJpZCIsInJlZGlyZWN0IiwiaW9zU3Vic2NyaXB0aW9uVXBkYXRlIiwiZGF0YWJhc2VOYW1lIiwic3Vic2NyaXB0aW9uVXBkYXRlIiwiYWN0aW9uIiwiYXV0b19yZW5ld19hZGFtX2lkIiwicGxhbklkIiwiY2FuY2VsbGF0aW9uX2RhdGUiLCJjYW5jZWxEYXRlIiwibm90aWZpY2F0aW9uX3R5cGUiLCJzdGF0dXMiLCJsYXRlc3RfcmVjZWlwdCIsImxhdGVzdFJlY2VpcHQiLCJsYXRlc3RfcmVjZWlwdF9pbmZvIiwibGF0ZXN0SW5mbyIsImxhdGVzdF9leHBpcmVkX3JlY2VpcHQiLCJleHBpcmVkUmVjZWlwdCIsImxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbyIsImV4cGlyZWRJbmZvIiwib3JpZ2luYWxfdHJhbnNhY3Rpb25faWQiLCJ0cmFuc2FjdGlvbklkIiwiZm9ybWF0U3RhdHVzIiwidG9Mb3dlckNhc2UiLCJub3ciLCJEYXRlIiwicmVjZWlwdEluZm8iLCJ1cGRhdGUiLCJpc1ZhbGlkIiwiZXhwaXJlc19kYXRlX21zIiwibW9kaWZpZWQiLCJyZWNlaXB0IiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwidHlwZSIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImNhdGNoIiwiZGJFcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldElvc1N1YnNjcmlwdGlvbiIsImNvbnRleHQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiY3Vyc29yIiwibmV4dCIsInN1YnNjcmlwdGlvbiIsImFkZElvc0luQXBwIiwidHJpYWxFbmQiLCJzdWJzY3JpcHRpb25JZCIsInVwZGF0ZWRTdWJzY3JpcHRpb24iLCJnZXRJb3NJbkFwcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsVUFBVSxRQUFPLCtCQUErQjtBQUN4RCxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUk3QixTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FB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
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9pb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge1xuICBQYXltZW50SU9TSW5BcHBFcnJvcixcbiAgUGF5bWVudElPU1N1YnNjcmlwdGlvbkluZm8sXG4gIFBheW1lbnRJT1NTdWJzY3JpcHRpb25VcGRhdGUsXG4gIFBheW1lbnRTdWJzY3JpcHRpb25cbn0gZnJvbSAnLi4vdHlwZXMvcGF5bWVudHMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnaW9zJztcblxuZXhwb3J0IGNvbnN0IGdldElvc0luQXBwRXJyb3IgPSAoc3RhdHVzQ29kZTogc3RyaW5nKTogUGF5bWVudElPU0luQXBwRXJyb3IgPT4ge1xuICBjb25zdCBjb2RlcyA9IHtcbiAgICBbMF06IHtlcnJvcjogZmFsc2UsIG1lc3NhZ2U6ICdBY3RpdmUnLCB2YWxpZDogdHJ1ZX0sXG4gICAgWzIxMDAwXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfcmVjZWlwdF91bnJlYWRhYmxlJywgbWVzc2FnZTogJ0FwcCBzdG9yZSBjb3VsZCBub3QgcmVhZCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDAyXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfZGF0YV9tYWxmb3JtZWQnLCBtZXNzYWdlOiAnRGF0YSB3YXMgbWFsZm9ybWVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDNdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9yZWNlaXB0X3VuYXV0aG9yaXplZCcsIG1lc3NhZ2U6ICdSZWNlaXB0IG5vdCBhdXRoZW50aWNhdGVkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDRdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlY3JldCcsIG1lc3NhZ2U6ICdTaGFyZWQgc2VjcmV0IGRvZXMgbm90IG1hdGNoJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDVdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9zZXJ2ZXJfdW5hdmFpbGFibGUnLCBtZXNzYWdlOiAnUmVjZWlwdCBzZXJ2ZXIgdW5hdmFpbGFibGUnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwNl06IHtcbiAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgIGlkOiAncGF5bWVudF9zdWJzY3JpcHRpb25fZXhwaXJlZCcsXG4gICAgICBtZXNzYWdlOiAnUmVjZWlwdCB2YWxpZCBidXQgc3ViIGV4cGlyZWQnLFxuICAgICAgdmFsaWQ6IHRydWVcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIHNwZWNpYWwgY2FzZSBmb3IgYXBwIHJldmlldyBoYW5kbGluZyAtIGZvcndhcmQgYW55IHJlcXVlc3QgdGhhdCBpcyBpbnRlbmRlZCBmb3IgdGhlIFNhbmRib3ggYnV0IHdhcyBzZW50IHRvXG4gICAgICogUHJvZHVjdGlvbiwgdGhpcyBpcyB3aGF0IHRoZSBhcHAgcmV2aWV3IHRlYW0gZG9lc1xuICAgICAqL1xuICAgIFsyMTAwN106IHtcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgaWQ6ICdwYXltZW50X2ludmFsaWRfc2VydmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTYW5kYm94IHJlY2VpcHQgc2VudCB0byBQcm9kdWN0aW9uIGVudmlyb25tZW50JyxcbiAgICAgIHJlZGlyZWN0OiB0cnVlLFxuICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgfSxcbiAgICBbMjEwMDhdOiB7XG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlcnZlcicsXG4gICAgICBtZXNzYWdlOiAnUHJvZHVjdGlvbiByZWNlaXB0IHNlbnQgdG8gU2FuZGJveCBlbnZpcm9ubWVudCcsXG4gICAgICB2YWxpZDogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGNvZGVzW3N0YXR1c0NvZGVdIHx8IHt9O1xufTtcblxuZXhwb3J0IGNvbnN0IGlvc1N1YnNjcmlwdGlvblVwZGF0ZSA9IChcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmcsXG4gIHN1YnNjcmlwdGlvblVwZGF0ZTogUGF5bWVudElPU1N1YnNjcmlwdGlvblVwZGF0ZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdpb3NTdWJzY3JpcHRpb25VcGRhdGUnO1xuICBjb25zdCB7XG4gICAgYXV0b19yZW5ld19hZGFtX2lkOiBwbGFuSWQsXG4gICAgY2FuY2VsbGF0aW9uX2RhdGU6IGNhbmNlbERhdGUsXG4gICAgbm90aWZpY2F0aW9uX3R5cGU6IHN0YXR1cyxcbiAgICBsYXRlc3RfcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbiAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHQ6IGV4cGlyZWRSZWNlaXB0LFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbzogZXhwaXJlZEluZm8sXG4gICAgb3JpZ2luYWxfdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbiAgfSA9IHN1YnNjcmlwdGlvblVwZGF0ZTtcbiAgY29uc3QgZm9ybWF0U3RhdHVzID0gKHN0YXR1cyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVjZWlwdEluZm86IFBheW1lbnRJT1NTdWJzY3JpcHRpb25JbmZvW10gPSBsYXRlc3RJbmZvIHx8IGV4cGlyZWRJbmZvO1xuICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuXG4gIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICBjYW5jZWxEYXRlLFxuICAgIGlzVmFsaWQ6IHJlY2VpcHRJbmZvWzBdLmV4cGlyZXNfZGF0ZV9tcyA+IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBsYW5JZCxcbiAgICByZWNlaXB0OiBsYXRlc3RSZWNlaXB0IHx8IGV4cGlyZWRSZWNlaXB0LFxuICAgIHN0YXR1czogZm9ybWF0U3RhdHVzXG4gIH07XG4gIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnaW9zX3BheW1lbnQnXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuICAgICBMSU1JVCAxYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gbnVsbClcbiAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGJFcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGFkZElvc0luQXBwID0gKFxuLy8gICBjb250ZXh0OiBBcGlDb250ZXh0LFxuLy8gICBhcHAsXG4vLyAgIHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvblxuLy8gKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4vLyAgIGNvbnN0IGFjdGlvbiA9ICdhZGRJb3NJbkFwcCc7XG4vLyAgIGNvbnN0IHtpc1Byb2R1Y3Rpb24sIHJlY2VpcHR9ID0gc3Vic2NyaXB0aW9uO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG5cbi8vICAgY29uc3QgcHJvZHVjdGlvbkhvc3QgPSAnYnV5Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBzYW5kYm94SG9zdCA9ICdzYW5kYm94Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBlbmRwb2ludCA9IGlzUHJvZHVjdGlvbiA/IHByb2R1Y3Rpb25Ib3N0IDogc2FuZGJveEhvc3Q7XG4vLyAgIGNvbnN0IHZlcmlmeVVybCA9IGBodHRwczovLyR7ZW5kcG9pbnR9L3ZlcmlmeVJlY2VpcHRgO1xuLy8gICBjb25zdCBwYXlsb2FkOiBvYmplY3QgPSB7XG4vLyAgICAgcGFzc3dvcmQ6IGFwcC5pYXAsXG4vLyAgICAgJ3JlY2VpcHQtZGF0YSc6IGRlY29kZVVSSUNvbXBvbmVudChyZWNlaXB0KVxuLy8gICB9O1xuLy8gICBjb25zdCBvcHRpb25zOiBvYmplY3QgPSB7XG4vLyAgICAgaGVhZGVyczoge1xuLy8gICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4vLyAgICAgfVxuLy8gICB9O1xuXG4vLyAgIHJldHVybiBwb3N0KHZlcmlmeVVybCwgcGF5bG9hZCwgb3B0aW9ucylcbi8vICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuLy8gICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmVzdWx0cyk7XG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGxhdGVzdF9yZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuLy8gICAgICAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuLy8gICAgICAgICBzdGF0dXNcbi8vICAgICAgIH0gPSBqc29uO1xuXG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGlzX3RyaWFsX3BlcmlvZDogdHJpYWxQZXJpb2QsXG4vLyAgICAgICAgIG9yaWdpbmFsX3B1cmNoYXNlX2RhdGVfbXM6IGFkZGVkLFxuLy8gICAgICAgICBleHBpcmVzX2RhdGU6IGV4cGlyZXMsXG4vLyAgICAgICAgIHByb2R1Y3RfaWQ6IHBsYW5JZCxcbi8vICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbi8vICAgICAgIH0gPSBsYXRlc3RJbmZvO1xuXG4vLyAgICAgICBpZihzdGF0dXMgPT09IDAgfHwgc3RhdHVzID09PSAyMTAwNikge1xuLy8gICAgICAgICBjb25zdCBpZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuLy8gICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuLy8gICAgICAgICBjb25zdCB1cGRhdGU6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4vLyAgICAgICAgICAgZXhwaXJlcyxcbi8vICAgICAgICAgICBpc1RyaWFsOiB0cmlhbFBlcmlvZCA9PT0gJ3RydWUnLFxuLy8gICAgICAgICAgIGlzVmFsaWQ6IGV4cGlyZXMgPiBub3csXG4vLyAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbi8vICAgICAgICAgICBwbGFuSWQsXG4vLyAgICAgICAgICAgcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbi8vICAgICAgICAgICB0cmFuc2FjdGlvbklkLFxuLy8gICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4vLyAgICAgICAgIH07XG4vLyAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbi8vICAgICAgICAgICAuLi51cGRhdGUsXG4vLyAgICAgICAgICAgX2tleTogaWQsXG4vLyAgICAgICAgICAgYWRkZWQsXG4vLyAgICAgICAgICAgdHlwZTogJ2lvc19wYXltZW50J1xuLy8gICAgICAgICB9O1xuXG4vLyAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuLy8gICAgICAgICAgICAgICBJTlNFUlQgJHtpbnNlcnR9XG4vLyAgICAgICAgICAgICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuLy8gICAgICAgICAgICAgICBSRVRVUk4gTkVXYDtcblxuLy8gICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4vLyAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRTdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbi8vICAgICAgICAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4vLyAgICAgICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4vLyAgICAgICAgICAgfSwgZGJFcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4vLyAgICAgICB9XG5cbi8vICAgICAgIC8vIEVycm9yc1xuLy8gICAgICAgY29uc3QgZXJyb3I6IFBheW1lbnRJT1NJbkFwcEVycm9yID0gZ2V0SW9zSW5BcHBFcnJvcihyZXN1bHRzLnN0YXR1cyk7XG5cbi8vICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuLy8gICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuLy8gICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InLFxuLy8gICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuLy8gICAgICAgICB2YWx1ZTogZXJyb3IuaWRcbi8vICAgICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0SW9zU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldElvc1N1YnNjcmlwdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25zXG4gICAgICBGSUxURVIgcy51c2VySWQgPT0gJHtzZXNzaW9uSWR9ICYmIHMudHlwZSA9PSBcImlvc19wYXltZW50XCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkSW9zSW5BcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2FkZGVkID0gbm93LCBwbGFuSWQsIHJlY2VpcHQsIHRyYW5zYWN0aW9uSWQsIHRyaWFsRW5kfSA9IHN1YnNjcmlwdGlvbjtcbiAgY29uc3Qgc3Vic2NyaXB0aW9uSWQgPSBjcmVhdGVIYXNoKGBzdWJzY3JpcHRpb24tJHt0cmFuc2FjdGlvbklkfWApO1xuICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4gICAgX2tleTogc3Vic2NyaXB0aW9uSWQsXG4gICAgYWRkZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBwbGFuSWQsXG4gICAgcmVjZWlwdCxcbiAgICB0cmFuc2FjdGlvbklkLFxuICAgIHRyaWFsRW5kLFxuICAgIHR5cGU6ICdpb3Nfc3Vic2NyaXB0aW9uJyxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gc3Vic2NyaXB0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZFN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbikgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJb3NJbkFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25cbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy50eXBlID09IFwiaW9zXCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJhcWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJ1c2VEYiIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRJb3NJbkFwcEVycm9yIiwic3RhdHVzQ29kZSIsImNvZGVzIiwiZXJyb3IiLCJtZXNzYWdlIiwidmFsaWQiLCJpZCIsInJlZGlyZWN0IiwiaW9zU3Vic2NyaXB0aW9uVXBkYXRlIiwiZGF0YWJhc2VOYW1lIiwic3Vic2NyaXB0aW9uVXBkYXRlIiwiYWN0aW9uIiwiYXV0b19yZW5ld19hZGFtX2lkIiwicGxhbklkIiwiY2FuY2VsbGF0aW9uX2RhdGUiLCJjYW5jZWxEYXRlIiwibm90aWZpY2F0aW9uX3R5cGUiLCJzdGF0dXMiLCJsYXRlc3RfcmVjZWlwdCIsImxhdGVzdFJlY2VpcHQiLCJsYXRlc3RfcmVjZWlwdF9pbmZvIiwibGF0ZXN0SW5mbyIsImxhdGVzdF9leHBpcmVkX3JlY2VpcHQiLCJleHBpcmVkUmVjZWlwdCIsImxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbyIsImV4cGlyZWRJbmZvIiwib3JpZ2luYWxfdHJhbnNhY3Rpb25faWQiLCJ0cmFuc2FjdGlvbklkIiwiZm9ybWF0U3RhdHVzIiwidG9Mb3dlckNhc2UiLCJub3ciLCJEYXRlIiwicmVjZWlwdEluZm8iLCJ1cGRhdGUiLCJpc1ZhbGlkIiwiZXhwaXJlc19kYXRlX21zIiwibW9kaWZpZWQiLCJyZWNlaXB0IiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwidHlwZSIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImNhdGNoIiwiZGJFcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldElvc1N1YnNjcmlwdGlvbiIsImNvbnRleHQiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiY3Vyc29yIiwibmV4dCIsInN1YnNjcmlwdGlvbiIsImFkZElvc0luQXBwIiwidHJpYWxFbmQiLCJzdWJzY3JpcHRpb25JZCIsInVwZGF0ZWRTdWJzY3JpcHRpb24iLCJnZXRJb3NJbkFwcCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsVUFBVSxRQUFPLCtCQUErQjtBQUN4RCxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUk3QixTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBT25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUVoRCxNQUFNQyxnQkFBZ0I7QUFFdEIsT0FBTyxNQUFNQyxtQkFBbUIsQ0FBQ0M7SUFDL0IsTUFBTUMsUUFBUTtRQUNaLENBQUMsRUFBRSxFQUFFO1lBQUNDLE9BQU87WUFBT0MsU0FBUztZQUFVQyxPQUFPO1FBQUk7UUFDbEQsQ0FBQyxNQUFNLEVBQUU7WUFBQ0YsT0FBTztZQUFNRyxJQUFJO1lBQThCRixTQUFTO1lBQTRCQyxPQUFPO1FBQUs7UUFDMUcsQ0FBQyxNQUFNLEVBQUU7WUFBQ0YsT0FBTztZQUFNRyxJQUFJO1lBQTBCRixTQUFTO1lBQXNCQyxPQUFPO1FBQUs7UUFDaEcsQ0FBQyxNQUFNLEVBQUU7WUFBQ0YsT0FBTztZQUFNRyxJQUFJO1lBQWdDRixTQUFTO1lBQTZCQyxPQUFPO1FBQUs7UUFDN0csQ0FBQyxNQUFNLEVBQUU7WUFBQ0YsT0FBTztZQUFNRyxJQUFJO1lBQTBCRixTQUFTO1lBQWdDQyxPQUFPO1FBQUs7UUFDMUcsQ0FBQyxNQUFNLEVBQUU7WUFBQ0YsT0FBTztZQUFNRyxJQUFJO1lBQThCRixTQUFTO1lBQThCQyxPQUFPO1FBQUs7UUFDNUcsQ0FBQyxNQUFNLEVBQUU7WUFDUEYsT0FBTztZQUNQRyxJQUFJO1lBQ0pGLFNBQVM7WUFDVEMsT0FBTztRQUNUO1FBQ0E7OztLQUdDLEdBQ0QsQ0FBQyxNQUFNLEVBQUU7WUFDUEYsT0FBTztZQUNQRyxJQUFJO1lBQ0pGLFNBQVM7WUFDVEcsVUFBVTtZQUNWRixPQUFPO1FBQ1Q7UUFDQSxDQUFDLE1BQU0sRUFBRTtZQUNQRixPQUFPO1lBQ1BHLElBQUk7WUFDSkYsU0FBUztZQUNUQyxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9ILEtBQUssQ0FBQ0QsV0FBVyxJQUFJLENBQUM7QUFDL0IsRUFBRTtBQUVGLE9BQU8sTUFBTU8sd0JBQXdCLENBQ25DQyxjQUNBQztJQUVBLE1BQU1DLFNBQVM7SUFDZixNQUFNLEVBQ0pDLG9CQUFvQkMsTUFBTSxFQUMxQkMsbUJBQW1CQyxVQUFVLEVBQzdCQyxtQkFBbUJDLE1BQU0sRUFDekJDLGdCQUFnQkMsYUFBYSxFQUM3QkMscUJBQXFCQyxVQUFVLEVBQy9CQyx3QkFBd0JDLGNBQWMsRUFDdENDLDZCQUE2QkMsV0FBVyxFQUN4Q0MseUJBQXlCQyxhQUFhLEVBQ3ZDLEdBQUdqQjtJQUNKLE1BQU1rQixlQUFlLEFBQUNYLENBQUFBLFVBQVUsRUFBQyxFQUFHWSxXQUFXO0lBQy9DLE1BQU1DLE1BQU1DLEtBQUtELEdBQUc7SUFDcEIsTUFBTUUsY0FBNENYLGNBQWNJO0lBQ2hFLE1BQU1uQixLQUFLWixXQUFXLENBQUMsUUFBUSxFQUFFaUMsZUFBZTtJQUVoRCxNQUFNTSxTQUE4QjtRQUNsQ2xCO1FBQ0FtQixTQUFTRixXQUFXLENBQUMsRUFBRSxDQUFDRyxlQUFlLEdBQUdMO1FBQzFDTSxVQUFVTjtRQUNWakI7UUFDQXdCLFNBQVNsQixpQkFBaUJJO1FBQzFCTixRQUFRVztJQUNWO0lBQ0EsTUFBTVUsU0FBOEI7UUFDbEMsR0FBR0wsTUFBTTtRQUNUTSxNQUFNakM7UUFDTmtDLE9BQU9WO1FBQ1BXLE1BQU07SUFDUjtJQUNBLE1BQU1DLFNBQW1CL0MsR0FBRyxDQUFDLHVCQUF1QixFQUFFZ0MsY0FBYztZQUMxRCxFQUFFVyxPQUFPO1lBQ1QsRUFBRUwsT0FBTztZQUNULENBQUM7SUFFWCxPQUFPbkMsTUFBTVcsY0FBY2tDLEtBQUssQ0FBQ0QsUUFDOUJFLElBQUksQ0FBQyxJQUFNLE1BQ1hDLEtBQUssQ0FBQyxDQUFDQyxVQUFtQmpELFNBQVM7WUFDbENjO1lBQ0FvQyxVQUFVaEQ7WUFDVmlELE9BQU9wRCxXQUFXcUQsY0FBYztRQUNsQyxHQUFHSCxTQUFTLENBQUMsR0FBR0YsSUFBSSxDQUFDLElBQU07QUFDL0IsRUFBRTtBQUVGLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIsU0FBUztBQUNULHNDQUFzQztBQUN0Qyx1Q0FBdUM7QUFDdkMsa0NBQWtDO0FBQ2xDLGtEQUFrRDtBQUNsRCxtREFBbUQ7QUFFbkQsbURBQW1EO0FBQ25ELG9EQUFvRDtBQUNwRCxrRUFBa0U7QUFDbEUsMkRBQTJEO0FBQzNELDhCQUE4QjtBQUM5Qix5QkFBeUI7QUFDekIsa0RBQWtEO0FBQ2xELE9BQU87QUFDUCw4QkFBOEI7QUFDOUIsaUJBQWlCO0FBQ2pCLDREQUE0RDtBQUM1RCxRQUFRO0FBQ1IsT0FBTztBQUVQLDZDQUE2QztBQUM3QywyQkFBMkI7QUFDM0IsMENBQTBDO0FBQzFDLGdCQUFnQjtBQUNoQix5Q0FBeUM7QUFDekMsMkNBQTJDO0FBQzNDLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFFbEIsZ0JBQWdCO0FBQ2hCLHdDQUF3QztBQUN4Qyw0Q0FBNEM7QUFDNUMsaUNBQWlDO0FBQ2pDLDhCQUE4QjtBQUM5Qix3Q0FBd0M7QUFDeEMsd0JBQXdCO0FBRXhCLCtDQUErQztBQUMvQyw2REFBNkQ7QUFDN0Qsa0NBQWtDO0FBQ2xDLGdEQUFnRDtBQUNoRCxxQkFBcUI7QUFDckIsNkNBQTZDO0FBQzdDLG9DQUFvQztBQUNwQywyQkFBMkI7QUFDM0Isb0JBQW9CO0FBQ3BCLG9DQUFvQztBQUNwQywyQkFBMkI7QUFDM0IsOEJBQThCO0FBQzlCLGFBQWE7QUFDYixnREFBZ0Q7QUFDaEQsdUJBQXVCO0FBQ3ZCLHNCQUFzQjtBQUN0QixtQkFBbUI7QUFDbkIsZ0NBQWdDO0FBQ2hDLGFBQWE7QUFFYixnRkFBZ0Y7QUFDaEYsaUNBQWlDO0FBQ2pDLGtEQUFrRDtBQUNsRCw2QkFBNkI7QUFFN0Isd0NBQXdDO0FBQ3hDLDZDQUE2QztBQUM3QywwRkFBMEY7QUFDMUYsa0RBQWtEO0FBQ2xELHNCQUFzQjtBQUN0Qix1Q0FBdUM7QUFDdkMsK0NBQStDO0FBQy9DLG9EQUFvRDtBQUNwRCxVQUFVO0FBRVYsa0JBQWtCO0FBQ2xCLDhFQUE4RTtBQUU5RSw4QkFBOEI7QUFDOUIsa0JBQWtCO0FBQ2xCLG1DQUFtQztBQUNuQyxrQ0FBa0M7QUFDbEMsa0NBQWtDO0FBQ2xDLDBCQUEwQjtBQUMxQixzQ0FBc0M7QUFDdEMsVUFBVTtBQUNWLEtBQUs7QUFFTCxPQUFPLE1BQU1NLHFCQUFxQixDQUFDQztJQUNqQyxNQUFNeEMsU0FBUztJQUNmLE1BQU0sRUFBQ0YsWUFBWSxFQUFFMkMsU0FBUyxFQUFDQyxRQUFRQyxTQUFTLEVBQUMsRUFBQyxHQUFHSDtJQUNyRCxNQUFNVCxTQUFtQi9DLEdBQUcsQ0FBQzt5QkFDTixFQUFFMkQsVUFBVTs7Y0FFdkIsQ0FBQztJQUViLE9BQU94RCxNQUFNVyxjQUFja0MsS0FBSyxDQUFDRCxRQUM5QkUsSUFBSSxDQUFDLENBQUNXLFNBQVdBLE9BQU9DLElBQUksSUFDNUJaLElBQUksQ0FBQyxDQUFDYSxlQUFzQ0EsY0FDNUNaLEtBQUssQ0FBQyxDQUFDMUMsUUFBaUJOLFNBQVM7WUFDaENjO1lBQ0FvQyxVQUFVaEQ7WUFDVmlELE9BQU9wRCxXQUFXcUQsY0FBYztRQUNsQyxHQUFHOUMsT0FBT2dELFNBQVNQLElBQUksQ0FBQyxJQUFNO0FBQ2xDLEVBQUU7QUFFRixPQUFPLE1BQU1jLGNBQWMsQ0FBQ1AsU0FBcUJNO0lBQy9DLE1BQU05QyxTQUFTO0lBQ2YsTUFBTSxFQUFDRixZQUFZLEVBQUUyQyxTQUFTLEVBQUNDLFFBQVFDLFNBQVMsRUFBQyxFQUFDLEdBQUdIO0lBQ3JELE1BQU1yQixNQUFNQyxLQUFLRCxHQUFHO0lBQ3BCLE1BQU0sRUFBQ1UsUUFBUVYsR0FBRyxFQUFFakIsTUFBTSxFQUFFd0IsT0FBTyxFQUFFVixhQUFhLEVBQUVnQyxRQUFRLEVBQUMsR0FBR0Y7SUFDaEUsTUFBTUcsaUJBQWlCbEUsV0FBVyxDQUFDLGFBQWEsRUFBRWlDLGVBQWU7SUFDakUsTUFBTVcsU0FBOEI7UUFDbENDLE1BQU1xQjtRQUNOcEI7UUFDQUosVUFBVU47UUFDVmpCO1FBQ0F3QjtRQUNBVjtRQUNBZ0M7UUFDQWxCLE1BQU07UUFDTlksUUFBUUM7SUFDVjtJQUNBLE1BQU1aLFNBQW1CL0MsR0FBRyxDQUFDLE9BQU8sRUFBRTJDLE9BQU8sNEJBQTRCLENBQUM7SUFFMUUsT0FBT3hDLE1BQU1XLGNBQWNrQyxLQUFLLENBQUNELFFBQzlCRSxJQUFJLENBQUMsQ0FBQ1csU0FBV0EsT0FBT0MsSUFBSSxJQUM1QlosSUFBSSxDQUFDLENBQUNpQixzQkFBNkNBLHFCQUNuRGhCLEtBQUssQ0FBQyxDQUFDMUMsUUFBaUJOLFNBQVM7WUFDaENjO1lBQ0FvQyxVQUFVaEQ7WUFDVmlELE9BQU9wRCxXQUFXcUQsY0FBYztRQUNsQyxHQUFHOUMsT0FBT2dELFNBQVNQLElBQUksQ0FBQyxJQUFNO0FBQ2xDLEVBQUU7QUFFRixPQUFPLE1BQU1rQixjQUFjLENBQUNYO0lBQzFCLE1BQU14QyxTQUFTO0lBQ2YsTUFBTSxFQUFDRixZQUFZLEVBQUUyQyxTQUFTLEVBQUNDLFFBQVFDLFNBQVMsRUFBQyxFQUFDLEdBQUdIO0lBQ3JELE1BQU1ULFNBQW1CL0MsR0FBRyxDQUFDO3lCQUNOLEVBQUUyRCxVQUFVOztjQUV2QixDQUFDO0lBRWIsT0FBT3hELE1BQU1XLGNBQWNrQyxLQUFLLENBQUNELFFBQzlCRSxJQUFJLENBQUMsQ0FBQ1csU0FBV0EsT0FBT0MsSUFBSSxJQUM1QlosSUFBSSxDQUFDLENBQUNhLGVBQXNDQSxjQUM1Q1osS0FBSyxDQUFDLENBQUMxQyxRQUFpQk4sU0FBUztZQUNoQ2M7WUFDQW9DLFVBQVVoRDtZQUNWaUQsT0FBT3BELFdBQVdxRCxjQUFjO1FBQ2xDLEdBQUc5QyxPQUFPZ0QsU0FBU1AsSUFBSSxDQUFDLElBQU07QUFDbEMsRUFBRSJ9
@@ -141,4 +141,4 @@ export const autoCompleteLocation = (context, address)=>{
141
141
  });
142
142
  };
143
143
 
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9sb2NhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXQsIHF1ZXJ5U3RyaW5nfSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtHb29nbGVNYXBzQWRkcmVzc1R5cGUsIEdvb2dsZU1hcHNSZXN1bHRUeXBlfSBmcm9tICcuLi90eXBlcy9nb29nbGUudHlwZXMuanMnO1xuaW1wb3J0IHtMb2NhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2xvY2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0SXRlbUJ5fSBmcm9tICcuL2NydWQuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2xvY2F0aW9ucyc7XG5cbmNvbnN0IG1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24gPSAoZ2VvZGF0YTogR29vZ2xlTWFwc1Jlc3VsdFR5cGUpOiBMb2NhdGlvblR5cGUgPT4ge1xuICBjb25zdCBhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10gPSBnZW9kYXRhPy5hZGRyZXNzX2NvbXBvbmVudHMgfHwgW107XG4gIGNvbnN0IHN0cmVldE51bWJlciA9IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnc3RyZWV0X251bWJlcicpO1xuICBjb25zdCByb3V0ZSA9IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAncm91dGUnKTtcbiAgY29uc3QgZ29vZ2xlSWQgPSBnZW9kYXRhPy5wbGFjZV9pZCB8fCAnJztcblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGdlb2RhdGE/LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgIGNpdHk6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnbG9jYWxpdHknKSxcbiAgICBjb3VudHJ5OiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ2NvdW50cnknKSxcbiAgICBmb3JtYXR0ZWQ6IGdlb2RhdGE/LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgIGdvb2dsZUlkLFxuICAgIGlkOiBnb29nbGVJZCxcbiAgICBsYXRpdHVkZTogZ2VvZGF0YT8uZ2VvbWV0cnkubG9jYXRpb24ubGF0LFxuICAgIGxvY2F0aW9uOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBsb25naXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxuZyxcbiAgICBzdGF0ZTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEnKSxcbiAgICBzdHJlZXQ6IFtzdHJlZXROdW1iZXIsIHJvdXRlXS5maWx0ZXIoKG9iaikgPT4gb2JqKS5qb2luKCcgJyksXG4gICAgemlwOiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3Bvc3RhbF9jb2RlJylcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZFZhbCA9IChhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10sIG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHtzaG9ydF9uYW1lOiBzaG9ydE5hbWUgPSAnJ30gPSBhZGRyZXNzQ29tcG9uZW50cy5maW5kKChhZGRyZXNzRmllbGQ6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZSkgPT4ge1xuICAgIGNvbnN0IHR5cGVzID0gYWRkcmVzc0ZpZWxkLnR5cGVzIHx8IFtdO1xuICAgIHJldHVybiB0eXBlcy5maW5kSW5kZXgoKGZpZWxkVHlwZTogc3RyaW5nKSA9PiBmaWVsZFR5cGUgPT09IG5hbWUpID49IDA7XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBzaG9ydE5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTG9jYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYXRpb246IExvY2F0aW9uVHlwZSk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthZGRyZXNzLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGxvY2F0aW9uO1xuICBjb25zdCBnZW9jb2RlVXJsID0gQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUudXJsJyk7XG4gIGNvbnN0IHBhcmFtczogb2JqZWN0ID0ge1xuICAgIGFkZHJlc3MsXG4gICAga2V5OiBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS5rZXknKVxuICB9O1xuICBjb25zdCB1cmwgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oYXN5bmMgKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBnZW9kYXRhOiBHb29nbGVNYXBzUmVzdWx0VHlwZSA9IHJlc3VsdHNbMF07XG5cbiAgICAgICAgLy8gSXRlbVxuICAgICAgICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICAgICAgICBjb25zdCBnb29nbGVJZCA9IGdlb2RhdGE/LnBsYWNlX2lkIHx8ICcnO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTG9jYXRpb24gPSBhd2FpdCBnZXRJdGVtQnk8TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywge2dvb2dsZUlkfSk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRMb2NhdGlvbjogTG9jYXRpb25UeXBlO1xuICAgICAgICBpZihleGlzdGluZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgLy8gTG9jYXRpb24gZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgICB1cGRhdGVkTG9jYXRpb24gPSBleGlzdGluZ0xvY2F0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgbG9jYXRpb25cbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IExvY2F0aW9uVHlwZSA9IHtcbiAgICAgICAgICAgIC4uLm1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24oZ2VvZGF0YSksXG4gICAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHVwZGF0ZWRMb2NhdGlvbiA9IGF3YWl0IGFkZEl0ZW08TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywgaW5zZXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtfa2V5OiB1cGRhdGVkTG9jYXRpb25LZXl9ID0gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgICBsZXQgaXRlbURvY0lkOiBzdHJpbmc7XG5cbiAgICAgICAgc3dpdGNoKGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncG9zdHMnOlxuICAgICAgICAgICAgaXRlbURvY0lkID0gYHBvc3RzLyR7Zm9ybWF0SXRlbUlkfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaXRlbURvY0lkID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHZhbGlkIGl0ZW0gZG9jIGlkLCBjcmVhdGUgYW4gZWRnZVxuICAgICAgICBpZihpdGVtRG9jSWQpIHtcbiAgICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0xvY2F0aW9uJyk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb25JZCA9IHVwZGF0ZWRMb2NhdGlvbktleTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbkRvY0lkID0gYGxvY2F0aW9ucy8ke2xvY2F0aW9uSWR9YDtcbiAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNMb2NhdGlvbi0ke2xvY2F0aW9uSWR9LSR7c2Vzc2lvbklkfWApO1xuICAgICAgICAgIGNvbnN0IGVkZ2U6IEVkZ2VUeXBlID0ge19mcm9tOiBpdGVtRG9jSWQsIF9rZXk6IGVkZ2VJZCwgX3RvOiBsb2NhdGlvbkRvY0lkfTtcblxuICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHVwZGF0ZWRMb2NhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UganVzdCByZXR1cm4gdGhlIG5ldyBsb2NhdGlvblxuICAgICAgICByZXR1cm4gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChsb2NhdGlvbklkKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxMb2NhdGlvblR5cGU+KGNvbnRleHQsICdsb2NhdGlvbnMnLCB7X2tleTogZm9ybWF0SWR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhdXRvQ29tcGxldGVMb2NhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhdXRvQ29tcGxldGVMb2NhdGlvbic7XG4gIGNvbnN0IGdlb2NvZGVVcmwgPSBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS51cmwnKTtcbiAgY29uc3QgZ2VvY29kZUtleSA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLmtleScpO1xuXG4gIGlmKCFhZGRyZXNzIHx8ICFnZW9jb2RlVXJsIHx8ICFnZW9jb2RlS2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cblxuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogZ2VvY29kZUtleVxuICB9O1xuICBjb25zdCB1cmwgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogR29vZ2xlTWFwc1Jlc3VsdFR5cGUpID0+IG1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24ocmVzdWx0KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0xvY2F0aW9uIGF1dG9jb21wbGV0ZSBmYWlsZWQ6Jywge1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicXVlcnlTdHJpbmciLCJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImV2ZW50Q2F0ZWdvcnkiLCJtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uIiwiZ2VvZGF0YSIsImFkZHJlc3NDb21wb25lbnRzIiwiYWRkcmVzc19jb21wb25lbnRzIiwic3RyZWV0TnVtYmVyIiwiZ2V0RmllbGRWYWwiLCJyb3V0ZSIsImdvb2dsZUlkIiwicGxhY2VfaWQiLCJhZGRyZXNzIiwiZm9ybWF0dGVkX2FkZHJlc3MiLCJjaXR5IiwiY291bnRyeSIsImZvcm1hdHRlZCIsImlkIiwibGF0aXR1ZGUiLCJnZW9tZXRyeSIsImxvY2F0aW9uIiwibGF0IiwibG9uZ2l0dWRlIiwibG5nIiwic3RhdGUiLCJzdHJlZXQiLCJmaWx0ZXIiLCJvYmoiLCJqb2luIiwiemlwIiwibmFtZSIsInNob3J0X25hbWUiLCJzaG9ydE5hbWUiLCJmaW5kIiwiYWRkcmVzc0ZpZWxkIiwidHlwZXMiLCJmaW5kSW5kZXgiLCJmaWVsZFR5cGUiLCJhZGRMb2NhdGlvbiIsImNvbnRleHQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJnZW9jb2RlVXJsIiwicGFyYW1zIiwia2V5IiwidXJsIiwidGhlbiIsImpzb24iLCJyZXN1bHRzIiwic3RhdHVzIiwibGVuZ3RoIiwiZm9ybWF0SXRlbVR5cGUiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdEl0ZW1JZCIsImV4aXN0aW5nTG9jYXRpb24iLCJ1cGRhdGVkTG9jYXRpb24iLCJpbnNlcnQiLCJfa2V5IiwidXBkYXRlZExvY2F0aW9uS2V5IiwiaXRlbURvY0lkIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwibG9jYXRpb25JZCIsImxvY2F0aW9uRG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJzYXZlIiwicmV0dXJuTmV3IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldExvY2F0aW9uIiwiZm9ybWF0SWQiLCJhdXRvQ29tcGxldGVMb2NhdGlvbiIsImdlb2NvZGVLZXki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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy9sb2NhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXQsIHF1ZXJ5U3RyaW5nfSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQ2hhciwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtHb29nbGVNYXBzQWRkcmVzc1R5cGUsIEdvb2dsZU1hcHNSZXN1bHRUeXBlfSBmcm9tICcuLi90eXBlcy9nb29nbGUudHlwZXMuanMnO1xuaW1wb3J0IHtMb2NhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2xvY2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZ2V0SXRlbUJ5fSBmcm9tICcuL2NydWQuanMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2xvY2F0aW9ucyc7XG5cbmNvbnN0IG1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24gPSAoZ2VvZGF0YTogR29vZ2xlTWFwc1Jlc3VsdFR5cGUpOiBMb2NhdGlvblR5cGUgPT4ge1xuICBjb25zdCBhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10gPSBnZW9kYXRhPy5hZGRyZXNzX2NvbXBvbmVudHMgfHwgW107XG4gIGNvbnN0IHN0cmVldE51bWJlciA9IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnc3RyZWV0X251bWJlcicpO1xuICBjb25zdCByb3V0ZSA9IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAncm91dGUnKTtcbiAgY29uc3QgZ29vZ2xlSWQgPSBnZW9kYXRhPy5wbGFjZV9pZCB8fCAnJztcblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGdlb2RhdGE/LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgIGNpdHk6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnbG9jYWxpdHknKSxcbiAgICBjb3VudHJ5OiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ2NvdW50cnknKSxcbiAgICBmb3JtYXR0ZWQ6IGdlb2RhdGE/LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgIGdvb2dsZUlkLFxuICAgIGlkOiBnb29nbGVJZCxcbiAgICBsYXRpdHVkZTogZ2VvZGF0YT8uZ2VvbWV0cnkubG9jYXRpb24ubGF0LFxuICAgIGxvY2F0aW9uOiBnZW9kYXRhPy5mb3JtYXR0ZWRfYWRkcmVzcyxcbiAgICBsb25naXR1ZGU6IGdlb2RhdGE/Lmdlb21ldHJ5LmxvY2F0aW9uLmxuZyxcbiAgICBzdGF0ZTogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzEnKSxcbiAgICBzdHJlZXQ6IFtzdHJlZXROdW1iZXIsIHJvdXRlXS5maWx0ZXIoKG9iaikgPT4gb2JqKS5qb2luKCcgJyksXG4gICAgemlwOiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3Bvc3RhbF9jb2RlJylcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZFZhbCA9IChhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10sIG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHtzaG9ydF9uYW1lOiBzaG9ydE5hbWUgPSAnJ30gPSBhZGRyZXNzQ29tcG9uZW50cy5maW5kKChhZGRyZXNzRmllbGQ6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZSkgPT4ge1xuICAgIGNvbnN0IHR5cGVzID0gYWRkcmVzc0ZpZWxkLnR5cGVzIHx8IFtdO1xuICAgIHJldHVybiB0eXBlcy5maW5kSW5kZXgoKGZpZWxkVHlwZTogc3RyaW5nKSA9PiBmaWVsZFR5cGUgPT09IG5hbWUpID49IDA7XG4gIH0pIHx8IHt9O1xuXG4gIHJldHVybiBzaG9ydE5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTG9jYXRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCwgbG9jYXRpb246IExvY2F0aW9uVHlwZSk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthZGRyZXNzLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGxvY2F0aW9uO1xuICBjb25zdCBnZW9jb2RlVXJsID0gQ29uZmlnLmdldCgnZ29vZ2xlLmdlb2NvZGUudXJsJyk7XG4gIGNvbnN0IHBhcmFtczogb2JqZWN0ID0ge1xuICAgIGFkZHJlc3MsXG4gICAga2V5OiBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS5rZXknKVxuICB9O1xuICBjb25zdCB1cmwgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oYXN5bmMgKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBnZW9kYXRhOiBHb29nbGVNYXBzUmVzdWx0VHlwZSA9IHJlc3VsdHNbMF07XG5cbiAgICAgICAgLy8gSXRlbVxuICAgICAgICBjb25zdCBmb3JtYXRJdGVtVHlwZSA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICAgICAgICBjb25zdCBnb29nbGVJZCA9IGdlb2RhdGE/LnBsYWNlX2lkIHx8ICcnO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTG9jYXRpb24gPSBhd2FpdCBnZXRJdGVtQnk8TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywge2dvb2dsZUlkfSk7XG5cbiAgICAgICAgbGV0IHVwZGF0ZWRMb2NhdGlvbjogTG9jYXRpb25UeXBlO1xuICAgICAgICBpZihleGlzdGluZ0xvY2F0aW9uKSB7XG4gICAgICAgICAgLy8gTG9jYXRpb24gZXhpc3RzLCB1c2UgaXRcbiAgICAgICAgICB1cGRhdGVkTG9jYXRpb24gPSBleGlzdGluZ0xvY2F0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgbG9jYXRpb25cbiAgICAgICAgICBjb25zdCBpbnNlcnQ6IExvY2F0aW9uVHlwZSA9IHtcbiAgICAgICAgICAgIC4uLm1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24oZ2VvZGF0YSksXG4gICAgICAgICAgICBfa2V5OiBjcmVhdGVIYXNoKGBwb3N0LSR7c2Vzc2lvbklkfWApXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHVwZGF0ZWRMb2NhdGlvbiA9IGF3YWl0IGFkZEl0ZW08TG9jYXRpb25UeXBlPihjb250ZXh0LCAnbG9jYXRpb25zJywgaW5zZXJ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtfa2V5OiB1cGRhdGVkTG9jYXRpb25LZXl9ID0gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgICBsZXQgaXRlbURvY0lkOiBzdHJpbmc7XG5cbiAgICAgICAgc3dpdGNoKGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY2FzZSAncG9zdHMnOlxuICAgICAgICAgICAgaXRlbURvY0lkID0gYHBvc3RzLyR7Zm9ybWF0SXRlbUlkfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaXRlbURvY0lkID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHZhbGlkIGl0ZW0gZG9jIGlkLCBjcmVhdGUgYW4gZWRnZVxuICAgICAgICBpZihpdGVtRG9jSWQpIHtcbiAgICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0xvY2F0aW9uJyk7XG4gICAgICAgICAgY29uc3QgbG9jYXRpb25JZCA9IHVwZGF0ZWRMb2NhdGlvbktleTtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbkRvY0lkID0gYGxvY2F0aW9ucy8ke2xvY2F0aW9uSWR9YDtcbiAgICAgICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNMb2NhdGlvbi0ke2xvY2F0aW9uSWR9LSR7c2Vzc2lvbklkfWApO1xuICAgICAgICAgIGNvbnN0IGVkZ2U6IEVkZ2VUeXBlID0ge19mcm9tOiBpdGVtRG9jSWQsIF9rZXk6IGVkZ2VJZCwgX3RvOiBsb2NhdGlvbkRvY0lkfTtcblxuICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHVwZGF0ZWRMb2NhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UganVzdCByZXR1cm4gdGhlIG5ldyBsb2NhdGlvblxuICAgICAgICByZXR1cm4gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdElkID0gcGFyc2VJZChsb2NhdGlvbklkKTtcbiAgcmV0dXJuIGdldEl0ZW1CeTxMb2NhdGlvblR5cGU+KGNvbnRleHQsICdsb2NhdGlvbnMnLCB7X2tleTogZm9ybWF0SWR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhdXRvQ29tcGxldGVMb2NhdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPExvY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhdXRvQ29tcGxldGVMb2NhdGlvbic7XG4gIGNvbnN0IGdlb2NvZGVVcmwgPSBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS51cmwnKTtcbiAgY29uc3QgZ2VvY29kZUtleSA9IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLmtleScpO1xuXG4gIGlmKCFhZGRyZXNzIHx8ICFnZW9jb2RlVXJsIHx8ICFnZW9jb2RlS2V5KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cblxuICBjb25zdCBwYXJhbXM6IG9iamVjdCA9IHtcbiAgICBhZGRyZXNzLFxuICAgIGtleTogZ2VvY29kZUtleVxuICB9O1xuICBjb25zdCB1cmwgPSBgJHtnZW9jb2RlVXJsfT8ke3F1ZXJ5U3RyaW5nKHBhcmFtcyl9YDtcblxuICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgIGNvbnN0IHtyZXN1bHRzID0gW10sIHN0YXR1cyA9ICcnfSA9IGpzb247XG5cbiAgICAgIGlmKHN0YXR1cyA9PT0gJ09LJyAmJiByZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogR29vZ2xlTWFwc1Jlc3VsdFR5cGUpID0+IG1hcEdvb2dsZVJlc3VsdFRvTG9jYXRpb24ocmVzdWx0KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0xvY2F0aW9uIGF1dG9jb21wbGV0ZSBmYWlsZWQ6Jywge1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwicXVlcnlTdHJpbmciLCJjcmVhdGVIYXNoIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsImdldEl0ZW1CeSIsImV2ZW50Q2F0ZWdvcnkiLCJtYXBHb29nbGVSZXN1bHRUb0xvY2F0aW9uIiwiZ2VvZGF0YSIsImFkZHJlc3NDb21wb25lbnRzIiwiYWRkcmVzc19jb21wb25lbnRzIiwic3RyZWV0TnVtYmVyIiwiZ2V0RmllbGRWYWwiLCJyb3V0ZSIsImdvb2dsZUlkIiwicGxhY2VfaWQiLCJhZGRyZXNzIiwiZm9ybWF0dGVkX2FkZHJlc3MiLCJjaXR5IiwiY291bnRyeSIsImZvcm1hdHRlZCIsImlkIiwibGF0aXR1ZGUiLCJnZW9tZXRyeSIsImxvY2F0aW9uIiwibGF0IiwibG9uZ2l0dWRlIiwibG5nIiwic3RhdGUiLCJzdHJlZXQiLCJmaWx0ZXIiLCJvYmoiLCJqb2luIiwiemlwIiwibmFtZSIsInNob3J0X25hbWUiLCJzaG9ydE5hbWUiLCJmaW5kIiwiYWRkcmVzc0ZpZWxkIiwidHlwZXMiLCJmaW5kSW5kZXgiLCJmaWVsZFR5cGUiLCJhZGRMb2NhdGlvbiIsImNvbnRleHQiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJnZW9jb2RlVXJsIiwicGFyYW1zIiwia2V5IiwidXJsIiwidGhlbiIsImpzb24iLCJyZXN1bHRzIiwic3RhdHVzIiwibGVuZ3RoIiwiZm9ybWF0SXRlbVR5cGUiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdEl0ZW1JZCIsImV4aXN0aW5nTG9jYXRpb24iLCJ1cGRhdGVkTG9jYXRpb24iLCJpbnNlcnQiLCJfa2V5IiwidXBkYXRlZExvY2F0aW9uS2V5IiwiaXRlbURvY0lkIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwibG9jYXRpb25JZCIsImxvY2F0aW9uRG9jSWQiLCJlZGdlSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJzYXZlIiwicmV0dXJuTmV3IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldExvY2F0aW9uIiwiZm9ybWF0SWQiLCJhdXRvQ29tcGxldGVMb2NhdGlvbiIsImdlb2NvZGVL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