payload-auth 1.0.2 → 1.1.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 (423) hide show
  1. package/dist/better-auth/adapter/index.d.ts +2 -2
  2. package/dist/better-auth/adapter/index.d.ts.map +1 -1
  3. package/dist/better-auth/adapter/index.js +115 -69
  4. package/dist/better-auth/adapter/transform/index.d.ts +22 -10
  5. package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
  6. package/dist/better-auth/adapter/transform/index.js +387 -96
  7. package/dist/better-auth/adapter/types.d.ts +2 -1
  8. package/dist/better-auth/adapter/types.d.ts.map +1 -1
  9. package/dist/better-auth/adapter/types.js +1 -1
  10. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts +3 -0
  11. package/dist/better-auth/plugin/helpers/check-passkey-plugin.d.ts.map +1 -0
  12. package/dist/better-auth/plugin/helpers/check-passkey-plugin.js +5 -0
  13. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts +3 -0
  14. package/dist/better-auth/plugin/helpers/check-username-plugin.d.ts.map +1 -0
  15. package/dist/better-auth/plugin/helpers/check-username-plugin.js +5 -0
  16. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts.map +1 -1
  17. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +8 -8
  18. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +8 -0
  19. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts.map +1 -0
  20. package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
  21. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts +14 -0
  22. package/dist/better-auth/plugin/helpers/get-admin-routes.d.ts.map +1 -0
  23. package/dist/better-auth/plugin/helpers/get-admin-routes.js +6 -0
  24. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +6 -0
  25. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts.map +1 -0
  26. package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
  27. package/dist/better-auth/plugin/helpers/get-ip.d.ts +1 -1
  28. package/dist/better-auth/plugin/helpers/get-ip.d.ts.map +1 -1
  29. package/dist/better-auth/plugin/helpers/get-ip.js +14 -14
  30. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +3 -0
  31. package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +1 -0
  32. package/dist/better-auth/plugin/helpers/get-requst-collection.js +14 -0
  33. package/dist/better-auth/plugin/helpers/index.d.ts +1 -1
  34. package/dist/better-auth/plugin/helpers/index.js +2 -2
  35. package/dist/better-auth/plugin/{lib → helpers}/prepare-session-data.d.ts +3 -3
  36. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -0
  37. package/dist/better-auth/plugin/helpers/prepare-session-data.js +42 -0
  38. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +4 -4
  39. package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +1 -1
  40. package/dist/better-auth/plugin/helpers/serialize-cookie.js +34 -34
  41. package/dist/better-auth/plugin/index.d.ts +7 -7
  42. package/dist/better-auth/plugin/index.d.ts.map +1 -1
  43. package/dist/better-auth/plugin/index.js +145 -37
  44. package/dist/better-auth/plugin/{collections → lib/build-collections}/accounts/hooks/sync-password-to-user.d.ts +1 -1
  45. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -0
  46. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +47 -0
  47. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +7 -0
  48. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -0
  49. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +159 -0
  50. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +6 -0
  51. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts.map +1 -0
  52. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
  53. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +3 -0
  54. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts.map +1 -0
  55. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
  56. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +7 -0
  57. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts.map +1 -0
  58. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +107 -0
  59. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +6 -0
  60. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -0
  61. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +196 -0
  62. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +12 -0
  63. package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -0
  64. package/dist/better-auth/plugin/lib/build-collections/index.js +96 -0
  65. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +6 -0
  66. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -0
  67. package/dist/better-auth/plugin/lib/build-collections/invitations.js +91 -0
  68. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +6 -0
  69. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -0
  70. package/dist/better-auth/plugin/lib/build-collections/jwks.js +43 -0
  71. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +6 -0
  72. package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -0
  73. package/dist/better-auth/plugin/lib/build-collections/members.js +71 -0
  74. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +6 -0
  75. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -0
  76. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +98 -0
  77. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +6 -0
  78. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -0
  79. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +113 -0
  80. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +6 -0
  81. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -0
  82. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +67 -0
  83. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +6 -0
  84. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -0
  85. package/dist/better-auth/plugin/lib/build-collections/organizations.js +59 -0
  86. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +6 -0
  87. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -0
  88. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +108 -0
  89. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +8 -0
  90. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -0
  91. package/dist/better-auth/plugin/lib/build-collections/sessions.js +123 -0
  92. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +6 -0
  93. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -0
  94. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +83 -0
  95. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +6 -0
  96. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -0
  97. package/dist/better-auth/plugin/lib/build-collections/teams.js +45 -0
  98. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +6 -0
  99. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -0
  100. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +56 -0
  101. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +8 -0
  102. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts.map +1 -0
  103. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +52 -0
  104. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts +3 -0
  105. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.d.ts.map +1 -0
  106. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/forgot-password.js +96 -0
  107. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +13 -0
  108. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts.map +1 -0
  109. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +67 -0
  110. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts +4 -0
  111. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.d.ts.map +1 -0
  112. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/login.js +115 -0
  113. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +3 -0
  114. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts.map +1 -0
  115. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +110 -0
  116. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts +3 -0
  117. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.d.ts.map +1 -0
  118. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/reset-password.js +62 -0
  119. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
  120. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts.map +1 -0
  121. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +42 -0
  122. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +4 -0
  123. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts.map +1 -0
  124. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +79 -0
  125. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts +4 -0
  126. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.d.ts.map +1 -0
  127. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/signup.js +153 -0
  128. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-login.d.ts +1 -1
  129. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -0
  130. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +75 -0
  131. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/after-logout.d.ts +1 -1
  132. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -0
  133. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +74 -0
  134. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +7 -0
  135. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -0
  136. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +45 -0
  137. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/before-login.d.ts +1 -1
  138. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts.map +1 -0
  139. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +18 -0
  140. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +3 -0
  141. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts.map +1 -0
  142. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +14 -0
  143. package/dist/better-auth/plugin/{collections → lib/build-collections}/users/hooks/sync-account.d.ts +1 -1
  144. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -0
  145. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +82 -0
  146. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +8 -0
  147. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -0
  148. package/dist/better-auth/plugin/lib/build-collections/users/index.js +345 -0
  149. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +8 -0
  150. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts.map +1 -0
  151. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +31 -0
  152. package/dist/better-auth/plugin/lib/{payload-access.d.ts → build-collections/utils/payload-access.d.ts} +1 -1
  153. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts.map +1 -0
  154. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +64 -0
  155. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +7 -0
  156. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -0
  157. package/dist/better-auth/plugin/lib/build-collections/verifications.js +63 -0
  158. package/dist/better-auth/plugin/lib/{config.d.ts → constants.d.ts} +13 -1
  159. package/dist/better-auth/plugin/lib/constants.d.ts.map +1 -0
  160. package/dist/better-auth/plugin/lib/constants.js +56 -0
  161. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +2 -2
  162. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts.map +1 -1
  163. package/dist/better-auth/plugin/lib/get-payload-auth.js +2 -2
  164. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts +4 -4
  165. package/dist/better-auth/plugin/lib/get-required-collection-slugs.d.ts.map +1 -1
  166. package/dist/better-auth/plugin/lib/get-required-collection-slugs.js +26 -43
  167. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +4 -3
  168. package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
  169. package/dist/better-auth/plugin/lib/init-better-auth.js +7 -7
  170. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +3 -0
  171. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts.map +1 -0
  172. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +8 -0
  173. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
  174. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -0
  175. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +17 -0
  176. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
  177. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -0
  178. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +118 -0
  179. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
  180. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -0
  181. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +58 -0
  182. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
  183. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -0
  184. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +86 -0
  185. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
  186. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -0
  187. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +17 -0
  188. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
  189. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -0
  190. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +17 -0
  191. package/dist/better-auth/plugin/lib/{ensure-password-set-before-create.d.ts → sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts} +1 -1
  192. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts.map +1 -0
  193. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
  194. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts.map +1 -0
  195. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
  196. package/dist/better-auth/plugin/lib/{respect-save-to-jwt-fields-middleware.d.ts → sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts} +6 -6
  197. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -0
  198. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +30 -0
  199. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +8 -0
  200. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts.map +1 -0
  201. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +115 -0
  202. package/dist/better-auth/plugin/payload/components/admin-buttons/index.scss +31 -0
  203. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +11 -0
  204. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts.map +1 -0
  205. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +196 -0
  206. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.scss +131 -0
  207. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts +14 -0
  208. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.d.ts.map +1 -0
  209. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.js +111 -0
  210. package/dist/better-auth/plugin/payload/components/admin-social-provider-buttons/index.scss +51 -0
  211. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts +9 -0
  212. package/dist/better-auth/plugin/payload/components/form-header/index.d.ts.map +1 -0
  213. package/dist/better-auth/plugin/payload/components/form-header/index.js +23 -0
  214. package/dist/better-auth/plugin/payload/components/form-header/index.scss +8 -0
  215. package/dist/better-auth/plugin/payload/components/icons.d.ts +9 -0
  216. package/dist/better-auth/plugin/payload/components/icons.d.ts.map +1 -0
  217. package/dist/better-auth/plugin/payload/components/icons.js +437 -0
  218. package/dist/better-auth/plugin/payload/components/logo.d.ts +3 -2
  219. package/dist/better-auth/plugin/payload/components/logo.d.ts.map +1 -1
  220. package/dist/better-auth/plugin/payload/components/logo.js +22 -34
  221. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +6 -0
  222. package/dist/better-auth/plugin/payload/components/logout-button.d.ts.map +1 -0
  223. package/dist/better-auth/plugin/payload/components/logout-button.js +27 -0
  224. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +7 -0
  225. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -0
  226. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +8 -0
  227. package/dist/better-auth/plugin/payload/components/styles.css +2 -2
  228. package/dist/better-auth/plugin/payload/components/token-field.d.ts +5 -0
  229. package/dist/better-auth/plugin/payload/components/token-field.d.ts.map +1 -0
  230. package/dist/better-auth/plugin/payload/components/token-field.js +30 -0
  231. package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -3
  232. package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
  233. package/dist/better-auth/plugin/payload/exports/client.js +7 -4
  234. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +9 -5
  235. package/dist/better-auth/plugin/payload/exports/rsc.d.ts.map +1 -1
  236. package/dist/better-auth/plugin/payload/exports/rsc.js +10 -6
  237. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +3 -0
  238. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts.map +1 -0
  239. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +8 -0
  240. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts +15 -0
  241. package/dist/better-auth/plugin/payload/utils/generate-metadata.d.ts.map +1 -0
  242. package/dist/better-auth/plugin/payload/utils/generate-metadata.js +74 -0
  243. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +2 -0
  244. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts.map +1 -0
  245. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +23 -0
  246. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts +12 -0
  247. package/dist/better-auth/plugin/payload/views/admin-invite/client.d.ts.map +1 -0
  248. package/dist/better-auth/plugin/payload/views/admin-invite/client.js +92 -0
  249. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts +11 -0
  250. package/dist/better-auth/plugin/payload/views/admin-invite/index.d.ts.map +1 -0
  251. package/dist/better-auth/plugin/payload/views/admin-invite/index.js +84 -0
  252. package/dist/better-auth/plugin/payload/views/admin-invite/index.scss +25 -0
  253. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts +14 -0
  254. package/dist/better-auth/plugin/payload/views/create-first-admin/client.d.ts.map +1 -0
  255. package/dist/better-auth/plugin/payload/views/create-first-admin/client.js +95 -0
  256. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts +10 -4
  257. package/dist/better-auth/plugin/payload/views/create-first-admin/index.d.ts.map +1 -1
  258. package/dist/better-auth/plugin/payload/views/create-first-admin/index.js +124 -92
  259. package/dist/better-auth/plugin/payload/views/create-first-admin/index.scss +29 -0
  260. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +8 -0
  261. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -0
  262. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
  263. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +9 -0
  264. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts.map +1 -0
  265. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +69 -0
  266. package/dist/better-auth/plugin/payload/views/forgot-password/index.scss +0 -0
  267. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts +5 -0
  268. package/dist/better-auth/plugin/payload/views/inactivity/index.d.ts.map +1 -0
  269. package/dist/better-auth/plugin/payload/views/inactivity/index.js +12 -0
  270. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts +9 -0
  271. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.d.ts.map +1 -0
  272. package/dist/better-auth/plugin/payload/views/login/form/fields/login-field.js +54 -0
  273. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts +1 -0
  274. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.d.ts.map +1 -0
  275. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.js +121 -0
  276. package/dist/better-auth/plugin/payload/views/login/form/fields/password/index.scss +31 -0
  277. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts +56 -0
  278. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.d.ts.map +1 -0
  279. package/dist/better-auth/plugin/payload/views/login/form/fields/password/types.js +3 -0
  280. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts +17 -0
  281. package/dist/better-auth/plugin/payload/views/login/form/index.d.ts.map +1 -0
  282. package/dist/better-auth/plugin/payload/views/login/form/index.js +137 -0
  283. package/dist/better-auth/plugin/payload/views/login/form/index.scss +23 -0
  284. package/dist/better-auth/plugin/payload/views/login/index.d.ts +10 -5
  285. package/dist/better-auth/plugin/payload/views/login/index.d.ts.map +1 -1
  286. package/dist/better-auth/plugin/payload/views/login/index.js +81 -61
  287. package/dist/better-auth/plugin/payload/views/login/index.scss +10 -0
  288. package/dist/better-auth/plugin/payload/views/logout/client.d.ts +8 -0
  289. package/dist/better-auth/plugin/payload/views/logout/client.d.ts.map +1 -0
  290. package/dist/better-auth/plugin/payload/views/logout/client.js +76 -0
  291. package/dist/better-auth/plugin/payload/views/logout/index.d.ts +8 -0
  292. package/dist/better-auth/plugin/payload/views/logout/index.d.ts.map +1 -0
  293. package/dist/better-auth/plugin/payload/views/logout/index.js +14 -0
  294. package/dist/better-auth/plugin/payload/views/logout/index.scss +0 -0
  295. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +7 -0
  296. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts.map +1 -0
  297. package/dist/better-auth/plugin/payload/views/reset-password/client.js +72 -0
  298. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +5 -0
  299. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts.map +1 -0
  300. package/dist/better-auth/plugin/payload/views/reset-password/index.js +81 -0
  301. package/dist/better-auth/plugin/payload/views/reset-password/index.scss +9 -0
  302. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts +3 -0
  303. package/dist/better-auth/plugin/payload/views/reset-password/metadata.d.ts.map +1 -0
  304. package/dist/better-auth/plugin/payload/views/reset-password/metadata.js +11 -0
  305. package/dist/better-auth/plugin/types.d.ts +170 -33
  306. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  307. package/dist/better-auth/plugin/types.js +1 -1
  308. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts +1 -1
  309. package/dist/clerk/plugin/components/sync-clerk-users-button.d.ts.map +1 -1
  310. package/dist/clerk/utils/clerk-user.d.ts +0 -3
  311. package/dist/clerk/utils/clerk-user.d.ts.map +1 -1
  312. package/dist/clerk/utils/clerk-user.js +1 -3
  313. package/dist/clerk/utils/load-clerk-instance.d.ts +1 -1
  314. package/dist/clerk/utils/load-clerk-instance.d.ts.map +1 -1
  315. package/package.json +13 -13
  316. package/LICENSE.md +0 -17
  317. package/dist/better-auth/adapter/dev/bin/run.d.ts +0 -2
  318. package/dist/better-auth/adapter/dev/bin/run.d.ts.map +0 -1
  319. package/dist/better-auth/adapter/dev/bin/run.js +0 -64
  320. package/dist/better-auth/adapter/dev/bin/schema.d.ts +0 -23
  321. package/dist/better-auth/adapter/dev/bin/schema.d.ts.map +0 -1
  322. package/dist/better-auth/adapter/dev/bin/schema.js +0 -160
  323. package/dist/better-auth/adapter/dev/collections.d.ts +0 -4
  324. package/dist/better-auth/adapter/dev/collections.d.ts.map +0 -1
  325. package/dist/better-auth/adapter/dev/collections.js +0 -212
  326. package/dist/better-auth/adapter/dev/index.d.ts +0 -4
  327. package/dist/better-auth/adapter/dev/index.d.ts.map +0 -1
  328. package/dist/better-auth/adapter/dev/index.js +0 -168
  329. package/dist/better-auth/adapter/test/adapter.test.d.ts +0 -2
  330. package/dist/better-auth/adapter/test/adapter.test.d.ts.map +0 -1
  331. package/dist/better-auth/adapter/test/adapter.test.js +0 -181
  332. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts +0 -8
  333. package/dist/better-auth/adapter/test/better-auth-adapter-test.d.ts.map +0 -1
  334. package/dist/better-auth/adapter/test/better-auth-adapter-test.js +0 -425
  335. package/dist/better-auth/adapter/test/schema.test.d.ts +0 -2
  336. package/dist/better-auth/adapter/test/schema.test.d.ts.map +0 -1
  337. package/dist/better-auth/adapter/test/schema.test.js +0 -796
  338. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts +0 -24
  339. package/dist/better-auth/adapter/test/test_payload1/schema.d.ts.map +0 -1
  340. package/dist/better-auth/adapter/test/test_payload1/schema.js +0 -177
  341. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts +0 -24
  342. package/dist/better-auth/adapter/test/test_payload2/schema.d.ts.map +0 -1
  343. package/dist/better-auth/adapter/test/test_payload2/schema.js +0 -167
  344. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts +0 -24
  345. package/dist/better-auth/adapter/test/test_payload3/schema.d.ts.map +0 -1
  346. package/dist/better-auth/adapter/test/test_payload3/schema.js +0 -198
  347. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.d.ts.map +0 -1
  348. package/dist/better-auth/plugin/collections/accounts/hooks/sync-password-to-user.js +0 -47
  349. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts +0 -7
  350. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.d.ts.map +0 -1
  351. package/dist/better-auth/plugin/collections/users/endpoints/refresh-token.js +0 -106
  352. package/dist/better-auth/plugin/collections/users/hooks/after-login.d.ts.map +0 -1
  353. package/dist/better-auth/plugin/collections/users/hooks/after-login.js +0 -71
  354. package/dist/better-auth/plugin/collections/users/hooks/after-logout.d.ts.map +0 -1
  355. package/dist/better-auth/plugin/collections/users/hooks/after-logout.js +0 -49
  356. package/dist/better-auth/plugin/collections/users/hooks/before-login.d.ts.map +0 -1
  357. package/dist/better-auth/plugin/collections/users/hooks/before-login.js +0 -18
  358. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts +0 -6
  359. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.d.ts.map +0 -1
  360. package/dist/better-auth/plugin/collections/users/hooks/clean-up-user-after-delete.js +0 -33
  361. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts +0 -3
  362. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.d.ts.map +0 -1
  363. package/dist/better-auth/plugin/collections/users/hooks/on-verified-change.js +0 -14
  364. package/dist/better-auth/plugin/collections/users/hooks/sync-account.d.ts.map +0 -1
  365. package/dist/better-auth/plugin/collections/users/hooks/sync-account.js +0 -82
  366. package/dist/better-auth/plugin/lib/auth-strategy.d.ts +0 -9
  367. package/dist/better-auth/plugin/lib/auth-strategy.d.ts.map +0 -1
  368. package/dist/better-auth/plugin/lib/auth-strategy.js +0 -48
  369. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts +0 -12
  370. package/dist/better-auth/plugin/lib/build-collection-configs.d.ts.map +0 -1
  371. package/dist/better-auth/plugin/lib/build-collection-configs.js +0 -1558
  372. package/dist/better-auth/plugin/lib/config.d.ts.map +0 -1
  373. package/dist/better-auth/plugin/lib/config.js +0 -44
  374. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.d.ts.map +0 -1
  375. package/dist/better-auth/plugin/lib/ensure-password-set-before-create.js +0 -24
  376. package/dist/better-auth/plugin/lib/password.d.ts.map +0 -1
  377. package/dist/better-auth/plugin/lib/password.js +0 -63
  378. package/dist/better-auth/plugin/lib/payload-access.d.ts.map +0 -1
  379. package/dist/better-auth/plugin/lib/payload-access.js +0 -64
  380. package/dist/better-auth/plugin/lib/prepare-session-data.d.ts.map +0 -1
  381. package/dist/better-auth/plugin/lib/prepare-session-data.js +0 -42
  382. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.d.ts.map +0 -1
  383. package/dist/better-auth/plugin/lib/respect-save-to-jwt-fields-middleware.js +0 -30
  384. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts +0 -6
  385. package/dist/better-auth/plugin/lib/sanitize-auth-options.d.ts.map +0 -1
  386. package/dist/better-auth/plugin/lib/sanitize-auth-options.js +0 -298
  387. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts +0 -7
  388. package/dist/better-auth/plugin/payload/components/admin-buttons.d.ts.map +0 -1
  389. package/dist/better-auth/plugin/payload/components/admin-buttons.js +0 -219
  390. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts +0 -2
  391. package/dist/better-auth/plugin/payload/components/login-redirect.d.ts.map +0 -1
  392. package/dist/better-auth/plugin/payload/components/login-redirect.js +0 -6
  393. package/dist/better-auth/plugin/payload/components/logout.d.ts +0 -3
  394. package/dist/better-auth/plugin/payload/components/logout.d.ts.map +0 -1
  395. package/dist/better-auth/plugin/payload/components/logout.js +0 -61
  396. package/dist/better-auth/plugin/payload/components/sign-in.d.ts +0 -4
  397. package/dist/better-auth/plugin/payload/components/sign-in.d.ts.map +0 -1
  398. package/dist/better-auth/plugin/payload/components/sign-in.js +0 -384
  399. package/dist/better-auth/plugin/payload/components/sign-up.d.ts +0 -7
  400. package/dist/better-auth/plugin/payload/components/sign-up.d.ts.map +0 -1
  401. package/dist/better-auth/plugin/payload/components/sign-up.js +0 -503
  402. package/dist/better-auth/plugin/payload/components/ui/button.d.ts +0 -11
  403. package/dist/better-auth/plugin/payload/components/ui/button.d.ts.map +0 -1
  404. package/dist/better-auth/plugin/payload/components/ui/button.js +0 -42
  405. package/dist/better-auth/plugin/payload/components/ui/card.d.ts +0 -10
  406. package/dist/better-auth/plugin/payload/components/ui/card.d.ts.map +0 -1
  407. package/dist/better-auth/plugin/payload/components/ui/card.js +0 -55
  408. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts +0 -5
  409. package/dist/better-auth/plugin/payload/components/ui/checkbox.d.ts.map +0 -1
  410. package/dist/better-auth/plugin/payload/components/ui/checkbox.js +0 -23
  411. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts +0 -3
  412. package/dist/better-auth/plugin/payload/components/ui/cn.d.ts.map +0 -1
  413. package/dist/better-auth/plugin/payload/components/ui/cn.js +0 -7
  414. package/dist/better-auth/plugin/payload/components/ui/input.d.ts +0 -4
  415. package/dist/better-auth/plugin/payload/components/ui/input.d.ts.map +0 -1
  416. package/dist/better-auth/plugin/payload/components/ui/input.js +0 -14
  417. package/dist/better-auth/plugin/payload/components/ui/label.d.ts +0 -5
  418. package/dist/better-auth/plugin/payload/components/ui/label.d.ts.map +0 -1
  419. package/dist/better-auth/plugin/payload/components/ui/label.js +0 -15
  420. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts +0 -3
  421. package/dist/better-auth/plugin/payload/components/ui/password-input.d.ts.map +0 -1
  422. package/dist/better-auth/plugin/payload/components/ui/password-input.js +0 -55
  423. /package/dist/better-auth/plugin/lib/{password.d.ts → sanitize-better-auth-options/utils/password.d.ts} +0 -0
