@cartanova/qgrid-cli 2.10.10 → 2.11.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 (313) hide show
  1. package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
  2. package/bundle/dist/application/monit/log-buffer.js +12 -6
  3. package/bundle/dist/application/monit/monit.frame.js +11 -3
  4. package/bundle/dist/application/monit/monit.types.js +1 -1
  5. package/bundle/dist/application/qgrid/conv-routing.js +9 -6
  6. package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
  7. package/bundle/dist/application/qgrid/oauth.js +31 -4
  8. package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
  9. package/bundle/dist/application/qgrid/qgrid-response-format.js +21 -19
  10. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +40 -33
  11. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
  12. package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
  13. package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
  14. package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
  15. package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
  16. package/bundle/dist/application/qgrid/token-death.js +1 -1
  17. package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
  18. package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
  19. package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
  20. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
  21. package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
  22. package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
  23. package/bundle/dist/application/request-log/request-log.model.js +83 -70
  24. package/bundle/dist/application/request-log/request-log.types.js +1 -1
  25. package/bundle/dist/application/request-log/zod-code-format.js +1 -1
  26. package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
  27. package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
  28. package/bundle/dist/application/setting/setting.constant.js +1 -1
  29. package/bundle/dist/application/setting/setting.model.js +2 -2
  30. package/bundle/dist/application/setting/setting.store.js +2 -2
  31. package/bundle/dist/application/setting/setting.types.js +1 -1
  32. package/bundle/dist/application/sonamu.generated.js +32 -16
  33. package/bundle/dist/application/sonamu.generated.sso.js +1 -1
  34. package/bundle/dist/application/token/token.model.js +26 -9
  35. package/bundle/dist/application/token/token.types.js +20 -3
  36. package/bundle/dist/i18n/en.js +15 -1
  37. package/bundle/dist/i18n/ko.js +15 -1
  38. package/bundle/dist/i18n/sd.generated.js +1 -1
  39. package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
  40. package/bundle/dist/server-bootstrap.js +4 -2
  41. package/bundle/dist/server-error-handler.js +1 -1
  42. package/bundle/dist/sonamu.config.js +37 -8
  43. package/bundle/dist/startup-migrations.js +17 -7
  44. package/bundle/dist/testing/global.js +1 -1
  45. package/bundle/dist/testing/schema-bench.js +0 -0
  46. package/bundle/dist/testing/test-database-name.js +1 -1
  47. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
  48. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
  49. package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
  50. package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
  51. package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
  52. package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
  53. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
  54. package/bundle/dist/utils/providers/common/credentials.js +5 -1
  55. package/bundle/dist/utils/providers/common/effort.js +3 -3
  56. package/bundle/dist/utils/providers/common/model-cost.js +69 -14
  57. package/bundle/dist/utils/providers/common/provider-types.js +29 -1
  58. package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
  59. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
  60. package/bundle/dist/utils/providers/common/strictifier.js +62 -43
  61. package/bundle/dist/utils/providers/common/thinking.js +3 -2
  62. package/bundle/dist/utils/providers/common/ttft.js +1 -1
  63. package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
  64. package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
  65. package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
  66. package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
  67. package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
  68. package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
  69. package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
  70. package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
  71. package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
  72. package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
  73. package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
  74. package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
  75. package/bundle/dist/utils/providers/grok/index.js +11 -0
  76. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
  77. package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
  78. package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
  79. package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
  80. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
  81. package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
  82. package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
  83. package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
  84. package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
  85. package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
  86. package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
  87. package/bundle/dist/utils/quiet-hours.js +1 -1
  88. package/bundle/dist/utils/slack-notify.js +14 -8
  89. package/bundle/dist/utils/subset-loaders.js +4 -5
  90. package/bundle/src/application/monit/log-buffer.ts +23 -9
  91. package/bundle/src/application/monit/monit.frame.ts +22 -5
  92. package/bundle/src/application/monit/monit.types.ts +6 -0
  93. package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
  94. package/bundle/src/application/qgrid/conv-routing.ts +35 -9
  95. package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
  96. package/bundle/src/application/qgrid/oauth.ts +51 -15
  97. package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
  98. package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
  99. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +19 -0
  100. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +84 -40
  101. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
  102. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
  103. package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
  104. package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
  105. package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
  106. package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
  107. package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
  108. package/bundle/src/application/qgrid/token-death.ts +4 -0
  109. package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
  110. package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
  111. package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
  112. package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
  113. package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
  114. package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
  115. package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
  116. package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
  117. package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
  118. package/bundle/src/application/request-log/request-log.model.ts +277 -146
  119. package/bundle/src/application/request-log/request-log.types.ts +6 -0
  120. package/bundle/src/application/request-log/zod-code-format.ts +11 -0
  121. package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
  122. package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
  123. package/bundle/src/application/setting/setting.constant.ts +9 -0
  124. package/bundle/src/application/setting/setting.model.ts +12 -2
  125. package/bundle/src/application/setting/setting.store.ts +5 -1
  126. package/bundle/src/application/setting/setting.types.ts +8 -0
  127. package/bundle/src/application/sonamu.generated.http +133 -0
  128. package/bundle/src/application/sonamu.generated.sso.ts +2 -0
  129. package/bundle/src/application/sonamu.generated.ts +15 -0
  130. package/bundle/src/application/token/token.identity.test.ts +20 -0
  131. package/bundle/src/application/token/token.model.ts +66 -7
  132. package/bundle/src/application/token/token.types.ts +24 -1
  133. package/bundle/src/i18n/en.ts +19 -0
  134. package/bundle/src/i18n/ko.ts +21 -0
  135. package/bundle/src/i18n/sd.generated.ts +23 -2
  136. package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
  137. package/bundle/src/server-bootstrap.ts +4 -2
  138. package/bundle/src/server-error-handler.ts +1 -0
  139. package/bundle/src/sonamu.config.ts +69 -7
  140. package/bundle/src/startup-migrations.ts +27 -9
  141. package/bundle/src/testing/global.ts +20 -0
  142. package/bundle/src/testing/schema-bench.ts +105 -30
  143. package/bundle/src/testing/test-database-name.ts +2 -0
  144. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
  145. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
  146. package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
  147. package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
  148. package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
  149. package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
  150. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
  151. package/bundle/src/utils/providers/common/credentials.ts +8 -0
  152. package/bundle/src/utils/providers/common/effort.ts +9 -2
  153. package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
  154. package/bundle/src/utils/providers/common/model-cost.ts +259 -158
  155. package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
  156. package/bundle/src/utils/providers/common/provider-types.ts +46 -3
  157. package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
  158. package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
  159. package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
  160. package/bundle/src/utils/providers/common/strictifier.ts +185 -59
  161. package/bundle/src/utils/providers/common/thinking.ts +2 -2
  162. package/bundle/src/utils/providers/common/ttft.ts +4 -2
  163. package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
  164. package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
  165. package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
  166. package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
  167. package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
  168. package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
  169. package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
  170. package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
  171. package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
  172. package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
  173. package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
  174. package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
  175. package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
  176. package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
  177. package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
  178. package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
  179. package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
  180. package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
  181. package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
  182. package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
  183. package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
  184. package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
  185. package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
  186. package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
  187. package/bundle/src/utils/providers/grok/index.ts +20 -0
  188. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
  189. package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
  190. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  191. package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
  192. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
  193. package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
  194. package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
  195. package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
  196. package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
  197. package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
  198. package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
  199. package/bundle/src/utils/quiet-hours.ts +12 -1
  200. package/bundle/src/utils/slack-notify.ts +44 -13
  201. package/bundle/src/utils/subset-loaders.ts +7 -7
  202. package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
  203. package/bundle/web-dist/client/assets/index-BA7uQ-6c.js +31 -0
  204. package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
  205. package/bundle/web-dist/client/assets/logs-C47OJGEI.js +1 -0
  206. package/bundle/web-dist/client/assets/monit-BS9no0dU.js +4 -0
  207. package/bundle/web-dist/client/assets/plus-sdACTfH0.js +1 -0
  208. package/bundle/web-dist/client/assets/refresh-cw-CY8o_1cT.js +1 -0
  209. package/bundle/web-dist/client/assets/request-model-BRtFuZvj.js +1 -0
  210. package/bundle/web-dist/client/assets/routes-kqgkUxE8.js +5 -0
  211. package/bundle/web-dist/client/assets/{services.generated-NP-ValHd.js → services.generated-CefiDXEv.js} +5 -5
  212. package/bundle/web-dist/client/assets/settings-DNDvFGSw.js +1 -0
  213. package/bundle/web-dist/client/assets/show-u8Np69q3.js +2 -0
  214. package/bundle/web-dist/client/assets/tokens-QvP410NW.js +1 -0
  215. package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
  216. package/bundle/web-dist/client/assets/use-oauth-login-flow-Bzdh28Ws.js +1 -0
  217. package/bundle/web-dist/client/assets/use-update-token-mutation-CfJKaxmR.js +1 -0
  218. package/bundle/web-dist/client/assets/vendor-react-CUFFrVN9.js +244 -0
  219. package/bundle/web-dist/client/assets/vendor-tanstack-Bf_jag9G.js +1 -0
  220. package/bundle/web-dist/client/index.html +6 -6
  221. package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
  222. package/bundle/web-dist/server/assets/{lazyRouteComponent-CgBdabgd.js → lazyRouteComponent-D8iTIHyn.js} +129 -2
  223. package/bundle/web-dist/server/assets/logs-B3OTd9hy.js +825 -0
  224. package/bundle/web-dist/server/assets/{monit-ZPt66W5M.js → monit-B2hqorPe.js} +385 -126
  225. package/bundle/web-dist/server/assets/plus-DwG7h9kq.js +28 -0
  226. package/bundle/web-dist/server/assets/{react-dom-Ds75e4Jl.js → react-dom-BIYQzBqG.js} +2 -129
  227. package/bundle/web-dist/server/assets/refresh-cw-mMBkwOq0.js +44 -0
  228. package/bundle/web-dist/server/assets/{request-model-DjGldb-h.js → request-model-I6OdODSH.js} +15 -6
  229. package/bundle/web-dist/server/assets/{routes-Ct-k7nBA.js → routes-B95YlUv2.js} +760 -213
  230. package/bundle/web-dist/server/assets/{services.generated-BA4AcAf5.js → services.generated-DQATJ6qf.js} +12820 -12194
  231. package/bundle/web-dist/server/assets/settings-C3gbGk0m.js +830 -0
  232. package/bundle/web-dist/server/assets/{show-LSFIzvO2.js → show-Bxaj3rhH.js} +1350 -418
  233. package/bundle/web-dist/server/assets/tokens-CZjH3cB7.js +1038 -0
  234. package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
  235. package/bundle/web-dist/server/assets/use-oauth-login-flow-CKDHgc3U.js +2379 -0
  236. package/bundle/web-dist/server/assets/{use-update-token-mutation-pkArIzCP.js → use-update-token-mutation-BEbgOzaa.js} +1 -1
  237. package/bundle/web-dist/server/entry-server.generated.js +4295 -22810
  238. package/dist/cli.js +9 -9
  239. package/package.json +4 -11
  240. package/postinstall.mjs +12 -0
  241. package/skills/qgrid/SKILL.md +1 -0
  242. package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
  243. package/skills/qgrid/references/decision-rationale.md +23 -0
  244. package/skills/qgrid/references/grok-runtime.md +89 -0
  245. package/skills/qgrid/references/provider-runtime-differences.md +30 -29
  246. package/skills/qgrid/references/repo-map.md +10 -0
  247. package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
  248. package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
  249. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
  250. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
  251. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
  252. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
  253. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
  254. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
  255. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
  256. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
  257. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
  258. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
  259. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
  260. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
  261. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
  262. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
  263. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
  264. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
  265. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
  266. package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
  267. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
  268. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
  269. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
  270. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
  271. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
  272. package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
  273. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
  274. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
  275. package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
  276. package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
  277. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
  278. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
  279. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  280. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  281. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  282. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
  283. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
  284. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
  285. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
  286. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
  287. package/bundle/dist/testing/setup-mocks.js +0 -16
  288. package/bundle/src/testing/setup-mocks.ts +0 -44
  289. package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
  290. package/bundle/web-dist/client/assets/index-DZwzUfI-.js +0 -106
  291. package/bundle/web-dist/client/assets/logs-Cog79DU5.js +0 -1
  292. package/bundle/web-dist/client/assets/monit-2auznBys.js +0 -1
  293. package/bundle/web-dist/client/assets/plus-B62CuqT8.js +0 -1
  294. package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +0 -1
  295. package/bundle/web-dist/client/assets/request-model-CojtinqK.js +0 -1
  296. package/bundle/web-dist/client/assets/routes-B0lTeLK-.js +0 -5
  297. package/bundle/web-dist/client/assets/settings-D8ZxZGSJ.js +0 -1
  298. package/bundle/web-dist/client/assets/show-CFSERlnM.js +0 -2
  299. package/bundle/web-dist/client/assets/tokens-CZXUyI7O.js +0 -1
  300. package/bundle/web-dist/client/assets/use-oauth-login-flow-hboOs3wG.js +0 -1
  301. package/bundle/web-dist/client/assets/use-update-token-mutation-BQHS0byG.js +0 -1
  302. package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
  303. package/bundle/web-dist/client/assets/vendor-tanstack-DJRQAbrY.js +0 -1
  304. package/bundle/web-dist/server/assets/logs-BMyR98rU.js +0 -509
  305. package/bundle/web-dist/server/assets/plus-BZ9I0VgC.js +0 -19
  306. package/bundle/web-dist/server/assets/refresh-cw-CztCFis-.js +0 -23
  307. package/bundle/web-dist/server/assets/settings-CBUZ47Xx.js +0 -461
  308. package/bundle/web-dist/server/assets/tokens-DxrBW512.js +0 -448
  309. package/bundle/web-dist/server/assets/use-oauth-login-flow-Gn8flMK5.js +0 -178
  310. package/dist/cli.d.ts +0 -10
  311. /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
  312. /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
  313. /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
@@ -1,406 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
2
- var comma = ",".charCodeAt(0);
3
- var semicolon = ";".charCodeAt(0);
4
- var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
5
- var intToChar = /* @__PURE__ */ new Uint8Array(64);
6
- var charToInt = /* @__PURE__ */ new Uint8Array(128);
7
- for (let i = 0; i < chars.length; i++) {
8
- const c = chars.charCodeAt(i);
9
- intToChar[i] = c;
10
- charToInt[c] = i;
11
- }
12
- function decodeInteger(reader, relative) {
13
- let value = 0;
14
- let shift = 0;
15
- let integer = 0;
16
- do {
17
- integer = charToInt[reader.next()];
18
- value |= (integer & 31) << shift;
19
- shift += 5;
20
- } while (integer & 32);
21
- const shouldNegate = value & 1;
22
- value >>>= 1;
23
- if (shouldNegate) value = -2147483648 | -value;
24
- return relative + value;
25
- }
26
- function encodeInteger(builder, num, relative) {
27
- let delta = num - relative;
28
- delta = delta < 0 ? -delta << 1 | 1 : delta << 1;
29
- do {
30
- let clamped = delta & 31;
31
- delta >>>= 5;
32
- if (delta > 0) clamped |= 32;
33
- builder.write(intToChar[clamped]);
34
- } while (delta > 0);
35
- return num;
36
- }
37
- function hasMoreVlq(reader, max) {
38
- if (reader.pos >= max) return false;
39
- return reader.peek() !== comma;
40
- }
41
- var bufLength = 1024 * 16;
42
- var td = typeof TextDecoder !== "undefined" ? /* @__PURE__ */ new TextDecoder() : typeof Buffer !== "undefined" ? { decode(buf) {
43
- return Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength).toString();
44
- } } : { decode(buf) {
45
- let out = "";
46
- for (let i = 0; i < buf.length; i++) out += String.fromCharCode(buf[i]);
47
- return out;
48
- } };
49
- var StringWriter = class {
50
- constructor() {
51
- this.pos = 0;
52
- this.out = "";
53
- this.buffer = new Uint8Array(bufLength);
54
- }
55
- write(v) {
56
- const { buffer } = this;
57
- buffer[this.pos++] = v;
58
- if (this.pos === bufLength) {
59
- this.out += td.decode(buffer);
60
- this.pos = 0;
61
- }
62
- }
63
- flush() {
64
- const { buffer, out, pos } = this;
65
- return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out;
66
- }
67
- };
68
- var StringReader = class {
69
- constructor(buffer) {
70
- this.pos = 0;
71
- this.buffer = buffer;
72
- }
73
- next() {
74
- return this.buffer.charCodeAt(this.pos++);
75
- }
76
- peek() {
77
- return this.buffer.charCodeAt(this.pos);
78
- }
79
- indexOf(char) {
80
- const { buffer, pos } = this;
81
- const idx = buffer.indexOf(char, pos);
82
- return idx === -1 ? buffer.length : idx;
83
- }
84
- };
85
- var EMPTY = [];
86
- function decodeOriginalScopes(input) {
87
- const { length } = input;
88
- const reader = new StringReader(input);
89
- const scopes = [];
90
- const stack = [];
91
- let line = 0;
92
- for (; reader.pos < length; reader.pos++) {
93
- line = decodeInteger(reader, line);
94
- const column = decodeInteger(reader, 0);
95
- if (!hasMoreVlq(reader, length)) {
96
- const last = stack.pop();
97
- last[2] = line;
98
- last[3] = column;
99
- continue;
100
- }
101
- const kind = decodeInteger(reader, 0);
102
- const scope = decodeInteger(reader, 0) & 1 ? [
103
- line,
104
- column,
105
- 0,
106
- 0,
107
- kind,
108
- decodeInteger(reader, 0)
109
- ] : [
110
- line,
111
- column,
112
- 0,
113
- 0,
114
- kind
115
- ];
116
- let vars = EMPTY;
117
- if (hasMoreVlq(reader, length)) {
118
- vars = [];
119
- do {
120
- const varsIndex = decodeInteger(reader, 0);
121
- vars.push(varsIndex);
122
- } while (hasMoreVlq(reader, length));
123
- }
124
- scope.vars = vars;
125
- scopes.push(scope);
126
- stack.push(scope);
127
- }
128
- return scopes;
129
- }
130
- function encodeOriginalScopes(scopes) {
131
- const writer = new StringWriter();
132
- for (let i = 0; i < scopes.length;) i = _encodeOriginalScopes(scopes, i, writer, [0]);
133
- return writer.flush();
134
- }
135
- function _encodeOriginalScopes(scopes, index, writer, state) {
136
- const scope = scopes[index];
137
- const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope;
138
- if (index > 0) writer.write(comma);
139
- state[0] = encodeInteger(writer, startLine, state[0]);
140
- encodeInteger(writer, startColumn, 0);
141
- encodeInteger(writer, kind, 0);
142
- encodeInteger(writer, scope.length === 6 ? 1 : 0, 0);
143
- if (scope.length === 6) encodeInteger(writer, scope[5], 0);
144
- for (const v of vars) encodeInteger(writer, v, 0);
145
- for (index++; index < scopes.length;) {
146
- const { 0: l, 1: c } = scopes[index];
147
- if (l > endLine || l === endLine && c >= endColumn) break;
148
- index = _encodeOriginalScopes(scopes, index, writer, state);
149
- }
150
- writer.write(comma);
151
- state[0] = encodeInteger(writer, endLine, state[0]);
152
- encodeInteger(writer, endColumn, 0);
153
- return index;
154
- }
155
- function decodeGeneratedRanges(input) {
156
- const { length } = input;
157
- const reader = new StringReader(input);
158
- const ranges = [];
159
- const stack = [];
160
- let genLine = 0;
161
- let definitionSourcesIndex = 0;
162
- let definitionScopeIndex = 0;
163
- let callsiteSourcesIndex = 0;
164
- let callsiteLine = 0;
165
- let callsiteColumn = 0;
166
- let bindingLine = 0;
167
- let bindingColumn = 0;
168
- do {
169
- const semi = reader.indexOf(";");
170
- let genColumn = 0;
171
- for (; reader.pos < semi; reader.pos++) {
172
- genColumn = decodeInteger(reader, genColumn);
173
- if (!hasMoreVlq(reader, semi)) {
174
- const last = stack.pop();
175
- last[2] = genLine;
176
- last[3] = genColumn;
177
- continue;
178
- }
179
- const fields = decodeInteger(reader, 0);
180
- const hasDefinition = fields & 1;
181
- const hasCallsite = fields & 2;
182
- const hasScope = fields & 4;
183
- let callsite = null;
184
- let bindings = EMPTY;
185
- let range;
186
- if (hasDefinition) {
187
- const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex);
188
- definitionScopeIndex = decodeInteger(reader, definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0);
189
- definitionSourcesIndex = defSourcesIndex;
190
- range = [
191
- genLine,
192
- genColumn,
193
- 0,
194
- 0,
195
- defSourcesIndex,
196
- definitionScopeIndex
197
- ];
198
- } else range = [
199
- genLine,
200
- genColumn,
201
- 0,
202
- 0
203
- ];
204
- range.isScope = !!hasScope;
205
- if (hasCallsite) {
206
- const prevCsi = callsiteSourcesIndex;
207
- const prevLine = callsiteLine;
208
- callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex);
209
- const sameSource = prevCsi === callsiteSourcesIndex;
210
- callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0);
211
- callsiteColumn = decodeInteger(reader, sameSource && prevLine === callsiteLine ? callsiteColumn : 0);
212
- callsite = [
213
- callsiteSourcesIndex,
214
- callsiteLine,
215
- callsiteColumn
216
- ];
217
- }
218
- range.callsite = callsite;
219
- if (hasMoreVlq(reader, semi)) {
220
- bindings = [];
221
- do {
222
- bindingLine = genLine;
223
- bindingColumn = genColumn;
224
- const expressionsCount = decodeInteger(reader, 0);
225
- let expressionRanges;
226
- if (expressionsCount < -1) {
227
- expressionRanges = [[decodeInteger(reader, 0)]];
228
- for (let i = -1; i > expressionsCount; i--) {
229
- const prevBl = bindingLine;
230
- bindingLine = decodeInteger(reader, bindingLine);
231
- bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0);
232
- const expression = decodeInteger(reader, 0);
233
- expressionRanges.push([
234
- expression,
235
- bindingLine,
236
- bindingColumn
237
- ]);
238
- }
239
- } else expressionRanges = [[expressionsCount]];
240
- bindings.push(expressionRanges);
241
- } while (hasMoreVlq(reader, semi));
242
- }
243
- range.bindings = bindings;
244
- ranges.push(range);
245
- stack.push(range);
246
- }
247
- genLine++;
248
- reader.pos = semi + 1;
249
- } while (reader.pos < length);
250
- return ranges;
251
- }
252
- function encodeGeneratedRanges(ranges) {
253
- if (ranges.length === 0) return "";
254
- const writer = new StringWriter();
255
- for (let i = 0; i < ranges.length;) i = _encodeGeneratedRanges(ranges, i, writer, [
256
- 0,
257
- 0,
258
- 0,
259
- 0,
260
- 0,
261
- 0,
262
- 0
263
- ]);
264
- return writer.flush();
265
- }
266
- function _encodeGeneratedRanges(ranges, index, writer, state) {
267
- const range = ranges[index];
268
- const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, isScope, callsite, bindings } = range;
269
- if (state[0] < startLine) {
270
- catchupLine(writer, state[0], startLine);
271
- state[0] = startLine;
272
- state[1] = 0;
273
- } else if (index > 0) writer.write(comma);
274
- state[1] = encodeInteger(writer, range[1], state[1]);
275
- encodeInteger(writer, (range.length === 6 ? 1 : 0) | (callsite ? 2 : 0) | (isScope ? 4 : 0), 0);
276
- if (range.length === 6) {
277
- const { 4: sourcesIndex, 5: scopesIndex } = range;
278
- if (sourcesIndex !== state[2]) state[3] = 0;
279
- state[2] = encodeInteger(writer, sourcesIndex, state[2]);
280
- state[3] = encodeInteger(writer, scopesIndex, state[3]);
281
- }
282
- if (callsite) {
283
- const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite;
284
- if (sourcesIndex !== state[4]) {
285
- state[5] = 0;
286
- state[6] = 0;
287
- } else if (callLine !== state[5]) state[6] = 0;
288
- state[4] = encodeInteger(writer, sourcesIndex, state[4]);
289
- state[5] = encodeInteger(writer, callLine, state[5]);
290
- state[6] = encodeInteger(writer, callColumn, state[6]);
291
- }
292
- if (bindings) for (const binding of bindings) {
293
- if (binding.length > 1) encodeInteger(writer, -binding.length, 0);
294
- const expression = binding[0][0];
295
- encodeInteger(writer, expression, 0);
296
- let bindingStartLine = startLine;
297
- let bindingStartColumn = startColumn;
298
- for (let i = 1; i < binding.length; i++) {
299
- const expRange = binding[i];
300
- bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine);
301
- bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn);
302
- encodeInteger(writer, expRange[0], 0);
303
- }
304
- }
305
- for (index++; index < ranges.length;) {
306
- const { 0: l, 1: c } = ranges[index];
307
- if (l > endLine || l === endLine && c >= endColumn) break;
308
- index = _encodeGeneratedRanges(ranges, index, writer, state);
309
- }
310
- if (state[0] < endLine) {
311
- catchupLine(writer, state[0], endLine);
312
- state[0] = endLine;
313
- state[1] = 0;
314
- } else writer.write(comma);
315
- state[1] = encodeInteger(writer, endColumn, state[1]);
316
- return index;
317
- }
318
- function catchupLine(writer, lastLine, line) {
319
- do
320
- writer.write(semicolon);
321
- while (++lastLine < line);
322
- }
323
- function decode(mappings) {
324
- const { length } = mappings;
325
- const reader = new StringReader(mappings);
326
- const decoded = [];
327
- let genColumn = 0;
328
- let sourcesIndex = 0;
329
- let sourceLine = 0;
330
- let sourceColumn = 0;
331
- let namesIndex = 0;
332
- do {
333
- const semi = reader.indexOf(";");
334
- const line = [];
335
- let sorted = true;
336
- let lastCol = 0;
337
- genColumn = 0;
338
- while (reader.pos < semi) {
339
- let seg;
340
- genColumn = decodeInteger(reader, genColumn);
341
- if (genColumn < lastCol) sorted = false;
342
- lastCol = genColumn;
343
- if (hasMoreVlq(reader, semi)) {
344
- sourcesIndex = decodeInteger(reader, sourcesIndex);
345
- sourceLine = decodeInteger(reader, sourceLine);
346
- sourceColumn = decodeInteger(reader, sourceColumn);
347
- if (hasMoreVlq(reader, semi)) {
348
- namesIndex = decodeInteger(reader, namesIndex);
349
- seg = [
350
- genColumn,
351
- sourcesIndex,
352
- sourceLine,
353
- sourceColumn,
354
- namesIndex
355
- ];
356
- } else seg = [
357
- genColumn,
358
- sourcesIndex,
359
- sourceLine,
360
- sourceColumn
361
- ];
362
- } else seg = [genColumn];
363
- line.push(seg);
364
- reader.pos++;
365
- }
366
- if (!sorted) sort(line);
367
- decoded.push(line);
368
- reader.pos = semi + 1;
369
- } while (reader.pos <= length);
370
- return decoded;
371
- }
372
- function sort(line) {
373
- line.sort(sortComparator);
374
- }
375
- function sortComparator(a, b) {
376
- return a[0] - b[0];
377
- }
378
- function encode(decoded) {
379
- const writer = new StringWriter();
380
- let sourcesIndex = 0;
381
- let sourceLine = 0;
382
- let sourceColumn = 0;
383
- let namesIndex = 0;
384
- for (let i = 0; i < decoded.length; i++) {
385
- const line = decoded[i];
386
- if (i > 0) writer.write(semicolon);
387
- if (line.length === 0) continue;
388
- let genColumn = 0;
389
- for (let j = 0; j < line.length; j++) {
390
- const segment = line[j];
391
- if (j > 0) writer.write(comma);
392
- genColumn = encodeInteger(writer, segment[0], genColumn);
393
- if (segment.length === 1) continue;
394
- sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);
395
- sourceLine = encodeInteger(writer, segment[2], sourceLine);
396
- sourceColumn = encodeInteger(writer, segment[3], sourceColumn);
397
- if (segment.length === 4) continue;
398
- namesIndex = encodeInteger(writer, segment[4], namesIndex);
399
- }
400
- }
401
- return writer.flush();
402
- }
403
- //#endregion
404
- export { decode, decodeGeneratedRanges, decodeOriginalScopes, encode, encodeGeneratedRanges, encodeOriginalScopes };
405
-
406
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlbWFwLWNvZGVjLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AanJpZGdld2VsbCtzb3VyY2VtYXAtY29kZWNAMS41LjUvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy9kaXN0L3NvdXJjZW1hcC1jb2RlYy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL3ZscS50c1xudmFyIGNvbW1hID0gXCIsXCIuY2hhckNvZGVBdCgwKTtcbnZhciBzZW1pY29sb24gPSBcIjtcIi5jaGFyQ29kZUF0KDApO1xudmFyIGNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XG52YXIgaW50VG9DaGFyID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xudmFyIGNoYXJUb0ludCA9IG5ldyBVaW50OEFycmF5KDEyOCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzLmxlbmd0aDsgaSsrKSB7XG4gIGNvbnN0IGMgPSBjaGFycy5jaGFyQ29kZUF0KGkpO1xuICBpbnRUb0NoYXJbaV0gPSBjO1xuICBjaGFyVG9JbnRbY10gPSBpO1xufVxuZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHJlbGF0aXZlKSB7XG4gIGxldCB2YWx1ZSA9IDA7XG4gIGxldCBzaGlmdCA9IDA7XG4gIGxldCBpbnRlZ2VyID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IGMgPSByZWFkZXIubmV4dCgpO1xuICAgIGludGVnZXIgPSBjaGFyVG9JbnRbY107XG4gICAgdmFsdWUgfD0gKGludGVnZXIgJiAzMSkgPDwgc2hpZnQ7XG4gICAgc2hpZnQgKz0gNTtcbiAgfSB3aGlsZSAoaW50ZWdlciAmIDMyKTtcbiAgY29uc3Qgc2hvdWxkTmVnYXRlID0gdmFsdWUgJiAxO1xuICB2YWx1ZSA+Pj49IDE7XG4gIGlmIChzaG91bGROZWdhdGUpIHtcbiAgICB2YWx1ZSA9IC0yMTQ3NDgzNjQ4IHwgLXZhbHVlO1xuICB9XG4gIHJldHVybiByZWxhdGl2ZSArIHZhbHVlO1xufVxuZnVuY3Rpb24gZW5jb2RlSW50ZWdlcihidWlsZGVyLCBudW0sIHJlbGF0aXZlKSB7XG4gIGxldCBkZWx0YSA9IG51bSAtIHJlbGF0aXZlO1xuICBkZWx0YSA9IGRlbHRhIDwgMCA/IC1kZWx0YSA8PCAxIHwgMSA6IGRlbHRhIDw8IDE7XG4gIGRvIHtcbiAgICBsZXQgY2xhbXBlZCA9IGRlbHRhICYgMzE7XG4gICAgZGVsdGEgPj4+PSA1O1xuICAgIGlmIChkZWx0YSA+IDApIGNsYW1wZWQgfD0gMzI7XG4gICAgYnVpbGRlci53cml0ZShpbnRUb0NoYXJbY2xhbXBlZF0pO1xuICB9IHdoaWxlIChkZWx0YSA+IDApO1xuICByZXR1cm4gbnVtO1xufVxuZnVuY3Rpb24gaGFzTW9yZVZscShyZWFkZXIsIG1heCkge1xuICBpZiAocmVhZGVyLnBvcyA+PSBtYXgpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlYWRlci5wZWVrKCkgIT09IGNvbW1hO1xufVxuXG4vLyBzcmMvc3RyaW5ncy50c1xudmFyIGJ1Zkxlbmd0aCA9IDEwMjQgKiAxNjtcbnZhciB0ZCA9IHR5cGVvZiBUZXh0RGVjb2RlciAhPT0gXCJ1bmRlZmluZWRcIiA/IC8qIEBfX1BVUkVfXyAqLyBuZXcgVGV4dERlY29kZXIoKSA6IHR5cGVvZiBCdWZmZXIgIT09IFwidW5kZWZpbmVkXCIgPyB7XG4gIGRlY29kZShidWYpIHtcbiAgICBjb25zdCBvdXQgPSBCdWZmZXIuZnJvbShidWYuYnVmZmVyLCBidWYuYnl0ZU9mZnNldCwgYnVmLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTtcbiAgfVxufSA6IHtcbiAgZGVjb2RlKGJ1Zikge1xuICAgIGxldCBvdXQgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG59O1xudmFyIFN0cmluZ1dyaXRlciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMub3V0ID0gXCJcIjtcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGJ1Zkxlbmd0aCk7XG4gIH1cbiAgd3JpdGUodikge1xuICAgIGNvbnN0IHsgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGJ1ZmZlclt0aGlzLnBvcysrXSA9IHY7XG4gICAgaWYgKHRoaXMucG9zID09PSBidWZMZW5ndGgpIHtcbiAgICAgIHRoaXMub3V0ICs9IHRkLmRlY29kZShidWZmZXIpO1xuICAgICAgdGhpcy5wb3MgPSAwO1xuICAgIH1cbiAgfVxuICBmbHVzaCgpIHtcbiAgICBjb25zdCB7IGJ1ZmZlciwgb3V0LCBwb3MgfSA9IHRoaXM7XG4gICAgcmV0dXJuIHBvcyA+IDAgPyBvdXQgKyB0ZC5kZWNvZGUoYnVmZmVyLnN1YmFycmF5KDAsIHBvcykpIDogb3V0O1xuICB9XG59O1xudmFyIFN0cmluZ1JlYWRlciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoYnVmZmVyKSB7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICB9XG4gIG5leHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmNoYXJDb2RlQXQodGhpcy5wb3MrKyk7XG4gIH1cbiAgcGVlaygpIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIH1cbiAgaW5kZXhPZihjaGFyKSB7XG4gICAgY29uc3QgeyBidWZmZXIsIHBvcyB9ID0gdGhpcztcbiAgICBjb25zdCBpZHggPSBidWZmZXIuaW5kZXhPZihjaGFyLCBwb3MpO1xuICAgIHJldHVybiBpZHggPT09IC0xID8gYnVmZmVyLmxlbmd0aCA6IGlkeDtcbiAgfVxufTtcblxuLy8gc3JjL3Njb3Blcy50c1xudmFyIEVNUFRZID0gW107XG5mdW5jdGlvbiBkZWNvZGVPcmlnaW5hbFNjb3BlcyhpbnB1dCkge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gaW5wdXQ7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpO1xuICBjb25zdCBzY29wZXMgPSBbXTtcbiAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgbGV0IGxpbmUgPSAwO1xuICBmb3IgKDsgcmVhZGVyLnBvcyA8IGxlbmd0aDsgcmVhZGVyLnBvcysrKSB7XG4gICAgbGluZSA9IGRlY29kZUludGVnZXIocmVhZGVyLCBsaW5lKTtcbiAgICBjb25zdCBjb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgbGFzdFsyXSA9IGxpbmU7XG4gICAgICBsYXN0WzNdID0gY29sdW1uO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGtpbmQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgY29uc3QgZmllbGRzID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgIGNvbnN0IGhhc05hbWUgPSBmaWVsZHMgJiAxO1xuICAgIGNvbnN0IHNjb3BlID0gaGFzTmFtZSA/IFtsaW5lLCBjb2x1bW4sIDAsIDAsIGtpbmQsIGRlY29kZUludGVnZXIocmVhZGVyLCAwKV0gOiBbbGluZSwgY29sdW1uLCAwLCAwLCBraW5kXTtcbiAgICBsZXQgdmFycyA9IEVNUFRZO1xuICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgbGVuZ3RoKSkge1xuICAgICAgdmFycyA9IFtdO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCB2YXJzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICAgIHZhcnMucHVzaCh2YXJzSW5kZXgpO1xuICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIGxlbmd0aCkpO1xuICAgIH1cbiAgICBzY29wZS52YXJzID0gdmFycztcbiAgICBzY29wZXMucHVzaChzY29wZSk7XG4gICAgc3RhY2sucHVzaChzY29wZSk7XG4gIH1cbiAgcmV0dXJuIHNjb3Blcztcbn1cbmZ1bmN0aW9uIGVuY29kZU9yaWdpbmFsU2NvcGVzKHNjb3Blcykge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NvcGVzLmxlbmd0aDsgKSB7XG4gICAgaSA9IF9lbmNvZGVPcmlnaW5hbFNjb3BlcyhzY29wZXMsIGksIHdyaXRlciwgWzBdKTtcbiAgfVxuICByZXR1cm4gd3JpdGVyLmZsdXNoKCk7XG59XG5mdW5jdGlvbiBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSkge1xuICBjb25zdCBzY29wZSA9IHNjb3Blc1tpbmRleF07XG4gIGNvbnN0IHsgMDogc3RhcnRMaW5lLCAxOiBzdGFydENvbHVtbiwgMjogZW5kTGluZSwgMzogZW5kQ29sdW1uLCA0OiBraW5kLCB2YXJzIH0gPSBzY29wZTtcbiAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgc3RhdGVbMF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc3RhcnRMaW5lLCBzdGF0ZVswXSk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBzdGFydENvbHVtbiwgMCk7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBraW5kLCAwKTtcbiAgY29uc3QgZmllbGRzID0gc2NvcGUubGVuZ3RoID09PSA2ID8gMSA6IDA7XG4gIGVuY29kZUludGVnZXIod3JpdGVyLCBmaWVsZHMsIDApO1xuICBpZiAoc2NvcGUubGVuZ3RoID09PSA2KSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVbNV0sIDApO1xuICBmb3IgKGNvbnN0IHYgb2YgdmFycykge1xuICAgIGVuY29kZUludGVnZXIod3JpdGVyLCB2LCAwKTtcbiAgfVxuICBmb3IgKGluZGV4Kys7IGluZGV4IDwgc2NvcGVzLmxlbmd0aDsgKSB7XG4gICAgY29uc3QgbmV4dCA9IHNjb3Blc1tpbmRleF07XG4gICAgY29uc3QgeyAwOiBsLCAxOiBjIH0gPSBuZXh0O1xuICAgIGlmIChsID4gZW5kTGluZSB8fCBsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlT3JpZ2luYWxTY29wZXMoc2NvcGVzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSk7XG4gIH1cbiAgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgc3RhdGVbMF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kTGluZSwgc3RhdGVbMF0pO1xuICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCAwKTtcbiAgcmV0dXJuIGluZGV4O1xufVxuZnVuY3Rpb24gZGVjb2RlR2VuZXJhdGVkUmFuZ2VzKGlucHV0KSB7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBpbnB1dDtcbiAgY29uc3QgcmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7XG4gIGNvbnN0IHJhbmdlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgZ2VuTGluZSA9IDA7XG4gIGxldCBkZWZpbml0aW9uU291cmNlc0luZGV4ID0gMDtcbiAgbGV0IGRlZmluaXRpb25TY29wZUluZGV4ID0gMDtcbiAgbGV0IGNhbGxzaXRlU291cmNlc0luZGV4ID0gMDtcbiAgbGV0IGNhbGxzaXRlTGluZSA9IDA7XG4gIGxldCBjYWxsc2l0ZUNvbHVtbiA9IDA7XG4gIGxldCBiaW5kaW5nTGluZSA9IDA7XG4gIGxldCBiaW5kaW5nQ29sdW1uID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IHNlbWkgPSByZWFkZXIuaW5kZXhPZihcIjtcIik7XG4gICAgbGV0IGdlbkNvbHVtbiA9IDA7XG4gICAgZm9yICg7IHJlYWRlci5wb3MgPCBzZW1pOyByZWFkZXIucG9zKyspIHtcbiAgICAgIGdlbkNvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBnZW5Db2x1bW4pO1xuICAgICAgaWYgKCFoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBsYXN0WzJdID0gZ2VuTGluZTtcbiAgICAgICAgbGFzdFszXSA9IGdlbkNvbHVtbjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICBjb25zdCBoYXNEZWZpbml0aW9uID0gZmllbGRzICYgMTtcbiAgICAgIGNvbnN0IGhhc0NhbGxzaXRlID0gZmllbGRzICYgMjtcbiAgICAgIGNvbnN0IGhhc1Njb3BlID0gZmllbGRzICYgNDtcbiAgICAgIGxldCBjYWxsc2l0ZSA9IG51bGw7XG4gICAgICBsZXQgYmluZGluZ3MgPSBFTVBUWTtcbiAgICAgIGxldCByYW5nZTtcbiAgICAgIGlmIChoYXNEZWZpbml0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRlZlNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBkZWZpbml0aW9uU291cmNlc0luZGV4KTtcbiAgICAgICAgZGVmaW5pdGlvblNjb3BlSW5kZXggPSBkZWNvZGVJbnRlZ2VyKFxuICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICBkZWZpbml0aW9uU291cmNlc0luZGV4ID09PSBkZWZTb3VyY2VzSW5kZXggPyBkZWZpbml0aW9uU2NvcGVJbmRleCA6IDBcbiAgICAgICAgKTtcbiAgICAgICAgZGVmaW5pdGlvblNvdXJjZXNJbmRleCA9IGRlZlNvdXJjZXNJbmRleDtcbiAgICAgICAgcmFuZ2UgPSBbZ2VuTGluZSwgZ2VuQ29sdW1uLCAwLCAwLCBkZWZTb3VyY2VzSW5kZXgsIGRlZmluaXRpb25TY29wZUluZGV4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gW2dlbkxpbmUsIGdlbkNvbHVtbiwgMCwgMF07XG4gICAgICB9XG4gICAgICByYW5nZS5pc1Njb3BlID0gISFoYXNTY29wZTtcbiAgICAgIGlmIChoYXNDYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBwcmV2Q3NpID0gY2FsbHNpdGVTb3VyY2VzSW5kZXg7XG4gICAgICAgIGNvbnN0IHByZXZMaW5lID0gY2FsbHNpdGVMaW5lO1xuICAgICAgICBjYWxsc2l0ZVNvdXJjZXNJbmRleCA9IGRlY29kZUludGVnZXIocmVhZGVyLCBjYWxsc2l0ZVNvdXJjZXNJbmRleCk7XG4gICAgICAgIGNvbnN0IHNhbWVTb3VyY2UgPSBwcmV2Q3NpID09PSBjYWxsc2l0ZVNvdXJjZXNJbmRleDtcbiAgICAgICAgY2FsbHNpdGVMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNhbWVTb3VyY2UgPyBjYWxsc2l0ZUxpbmUgOiAwKTtcbiAgICAgICAgY2FsbHNpdGVDb2x1bW4gPSBkZWNvZGVJbnRlZ2VyKFxuICAgICAgICAgIHJlYWRlcixcbiAgICAgICAgICBzYW1lU291cmNlICYmIHByZXZMaW5lID09PSBjYWxsc2l0ZUxpbmUgPyBjYWxsc2l0ZUNvbHVtbiA6IDBcbiAgICAgICAgKTtcbiAgICAgICAgY2FsbHNpdGUgPSBbY2FsbHNpdGVTb3VyY2VzSW5kZXgsIGNhbGxzaXRlTGluZSwgY2FsbHNpdGVDb2x1bW5dO1xuICAgICAgfVxuICAgICAgcmFuZ2UuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcbiAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgYmluZGluZ3MgPSBbXTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIGJpbmRpbmdMaW5lID0gZ2VuTGluZTtcbiAgICAgICAgICBiaW5kaW5nQ29sdW1uID0gZ2VuQ29sdW1uO1xuICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zQ291bnQgPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgMCk7XG4gICAgICAgICAgbGV0IGV4cHJlc3Npb25SYW5nZXM7XG4gICAgICAgICAgaWYgKGV4cHJlc3Npb25zQ291bnQgPCAtMSkge1xuICAgICAgICAgICAgZXhwcmVzc2lvblJhbmdlcyA9IFtbZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApXV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gLTE7IGkgPiBleHByZXNzaW9uc0NvdW50OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkJsID0gYmluZGluZ0xpbmU7XG4gICAgICAgICAgICAgIGJpbmRpbmdMaW5lID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGJpbmRpbmdMaW5lKTtcbiAgICAgICAgICAgICAgYmluZGluZ0NvbHVtbiA9IGRlY29kZUludGVnZXIocmVhZGVyLCBiaW5kaW5nTGluZSA9PT0gcHJldkJsID8gYmluZGluZ0NvbHVtbiA6IDApO1xuICAgICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIDApO1xuICAgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VzLnB1c2goW2V4cHJlc3Npb24sIGJpbmRpbmdMaW5lLCBiaW5kaW5nQ29sdW1uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25SYW5nZXMgPSBbW2V4cHJlc3Npb25zQ291bnRdXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluZGluZ3MucHVzaChleHByZXNzaW9uUmFuZ2VzKTtcbiAgICAgICAgfSB3aGlsZSAoaGFzTW9yZVZscShyZWFkZXIsIHNlbWkpKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmJpbmRpbmdzID0gYmluZGluZ3M7XG4gICAgICByYW5nZXMucHVzaChyYW5nZSk7XG4gICAgICBzdGFjay5wdXNoKHJhbmdlKTtcbiAgICB9XG4gICAgZ2VuTGluZSsrO1xuICAgIHJlYWRlci5wb3MgPSBzZW1pICsgMTtcbiAgfSB3aGlsZSAocmVhZGVyLnBvcyA8IGxlbmd0aCk7XG4gIHJldHVybiByYW5nZXM7XG59XG5mdW5jdGlvbiBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzKSB7XG4gIGlmIChyYW5nZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7ICkge1xuICAgIGkgPSBfZW5jb2RlR2VuZXJhdGVkUmFuZ2VzKHJhbmdlcywgaSwgd3JpdGVyLCBbMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuICB9XG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cbmZ1bmN0aW9uIF9lbmNvZGVHZW5lcmF0ZWRSYW5nZXMocmFuZ2VzLCBpbmRleCwgd3JpdGVyLCBzdGF0ZSkge1xuICBjb25zdCByYW5nZSA9IHJhbmdlc1tpbmRleF07XG4gIGNvbnN0IHtcbiAgICAwOiBzdGFydExpbmUsXG4gICAgMTogc3RhcnRDb2x1bW4sXG4gICAgMjogZW5kTGluZSxcbiAgICAzOiBlbmRDb2x1bW4sXG4gICAgaXNTY29wZSxcbiAgICBjYWxsc2l0ZSxcbiAgICBiaW5kaW5nc1xuICB9ID0gcmFuZ2U7XG4gIGlmIChzdGF0ZVswXSA8IHN0YXJ0TGluZSkge1xuICAgIGNhdGNodXBMaW5lKHdyaXRlciwgc3RhdGVbMF0sIHN0YXJ0TGluZSk7XG4gICAgc3RhdGVbMF0gPSBzdGFydExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2UgaWYgKGluZGV4ID4gMCkge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgcmFuZ2VbMV0sIHN0YXRlWzFdKTtcbiAgY29uc3QgZmllbGRzID0gKHJhbmdlLmxlbmd0aCA9PT0gNiA/IDEgOiAwKSB8IChjYWxsc2l0ZSA/IDIgOiAwKSB8IChpc1Njb3BlID8gNCA6IDApO1xuICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZmllbGRzLCAwKTtcbiAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gNikge1xuICAgIGNvbnN0IHsgNDogc291cmNlc0luZGV4LCA1OiBzY29wZXNJbmRleCB9ID0gcmFuZ2U7XG4gICAgaWYgKHNvdXJjZXNJbmRleCAhPT0gc3RhdGVbMl0pIHtcbiAgICAgIHN0YXRlWzNdID0gMDtcbiAgICB9XG4gICAgc3RhdGVbMl0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc291cmNlc0luZGV4LCBzdGF0ZVsyXSk7XG4gICAgc3RhdGVbM10gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2NvcGVzSW5kZXgsIHN0YXRlWzNdKTtcbiAgfVxuICBpZiAoY2FsbHNpdGUpIHtcbiAgICBjb25zdCB7IDA6IHNvdXJjZXNJbmRleCwgMTogY2FsbExpbmUsIDI6IGNhbGxDb2x1bW4gfSA9IHJhbmdlLmNhbGxzaXRlO1xuICAgIGlmIChzb3VyY2VzSW5kZXggIT09IHN0YXRlWzRdKSB7XG4gICAgICBzdGF0ZVs1XSA9IDA7XG4gICAgICBzdGF0ZVs2XSA9IDA7XG4gICAgfSBlbHNlIGlmIChjYWxsTGluZSAhPT0gc3RhdGVbNV0pIHtcbiAgICAgIHN0YXRlWzZdID0gMDtcbiAgICB9XG4gICAgc3RhdGVbNF0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc291cmNlc0luZGV4LCBzdGF0ZVs0XSk7XG4gICAgc3RhdGVbNV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgY2FsbExpbmUsIHN0YXRlWzVdKTtcbiAgICBzdGF0ZVs2XSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBjYWxsQ29sdW1uLCBzdGF0ZVs2XSk7XG4gIH1cbiAgaWYgKGJpbmRpbmdzKSB7XG4gICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIGJpbmRpbmdzKSB7XG4gICAgICBpZiAoYmluZGluZy5sZW5ndGggPiAxKSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgLWJpbmRpbmcubGVuZ3RoLCAwKTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBiaW5kaW5nWzBdWzBdO1xuICAgICAgZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cHJlc3Npb24sIDApO1xuICAgICAgbGV0IGJpbmRpbmdTdGFydExpbmUgPSBzdGFydExpbmU7XG4gICAgICBsZXQgYmluZGluZ1N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGJpbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwUmFuZ2UgPSBiaW5kaW5nW2ldO1xuICAgICAgICBiaW5kaW5nU3RhcnRMaW5lID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzFdLCBiaW5kaW5nU3RhcnRMaW5lKTtcbiAgICAgICAgYmluZGluZ1N0YXJ0Q29sdW1uID0gZW5jb2RlSW50ZWdlcih3cml0ZXIsIGV4cFJhbmdlWzJdLCBiaW5kaW5nU3RhcnRDb2x1bW4pO1xuICAgICAgICBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZXhwUmFuZ2VbMF0sIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmb3IgKGluZGV4Kys7IGluZGV4IDwgcmFuZ2VzLmxlbmd0aDsgKSB7XG4gICAgY29uc3QgbmV4dCA9IHJhbmdlc1tpbmRleF07XG4gICAgY29uc3QgeyAwOiBsLCAxOiBjIH0gPSBuZXh0O1xuICAgIGlmIChsID4gZW5kTGluZSB8fCBsID09PSBlbmRMaW5lICYmIGMgPj0gZW5kQ29sdW1uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggPSBfZW5jb2RlR2VuZXJhdGVkUmFuZ2VzKHJhbmdlcywgaW5kZXgsIHdyaXRlciwgc3RhdGUpO1xuICB9XG4gIGlmIChzdGF0ZVswXSA8IGVuZExpbmUpIHtcbiAgICBjYXRjaHVwTGluZSh3cml0ZXIsIHN0YXRlWzBdLCBlbmRMaW5lKTtcbiAgICBzdGF0ZVswXSA9IGVuZExpbmU7XG4gICAgc3RhdGVbMV0gPSAwO1xuICB9IGVsc2Uge1xuICAgIHdyaXRlci53cml0ZShjb21tYSk7XG4gIH1cbiAgc3RhdGVbMV0gPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgZW5kQ29sdW1uLCBzdGF0ZVsxXSk7XG4gIHJldHVybiBpbmRleDtcbn1cbmZ1bmN0aW9uIGNhdGNodXBMaW5lKHdyaXRlciwgbGFzdExpbmUsIGxpbmUpIHtcbiAgZG8ge1xuICAgIHdyaXRlci53cml0ZShzZW1pY29sb24pO1xuICB9IHdoaWxlICgrK2xhc3RMaW5lIDwgbGluZSk7XG59XG5cbi8vIHNyYy9zb3VyY2VtYXAtY29kZWMudHNcbmZ1bmN0aW9uIGRlY29kZShtYXBwaW5ncykge1xuICBjb25zdCB7IGxlbmd0aCB9ID0gbWFwcGluZ3M7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIobWFwcGluZ3MpO1xuICBjb25zdCBkZWNvZGVkID0gW107XG4gIGxldCBnZW5Db2x1bW4gPSAwO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuICBkbyB7XG4gICAgY29uc3Qgc2VtaSA9IHJlYWRlci5pbmRleE9mKFwiO1wiKTtcbiAgICBjb25zdCBsaW5lID0gW107XG4gICAgbGV0IHNvcnRlZCA9IHRydWU7XG4gICAgbGV0IGxhc3RDb2wgPSAwO1xuICAgIGdlbkNvbHVtbiA9IDA7XG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBzZW1pKSB7XG4gICAgICBsZXQgc2VnO1xuICAgICAgZ2VuQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIGdlbkNvbHVtbik7XG4gICAgICBpZiAoZ2VuQ29sdW1uIDwgbGFzdENvbCkgc29ydGVkID0gZmFsc2U7XG4gICAgICBsYXN0Q29sID0gZ2VuQ29sdW1uO1xuICAgICAgaWYgKGhhc01vcmVWbHEocmVhZGVyLCBzZW1pKSkge1xuICAgICAgICBzb3VyY2VzSW5kZXggPSBkZWNvZGVJbnRlZ2VyKHJlYWRlciwgc291cmNlc0luZGV4KTtcbiAgICAgICAgc291cmNlTGluZSA9IGRlY29kZUludGVnZXIocmVhZGVyLCBzb3VyY2VMaW5lKTtcbiAgICAgICAgc291cmNlQ29sdW1uID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIHNvdXJjZUNvbHVtbik7XG4gICAgICAgIGlmIChoYXNNb3JlVmxxKHJlYWRlciwgc2VtaSkpIHtcbiAgICAgICAgICBuYW1lc0luZGV4ID0gZGVjb2RlSW50ZWdlcihyZWFkZXIsIG5hbWVzSW5kZXgpO1xuICAgICAgICAgIHNlZyA9IFtnZW5Db2x1bW4sIHNvdXJjZXNJbmRleCwgc291cmNlTGluZSwgc291cmNlQ29sdW1uLCBuYW1lc0luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWcgPSBbZ2VuQ29sdW1uLCBzb3VyY2VzSW5kZXgsIHNvdXJjZUxpbmUsIHNvdXJjZUNvbHVtbl07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZyA9IFtnZW5Db2x1bW5dO1xuICAgICAgfVxuICAgICAgbGluZS5wdXNoKHNlZyk7XG4gICAgICByZWFkZXIucG9zKys7XG4gICAgfVxuICAgIGlmICghc29ydGVkKSBzb3J0KGxpbmUpO1xuICAgIGRlY29kZWQucHVzaChsaW5lKTtcbiAgICByZWFkZXIucG9zID0gc2VtaSArIDE7XG4gIH0gd2hpbGUgKHJlYWRlci5wb3MgPD0gbGVuZ3RoKTtcbiAgcmV0dXJuIGRlY29kZWQ7XG59XG5mdW5jdGlvbiBzb3J0KGxpbmUpIHtcbiAgbGluZS5zb3J0KHNvcnRDb21wYXJhdG9yKTtcbn1cbmZ1bmN0aW9uIHNvcnRDb21wYXJhdG9yKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gLSBiWzBdO1xufVxuZnVuY3Rpb24gZW5jb2RlKGRlY29kZWQpIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuICBsZXQgc291cmNlc0luZGV4ID0gMDtcbiAgbGV0IHNvdXJjZUxpbmUgPSAwO1xuICBsZXQgc291cmNlQ29sdW1uID0gMDtcbiAgbGV0IG5hbWVzSW5kZXggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlY29kZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBsaW5lID0gZGVjb2RlZFtpXTtcbiAgICBpZiAoaSA+IDApIHdyaXRlci53cml0ZShzZW1pY29sb24pO1xuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgbGV0IGdlbkNvbHVtbiA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gbGluZVtqXTtcbiAgICAgIGlmIChqID4gMCkgd3JpdGVyLndyaXRlKGNvbW1hKTtcbiAgICAgIGdlbkNvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzBdLCBnZW5Db2x1bW4pO1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAxKSBjb250aW51ZTtcbiAgICAgIHNvdXJjZXNJbmRleCA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzFdLCBzb3VyY2VzSW5kZXgpO1xuICAgICAgc291cmNlTGluZSA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzJdLCBzb3VyY2VMaW5lKTtcbiAgICAgIHNvdXJjZUNvbHVtbiA9IGVuY29kZUludGVnZXIod3JpdGVyLCBzZWdtZW50WzNdLCBzb3VyY2VDb2x1bW4pO1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSA0KSBjb250aW51ZTtcbiAgICAgIG5hbWVzSW5kZXggPSBlbmNvZGVJbnRlZ2VyKHdyaXRlciwgc2VnbWVudFs0XSwgbmFtZXNJbmRleCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB3cml0ZXIuZmx1c2goKTtcbn1cbmV4cG9ydCB7XG4gIGRlY29kZSxcbiAgZGVjb2RlR2VuZXJhdGVkUmFuZ2VzLFxuICBkZWNvZGVPcmlnaW5hbFNjb3BlcyxcbiAgZW5jb2RlLFxuICBlbmNvZGVHZW5lcmF0ZWRSYW5nZXMsXG4gIGVuY29kZU9yaWdpbmFsU2NvcGVzXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c291cmNlbWFwLWNvZGVjLm1qcy5tYXBcbiJdLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF0sIm1hcHBpbmdzIjoiO0FBQ0EsSUFBSSxRQUFRLElBQUksV0FBVyxDQUFDO0FBQzVCLElBQUksWUFBWSxJQUFJLFdBQVcsQ0FBQztBQUNoQyxJQUFJLFFBQVE7QUFDWixJQUFJLDRCQUFZLElBQUksV0FBVyxFQUFFO0FBQ2pDLElBQUksNEJBQVksSUFBSSxXQUFXLEdBQUc7QUFDbEMsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0NBQ3JDLE1BQU0sSUFBSSxNQUFNLFdBQVcsQ0FBQztDQUM1QixVQUFVLEtBQUs7Q0FDZixVQUFVLEtBQUs7QUFDakI7QUFDQSxTQUFTLGNBQWMsUUFBUSxVQUFVO0NBQ3ZDLElBQUksUUFBUTtDQUNaLElBQUksUUFBUTtDQUNaLElBQUksVUFBVTtDQUNkLEdBQUc7RUFFRCxVQUFVLFVBREEsT0FBTyxLQUNHO0VBQ3BCLFVBQVUsVUFBVSxPQUFPO0VBQzNCLFNBQVM7Q0FDWCxTQUFTLFVBQVU7Q0FDbkIsTUFBTSxlQUFlLFFBQVE7Q0FDN0IsV0FBVztDQUNYLElBQUksY0FDRixRQUFRLGNBQWMsQ0FBQztDQUV6QixPQUFPLFdBQVc7QUFDcEI7QUFDQSxTQUFTLGNBQWMsU0FBUyxLQUFLLFVBQVU7Q0FDN0MsSUFBSSxRQUFRLE1BQU07Q0FDbEIsUUFBUSxRQUFRLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxTQUFTO0NBQy9DLEdBQUc7RUFDRCxJQUFJLFVBQVUsUUFBUTtFQUN0QixXQUFXO0VBQ1gsSUFBSSxRQUFRLEdBQUcsV0FBVztFQUMxQixRQUFRLE1BQU0sVUFBVSxRQUFRO0NBQ2xDLFNBQVMsUUFBUTtDQUNqQixPQUFPO0FBQ1Q7QUFDQSxTQUFTLFdBQVcsUUFBUSxLQUFLO0NBQy9CLElBQUksT0FBTyxPQUFPLEtBQUssT0FBTztDQUM5QixPQUFPLE9BQU8sS0FBSyxNQUFNO0FBQzNCO0FBR0EsSUFBSSxZ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