@@ -1,12 +1,12 @@
1
- import { BetterAuthError } from 'better-auth';
2
- import { generateSchema } from './generate-schema';
3
- import { createTransform } from './transform';
4
- export const BETTER_AUTH_CONTEXT_KEY = 'payload-db-adapter';
1
+ import { BetterAuthError } from "better-auth";
2
+ import { generateSchema } from "./generate-schema";
3
+ import { createTransform } from "./transform";
4
+ export const BETTER_AUTH_CONTEXT_KEY = "payload-db-adapter";
5
5
  const PAYLOAD_QUERY_DEPTH = 2;
6
- const payloadAdapter = (payloadClient, config = {})=>{
6
+ const payloadAdapter = (payloadClient, config)=>{
7
7
  function debugLog(message) {
8
8
  if (config.enableDebugLogs) {
9
- console.log('[payload-db-adapter]', ...message);
9
+ console.log("[payload-db-adapter]", ...message);
10
10
  }
11
11
  }
12
12
  function errorLog(message) {
@@ -21,7 +21,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
21
21
  }
22
22
  });
23
23
  async function resolvePayloadClient() {
24
- const payload = typeof payloadClient === 'function' ? await payloadClient() : await payloadClient;
24
+ const payload = typeof payloadClient === "function" ? await payloadClient() : await payloadClient;
25
25
  if (!payload.config?.custom?.hasBetterAuthPlugin) {
26
26
  throw new BetterAuthError(`Payload is not configured with the better-auth plugin. Please add the plugin to your payload config.`);
27
27
  }
@@ -30,14 +30,19 @@ const payloadAdapter = (payloadClient, config = {})=>{
30
30
  return (options)=>{
31
31
  const { transformInput, transformOutput, convertWhereClause, convertSelect, convertSort, getModelName, singleIdQuery, multipleIdsQuery } = createTransform(options, config.enableDebugLogs ?? false);
32
32
  return {
33
- id: 'payload',
33
+ id: "payload",
34
34
  async create (data) {
35
35
  const start = Date.now();
36
36
  const { model, data: values, select } = data;
37
37
  const collectionSlug = getModelName(model);
38
- const transformed = transformInput(values, model, 'create');
38
+ const transformed = transformInput({
39
+ data: values,
40
+ model,
41
+ action: "create",
42
+ idType: config.idType
43
+ });
39
44
  debugLog([
40
- 'create',
45
+ "create",
41
46
  {
42
47
  collectionSlug,
43
48
  transformed,
@@ -55,13 +60,16 @@ const payloadAdapter = (payloadClient, config = {})=>{
55
60
  select: convertSelect(model, select),
56
61
  context: createAdapterContext({
57
62
  model,
58
- operation: 'create'
63
+ operation: "create"
59
64
  }),
60
65
  depth: PAYLOAD_QUERY_DEPTH
61
66
  });
62
- const transformedResult = transformOutput(result);
67
+ const transformedResult = transformOutput({
68
+ doc: result,
69
+ model
70
+ });
63
71
  debugLog([
64
- 'create result',
72
+ "create result",
65
73
  {
66
74
  collectionSlug,
67
75
  transformedResult,
@@ -71,7 +79,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
71
79
  return transformedResult;
72
80
  } catch (error) {
73
81
  errorLog([
74
- 'Error in creating:',
82
+ "Error in creating:",
75
83
  model,
76
84
  error
77
85
  ]);
@@ -82,9 +90,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
82
90
  const start = Date.now();
83
91
  const { model, where, select } = data;
84
92
  const collectionSlug = getModelName(model);
85
- const payloadWhere = convertWhereClause(model, where);
93
+ const payloadWhere = convertWhereClause({
94
+ idType: config.idType,
95
+ model,
96
+ where
97
+ });
86
98
  debugLog([
87
- 'findOne',
99
+ "findOne",
88
100
  {
89
101
  collectionSlug
90
102
  }
@@ -98,7 +110,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
98
110
  let result = null;
99
111
  if (id) {
100
112
  debugLog([
101
- 'findOneByID',
113
+ "findOneByID",
102
114
  {
103
115
  collectionSlug,
104
116
  id
@@ -110,14 +122,14 @@ const payloadAdapter = (payloadClient, config = {})=>{
110
122
  select: convertSelect(model, select),
111
123
  context: createAdapterContext({
112
124
  model,
113
- operation: 'findOneByID'
125
+ operation: "findOneByID"
114
126
  }),
115
127
  depth: PAYLOAD_QUERY_DEPTH
116
128
  });
117
129
  result = doc;
118
130
  } else {
119
131
  debugLog([
120
- 'findOneByWhere',
132
+ "findOneByWhere",
121
133
  {
122
134
  collectionSlug,
123
135
  payloadWhere
@@ -129,16 +141,19 @@ const payloadAdapter = (payloadClient, config = {})=>{
129
141
  select: convertSelect(model, select),
130
142
  context: createAdapterContext({
131
143
  model,
132
- operation: 'findOneByWhere'
144
+ operation: "findOneByWhere"
133
145
  }),
134
146
  depth: PAYLOAD_QUERY_DEPTH,
135
147
  limit: 1
136
148
  });
137
149
  result = docs.docs[0];
138
150
  }
139
- const transformedResult = result ? transformOutput(result) : null;
151
+ const transformedResult = transformOutput({
152
+ doc: result,
153
+ model
154
+ });
140
155
  debugLog([
141
- 'findOne result',
156
+ "findOne result",
142
157
  {
143
158
  collectionSlug,
144
159
  transformedResult,
@@ -148,7 +163,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
148
163
  return transformedResult;
149
164
  } catch (error) {
150
165
  errorLog([
151
- 'Error in findOne: ',
166
+ "Error in findOne: ",
152
167
  error
153
168
  ]);
154
169
  return null;
@@ -158,9 +173,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
158
173
  const start = Date.now();
159
174
  const { model, where, sortBy, limit, offset } = data;
160
175
  const collectionSlug = getModelName(model);
161
- const payloadWhere = convertWhereClause(model, where);
176
+ const payloadWhere = convertWhereClause({
177
+ idType: config.idType,
178
+ model,
179
+ where
180
+ });
162
181
  debugLog([
163
- 'findMany',
182
+ "findMany",
164
183
  {
165
184
  collectionSlug,
166
185
  sortBy,
@@ -178,7 +197,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
178
197
  const singleId = where && singleIdQuery(payloadWhere);
179
198
  if (multipleIds && multipleIds.length > 0) {
180
199
  debugLog([
181
- 'findManyByMultipleIDs',
200
+ "findManyByMultipleIDs",
182
201
  {
183
202
  collectionSlug,
184
203
  ids: multipleIds
@@ -195,7 +214,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
195
214
  depth: PAYLOAD_QUERY_DEPTH,
196
215
  context: createAdapterContext({
197
216
  model,
198
- operation: 'findManyByMultipleIDs'
217
+ operation: "findManyByMultipleIDs"
199
218
  })
200
219
  });
201
220
  res.docs.push(doc);
@@ -207,7 +226,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
207
226
  };
208
227
  } else if (singleId) {
209
228
  debugLog([
210
- 'findManyBySingleID',
229
+ "findManyBySingleID",
211
230
  {
212
231
  collectionSlug,
213
232
  id: singleId
@@ -219,7 +238,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
219
238
  depth: PAYLOAD_QUERY_DEPTH,
220
239
  context: createAdapterContext({
221
240
  model,
222
- operation: 'findManyBySingleID'
241
+ operation: "findManyBySingleID"
223
242
  })
224
243
  });
225
244
  result = {
@@ -230,7 +249,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
230
249
  };
231
250
  } else {
232
251
  debugLog([
233
- 'findManyByWhere',
252
+ "findManyByWhere",
234
253
  {
235
254
  collectionSlug,
236
255
  payloadWhere
@@ -245,7 +264,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
245
264
  depth: PAYLOAD_QUERY_DEPTH,
246
265
  context: createAdapterContext({
247
266
  model,
248
- operation: 'findManyByWhere'
267
+ operation: "findManyByWhere"
249
268
  })
250
269
  });
251
270
  result = {
@@ -253,9 +272,12 @@ const payloadAdapter = (payloadClient, config = {})=>{
253
272
  totalDocs: res.totalDocs
254
273
  };
255
274
  }
256
- const transformedResult = result?.docs.map((doc)=>transformOutput(doc)) ?? null;
275
+ const transformedResult = result?.docs.map((doc)=>transformOutput({
276
+ doc,
277
+ model
278
+ })) ?? null;
257
279
  debugLog([
258
- 'findMany result',
280
+ "findMany result",
259
281
  {
260
282
  collectionSlug,
261
283
  transformedResult,
@@ -265,7 +287,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
265
287
  return transformedResult;
266
288
  } catch (error) {
267
289
  errorLog([
268
- 'Error in findMany: ',
290
+ "Error in findMany: ",
269
291
  error
270
292
  ]);
271
293
  return [];
@@ -275,9 +297,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
275
297
  const start = Date.now();
276
298
  const { model, where, update } = data;
277
299
  const collectionSlug = getModelName(model);
278
- const payloadWhere = convertWhereClause(model, where);
300
+ const payloadWhere = convertWhereClause({
301
+ idType: config.idType,
302
+ model,
303
+ where
304
+ });
279
305
  debugLog([
280
- 'update',
306
+ "update",
281
307
  {
282
308
  collectionSlug,
283
309
  update
@@ -292,7 +318,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
292
318
  const id = singleIdQuery(payloadWhere);
293
319
  if (id) {
294
320
  debugLog([
295
- 'updateByID',
321
+ "updateByID",
296
322
  {
297
323
  collectionSlug,
298
324
  id
@@ -305,13 +331,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
305
331
  depth: PAYLOAD_QUERY_DEPTH,
306
332
  context: createAdapterContext({
307
333
  model,
308
- operation: 'updateByID'
334
+ operation: "updateByID"
309
335
  })
310
336
  });
311
337
  result = doc;
312
338
  } else {
313
339
  debugLog([
314
- 'updateByWhere',
340
+ "updateByWhere",
315
341
  {
316
342
  collectionSlug,
317
343
  payloadWhere
@@ -324,14 +350,17 @@ const payloadAdapter = (payloadClient, config = {})=>{
324
350
  depth: PAYLOAD_QUERY_DEPTH,
325
351
  context: createAdapterContext({
326
352
  model,
327
- operation: 'updateByWhere'
353
+ operation: "updateByWhere"
328
354
  })
329
355
  });
330
356
  result = doc.docs[0];
331
357
  }
332
- const transformedResult = transformOutput(result) ?? null;
358
+ const transformedResult = transformOutput({
359
+ doc: result,
360
+ model
361
+ });
333
362
  debugLog([
334
- 'update result',
363
+ "update result",
335
364
  {
336
365
  collectionSlug,
337
366
  transformedResult,
@@ -341,7 +370,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
341
370
  return transformedResult;
342
371
  } catch (error) {
343
372
  errorLog([
344
- 'Error in update: ',
373
+ "Error in update: ",
345
374
  error
346
375
  ]);
347
376
  return null;
@@ -351,9 +380,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
351
380
  const start = Date.now();
352
381
  const { model, where, update } = data;
353
382
  const collectionSlug = getModelName(model);
354
- const payloadWhere = convertWhereClause(model, where);
383
+ const payloadWhere = convertWhereClause({
384
+ idType: config.idType,
385
+ model,
386
+ where
387
+ });
355
388
  debugLog([
356
- 'updateMany',
389
+ "updateMany",
357
390
  {
358
391
  collectionSlug,
359
392
  payloadWhere,
@@ -372,11 +405,11 @@ const payloadAdapter = (payloadClient, config = {})=>{
372
405
  depth: PAYLOAD_QUERY_DEPTH,
373
406
  context: createAdapterContext({
374
407
  model,
375
- operation: 'updateMany'
408
+ operation: "updateMany"
376
409
  })
377
410
  });
378
411
  debugLog([
379
- 'updateMany result',
412
+ "updateMany result",
380
413
  {
381
414
  collectionSlug,
382
415
  result: updateResult,
@@ -386,7 +419,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
386
419
  return updateResult?.length || 0;
387
420
  } catch (error) {
388
421
  errorLog([
389
- 'Error in updateMany: ',
422
+ "Error in updateMany: ",
390
423
  error
391
424
  ]);
392
425
  return 0;
@@ -396,9 +429,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
396
429
  const start = Date.now();
397
430
  const { model, where } = data;
398
431
  const collectionSlug = getModelName(model);
399
- const payloadWhere = convertWhereClause(model, where);
432
+ const payloadWhere = convertWhereClause({
433
+ idType: config.idType,
434
+ model,
435
+ where
436
+ });
400
437
  debugLog([
401
- 'delete',
438
+ "delete",
402
439
  {
403
440
  collectionSlug
404
441
  }
@@ -412,7 +449,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
412
449
  const id = singleIdQuery(payloadWhere);
413
450
  if (id) {
414
451
  debugLog([
415
- 'deleteByID',
452
+ "deleteByID",
416
453
  {
417
454
  collectionSlug,
418
455
  id
@@ -424,7 +461,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
424
461
  depth: PAYLOAD_QUERY_DEPTH,
425
462
  context: createAdapterContext({
426
463
  model,
427
- operation: 'deleteByID'
464
+ operation: "deleteByID"
428
465
  })
429
466
  });
430
467
  deleteResult = {
@@ -433,7 +470,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
433
470
  };
434
471
  } else {
435
472
  debugLog([
436
- 'deleteByWhere',
473
+ "deleteByWhere",
437
474
  {
438
475
  collectionSlug,
439
476
  payloadWhere
@@ -445,7 +482,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
445
482
  depth: PAYLOAD_QUERY_DEPTH,
446
483
  context: createAdapterContext({
447
484
  model,
448
- operation: 'deleteByWhere'
485
+ operation: "deleteByWhere"
449
486
  })
450
487
  });
451
488
  deleteResult = {
@@ -454,7 +491,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
454
491
  };
455
492
  }
456
493
  debugLog([
457
- 'delete result',
494
+ "delete result",
458
495
  {
459
496
  collectionSlug,
460
497
  result: deleteResult,
@@ -464,7 +501,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
464
501
  return;
465
502
  } catch (error) {
466
503
  errorLog([
467
- 'Error in delete: ',
504
+ "Error in delete: ",
468
505
  error
469
506
  ]);
470
507
  return;
@@ -474,9 +511,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
474
511
  const start = Date.now();
475
512
  const { model, where } = data;
476
513
  const collectionSlug = getModelName(model);
477
- const payloadWhere = convertWhereClause(model, where);
514
+ const payloadWhere = convertWhereClause({
515
+ idType: config.idType,
516
+ model,
517
+ where
518
+ });
478
519
  debugLog([
479
- 'deleteMany',
520
+ "deleteMany",
480
521
  {
481
522
  collectionSlug,
482
523
  payloadWhere
@@ -493,11 +534,11 @@ const payloadAdapter = (payloadClient, config = {})=>{
493
534
  depth: PAYLOAD_QUERY_DEPTH,
494
535
  context: createAdapterContext({
495
536
  model,
496
- operation: 'deleteMany'
537
+ operation: "deleteMany"
497
538
  })
498
539
  });
499
540
  debugLog([
500
- 'deleteMany result',
541
+ "deleteMany result",
501
542
  {
502
543
  collectionSlug,
503
544
  result: deleteResult,
@@ -507,7 +548,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
507
548
  return deleteResult.docs.length;
508
549
  } catch (error) {
509
550
  errorLog([
510
- 'Error in deleteMany: ',
551
+ "Error in deleteMany: ",
511
552
  error
512
553
  ]);
513
554
  return 0;
@@ -517,9 +558,13 @@ const payloadAdapter = (payloadClient, config = {})=>{
517
558
  const start = Date.now();
518
559
  const { model, where } = data;
519
560
  const collectionSlug = getModelName(model);
520
- const payloadWhere = convertWhereClause(model, where);
561
+ const payloadWhere = convertWhereClause({
562
+ idType: config.idType,
563
+ model,
564
+ where
565
+ });
521
566
  debugLog([
522
- 'count',
567
+ "count",
523
568
  {
524
569
  collectionSlug,
525
570
  payloadWhere
@@ -536,11 +581,11 @@ const payloadAdapter = (payloadClient, config = {})=>{
536
581
  depth: PAYLOAD_QUERY_DEPTH,
537
582
  context: createAdapterContext({
538
583
  model,
539
- operation: 'count'
584
+ operation: "count"
540
585
  })
541
586
  });
542
587
  debugLog([
543
- 'count result',
588
+ "count result",
544
589
  {
545
590
  collectionSlug,
546
591
  result: {
@@ -552,7 +597,7 @@ const payloadAdapter = (payloadClient, config = {})=>{
552
597
  return result.totalDocs;
553
598
  } catch (error) {
554
599
  errorLog([
555
- 'Error in count: ',
600
+ "Error in count: ",
556
601
  error
557
602
  ]);
558
603
  return 0;
@@ -562,17 +607,18 @@ const payloadAdapter = (payloadClient, config = {})=>{
562
607
  const schemaCode = await generateSchema(options);
563
608
  return {
564
609
  code: schemaCode,
565
- path: file || 'schema.ts',
610
+ path: file || "schema.ts",
566
611
  append: false,
567
612
  overwrite: true
568
613
  };
569
614
  },
570
615
  options: {
571
- enableDebugLogs: config.enableDebugLogs
616
+ enableDebugLogs: config.enableDebugLogs,
617
+ idType: config.idType
572
618
  }
573
619
  };
574
620
  };
575
621
  };
576
622
  export { generateSchema, payloadAdapter };
577
623
 
578
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9hZGFwdGVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJldHRlckF1dGhFcnJvciB9IGZyb20gJ2JldHRlci1hdXRoJ1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyLCBCZXR0ZXJBdXRoT3B0aW9ucywgV2hlcmUgfSBmcm9tICdiZXR0ZXItYXV0aCdcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSAnLi9nZW5lcmF0ZS1zY2hlbWEnXG5pbXBvcnQgeyBjcmVhdGVUcmFuc2Zvcm0gfSBmcm9tICcuL3RyYW5zZm9ybSdcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEFkYXB0ZXIgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgQkVUVEVSX0FVVEhfQ09OVEVYVF9LRVkgPSAncGF5bG9hZC1kYi1hZGFwdGVyJ1xuY29uc3QgUEFZTE9BRF9RVUVSWV9ERVBUSCA9IDJcblxuY29uc3QgcGF5bG9hZEFkYXB0ZXI6IFBheWxvYWRBZGFwdGVyID0gKHBheWxvYWRDbGllbnQsIGNvbmZpZyA9IHt9KSA9PiB7XG4gIGZ1bmN0aW9uIGRlYnVnTG9nKG1lc3NhZ2U6IGFueVtdKSB7XG4gICAgaWYgKGNvbmZpZy5lbmFibGVEZWJ1Z0xvZ3MpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbcGF5bG9hZC1kYi1hZGFwdGVyXScsIC4uLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXJyb3JMb2cobWVzc2FnZTogYW55W10pIHtcbiAgICBjb25zb2xlLmVycm9yKGBbcGF5bG9hZC1kYi1hZGFwdGVyXWAsIC4uLm1lc3NhZ2UpXG4gIH1cblxuICBmdW5jdGlvbiBjb2xsZWN0aW9uU2x1Z0Vycm9yKG1vZGVsOiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgQmV0dGVyQXV0aEVycm9yKFxuICAgICAgYENvbGxlY3Rpb24gJHttb2RlbH0gZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBjaGVjayB5b3VyIHBheWxvYWQgY29sbGVjdGlvbiBzbHVncyBtYXRjaCB0aGUgYmV0dGVyIGF1dGggc2NoZW1hYCxcbiAgICApXG4gIH1cblxuICBjb25zdCBjcmVhdGVBZGFwdGVyQ29udGV4dCA9IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiAoe1xuICAgIFtCRVRURVJfQVVUSF9DT05URVhUX0tFWV06IHsgLi4uZGF0YSB9LFxuICB9KVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQYXlsb2FkQ2xpZW50KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPVxuICAgICAgdHlwZW9mIHBheWxvYWRDbGllbnQgPT09ICdmdW5jdGlvbicgPyBhd2FpdCBwYXlsb2FkQ2xpZW50KCkgOiBhd2FpdCBwYXlsb2FkQ2xpZW50XG4gICAgaWYgKCFwYXlsb2FkLmNvbmZpZz8uY3VzdG9tPy5oYXNCZXR0ZXJBdXRoUGx1Z2luKSB7XG4gICAgICB0aHJvdyBuZXcgQmV0dGVyQXV0aEVycm9yKFxuICAgICAgICBgUGF5bG9hZCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHRoZSBiZXR0ZXItYXV0aCBwbHVnaW4uIFBsZWFzZSBhZGQgdGhlIHBsdWdpbiB0byB5b3VyIHBheWxvYWQgY29uZmlnLmAsXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICByZXR1cm4gKG9wdGlvbnM6IEJldHRlckF1dGhPcHRpb25zKTogQWRhcHRlciA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdHJhbnNmb3JtSW5wdXQsXG4gICAgICB0cmFuc2Zvcm1PdXRwdXQsXG4gICAgICBjb252ZXJ0V2hlcmVDbGF1c2UsXG4gICAgICBjb252ZXJ0U2VsZWN0LFxuICAgICAgY29udmVydFNvcnQsXG4gICAgICBnZXRNb2RlbE5hbWUsXG4gICAgICBzaW5nbGVJZFF1ZXJ5LFxuICAgICAgbXVsdGlwbGVJZHNRdWVyeSxcbiAgICB9ID0gY3JlYXRlVHJhbnNmb3JtKG9wdGlvbnMsIGNvbmZpZy5lbmFibGVEZWJ1Z0xvZ3MgPz8gZmFsc2UpXG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdwYXlsb2FkJyxcbiAgICAgIGFzeW5jIGNyZWF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgUiA9IFQ+KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICBkYXRhOiBUXG4gICAgICAgIHNlbGVjdD86IHN0cmluZ1tdXG4gICAgICB9KTogUHJvbWlzZTxSPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCB7IG1vZGVsLCBkYXRhOiB2YWx1ZXMsIHNlbGVjdCB9ID0gZGF0YVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbClcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1JbnB1dCh2YWx1ZXMsIG1vZGVsLCAnY3JlYXRlJylcbiAgICAgICAgZGVidWdMb2coWydjcmVhdGUnLCB7IGNvbGxlY3Rpb25TbHVnLCB0cmFuc2Zvcm1lZCwgc2VsZWN0IH1dKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgICAgaWYgKCFjb2xsZWN0aW9uU2x1ZyB8fCAhKGNvbGxlY3Rpb25TbHVnIGluIHBheWxvYWQuY29sbGVjdGlvbnMpKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uU2x1Z0Vycm9yKG1vZGVsKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmNyZWF0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkLFxuICAgICAgICAgICAgc2VsZWN0OiBjb252ZXJ0U2VsZWN0KG1vZGVsLCBzZWxlY3QpLFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnY3JlYXRlJyB9KSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPSB0cmFuc2Zvcm1PdXRwdXQocmVzdWx0KVxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdjcmVhdGUgcmVzdWx0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSlcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXN1bHQgYXMgUlxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gY3JlYXRpbmc6JywgbW9kZWwsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gbnVsbCBhcyBSXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBmaW5kT25lPFQ+KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICB3aGVyZTogV2hlcmVbXVxuICAgICAgICBzZWxlY3Q/OiBzdHJpbmdbXVxuICAgICAgfSk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHsgbW9kZWwsIHdoZXJlLCBzZWxlY3QgfSA9IGRhdGFcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZShtb2RlbCwgd2hlcmUpXG4gICAgICAgIGRlYnVnTG9nKFsnZmluZE9uZScsIHsgY29sbGVjdGlvblNsdWcgfV0pXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlkID0gc2luZ2xlSWRRdWVyeShwYXlsb2FkV2hlcmUpXG4gICAgICAgICAgbGV0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsXG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2ZpbmRPbmVCeUlEJywgeyBjb2xsZWN0aW9uU2x1ZywgaWQgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmZpbmRCeUlEKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwsIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kT25lQnlJRCcsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXN1bHQgPSBkb2NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kT25lQnlXaGVyZScsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSB9XSlcbiAgICAgICAgICAgIGNvbnN0IGRvY3MgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgICAgc2VsZWN0OiBjb252ZXJ0U2VsZWN0KG1vZGVsLCBzZWxlY3QpLFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnZmluZE9uZUJ5V2hlcmUnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IGRvY3MuZG9jc1swXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJlc3VsdCA9IHJlc3VsdCA/IHRyYW5zZm9ybU91dHB1dChyZXN1bHQpIDogbnVsbFxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdmaW5kT25lIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFRcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGZpbmRPbmU6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZmluZE1hbnk8VD4oZGF0YToge1xuICAgICAgICBtb2RlbDogc3RyaW5nXG4gICAgICAgIHdoZXJlPzogV2hlcmVbXVxuICAgICAgICBsaW1pdD86IG51bWJlclxuICAgICAgICBzb3J0Qnk/OiB7XG4gICAgICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICAgICAgIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYydcbiAgICAgICAgfVxuICAgICAgICBvZmZzZXQ/OiBudW1iZXJcbiAgICAgIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgd2hlcmUsIHNvcnRCeSwgbGltaXQsIG9mZnNldCB9ID0gZGF0YVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbClcbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKG1vZGVsLCB3aGVyZSlcbiAgICAgICAgZGVidWdMb2coWydmaW5kTWFueScsIHsgY29sbGVjdGlvblNsdWcsIHNvcnRCeSwgbGltaXQsIG9mZnNldCB9XSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICAgIGlmICghY29sbGVjdGlvblNsdWcgfHwgIShjb2xsZWN0aW9uU2x1ZyBpbiBwYXlsb2FkLmNvbGxlY3Rpb25zKSkge1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHJlc3VsdDoge1xuICAgICAgICAgICAgZG9jczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICAgICAgICAgICB0b3RhbERvY3M6IG51bWJlclxuICAgICAgICAgIH0gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGNvbnN0IG11bHRpcGxlSWRzID0gd2hlcmUgJiYgbXVsdGlwbGVJZHNRdWVyeShwYXlsb2FkV2hlcmUpXG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSB3aGVyZSAmJiBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSlcbiAgICAgICAgICBpZiAobXVsdGlwbGVJZHMgJiYgbXVsdGlwbGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kTWFueUJ5TXVsdGlwbGVJRHMnLCB7IGNvbGxlY3Rpb25TbHVnLCBpZHM6IG11bHRpcGxlSWRzIH1dKVxuICAgICAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgICBkb2NzOiBbXSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgICAgICAgICAgIHRvdGFsRG9jczogMCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgbXVsdGlwbGVJZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdmaW5kTWFueUJ5TXVsdGlwbGVJRHMnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXMuZG9jcy5wdXNoKGRvYylcbiAgICAgICAgICAgICAgcmVzLnRvdGFsRG9jcysrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgPSB7IGRvY3M6IHJlcy5kb2NzLCB0b3RhbERvY3M6IHJlcy50b3RhbERvY3MgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc2luZ2xlSWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFsnZmluZE1hbnlCeVNpbmdsZUlEJywgeyBjb2xsZWN0aW9uU2x1ZywgaWQ6IHNpbmdsZUlkIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICBpZDogc2luZ2xlSWQsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnZmluZE1hbnlCeVNpbmdsZUlEJyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0ID0geyBkb2NzOiBkb2MgPyBbZG9jXSA6IFtdLCB0b3RhbERvY3M6IGRvYyA/IDEgOiAwIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coWydmaW5kTWFueUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgICAgbGltaXQ6IGxpbWl0LFxuICAgICAgICAgICAgICBwYWdlOiBvZmZzZXQgPyBNYXRoLmZsb29yKG9mZnNldCAvIChsaW1pdCB8fCAxMCkpICsgMSA6IDEsXG4gICAgICAgICAgICAgIHNvcnQ6IGNvbnZlcnRTb3J0KG1vZGVsLCBzb3J0QnkpLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2ZpbmRNYW55QnlXaGVyZScsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJlc3VsdCA9IHsgZG9jczogcmVzLmRvY3MsIHRvdGFsRG9jczogcmVzLnRvdGFsRG9jcyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID0gcmVzdWx0Py5kb2NzLm1hcCgoZG9jKSA9PiB0cmFuc2Zvcm1PdXRwdXQoZG9jKSkgPz8gbnVsbFxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdmaW5kTWFueSByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZFJlc3VsdCBhcyBUW11cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGZpbmRNYW55OiAnLCBlcnJvcl0pXG4gICAgICAgICAgcmV0dXJuIFtdIGFzIFRbXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgdXBkYXRlPFQ+KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICB3aGVyZTogV2hlcmVbXVxuICAgICAgICB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9KTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgd2hlcmUsIHVwZGF0ZSB9ID0gZGF0YVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbClcbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKG1vZGVsLCB3aGVyZSlcbiAgICAgICAgZGVidWdMb2coWyd1cGRhdGUnLCB7IGNvbGxlY3Rpb25TbHVnLCB1cGRhdGUgfV0pXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGNvbnN0IGlkID0gc2luZ2xlSWRRdWVyeShwYXlsb2FkV2hlcmUpXG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ3VwZGF0ZUJ5SUQnLCB7IGNvbGxlY3Rpb25TbHVnLCBpZCB9XSlcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQudXBkYXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkYXRhOiB1cGRhdGUsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246ICd1cGRhdGVCeUlEJyB9KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXN1bHQgPSBkb2NcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coWyd1cGRhdGVCeVdoZXJlJywgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKVxuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgICAgZGF0YTogdXBkYXRlLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZUJ5V2hlcmUnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXN1bHQgPSBkb2MuZG9jc1swXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFJlc3VsdCA9IHRyYW5zZm9ybU91dHB1dChyZXN1bHQpID8/IG51bGxcbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAndXBkYXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFRcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIHVwZGF0ZTogJywgZXJyb3JdKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyB1cGRhdGVNYW55KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZ1xuICAgICAgICB3aGVyZTogV2hlcmVbXVxuICAgICAgICB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSA9IGRhdGFcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZShtb2RlbCwgd2hlcmUpXG4gICAgICAgIGRlYnVnTG9nKFsndXBkYXRlTWFueScsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSwgdXBkYXRlIH1dKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpXG4gICAgICAgICAgaWYgKCFjb2xsZWN0aW9uU2x1ZyB8fCAhKGNvbGxlY3Rpb25TbHVnIGluIHBheWxvYWQuY29sbGVjdGlvbnMpKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uU2x1Z0Vycm9yKG1vZGVsKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7IGRvY3M6IHVwZGF0ZVJlc3VsdCB9ID0gYXdhaXQgcGF5bG9hZC51cGRhdGUoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgZGF0YTogdXBkYXRlLFxuICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246ICd1cGRhdGVNYW55JyB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICd1cGRhdGVNYW55IHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICByZXN1bHQ6IHVwZGF0ZVJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlc3VsdD8ubGVuZ3RoIHx8IDBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIHVwZGF0ZU1hbnk6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgZGVsZXRlKGRhdGE6IHsgbW9kZWw6IHN0cmluZzsgd2hlcmU6IFdoZXJlW10gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KClcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgd2hlcmUgfSA9IGRhdGFcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpXG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZShtb2RlbCwgd2hlcmUpXG4gICAgICAgIGRlYnVnTG9nKFsnZGVsZXRlJywgeyBjb2xsZWN0aW9uU2x1ZyB9XSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICAgIGlmICghY29sbGVjdGlvblNsdWcgfHwgIShjb2xsZWN0aW9uU2x1ZyBpbiBwYXlsb2FkLmNvbGxlY3Rpb25zKSkge1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGRlbGV0ZVJlc3VsdDoge1xuICAgICAgICAgICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbFxuICAgICAgICAgICAgZXJyb3JzOiBhbnlbXVxuICAgICAgICAgIH0gfCBudWxsID0gbnVsbFxuICAgICAgICAgIGNvbnN0IGlkID0gc2luZ2xlSWRRdWVyeShwYXlsb2FkV2hlcmUpXG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2RlbGV0ZUJ5SUQnLCB7IGNvbGxlY3Rpb25TbHVnLCBpZCB9XSlcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnZGVsZXRlQnlJRCcgfSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2MsIGVycm9yczogW10gfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbJ2RlbGV0ZUJ5V2hlcmUnLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmRlbGV0ZSh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZUJ5V2hlcmUnLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBkZWxldGVSZXN1bHQgPSB7IGRvYzogZG9jLmRvY3NbMF0sIGVycm9yczogW10gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZGVsZXRlIHJlc3VsdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICByZXN1bHQ6IGRlbGV0ZVJlc3VsdCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IGAke0RhdGUubm93KCkgLSBzdGFydH1tc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JMb2coWydFcnJvciBpbiBkZWxldGU6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGRlbGV0ZU1hbnkoZGF0YTogeyBtb2RlbDogc3RyaW5nOyB3aGVyZTogV2hlcmVbXSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgICAgIGNvbnN0IHsgbW9kZWwsIHdoZXJlIH0gPSBkYXRhXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0TW9kZWxOYW1lKG1vZGVsKVxuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2UobW9kZWwsIHdoZXJlKVxuICAgICAgICBkZWJ1Z0xvZyhbJ2RlbGV0ZU1hbnknLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHJlc29sdmVQYXlsb2FkQ2xpZW50KClcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRlbGV0ZVJlc3VsdCA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiAnZGVsZXRlTWFueScgfSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICAnZGVsZXRlTWFueSByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiBkZWxldGVSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICAgIHJldHVybiBkZWxldGVSZXN1bHQuZG9jcy5sZW5ndGhcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbJ0Vycm9yIGluIGRlbGV0ZU1hbnk6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgY291bnQoZGF0YTogeyBtb2RlbDogc3RyaW5nOyB3aGVyZT86IFdoZXJlW10gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICBjb25zdCB7IG1vZGVsLCB3aGVyZSB9ID0gZGF0YVxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbClcbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKG1vZGVsLCB3aGVyZSlcbiAgICAgICAgZGVidWdMb2coWydjb3VudCcsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSB9XSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKVxuICAgICAgICAgIGlmICghY29sbGVjdGlvblNsdWcgfHwgIShjb2xsZWN0aW9uU2x1ZyBpbiBwYXlsb2FkLmNvbGxlY3Rpb25zKSkge1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGF5bG9hZC5jb3VudCh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogJ2NvdW50JyB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICdjb3VudCByZXN1bHQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7IHRvdGFsRG9jczogcmVzdWx0LnRvdGFsRG9jcyB9LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSlcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvdGFsRG9jc1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycm9yTG9nKFsnRXJyb3IgaW4gY291bnQ6ICcsIGVycm9yXSlcbiAgICAgICAgICByZXR1cm4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlU2NoZW1hOiBhc3luYyAob3B0aW9ucywgZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWFDb2RlID0gYXdhaXQgZ2VuZXJhdGVTY2hlbWEob3B0aW9ucylcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvZGU6IHNjaGVtYUNvZGUsXG4gICAgICAgICAgcGF0aDogZmlsZSB8fCAnc2NoZW1hLnRzJyxcbiAgICAgICAgICBhcHBlbmQ6IGZhbHNlLFxuICAgICAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlRGVidWdMb2dzOiBjb25maWcuZW5hYmxlRGVidWdMb2dzLFxuICAgICAgfSxcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgZ2VuZXJhdGVTY2hlbWEsIHBheWxvYWRBZGFwdGVyIH1cbiJdLCJuYW1lcyI6WyJCZXR0ZXJBdXRoRXJyb3IiLCJnZW5lcmF0ZVNjaGVtYSIsImNyZWF0ZVRyYW5zZm9ybSIsIkJFVFRFUl9BVVRIX0NPTlRFWFRfS0VZIiwiUEFZTE9BRF9RVUVSWV9ERVBUSCIsInBheWxvYWRBZGFwdGVyIiwicGF5bG9hZENsaWVudCIsImNvbmZpZyIsImRlYnVnTG9nIiwibWVzc2FnZSIsImVuYWJsZURlYnVnTG9ncyIsImNvbnNvbGUiLCJsb2ciLCJlcnJvckxvZyIsImVycm9yIiwiY29sbGVjdGlvblNsdWdFcnJvciIsIm1vZGVsIiwiY3JlYXRlQWRhcHRlckNvbnRleHQiLCJkYXRhIiwicmVzb2x2ZVBheWxvYWRDbGllbnQiLCJwYXlsb2FkIiwiY3VzdG9tIiwiaGFzQmV0dGVyQXV0aFBsdWdpbiIsIm9wdGlvbnMiLCJ0cmFuc2Zvcm1JbnB1dCIsInRyYW5zZm9ybU91dHB1dCIsImNvbnZlcnRXaGVyZUNsYXVzZSIsImNvbnZlcnRTZWxlY3QiLCJjb252ZXJ0U29ydCIsImdldE1vZGVsTmFtZSIsInNpbmdsZUlkUXVlcnkiLCJtdWx0aXBsZUlkc1F1ZXJ5IiwiaWQiLCJjcmVhdGUiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJ2YWx1ZXMiLCJzZWxlY3QiLCJjb2xsZWN0aW9uU2x1ZyIsInRyYW5zZm9ybWVkIiwiY29sbGVjdGlvbnMiLCJyZXN1bHQiLCJjb2xsZWN0aW9uIiwiY29udGV4dCIsIm9wZXJhdGlvbiIsImRlcHRoIiwidHJhbnNmb3JtZWRSZXN1bHQiLCJkdXJhdGlvbiIsImZpbmRPbmUiLCJ3aGVyZSIsInBheWxvYWRXaGVyZSIsImRvYyIsImZpbmRCeUlEIiwiZG9jcyIsImZpbmQiLCJsaW1pdCIsImZpbmRNYW55Iiwic29ydEJ5Iiwib2Zmc2V0IiwibXVsdGlwbGVJZHMiLCJzaW5nbGVJZCIsImxlbmd0aCIsImlkcyIsInJlcyIsInRvdGFsRG9jcyIsInB1c2giLCJwYWdlIiwiTWF0aCIsImZsb29yIiwic29ydCIsIm1hcCIsInVwZGF0ZSIsInVwZGF0ZU1hbnkiLCJ1cGRhdGVSZXN1bHQiLCJkZWxldGUiLCJkZWxldGVSZXN1bHQiLCJlcnJvcnMiLCJkZWxldGVNYW55IiwiY291bnQiLCJjcmVhdGVTY2hlbWEiLCJmaWxlIiwic2NoZW1hQ29kZSIsImNvZGUiLCJwYXRoIiwiYXBwZW5kIiwib3ZlcndyaXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxlQUFlLFFBQVEsY0FBYTtBQUU3QyxTQUFTQyxjQUFjLFFBQVEsb0JBQW1CO0FBQ2xELFNBQVNDLGVBQWUsUUFB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
624
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9hZGFwdGVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJldHRlckF1dGhFcnJvciB9IGZyb20gXCJiZXR0ZXItYXV0aFwiO1xuaW1wb3J0IHR5cGUgeyBBZGFwdGVyLCBCZXR0ZXJBdXRoT3B0aW9ucywgV2hlcmUgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIi4vZ2VuZXJhdGUtc2NoZW1hXCI7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc2Zvcm0gfSBmcm9tIFwiLi90cmFuc2Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgUGF5bG9hZEFkYXB0ZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgQkVUVEVSX0FVVEhfQ09OVEVYVF9LRVkgPSBcInBheWxvYWQtZGItYWRhcHRlclwiO1xuY29uc3QgUEFZTE9BRF9RVUVSWV9ERVBUSCA9IDI7XG5cbmNvbnN0IHBheWxvYWRBZGFwdGVyOiBQYXlsb2FkQWRhcHRlciA9IChwYXlsb2FkQ2xpZW50LCBjb25maWcpID0+IHtcbiAgZnVuY3Rpb24gZGVidWdMb2cobWVzc2FnZTogYW55W10pIHtcbiAgICBpZiAoY29uZmlnLmVuYWJsZURlYnVnTG9ncykge1xuICAgICAgY29uc29sZS5sb2coXCJbcGF5bG9hZC1kYi1hZGFwdGVyXVwiLCAuLi5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvckxvZyhtZXNzYWdlOiBhbnlbXSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtwYXlsb2FkLWRiLWFkYXB0ZXJdYCwgLi4ubWVzc2FnZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xsZWN0aW9uU2x1Z0Vycm9yKG1vZGVsOiBzdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgQmV0dGVyQXV0aEVycm9yKFxuICAgICAgYENvbGxlY3Rpb24gJHttb2RlbH0gZG9lcyBub3QgZXhpc3QuIFBsZWFzZSBjaGVjayB5b3VyIHBheWxvYWQgY29sbGVjdGlvbiBzbHVncyBtYXRjaCB0aGUgYmV0dGVyIGF1dGggc2NoZW1hYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBZGFwdGVyQ29udGV4dCA9IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiAoe1xuICAgIFtCRVRURVJfQVVUSF9DT05URVhUX0tFWV06IHsgLi4uZGF0YSB9LFxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGF5bG9hZENsaWVudCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID1cbiAgICAgIHR5cGVvZiBwYXlsb2FkQ2xpZW50ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBhd2FpdCBwYXlsb2FkQ2xpZW50KClcbiAgICAgICAgOiBhd2FpdCBwYXlsb2FkQ2xpZW50O1xuICAgIGlmICghcGF5bG9hZC5jb25maWc/LmN1c3RvbT8uaGFzQmV0dGVyQXV0aFBsdWdpbikge1xuICAgICAgdGhyb3cgbmV3IEJldHRlckF1dGhFcnJvcihcbiAgICAgICAgYFBheWxvYWQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0aGUgYmV0dGVyLWF1dGggcGx1Z2luLiBQbGVhc2UgYWRkIHRoZSBwbHVnaW4gdG8geW91ciBwYXlsb2FkIGNvbmZpZy5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIHJldHVybiAob3B0aW9uczogQmV0dGVyQXV0aE9wdGlvbnMpOiBBZGFwdGVyID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFuc2Zvcm1JbnB1dCxcbiAgICAgIHRyYW5zZm9ybU91dHB1dCxcbiAgICAgIGNvbnZlcnRXaGVyZUNsYXVzZSxcbiAgICAgIGNvbnZlcnRTZWxlY3QsXG4gICAgICBjb252ZXJ0U29ydCxcbiAgICAgIGdldE1vZGVsTmFtZSxcbiAgICAgIHNpbmdsZUlkUXVlcnksXG4gICAgICBtdWx0aXBsZUlkc1F1ZXJ5LFxuICAgIH0gPSBjcmVhdGVUcmFuc2Zvcm0ob3B0aW9ucywgY29uZmlnLmVuYWJsZURlYnVnTG9ncyA/PyBmYWxzZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IFwicGF5bG9hZFwiLFxuICAgICAgYXN5bmMgY3JlYXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSID0gVD4oZGF0YToge1xuICAgICAgICBtb2RlbDogc3RyaW5nO1xuICAgICAgICBkYXRhOiBUO1xuICAgICAgICBzZWxlY3Q/OiBzdHJpbmdbXTtcbiAgICAgIH0pOiBQcm9taXNlPFI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7IG1vZGVsLCBkYXRhOiB2YWx1ZXMsIHNlbGVjdCB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybUlucHV0KHtcbiAgICAgICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgYWN0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnTG9nKFtcImNyZWF0ZVwiLCB7IGNvbGxlY3Rpb25TbHVnLCB0cmFuc2Zvcm1lZCwgc2VsZWN0IH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmNyZWF0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIGRhdGE6IHRyYW5zZm9ybWVkLFxuICAgICAgICAgICAgc2VsZWN0OiBjb252ZXJ0U2VsZWN0KG1vZGVsLCBzZWxlY3QpLFxuICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiBcImNyZWF0ZVwiIH0pLFxuICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPSB0cmFuc2Zvcm1PdXRwdXQoe1xuICAgICAgICAgICAgZG9jOiByZXN1bHQsXG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICBcImNyZWF0ZSByZXN1bHRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFI7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JMb2coW1wiRXJyb3IgaW4gY3JlYXRpbmc6XCIsIG1vZGVsLCBlcnJvcl0pO1xuICAgICAgICAgIHJldHVybiBudWxsIGFzIFI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBmaW5kT25lPFQ+KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZztcbiAgICAgICAgd2hlcmU6IFdoZXJlW107XG4gICAgICAgIHNlbGVjdD86IHN0cmluZ1tdO1xuICAgICAgfSk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7IG1vZGVsLCB3aGVyZSwgc2VsZWN0IH0gPSBkYXRhO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIHdoZXJlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGVidWdMb2coW1wiZmluZE9uZVwiLCB7IGNvbGxlY3Rpb25TbHVnIH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpZCA9IHNpbmdsZUlkUXVlcnkocGF5bG9hZFdoZXJlKTtcbiAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbXCJmaW5kT25lQnlJRFwiLCB7IGNvbGxlY3Rpb25TbHVnLCBpZCB9XSk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBwYXlsb2FkLmZpbmRCeUlEKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBzZWxlY3Q6IGNvbnZlcnRTZWxlY3QobW9kZWwsIHNlbGVjdCksXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiZmluZE9uZUJ5SURcIixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQgPSBkb2M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFtcImZpbmRPbmVCeVdoZXJlXCIsIHsgY29sbGVjdGlvblNsdWcsIHBheWxvYWRXaGVyZSB9XSk7XG4gICAgICAgICAgICBjb25zdCBkb2NzID0gYXdhaXQgcGF5bG9hZC5maW5kKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICAgIHNlbGVjdDogY29udmVydFNlbGVjdChtb2RlbCwgc2VsZWN0KSxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogXCJmaW5kT25lQnlXaGVyZVwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQgPSBkb2NzLmRvY3NbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID0gdHJhbnNmb3JtT3V0cHV0PHR5cGVvZiByZXN1bHQgfCBudWxsPih7XG4gICAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgIFwiZmluZE9uZSByZXN1bHRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkUmVzdWx0LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkUmVzdWx0IGFzIFQ7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JMb2coW1wiRXJyb3IgaW4gZmluZE9uZTogXCIsIGVycm9yXSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBmaW5kTWFueTxUPihkYXRhOiB7XG4gICAgICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgICAgIHdoZXJlPzogV2hlcmVbXTtcbiAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgIHNvcnRCeT86IHtcbiAgICAgICAgICBmaWVsZDogc3RyaW5nO1xuICAgICAgICAgIGRpcmVjdGlvbjogXCJhc2NcIiB8IFwiZGVzY1wiO1xuICAgICAgICB9O1xuICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7IG1vZGVsLCB3aGVyZSwgc29ydEJ5LCBsaW1pdCwgb2Zmc2V0IH0gPSBkYXRhO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uU2x1ZyA9IGdldE1vZGVsTmFtZShtb2RlbCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWRXaGVyZSA9IGNvbnZlcnRXaGVyZUNsYXVzZSh7XG4gICAgICAgICAgaWRUeXBlOiBjb25maWcuaWRUeXBlLFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIHdoZXJlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGVidWdMb2coW1wiZmluZE1hbnlcIiwgeyBjb2xsZWN0aW9uU2x1Zywgc29ydEJ5LCBsaW1pdCwgb2Zmc2V0IH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgcmVzdWx0OiB7XG4gICAgICAgICAgICBkb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gICAgICAgICAgICB0b3RhbERvY3M6IG51bWJlcjtcbiAgICAgICAgICB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgbXVsdGlwbGVJZHMgPSB3aGVyZSAmJiBtdWx0aXBsZUlkc1F1ZXJ5KHBheWxvYWRXaGVyZSk7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlSWQgPSB3aGVyZSAmJiBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSk7XG4gICAgICAgICAgaWYgKG11bHRpcGxlSWRzICYmIG11bHRpcGxlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgICAgXCJmaW5kTWFueUJ5TXVsdGlwbGVJRHNcIixcbiAgICAgICAgICAgICAgeyBjb2xsZWN0aW9uU2x1ZywgaWRzOiBtdWx0aXBsZUlkcyB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICAgIGRvY3M6IFtdIGFzIFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAgICAgICAgICAgdG90YWxEb2NzOiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgbXVsdGlwbGVJZHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiZmluZE1hbnlCeU11bHRpcGxlSURzXCIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXMuZG9jcy5wdXNoKGRvYyk7XG4gICAgICAgICAgICAgIHJlcy50b3RhbERvY3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCA9IHsgZG9jczogcmVzLmRvY3MsIHRvdGFsRG9jczogcmVzLnRvdGFsRG9jcyB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2luZ2xlSWQpIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFtcImZpbmRNYW55QnlTaW5nbGVJRFwiLCB7IGNvbGxlY3Rpb25TbHVnLCBpZDogc2luZ2xlSWQgfV0pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICBpZDogc2luZ2xlSWQsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBcImZpbmRNYW55QnlTaW5nbGVJRFwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0ID0geyBkb2NzOiBkb2MgPyBbZG9jXSA6IFtdLCB0b3RhbERvY3M6IGRvYyA/IDEgOiAwIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFtcImZpbmRNYW55QnlXaGVyZVwiLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgcGF5bG9hZC5maW5kKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICAgIGxpbWl0OiBsaW1pdCxcbiAgICAgICAgICAgICAgcGFnZTogb2Zmc2V0ID8gTWF0aC5mbG9vcihvZmZzZXQgLyAobGltaXQgfHwgMTApKSArIDEgOiAxLFxuICAgICAgICAgICAgICBzb3J0OiBjb252ZXJ0U29ydChtb2RlbCwgc29ydEJ5KSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiZmluZE1hbnlCeVdoZXJlXCIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQgPSB7IGRvY3M6IHJlcy5kb2NzLCB0b3RhbERvY3M6IHJlcy50b3RhbERvY3MgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRSZXN1bHQgPVxuICAgICAgICAgICAgcmVzdWx0Py5kb2NzLm1hcCgoZG9jKSA9PlxuICAgICAgICAgICAgICB0cmFuc2Zvcm1PdXRwdXQoe1xuICAgICAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgPz8gbnVsbDtcbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICBcImZpbmRNYW55IHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXN1bHQgYXMgVFtdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycm9yTG9nKFtcIkVycm9yIGluIGZpbmRNYW55OiBcIiwgZXJyb3JdKTtcbiAgICAgICAgICByZXR1cm4gW10gYXMgVFtdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgdXBkYXRlPFQ+KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZztcbiAgICAgICAgd2hlcmU6IFdoZXJlW107XG4gICAgICAgIHVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9KTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHsgbW9kZWwsIHdoZXJlLCB1cGRhdGUgfSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0TW9kZWxOYW1lKG1vZGVsKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGNvbmZpZy5pZFR5cGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgd2hlcmUsXG4gICAgICAgIH0pO1xuICAgICAgICBkZWJ1Z0xvZyhbXCJ1cGRhdGVcIiwgeyBjb2xsZWN0aW9uU2x1ZywgdXBkYXRlIH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgaWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSk7XG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbXCJ1cGRhdGVCeUlEXCIsIHsgY29sbGVjdGlvblNsdWcsIGlkIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQudXBkYXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkYXRhOiB1cGRhdGUsXG4gICAgICAgICAgICAgIGRlcHRoOiBQQVlMT0FEX1FVRVJZX0RFUFRILFxuICAgICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246IFwidXBkYXRlQnlJRFwiIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHQgPSBkb2M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlYnVnTG9nKFtcInVwZGF0ZUJ5V2hlcmVcIiwgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQudXBkYXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICAgIGRhdGE6IHVwZGF0ZSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwidXBkYXRlQnlXaGVyZVwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0ID0gZG9jLmRvY3NbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUmVzdWx0ID0gdHJhbnNmb3JtT3V0cHV0PHR5cGVvZiByZXN1bHQgfCBudWxsPih7XG4gICAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgIFwidXBkYXRlIHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWRSZXN1bHQgYXMgVDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbXCJFcnJvciBpbiB1cGRhdGU6IFwiLCBlcnJvcl0pO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgdXBkYXRlTWFueShkYXRhOiB7XG4gICAgICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgICAgIHdoZXJlOiBXaGVyZVtdO1xuICAgICAgICB1cGRhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgd2hlcmUsIHVwZGF0ZSB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpO1xuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnTG9nKFtcInVwZGF0ZU1hbnlcIiwgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlLCB1cGRhdGUgfV0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpO1xuICAgICAgICAgIGlmICghY29sbGVjdGlvblNsdWcgfHwgIShjb2xsZWN0aW9uU2x1ZyBpbiBwYXlsb2FkLmNvbGxlY3Rpb25zKSkge1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgZG9jczogdXBkYXRlUmVzdWx0IH0gPSBhd2FpdCBwYXlsb2FkLnVwZGF0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICBkYXRhOiB1cGRhdGUsXG4gICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogXCJ1cGRhdGVNYW55XCIgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgXCJ1cGRhdGVNYW55IHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiB1cGRhdGVSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVzdWx0Py5sZW5ndGggfHwgMDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBlcnJvckxvZyhbXCJFcnJvciBpbiB1cGRhdGVNYW55OiBcIiwgZXJyb3JdKTtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGRlbGV0ZShkYXRhOiB7IG1vZGVsOiBzdHJpbmc7IHdoZXJlOiBXaGVyZVtdIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7IG1vZGVsLCB3aGVyZSB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpO1xuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnTG9nKFtcImRlbGV0ZVwiLCB7IGNvbGxlY3Rpb25TbHVnIH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGVsZXRlUmVzdWx0OiB7XG4gICAgICAgICAgICBkb2M6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICAgICAgICAgICAgZXJyb3JzOiBhbnlbXTtcbiAgICAgICAgICB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgY29uc3QgaWQgPSBzaW5nbGVJZFF1ZXJ5KHBheWxvYWRXaGVyZSk7XG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBkZWJ1Z0xvZyhbXCJkZWxldGVCeUlEXCIsIHsgY29sbGVjdGlvblNsdWcsIGlkIH1dKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGF3YWl0IHBheWxvYWQuZGVsZXRlKHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgICAgY29udGV4dDogY3JlYXRlQWRhcHRlckNvbnRleHQoeyBtb2RlbCwgb3BlcmF0aW9uOiBcImRlbGV0ZUJ5SURcIiB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2MsIGVycm9yczogW10gfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVidWdMb2coW1wiZGVsZXRlQnlXaGVyZVwiLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXdhaXQgcGF5bG9hZC5kZWxldGUoe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgd2hlcmU6IHBheWxvYWRXaGVyZSxcbiAgICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHtcbiAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IFwiZGVsZXRlQnlXaGVyZVwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGVsZXRlUmVzdWx0ID0geyBkb2M6IGRvYy5kb2NzWzBdLCBlcnJvcnM6IFtdIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlYnVnTG9nKFtcbiAgICAgICAgICAgIFwiZGVsZXRlIHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiBkZWxldGVSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JMb2coW1wiRXJyb3IgaW4gZGVsZXRlOiBcIiwgZXJyb3JdKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3luYyBkZWxldGVNYW55KGRhdGE6IHtcbiAgICAgICAgbW9kZWw6IHN0cmluZztcbiAgICAgICAgd2hlcmU6IFdoZXJlW107XG4gICAgICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCB7IG1vZGVsLCB3aGVyZSB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvblNsdWcgPSBnZXRNb2RlbE5hbWUobW9kZWwpO1xuICAgICAgICBjb25zdCBwYXlsb2FkV2hlcmUgPSBjb252ZXJ0V2hlcmVDbGF1c2Uoe1xuICAgICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICB3aGVyZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnTG9nKFtcImRlbGV0ZU1hbnlcIiwgeyBjb2xsZWN0aW9uU2x1ZywgcGF5bG9hZFdoZXJlIH1dKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzb2x2ZVBheWxvYWRDbGllbnQoKTtcbiAgICAgICAgICBpZiAoIWNvbGxlY3Rpb25TbHVnIHx8ICEoY29sbGVjdGlvblNsdWcgaW4gcGF5bG9hZC5jb2xsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnRXJyb3IobW9kZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkZWxldGVSZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmRlbGV0ZSh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgIHdoZXJlOiBwYXlsb2FkV2hlcmUsXG4gICAgICAgICAgICBkZXB0aDogUEFZTE9BRF9RVUVSWV9ERVBUSCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNyZWF0ZUFkYXB0ZXJDb250ZXh0KHsgbW9kZWwsIG9wZXJhdGlvbjogXCJkZWxldGVNYW55XCIgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGVidWdMb2coW1xuICAgICAgICAgICAgXCJkZWxldGVNYW55IHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiBkZWxldGVSZXN1bHQsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgICByZXR1cm4gZGVsZXRlUmVzdWx0LmRvY3MubGVuZ3RoO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVycm9yTG9nKFtcIkVycm9yIGluIGRlbGV0ZU1hbnk6IFwiLCBlcnJvcl0pO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgY291bnQoZGF0YTogeyBtb2RlbDogc3RyaW5nOyB3aGVyZT86IFdoZXJlW10gfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3QgeyBtb2RlbCwgd2hlcmUgfSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gZ2V0TW9kZWxOYW1lKG1vZGVsKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZFdoZXJlID0gY29udmVydFdoZXJlQ2xhdXNlKHtcbiAgICAgICAgICBpZFR5cGU6IGNvbmZpZy5pZFR5cGUsXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgd2hlcmUsXG4gICAgICAgIH0pO1xuICAgICAgICBkZWJ1Z0xvZyhbXCJjb3VudFwiLCB7IGNvbGxlY3Rpb25TbHVnLCBwYXlsb2FkV2hlcmUgfV0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNvbHZlUGF5bG9hZENsaWVudCgpO1xuICAgICAgICAgIGlmICghY29sbGVjdGlvblNsdWcgfHwgIShjb2xsZWN0aW9uU2x1ZyBpbiBwYXlsb2FkLmNvbGxlY3Rpb25zKSkge1xuICAgICAgICAgICAgY29sbGVjdGlvblNsdWdFcnJvcihtb2RlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBheWxvYWQuY291bnQoe1xuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICB3aGVyZTogcGF5bG9hZFdoZXJlLFxuICAgICAgICAgICAgZGVwdGg6IFBBWUxPQURfUVVFUllfREVQVEgsXG4gICAgICAgICAgICBjb250ZXh0OiBjcmVhdGVBZGFwdGVyQ29udGV4dCh7IG1vZGVsLCBvcGVyYXRpb246IFwiY291bnRcIiB9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhbXG4gICAgICAgICAgICBcImNvdW50IHJlc3VsdFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7IHRvdGFsRG9jczogcmVzdWx0LnRvdGFsRG9jcyB9LFxuICAgICAgICAgICAgICBkdXJhdGlvbjogYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC50b3RhbERvY3M7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZXJyb3JMb2coW1wiRXJyb3IgaW4gY291bnQ6IFwiLCBlcnJvcl0pO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlU2NoZW1hOiBhc3luYyAob3B0aW9ucywgZmlsZSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWFDb2RlID0gYXdhaXQgZ2VuZXJhdGVTY2hlbWEob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29kZTogc2NoZW1hQ29kZSxcbiAgICAgICAgICBwYXRoOiBmaWxlIHx8IFwic2NoZW1hLnRzXCIsXG4gICAgICAgICAgYXBwZW5kOiBmYWxzZSxcbiAgICAgICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBlbmFibGVEZWJ1Z0xvZ3M6IGNvbmZpZy5lbmFibGVEZWJ1Z0xvZ3MsXG4gICAgICAgIGlkVHlwZTogY29uZmlnLmlkVHlwZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGdlbmVyYXRlU2NoZW1hLCBwYXlsb2FkQWRhcHRlciB9O1xuIl0sIm5hbWVzIjpbIkJldHRlckF1dGhFcnJvciIsImdlbmVyYXRlU2NoZW1hIiwiY3JlYXRlVHJhbnNmb3JtIiwiQkVUVEVSX0FVVEhfQ09OVEVYVF9LRVkiLCJQQVlMT0FEX1FVRVJZX0RFUFRIIiwicGF5bG9hZEFkYXB0ZXIiLCJwYXlsb2FkQ2xpZW50IiwiY29uZmlnIiwiZGVidWdMb2ciLCJtZXNzYWdlIiwiZW5hYmxlRGVidWdMb2dzIiwiY29uc29sZSIsImxvZyIsImVycm9yTG9nIiwiZXJyb3IiLCJjb2xsZWN0aW9uU2x1Z0Vycm9yIiwibW9kZWwiLCJjcmVhdGVBZGFwdGVyQ29udGV4dCIsImRhdGEiLCJyZXNvbHZlUGF5bG9hZENsaWVudCIsInBheWxvYWQiLCJjdXN0b20iLCJoYXNCZXR0ZXJBdXRoUGx1Z2luIiwib3B0aW9ucyIsInRyYW5zZm9ybUlucHV0IiwidHJhbnNmb3JtT3V0cHV0IiwiY29udmVydFdoZXJlQ2xhdXNlIiwiY29udmVydFNlbGVjdCIsImNvbnZlcnRTb3J0IiwiZ2V0TW9kZWxOYW1lIiwic2luZ2xlSWRRdWVyeSIsIm11bHRpcGxlSWRzUXVlcnkiLCJpZCIsImNyZWF0ZSIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsInZhbHVlcyIsInNlbGVjdCIsImNvbGxlY3Rpb25TbHVnIiwidHJhbnNmb3JtZWQiLCJhY3Rpb24iLCJpZFR5cGUiLCJjb2xsZWN0aW9ucyIsInJlc3VsdCIsImNvbGxlY3Rpb24iLCJjb250ZXh0Iiwib3BlcmF0aW9uIiwiZGVwdGgiLCJ0cmFuc2Zvcm1lZFJlc3VsdCIsImRvYyIsImR1cmF0aW9uIiwiZmluZE9uZSIsIndoZXJlIiwicGF5bG9hZFdoZXJlIiwiZmluZEJ5SUQiLCJkb2NzIiwiZmluZCIsImxpbWl0IiwiZmluZE1hbnkiLCJzb3J0QnkiLCJvZmZzZXQiLCJtdWx0aXBsZUlkcyIsInNpbmdsZUlkIiwibGVuZ3RoIiwiaWRzIiwicmVzIiwidG90YWxEb2NzIiwicHVzaCIsInBhZ2UiLCJNYXRoIiwiZmxvb3IiLCJzb3J0IiwibWFwIiwidXBkYXRlIiwidXBkYXRlTWFueSIsInVwZGF0ZVJlc3VsdCIsImRlbGV0ZSIsImRlbGV0ZVJlc3VsdCIsImVycm9ycyIsImRlbGV0ZU1hbnkiLCJjb3VudCIsImNyZWF0ZVNjaGVtYSIsImZpbGUiLCJzY2hlbWFDb2RlIiwiY29kZSIsInBhdGgiLCJhcHBlbmQiLCJvdmVyd3JpdGUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxjQUFjO0FBRTlDLFNBQVNDLGNBQWMsUUFBUSxvQkFBb0I7QUFDbkQsU0FBU0MsZUFBZSxRQUFRLGNBQWM7QUFHOUMsT0FBTyxNQUFNQywwQkFBMEIscUJBQXFCO0FBQzVELE1BQU1DLHNCQUFzQjtBQUU1QixNQUFNQyxpQkFBaUMsQ0FBQ0MsZUFBZUM7SUFDckQsU0FBU0MsU0FBU0MsT0FBYztRQUM5QixJQUFJRixPQUFPRyxlQUFlLEVBQUU7WUFDMUJDLFFBQVFDLEdBQUcsQ0FBQywyQkFBMkJIO1FBQ3pDO0lBQ0Y7SUFFQSxTQUFTSSxTQUFTSixPQUFjO1FBQzlCRSxRQUFRRyxLQUFLLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLTDtJQUMzQztJQUVBLFNBQVNNLG9CQUFvQkMsS0FBYTtRQUN4QyxNQUFNLElBQUloQixnQkFDUixDQUFDLFdBQVcsRUFBRWdCLE1BQU0sd0ZBQXdGLENBQUM7SUFFakg7SUFFQSxNQUFNQyx1QkFBdUIsQ0FBQ0MsT0FBK0IsQ0FBQTtZQUMzRCxDQUFDZix3QkFBd0IsRUFBRTtnQkFBRSxHQUFHZSxJQUFJO1lBQUM7UUFDdkMsQ0FBQTtJQUVBLGVBQWVDO1FBQ2IsTUFBTUMsVUFDSixPQUFPZCxrQkFBa0IsYUFDckIsTUFBTUEsa0JBQ04sTUFBTUE7UUFD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