opencode-rehydar 0.14.1 → 0.14.3

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 (430) hide show
  1. package/dist/browser.d.ts +54 -0
  2. package/dist/browser.d.ts.map +1 -0
  3. package/dist/browser.js +74 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/core/anonymizer.d.ts +309 -0
  6. package/dist/core/anonymizer.d.ts.map +1 -0
  7. package/dist/core/anonymizer.js +555 -0
  8. package/dist/core/anonymizer.js.map +1 -0
  9. package/dist/core/index.d.ts +6 -0
  10. package/dist/core/index.d.ts.map +1 -0
  11. package/dist/core/index.js +6 -0
  12. package/dist/core/index.js.map +1 -0
  13. package/dist/crypto/index.d.ts +6 -0
  14. package/dist/crypto/index.d.ts.map +1 -0
  15. package/dist/crypto/index.js +6 -0
  16. package/dist/crypto/index.js.map +1 -0
  17. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  18. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  19. package/dist/crypto/pii-map-crypto.js +228 -0
  20. package/dist/crypto/pii-map-crypto.js.map +1 -0
  21. package/dist/index.d.ts +53 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +72 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/ner/bio-decoder.d.ts +64 -0
  26. package/dist/ner/bio-decoder.d.ts.map +1 -0
  27. package/dist/ner/bio-decoder.js +218 -0
  28. package/dist/ner/bio-decoder.js.map +1 -0
  29. package/dist/ner/index.d.ts +12 -0
  30. package/dist/ner/index.d.ts.map +1 -0
  31. package/dist/ner/index.js +12 -0
  32. package/dist/ner/index.js.map +1 -0
  33. package/dist/ner/inference-server-client.d.ts +81 -0
  34. package/dist/ner/inference-server-client.d.ts.map +1 -0
  35. package/dist/ner/inference-server-client.js +120 -0
  36. package/dist/ner/inference-server-client.js.map +1 -0
  37. package/dist/ner/inference-server-ner-model.d.ts +43 -0
  38. package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
  39. package/dist/ner/inference-server-ner-model.js +119 -0
  40. package/dist/ner/inference-server-ner-model.js.map +1 -0
  41. package/dist/ner/model-manager.d.ts +111 -0
  42. package/dist/ner/model-manager.d.ts.map +1 -0
  43. package/dist/ner/model-manager.js +334 -0
  44. package/dist/ner/model-manager.js.map +1 -0
  45. package/dist/ner/ner-model.d.ts +172 -0
  46. package/dist/ner/ner-model.d.ts.map +1 -0
  47. package/dist/ner/ner-model.js +514 -0
  48. package/dist/ner/ner-model.js.map +1 -0
  49. package/dist/ner/onnx-runtime.browser.d.ts +46 -0
  50. package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
  51. package/dist/ner/onnx-runtime.browser.js +90 -0
  52. package/dist/ner/onnx-runtime.browser.js.map +1 -0
  53. package/dist/ner/onnx-runtime.d.ts +72 -0
  54. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  55. package/dist/ner/onnx-runtime.js +132 -0
  56. package/dist/ner/onnx-runtime.js.map +1 -0
  57. package/dist/ner/token-window.d.ts +19 -0
  58. package/dist/ner/token-window.d.ts.map +1 -0
  59. package/dist/ner/token-window.js +101 -0
  60. package/dist/ner/token-window.js.map +1 -0
  61. package/dist/ner/tokenizer.d.ts +142 -0
  62. package/dist/ner/tokenizer.d.ts.map +1 -0
  63. package/dist/ner/tokenizer.js +362 -0
  64. package/dist/ner/tokenizer.js.map +1 -0
  65. package/dist/opencode-plugin/git-identity.d.ts +3 -0
  66. package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
  67. package/dist/opencode-plugin/git-identity.js +37 -0
  68. package/dist/opencode-plugin/git-identity.js.map +1 -0
  69. package/dist/opencode-plugin/github-username.d.ts +3 -0
  70. package/dist/opencode-plugin/github-username.d.ts.map +1 -0
  71. package/dist/opencode-plugin/github-username.js +41 -0
  72. package/dist/opencode-plugin/github-username.js.map +1 -0
  73. package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
  74. package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
  75. package/dist/opencode-plugin/identity-recognizer.js +21 -0
  76. package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
  77. package/dist/opencode-plugin/index.d.ts +7 -0
  78. package/dist/opencode-plugin/index.d.ts.map +1 -0
  79. package/dist/opencode-plugin/index.js +6 -0
  80. package/dist/opencode-plugin/index.js.map +1 -0
  81. package/dist/opencode-plugin/plugin.d.ts +39 -0
  82. package/dist/opencode-plugin/plugin.d.ts.map +1 -0
  83. package/dist/opencode-plugin/plugin.js +294 -0
  84. package/dist/opencode-plugin/plugin.js.map +1 -0
  85. package/dist/opencode-plugin/types.d.ts +33 -0
  86. package/dist/opencode-plugin/types.d.ts.map +1 -0
  87. package/dist/opencode-plugin/types.js +5 -0
  88. package/dist/opencode-plugin/types.js.map +1 -0
  89. package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
  90. package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
  91. package/dist/opencode-plugin/v2/anon-state.js +14 -0
  92. package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
  93. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
  94. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
  95. package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
  96. package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
  97. package/dist/opencode-plugin/v2/index.d.ts +17 -0
  98. package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
  99. package/dist/opencode-plugin/v2/index.js +17 -0
  100. package/dist/opencode-plugin/v2/index.js.map +1 -0
  101. package/dist/opencode-plugin/v2/logger.d.ts +24 -0
  102. package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
  103. package/dist/opencode-plugin/v2/logger.js +73 -0
  104. package/dist/opencode-plugin/v2/logger.js.map +1 -0
  105. package/dist/opencode-plugin/v2/options.d.ts +63 -0
  106. package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
  107. package/dist/opencode-plugin/v2/options.js +183 -0
  108. package/dist/opencode-plugin/v2/options.js.map +1 -0
  109. package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
  110. package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
  111. package/dist/opencode-plugin/v2/register-hooks.js +160 -0
  112. package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
  113. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
  114. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
  115. package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
  116. package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
  117. package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
  118. package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
  119. package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
  120. package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
  121. package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
  122. package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
  123. package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
  124. package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
  125. package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
  126. package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
  127. package/dist/opencode-plugin/v2/sessions.js +23 -0
  128. package/dist/opencode-plugin/v2/sessions.js.map +1 -0
  129. package/dist/opencode-plugin/v2/sse.d.ts +101 -0
  130. package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
  131. package/dist/opencode-plugin/v2/sse.js +235 -0
  132. package/dist/opencode-plugin/v2/sse.js.map +1 -0
  133. package/dist/opencode-plugin/v2/types.d.ts +188 -0
  134. package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
  135. package/dist/opencode-plugin/v2/types.js +10 -0
  136. package/dist/opencode-plugin/v2/types.js.map +1 -0
  137. package/dist/opencode-plugin/vcs-command.d.ts +3 -0
  138. package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
  139. package/dist/opencode-plugin/vcs-command.js +34 -0
  140. package/dist/opencode-plugin/vcs-command.js.map +1 -0
  141. package/dist/pipeline/index.d.ts +12 -0
  142. package/dist/pipeline/index.d.ts.map +1 -0
  143. package/dist/pipeline/index.js +12 -0
  144. package/dist/pipeline/index.js.map +1 -0
  145. package/dist/pipeline/prenormalize.d.ts +48 -0
  146. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  147. package/dist/pipeline/prenormalize.js +94 -0
  148. package/dist/pipeline/prenormalize.js.map +1 -0
  149. package/dist/pipeline/resolver.d.ts +56 -0
  150. package/dist/pipeline/resolver.d.ts.map +1 -0
  151. package/dist/pipeline/resolver.js +239 -0
  152. package/dist/pipeline/resolver.js.map +1 -0
  153. package/dist/pipeline/semantic-data-loader.d.ts +171 -0
  154. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  155. package/dist/pipeline/semantic-data-loader.js +677 -0
  156. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  157. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  158. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  159. package/dist/pipeline/semantic-enricher.js +322 -0
  160. package/dist/pipeline/semantic-enricher.js.map +1 -0
  161. package/dist/pipeline/tagger.d.ts +121 -0
  162. package/dist/pipeline/tagger.d.ts.map +1 -0
  163. package/dist/pipeline/tagger.js +545 -0
  164. package/dist/pipeline/tagger.js.map +1 -0
  165. package/dist/pipeline/title-extractor.d.ts +79 -0
  166. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  167. package/dist/pipeline/title-extractor.js +801 -0
  168. package/dist/pipeline/title-extractor.js.map +1 -0
  169. package/dist/pipeline/validator.d.ts +65 -0
  170. package/dist/pipeline/validator.d.ts.map +1 -0
  171. package/dist/pipeline/validator.js +292 -0
  172. package/dist/pipeline/validator.js.map +1 -0
  173. package/dist/proxy/index.d.ts +13 -0
  174. package/dist/proxy/index.d.ts.map +1 -0
  175. package/dist/proxy/index.js +12 -0
  176. package/dist/proxy/index.js.map +1 -0
  177. package/dist/proxy/providers/anthropic.d.ts +28 -0
  178. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  179. package/dist/proxy/providers/anthropic.js +265 -0
  180. package/dist/proxy/providers/anthropic.js.map +1 -0
  181. package/dist/proxy/providers/index.d.ts +19 -0
  182. package/dist/proxy/providers/index.d.ts.map +1 -0
  183. package/dist/proxy/providers/index.js +41 -0
  184. package/dist/proxy/providers/index.js.map +1 -0
  185. package/dist/proxy/providers/openai.d.ts +27 -0
  186. package/dist/proxy/providers/openai.d.ts.map +1 -0
  187. package/dist/proxy/providers/openai.js +203 -0
  188. package/dist/proxy/providers/openai.js.map +1 -0
  189. package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
  190. package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
  191. package/dist/proxy/providers/streaming-tool-loop.js +223 -0
  192. package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
  193. package/dist/proxy/providers/types.d.ts +109 -0
  194. package/dist/proxy/providers/types.d.ts.map +1 -0
  195. package/dist/proxy/providers/types.js +2 -0
  196. package/dist/proxy/providers/types.js.map +1 -0
  197. package/dist/proxy/proxy-server.d.ts +61 -0
  198. package/dist/proxy/proxy-server.d.ts.map +1 -0
  199. package/dist/proxy/proxy-server.js +146 -0
  200. package/dist/proxy/proxy-server.js.map +1 -0
  201. package/dist/proxy/rehydra-fetch.d.ts +35 -0
  202. package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
  203. package/dist/proxy/rehydra-fetch.js +631 -0
  204. package/dist/proxy/rehydra-fetch.js.map +1 -0
  205. package/dist/proxy/rehydra-proxy.d.ts +40 -0
  206. package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
  207. package/dist/proxy/rehydra-proxy.js +150 -0
  208. package/dist/proxy/rehydra-proxy.js.map +1 -0
  209. package/dist/proxy/sse-parser.d.ts +59 -0
  210. package/dist/proxy/sse-parser.d.ts.map +1 -0
  211. package/dist/proxy/sse-parser.js +112 -0
  212. package/dist/proxy/sse-parser.js.map +1 -0
  213. package/dist/proxy/system-instruction.d.ts +19 -0
  214. package/dist/proxy/system-instruction.d.ts.map +1 -0
  215. package/dist/proxy/system-instruction.js +33 -0
  216. package/dist/proxy/system-instruction.js.map +1 -0
  217. package/dist/proxy/tool-loop-stream.d.ts +7 -0
  218. package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
  219. package/dist/proxy/tool-loop-stream.js +65 -0
  220. package/dist/proxy/tool-loop-stream.js.map +1 -0
  221. package/dist/proxy/types.d.ts +138 -0
  222. package/dist/proxy/types.d.ts.map +1 -0
  223. package/dist/proxy/types.js +5 -0
  224. package/dist/proxy/types.js.map +1 -0
  225. package/dist/proxy/wrap-client.d.ts +47 -0
  226. package/dist/proxy/wrap-client.d.ts.map +1 -0
  227. package/dist/proxy/wrap-client.js +70 -0
  228. package/dist/proxy/wrap-client.js.map +1 -0
  229. package/dist/recognizers/address.d.ts +2 -0
  230. package/dist/recognizers/address.d.ts.map +1 -0
  231. package/dist/recognizers/address.js +23 -0
  232. package/dist/recognizers/address.js.map +1 -0
  233. package/dist/recognizers/base.d.ts +78 -0
  234. package/dist/recognizers/base.d.ts.map +1 -0
  235. package/dist/recognizers/base.js +100 -0
  236. package/dist/recognizers/base.js.map +1 -0
  237. package/dist/recognizers/bic-swift.d.ts +10 -0
  238. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  239. package/dist/recognizers/bic-swift.js +107 -0
  240. package/dist/recognizers/bic-swift.js.map +1 -0
  241. package/dist/recognizers/credit-card.d.ts +32 -0
  242. package/dist/recognizers/credit-card.d.ts.map +1 -0
  243. package/dist/recognizers/credit-card.js +160 -0
  244. package/dist/recognizers/credit-card.js.map +1 -0
  245. package/dist/recognizers/custom-id.d.ts +28 -0
  246. package/dist/recognizers/custom-id.d.ts.map +1 -0
  247. package/dist/recognizers/custom-id.js +116 -0
  248. package/dist/recognizers/custom-id.js.map +1 -0
  249. package/dist/recognizers/date.d.ts +10 -0
  250. package/dist/recognizers/date.d.ts.map +1 -0
  251. package/dist/recognizers/date.js +228 -0
  252. package/dist/recognizers/date.js.map +1 -0
  253. package/dist/recognizers/email.d.ts +10 -0
  254. package/dist/recognizers/email.d.ts.map +1 -0
  255. package/dist/recognizers/email.js +75 -0
  256. package/dist/recognizers/email.js.map +1 -0
  257. package/dist/recognizers/iban.d.ts +14 -0
  258. package/dist/recognizers/iban.d.ts.map +1 -0
  259. package/dist/recognizers/iban.js +67 -0
  260. package/dist/recognizers/iban.js.map +1 -0
  261. package/dist/recognizers/index.d.ts +25 -0
  262. package/dist/recognizers/index.d.ts.map +1 -0
  263. package/dist/recognizers/index.js +53 -0
  264. package/dist/recognizers/index.js.map +1 -0
  265. package/dist/recognizers/ip-address.d.ts +14 -0
  266. package/dist/recognizers/ip-address.d.ts.map +1 -0
  267. package/dist/recognizers/ip-address.js +183 -0
  268. package/dist/recognizers/ip-address.js.map +1 -0
  269. package/dist/recognizers/phone.d.ts +10 -0
  270. package/dist/recognizers/phone.d.ts.map +1 -0
  271. package/dist/recognizers/phone.js +145 -0
  272. package/dist/recognizers/phone.js.map +1 -0
  273. package/dist/recognizers/postal-code.d.ts +16 -0
  274. package/dist/recognizers/postal-code.d.ts.map +1 -0
  275. package/dist/recognizers/postal-code.js +42 -0
  276. package/dist/recognizers/postal-code.js.map +1 -0
  277. package/dist/recognizers/registry.d.ts +59 -0
  278. package/dist/recognizers/registry.d.ts.map +1 -0
  279. package/dist/recognizers/registry.js +113 -0
  280. package/dist/recognizers/registry.js.map +1 -0
  281. package/dist/recognizers/secrets/api-key.d.ts +6 -0
  282. package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
  283. package/dist/recognizers/secrets/api-key.js +40 -0
  284. package/dist/recognizers/secrets/api-key.js.map +1 -0
  285. package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
  286. package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
  287. package/dist/recognizers/secrets/aws-credentials.js +68 -0
  288. package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
  289. package/dist/recognizers/secrets/config-secret.d.ts +8 -0
  290. package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
  291. package/dist/recognizers/secrets/config-secret.js +59 -0
  292. package/dist/recognizers/secrets/config-secret.js.map +1 -0
  293. package/dist/recognizers/secrets/connection-string.d.ts +6 -0
  294. package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
  295. package/dist/recognizers/secrets/connection-string.js +40 -0
  296. package/dist/recognizers/secrets/connection-string.js.map +1 -0
  297. package/dist/recognizers/secrets/env-var.d.ts +8 -0
  298. package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
  299. package/dist/recognizers/secrets/env-var.js +54 -0
  300. package/dist/recognizers/secrets/env-var.js.map +1 -0
  301. package/dist/recognizers/secrets/index.d.ts +22 -0
  302. package/dist/recognizers/secrets/index.d.ts.map +1 -0
  303. package/dist/recognizers/secrets/index.js +41 -0
  304. package/dist/recognizers/secrets/index.js.map +1 -0
  305. package/dist/recognizers/secrets/jwt.d.ts +6 -0
  306. package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
  307. package/dist/recognizers/secrets/jwt.js +47 -0
  308. package/dist/recognizers/secrets/jwt.js.map +1 -0
  309. package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
  310. package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
  311. package/dist/recognizers/secrets/key-patterns.js +15 -0
  312. package/dist/recognizers/secrets/key-patterns.js.map +1 -0
  313. package/dist/recognizers/secrets/literal-value.d.ts +10 -0
  314. package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
  315. package/dist/recognizers/secrets/literal-value.js +48 -0
  316. package/dist/recognizers/secrets/literal-value.js.map +1 -0
  317. package/dist/recognizers/secrets/private-key.d.ts +6 -0
  318. package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
  319. package/dist/recognizers/secrets/private-key.js +16 -0
  320. package/dist/recognizers/secrets/private-key.js.map +1 -0
  321. package/dist/recognizers/url.d.ts +14 -0
  322. package/dist/recognizers/url.d.ts.map +1 -0
  323. package/dist/recognizers/url.js +121 -0
  324. package/dist/recognizers/url.js.map +1 -0
  325. package/dist/storage/browser.d.ts +13 -0
  326. package/dist/storage/browser.d.ts.map +1 -0
  327. package/dist/storage/browser.js +13 -0
  328. package/dist/storage/browser.js.map +1 -0
  329. package/dist/storage/in-memory.d.ts +60 -0
  330. package/dist/storage/in-memory.d.ts.map +1 -0
  331. package/dist/storage/in-memory.js +108 -0
  332. package/dist/storage/in-memory.js.map +1 -0
  333. package/dist/storage/index.d.ts +11 -0
  334. package/dist/storage/index.d.ts.map +1 -0
  335. package/dist/storage/index.js +11 -0
  336. package/dist/storage/index.js.map +1 -0
  337. package/dist/storage/indexeddb.d.ts +69 -0
  338. package/dist/storage/indexeddb.d.ts.map +1 -0
  339. package/dist/storage/indexeddb.js +274 -0
  340. package/dist/storage/indexeddb.js.map +1 -0
  341. package/dist/storage/session-base.d.ts +34 -0
  342. package/dist/storage/session-base.d.ts.map +1 -0
  343. package/dist/storage/session-base.js +122 -0
  344. package/dist/storage/session-base.js.map +1 -0
  345. package/dist/storage/session.d.ts +19 -0
  346. package/dist/storage/session.d.ts.map +1 -0
  347. package/dist/storage/session.js +31 -0
  348. package/dist/storage/session.js.map +1 -0
  349. package/dist/storage/sqlite.d.ts +80 -0
  350. package/dist/storage/sqlite.d.ts.map +1 -0
  351. package/dist/storage/sqlite.js +255 -0
  352. package/dist/storage/sqlite.js.map +1 -0
  353. package/dist/storage/types.d.ts +208 -0
  354. package/dist/storage/types.d.ts.map +1 -0
  355. package/dist/storage/types.js +6 -0
  356. package/dist/storage/types.js.map +1 -0
  357. package/dist/streaming/anonymizer-stream.d.ts +63 -0
  358. package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
  359. package/dist/streaming/anonymizer-stream.js +184 -0
  360. package/dist/streaming/anonymizer-stream.js.map +1 -0
  361. package/dist/streaming/index.d.ts +9 -0
  362. package/dist/streaming/index.d.ts.map +1 -0
  363. package/dist/streaming/index.js +8 -0
  364. package/dist/streaming/index.js.map +1 -0
  365. package/dist/streaming/sentence-buffer.d.ts +78 -0
  366. package/dist/streaming/sentence-buffer.d.ts.map +1 -0
  367. package/dist/streaming/sentence-buffer.js +239 -0
  368. package/dist/streaming/sentence-buffer.js.map +1 -0
  369. package/dist/streaming/stream-factory.d.ts +38 -0
  370. package/dist/streaming/stream-factory.d.ts.map +1 -0
  371. package/dist/streaming/stream-factory.js +69 -0
  372. package/dist/streaming/stream-factory.js.map +1 -0
  373. package/dist/streaming/types.d.ts +121 -0
  374. package/dist/streaming/types.d.ts.map +1 -0
  375. package/dist/streaming/types.js +5 -0
  376. package/dist/streaming/types.js.map +1 -0
  377. package/dist/types/index.d.ts +269 -0
  378. package/dist/types/index.d.ts.map +1 -0
  379. package/dist/types/index.js +95 -0
  380. package/dist/types/index.js.map +1 -0
  381. package/dist/types/pii-types.d.ts +64 -0
  382. package/dist/types/pii-types.d.ts.map +1 -0
  383. package/dist/types/pii-types.js +153 -0
  384. package/dist/types/pii-types.js.map +1 -0
  385. package/dist/utils/iban-checksum.d.ts +23 -0
  386. package/dist/utils/iban-checksum.d.ts.map +1 -0
  387. package/dist/utils/iban-checksum.js +106 -0
  388. package/dist/utils/iban-checksum.js.map +1 -0
  389. package/dist/utils/index.d.ts +11 -0
  390. package/dist/utils/index.d.ts.map +1 -0
  391. package/dist/utils/index.js +11 -0
  392. package/dist/utils/index.js.map +1 -0
  393. package/dist/utils/json-walk.d.ts +21 -0
  394. package/dist/utils/json-walk.d.ts.map +1 -0
  395. package/dist/utils/json-walk.js +44 -0
  396. package/dist/utils/json-walk.js.map +1 -0
  397. package/dist/utils/luhn.d.ts +17 -0
  398. package/dist/utils/luhn.d.ts.map +1 -0
  399. package/dist/utils/luhn.js +55 -0
  400. package/dist/utils/luhn.js.map +1 -0
  401. package/dist/utils/offsets.d.ts +86 -0
  402. package/dist/utils/offsets.d.ts.map +1 -0
  403. package/dist/utils/offsets.js +124 -0
  404. package/dist/utils/offsets.js.map +1 -0
  405. package/dist/utils/path.d.ts +34 -0
  406. package/dist/utils/path.d.ts.map +1 -0
  407. package/dist/utils/path.js +96 -0
  408. package/dist/utils/path.js.map +1 -0
  409. package/dist/utils/regex.d.ts +11 -0
  410. package/dist/utils/regex.d.ts.map +1 -0
  411. package/dist/utils/regex.js +14 -0
  412. package/dist/utils/regex.js.map +1 -0
  413. package/dist/utils/storage-browser.d.ts +51 -0
  414. package/dist/utils/storage-browser.d.ts.map +1 -0
  415. package/dist/utils/storage-browser.js +381 -0
  416. package/dist/utils/storage-browser.js.map +1 -0
  417. package/dist/utils/storage-node.d.ts +51 -0
  418. package/dist/utils/storage-node.d.ts.map +1 -0
  419. package/dist/utils/storage-node.js +153 -0
  420. package/dist/utils/storage-node.js.map +1 -0
  421. package/dist/utils/storage.browser.d.ts +75 -0
  422. package/dist/utils/storage.browser.d.ts.map +1 -0
  423. package/dist/utils/storage.browser.js +69 -0
  424. package/dist/utils/storage.browser.js.map +1 -0
  425. package/dist/utils/storage.d.ts +73 -0
  426. package/dist/utils/storage.d.ts.map +1 -0
  427. package/dist/utils/storage.js +69 -0
  428. package/dist/utils/storage.js.map +1 -0
  429. package/index.js +14 -13
  430. package/package.json +19 -5
@@ -0,0 +1,631 @@
1
+ /**
2
+ * Rehydra Fetch Wrapper
3
+ * Wraps the native fetch to anonymize outgoing LLM requests
4
+ * and rehydrate incoming LLM responses.
5
+ */
6
+ import { createAnonymizer } from "../core/anonymizer.js";
7
+ import { decryptPIIMap } from "../crypto/index.js";
8
+ import { rehydrate } from "../pipeline/tagger.js";
9
+ import { AnonymizerSessionImpl } from "../storage/session.js";
10
+ import { SSEParser, isSSEDone, serializeSSEEvent } from "./sse-parser.js";
11
+ import { detectProvider } from "./providers/index.js";
12
+ import { buildPIISystemInstruction } from "./system-instruction.js";
13
+ import { buildTagPrefix } from "../utils/regex.js";
14
+ import { accumulateToolStream, readToolResponse, toolResultStream } from "./tool-loop-stream.js";
15
+ import { DEFAULT_TAG_FORMAT } from "../types/index.js";
16
+ /** Headers to strip from proxied responses — the body is decompressed and may be modified. */
17
+ const STRIP_RESPONSE_HEADERS = ["content-encoding", "content-length"];
18
+ function stripResponseHeaders(headers) {
19
+ const cleaned = new Headers(headers);
20
+ for (const h of STRIP_RESPONSE_HEADERS) {
21
+ cleaned.delete(h);
22
+ }
23
+ return cleaned;
24
+ }
25
+ /**
26
+ * Returns the length of the longest proper prefix of `tagPrefix` that `text`
27
+ * ends with, or 0 if none. Used to hold back a partially-streamed tag prefix
28
+ * (e.g. a chunk ending in `"<P"` or `"<PI"`) so it isn't forwarded raw before
29
+ * the rest of the `<PII.../>` tag arrives in a later SSE chunk.
30
+ */
31
+ function trailingPartialTagPrefixLen(text, tagPrefix) {
32
+ for (let n = tagPrefix.length - 1; n >= 1; n--) {
33
+ if (text.endsWith(tagPrefix.slice(0, n)))
34
+ return n;
35
+ }
36
+ return 0;
37
+ }
38
+ let sessionCounter = 0;
39
+ function defaultGetSessionId() {
40
+ return `rehydra-proxy-${Date.now()}-${++sessionCounter}`;
41
+ }
42
+ function errorResponse(status, message) {
43
+ return new Response(JSON.stringify({
44
+ error: { message, type: "rehydra_proxy_error" },
45
+ }), {
46
+ status,
47
+ headers: { "Content-Type": "application/json" },
48
+ });
49
+ }
50
+ /**
51
+ * Creates a fetch-compatible function that automatically:
52
+ * 1. Anonymizes text in outgoing LLM API requests
53
+ * 2. Rehydrates text in incoming LLM API responses
54
+ *
55
+ * PII never leaves your infrastructure.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * import OpenAI from 'openai';
60
+ * import { createRehydraFetch, InMemoryKeyProvider, InMemoryPIIStorageProvider } from 'rehydra';
61
+ *
62
+ * const rehydraFetch = createRehydraFetch({
63
+ * keyProvider: new InMemoryKeyProvider(),
64
+ * piiStorageProvider: new InMemoryPIIStorageProvider(),
65
+ * });
66
+ *
67
+ * const openai = new OpenAI({ fetch: rehydraFetch });
68
+ *
69
+ * // PII is automatically anonymized before being sent to OpenAI
70
+ * const response = await openai.chat.completions.create({
71
+ * model: 'gpt-4',
72
+ * messages: [{ role: 'user', content: 'Email john@example.com about the meeting' }],
73
+ * });
74
+ * // Response is automatically rehydrated — contains original PII
75
+ * ```
76
+ */
77
+ export function createRehydraFetch(config) {
78
+ if (config.maxToolRounds !== undefined &&
79
+ (!Number.isSafeInteger(config.maxToolRounds) || config.maxToolRounds < 0)) {
80
+ throw new Error("maxToolRounds must be a nonnegative safe integer");
81
+ }
82
+ if (config.maxToolResponseBytes !== undefined &&
83
+ (!Number.isSafeInteger(config.maxToolResponseBytes) || config.maxToolResponseBytes <= 0)) {
84
+ throw new Error("maxToolResponseBytes must be a positive safe integer");
85
+ }
86
+ const anonymizer = createAnonymizer({
87
+ ...config.anonymizer,
88
+ keyProvider: config.keyProvider,
89
+ piiStorageProvider: config.piiStorageProvider,
90
+ });
91
+ let initialized = false;
92
+ const tagFormat = config.anonymizer?.tagFormat ?? DEFAULT_TAG_FORMAT;
93
+ const getSessionId = config.getSessionId ?? defaultGetSessionId;
94
+ const handleStreaming = config.handleStreaming !== false;
95
+ async function ensureInitialized() {
96
+ if (!initialized) {
97
+ await anonymizer.initialize();
98
+ initialized = true;
99
+ }
100
+ }
101
+ return async (input, init) => {
102
+ try {
103
+ await ensureInitialized();
104
+ }
105
+ catch (err) {
106
+ initialized = false; // Allow retry on next request
107
+ const msg = err instanceof Error ? err.message : "Initialization failed";
108
+ return errorResponse(503, `Rehydra proxy not ready: ${msg}`);
109
+ }
110
+ const request = new Request(input, init);
111
+ // Only intercept POST requests with JSON bodies (LLM API calls)
112
+ if (request.method !== "POST") {
113
+ return fetch(request);
114
+ }
115
+ const contentType = request.headers.get("content-type");
116
+ if (contentType === null || !contentType.includes("application/json")) {
117
+ return fetch(request);
118
+ }
119
+ // Detect the LLM provider
120
+ const provider = detectProvider(request.url, request.headers, config.provider);
121
+ // Parse request body
122
+ let body;
123
+ try {
124
+ body = await request.json();
125
+ }
126
+ catch {
127
+ return errorResponse(400, "Invalid JSON in request body");
128
+ }
129
+ // Get session ID for PII map persistence
130
+ const sessionId = await getSessionId(request);
131
+ // Create a session for this request
132
+ const session = new AnonymizerSessionImpl(anonymizer, sessionId, config.piiStorageProvider, config.keyProvider);
133
+ try {
134
+ // Extract and anonymize text from the request
135
+ const texts = provider.extractRequestText(body);
136
+ const anonymizedTexts = [];
137
+ let piiDetected = false;
138
+ const countsByType = {};
139
+ let totalEntities = 0;
140
+ for (let i = 0; i < texts.length; i++) {
141
+ const result = await session.anonymize(texts[i], config.locale, config.policy);
142
+ anonymizedTexts.push(result.anonymizedText);
143
+ if (result.anonymizedText !== texts[i]) {
144
+ piiDetected = true;
145
+ }
146
+ for (const [type, count] of Object.entries(result.stats.countsByType)) {
147
+ if (count > 0) {
148
+ countsByType[type] = (countsByType[type] ?? 0) + count;
149
+ totalEntities += count;
150
+ }
151
+ }
152
+ }
153
+ // Report what was anonymized (types and counts only — never raw PII)
154
+ if (config.onAnonymize !== undefined) {
155
+ config.onAnonymize({
156
+ method: request.method,
157
+ url: request.url,
158
+ countsByType,
159
+ totalEntities,
160
+ });
161
+ }
162
+ // Rebuild the request body with anonymized text
163
+ let anonymizedBody = provider.rebuildRequestBody(body, anonymizedTexts);
164
+ // Inject PII handling instruction when anonymization replaced something.
165
+ // Can be disabled with systemInstruction: false, or overridden with a custom string.
166
+ if (piiDetected &&
167
+ config.systemInstruction !== false &&
168
+ provider.injectSystemInstruction !== undefined) {
169
+ const instruction = typeof config.systemInstruction === "string"
170
+ ? config.systemInstruction
171
+ : buildPIISystemInstruction(tagFormat);
172
+ anonymizedBody = provider.injectSystemInstruction(anonymizedBody, instruction);
173
+ }
174
+ // Forward the anonymized request
175
+ const upstreamRequest = new Request(request, {
176
+ body: JSON.stringify(anonymizedBody),
177
+ });
178
+ let response;
179
+ try {
180
+ response = await fetch(upstreamRequest);
181
+ }
182
+ catch (err) {
183
+ const msg = err instanceof Error ? err.message : "Upstream request failed";
184
+ return errorResponse(502, `Upstream LLM unreachable: ${msg}`);
185
+ }
186
+ if (!response.ok)
187
+ return response;
188
+ // Determine if the response is a streaming SSE response
189
+ const responseContentType = response.headers.get("content-type");
190
+ const isSSE = handleStreaming &&
191
+ provider.isStreamingRequest(body) &&
192
+ responseContentType !== null &&
193
+ responseContentType.includes("text/event-stream");
194
+ if (isSSE && response.body !== null) {
195
+ if (config.onToolCall !== undefined && provider.streamingToolLoop !== undefined &&
196
+ provider.hasResponseToolCalls !== undefined && provider.extractResponseToolCallInfo !== undefined &&
197
+ provider.extractMessages !== undefined && provider.buildToolLoopBody !== undefined && response.ok) {
198
+ return await handleStreamingToolLoop(response, anonymizedBody, session, provider, config, request);
199
+ }
200
+ return rehydrateSSEResponse(response, session, provider, config);
201
+ }
202
+ // Tool execution loop: when onToolCall is configured and provider
203
+ // supports it, intercept tool call responses and run them server-side
204
+ if (config.onToolCall !== undefined &&
205
+ provider.hasResponseToolCalls !== undefined &&
206
+ provider.extractResponseToolCallInfo !== undefined &&
207
+ provider.extractMessages !== undefined &&
208
+ provider.buildToolLoopBody !== undefined) {
209
+ return await handleToolLoop(response, anonymizedBody, session, provider, config, request);
210
+ }
211
+ return rehydrateJSONResponse(response, session, provider);
212
+ }
213
+ catch (err) {
214
+ if (request.signal.aborted)
215
+ throw err;
216
+ const msg = err instanceof Error ? err.message : "Internal proxy error";
217
+ return errorResponse(500, msg);
218
+ }
219
+ };
220
+ }
221
+ /** Buffer and validate the first stream before allowing any tool side effects. */
222
+ async function handleStreamingToolLoop(response, anonymizedBody, session, provider, config, request) {
223
+ const adapter = provider.streamingToolLoop;
224
+ let text;
225
+ let complete;
226
+ try {
227
+ text = await readToolResponse(response, config.maxToolResponseBytes ?? 8 * 1024 * 1024, request.signal);
228
+ complete = accumulateToolStream(text, adapter);
229
+ }
230
+ catch (err) {
231
+ if (request.signal.aborted)
232
+ throw err;
233
+ return errorResponse(502, err instanceof Error ? err.message : "Invalid streamed tool response");
234
+ }
235
+ if (!provider.hasResponseToolCalls(complete)) {
236
+ return rehydrateSSEResponse(new Response(text, {
237
+ status: response.status, headers: stripResponseHeaders(response.headers),
238
+ }), session, provider, config);
239
+ }
240
+ const headers = stripResponseHeaders(response.headers);
241
+ headers.set("content-type", "application/json");
242
+ const finalResponse = await handleToolLoop(new Response(JSON.stringify(complete), {
243
+ status: response.status, headers,
244
+ }), anonymizedBody, session, provider, config, request);
245
+ if (!finalResponse.ok)
246
+ return finalResponse;
247
+ let finalBody;
248
+ try {
249
+ finalBody = await finalResponse.json();
250
+ }
251
+ catch {
252
+ return errorResponse(502, "Invalid JSON in tool-loop response");
253
+ }
254
+ return toolResultStream(finalBody, finalResponse, adapter);
255
+ }
256
+ /**
257
+ * Rehydrate a non-streaming JSON response.
258
+ */
259
+ async function rehydrateJSONResponse(response, session, provider) {
260
+ // Read raw text so we can fall back to it if JSON parsing fails
261
+ const rawText = await response.text();
262
+ let body;
263
+ try {
264
+ body = JSON.parse(rawText);
265
+ }
266
+ catch {
267
+ // Upstream returned invalid JSON — pass through unchanged
268
+ return new Response(rawText, {
269
+ status: response.status,
270
+ statusText: response.statusText,
271
+ headers: stripResponseHeaders(response.headers),
272
+ });
273
+ }
274
+ return rehydrateJSONResponseFromBody(body, response, session, provider);
275
+ }
276
+ /**
277
+ * Rehydrate a pre-parsed JSON response body.
278
+ */
279
+ async function rehydrateJSONResponseFromBody(body, response, session, provider) {
280
+ // Extract response text and rehydrate
281
+ const responseTexts = provider.extractResponseText(body);
282
+ const rehydratedTexts = [];
283
+ for (const text of responseTexts) {
284
+ const rehydrated = await session.rehydrate(text);
285
+ rehydratedTexts.push(rehydrated);
286
+ }
287
+ // Rebuild response body
288
+ let rehydratedBody = provider.rebuildResponseBody(body, rehydratedTexts);
289
+ // Rehydrate tool call arguments
290
+ if (provider.extractResponseToolCalls !== undefined &&
291
+ provider.rebuildResponseToolCalls !== undefined) {
292
+ const toolCallArgs = provider.extractResponseToolCalls(rehydratedBody);
293
+ if (toolCallArgs.length > 0) {
294
+ const rehydratedArgs = [];
295
+ for (const arg of toolCallArgs) {
296
+ const rehydrated = await session.rehydrate(arg);
297
+ rehydratedArgs.push(rehydrated);
298
+ }
299
+ rehydratedBody = provider.rebuildResponseToolCalls(rehydratedBody, rehydratedArgs);
300
+ }
301
+ }
302
+ return new Response(JSON.stringify(rehydratedBody), {
303
+ status: response.status,
304
+ statusText: response.statusText,
305
+ headers: response.headers,
306
+ });
307
+ }
308
+ /**
309
+ * Handle multi-round tool execution loop.
310
+ *
311
+ * When the LLM returns tool calls, this function:
312
+ * 1. Rehydrates tool call arguments (restores real PII)
313
+ * 2. Calls the user's onToolCall callback for each tool call
314
+ * 3. Anonymizes the result
315
+ * 4. Appends assistant + tool result messages to the conversation
316
+ * 5. Sends the next request (without re-anonymizing existing messages)
317
+ * 6. Repeats until the LLM returns a final response or maxToolRounds is hit
318
+ */
319
+ async function handleToolLoop(initialResponse, anonymizedBody, session, provider, config, originalRequest) {
320
+ const maxRounds = config.maxToolRounds ?? 10;
321
+ // Parse the initial response
322
+ const readResponse = (response) => readToolResponse(response, config.maxToolResponseBytes ?? 8 * 1024 * 1024, originalRequest.signal);
323
+ const rawText = await readResponse(initialResponse);
324
+ let currentResponse;
325
+ try {
326
+ currentResponse = JSON.parse(rawText);
327
+ }
328
+ catch {
329
+ return new Response(rawText, {
330
+ status: initialResponse.status,
331
+ statusText: initialResponse.statusText,
332
+ headers: stripResponseHeaders(initialResponse.headers),
333
+ });
334
+ }
335
+ // If the first response doesn't have tool calls, just rehydrate normally
336
+ if (!provider.hasResponseToolCalls(currentResponse)) {
337
+ return rehydrateJSONResponseFromBody(currentResponse, initialResponse, session, provider);
338
+ }
339
+ // Track the anonymized messages array across rounds
340
+ let currentMessages = provider.extractMessages(anonymizedBody);
341
+ let lastUpstreamResponse = initialResponse;
342
+ let round = 0;
343
+ while (round < maxRounds &&
344
+ provider.hasResponseToolCalls(currentResponse)) {
345
+ round++;
346
+ // Extract tool call details (arguments are still in anonymized form)
347
+ const toolCallInfos = provider.extractResponseToolCallInfo(currentResponse);
348
+ // Rehydrate arguments and invoke the user's callback
349
+ const toolResults = [];
350
+ for (const tc of toolCallInfos) {
351
+ // Rehydrate the arguments string to restore real PII
352
+ originalRequest.signal.throwIfAborted();
353
+ let parsedArgs;
354
+ try {
355
+ const args = JSON.parse(tc.arguments);
356
+ parsedArgs = await session.rehydrateJson(args);
357
+ }
358
+ catch {
359
+ parsedArgs = { raw: await session.rehydrate(tc.arguments) };
360
+ }
361
+ originalRequest.signal.throwIfAborted();
362
+ // Call the user's tool handler with real PII
363
+ const result = await config.onToolCall(tc.name, parsedArgs, tc.id);
364
+ // Anonymize the result using the same session (maintains PII ID continuity)
365
+ originalRequest.signal.throwIfAborted();
366
+ const anonymizedResult = await session.anonymizeJson(result, config.locale, config.policy);
367
+ toolResults.push({
368
+ toolCallId: tc.id,
369
+ content: typeof anonymizedResult === "string"
370
+ ? anonymizedResult
371
+ : JSON.stringify(anonymizedResult),
372
+ });
373
+ }
374
+ // Anonymize the assistant's tool call arguments before appending.
375
+ // The LLM may have generated real-looking PII in tool_use inputs
376
+ // instead of echoing back the PII tags it received.
377
+ let sanitizedResponse = currentResponse;
378
+ if (provider.extractResponseToolCalls !== undefined &&
379
+ provider.rebuildResponseToolCalls !== undefined) {
380
+ const rawArgs = provider.extractResponseToolCalls(currentResponse);
381
+ if (rawArgs.length > 0) {
382
+ const anonymizedArgs = [];
383
+ for (const arg of rawArgs) {
384
+ let parsed;
385
+ try {
386
+ parsed = JSON.parse(arg);
387
+ }
388
+ catch {
389
+ parsed = arg;
390
+ }
391
+ const anonymized = await session.anonymizeJson(parsed);
392
+ anonymizedArgs.push(typeof anonymized === "string"
393
+ ? anonymized
394
+ : JSON.stringify(anonymized));
395
+ }
396
+ sanitizedResponse = provider.rebuildResponseToolCalls(currentResponse, anonymizedArgs);
397
+ }
398
+ }
399
+ // Build the next request body (no re-anonymization — messages are already anonymized)
400
+ const nextBody = provider.buildToolLoopBody(anonymizedBody, currentMessages, sanitizedResponse, toolResults);
401
+ // Update message array for next round
402
+ currentMessages = provider.extractMessages(nextBody);
403
+ // Send the next request to the LLM
404
+ const nextRequest = new Request(originalRequest, {
405
+ body: JSON.stringify(nextBody),
406
+ });
407
+ let nextResponse;
408
+ try {
409
+ nextResponse = await fetch(nextRequest);
410
+ }
411
+ catch (err) {
412
+ const msg = err instanceof Error ? err.message : "Upstream request failed";
413
+ return errorResponse(502, `Upstream LLM unreachable: ${msg}`);
414
+ }
415
+ lastUpstreamResponse = nextResponse;
416
+ // Parse the new response
417
+ const nextRawText = await readResponse(nextResponse);
418
+ if (!nextResponse.ok)
419
+ return new Response(nextRawText, {
420
+ status: nextResponse.status, statusText: nextResponse.statusText,
421
+ headers: stripResponseHeaders(nextResponse.headers),
422
+ });
423
+ try {
424
+ currentResponse = JSON.parse(nextRawText);
425
+ }
426
+ catch {
427
+ return new Response(nextRawText, {
428
+ status: nextResponse.status,
429
+ statusText: nextResponse.statusText,
430
+ headers: stripResponseHeaders(nextResponse.headers),
431
+ });
432
+ }
433
+ }
434
+ // Rehydrate and return the final response
435
+ return rehydrateJSONResponseFromBody(currentResponse, lastUpstreamResponse, session, provider);
436
+ }
437
+ /**
438
+ * Rehydrate a streaming SSE response.
439
+ * Returns a new Response with a transformed body stream.
440
+ */
441
+ function rehydrateSSEResponse(response, session, provider, config) {
442
+ const sseParser = new SSEParser();
443
+ const decoder = new TextDecoder();
444
+ const encoder = new TextEncoder();
445
+ const tagFormat = config.anonymizer?.tagFormat ?? DEFAULT_TAG_FORMAT;
446
+ const tagPrefix = buildTagPrefix(tagFormat);
447
+ // Buffer for incomplete PII tags that span SSE chunks (content)
448
+ let tagBuffer = "";
449
+ // Per-index buffers for tool call argument fragments
450
+ const toolCallBuffers = new Map();
451
+ // Last seen SSE event per tool call index (used as template during flush)
452
+ const toolCallLastEvent = new Map();
453
+ // We load the PII map once, lazily
454
+ let piiMapPromise = null;
455
+ function getPiiMap() {
456
+ if (piiMapPromise === null) {
457
+ piiMapPromise = (async () => {
458
+ const stored = await config.piiStorageProvider.load(session.sessionId);
459
+ if (stored === null)
460
+ return new Map();
461
+ const key = await config.keyProvider.getKey();
462
+ return decryptPIIMap(stored.piiMap, key);
463
+ })();
464
+ }
465
+ return piiMapPromise;
466
+ }
467
+ const transformStream = new TransformStream({
468
+ async transform(chunk, controller) {
469
+ const text = decoder.decode(chunk, { stream: true });
470
+ const events = sseParser.parse(text);
471
+ for (const event of events) {
472
+ if (isSSEDone(event.data)) {
473
+ controller.enqueue(encoder.encode(serializeSSEEvent(event)));
474
+ continue;
475
+ }
476
+ let parsed;
477
+ try {
478
+ parsed = JSON.parse(event.data);
479
+ }
480
+ catch {
481
+ // Not JSON — pass through as-is
482
+ controller.enqueue(encoder.encode(serializeSSEEvent(event)));
483
+ continue;
484
+ }
485
+ // Process content delta and tool call deltas from this event.
486
+ // In practice, LLM APIs send one or the other per event, but we
487
+ // handle both defensively by chaining rebuilds on the same parsed data.
488
+ let handled = false;
489
+ let rebuiltData = parsed;
490
+ // Content delta
491
+ const delta = provider.extractSSEDelta(parsed);
492
+ if (delta !== null) {
493
+ handled = true;
494
+ const fullText = tagBuffer + delta;
495
+ const incompleteTagIdx = fullText.lastIndexOf(tagPrefix);
496
+ const lastCloseIdx = fullText.lastIndexOf(tagFormat.close);
497
+ let textToRehydrate;
498
+ if (incompleteTagIdx !== -1 &&
499
+ (lastCloseIdx === -1 || lastCloseIdx < incompleteTagIdx)) {
500
+ textToRehydrate = fullText.slice(0, incompleteTagIdx);
501
+ tagBuffer = fullText.slice(incompleteTagIdx);
502
+ }
503
+ else {
504
+ const partialLen = trailingPartialTagPrefixLen(fullText, tagPrefix);
505
+ textToRehydrate = fullText.slice(0, fullText.length - partialLen);
506
+ tagBuffer = fullText.slice(fullText.length - partialLen);
507
+ }
508
+ if (textToRehydrate.length > 0) {
509
+ const piiMap = await getPiiMap();
510
+ const rehydrated = rehydrate(textToRehydrate, piiMap, false, tagFormat);
511
+ rebuiltData = provider.rebuildSSEDelta(rebuiltData, rehydrated);
512
+ }
513
+ }
514
+ // Tool call deltas
515
+ if (provider.extractSSEToolCallDeltas !== undefined && provider.rebuildSSEToolCallDeltas !== undefined) {
516
+ const toolDeltas = provider.extractSSEToolCallDeltas(parsed);
517
+ if (toolDeltas !== null && toolDeltas.length > 0) {
518
+ handled = true;
519
+ const rehydratedArgs = new Map();
520
+ for (const td of toolDeltas) {
521
+ toolCallLastEvent.set(td.index, {
522
+ sseEvent: event.event,
523
+ parsed,
524
+ });
525
+ const existing = toolCallBuffers.get(td.index) ?? "";
526
+ const fullText = existing + td.arguments;
527
+ const incompleteTagIdx = fullText.lastIndexOf(tagPrefix);
528
+ const lastCloseIdx = fullText.lastIndexOf(tagFormat.close);
529
+ let textToRehydrate;
530
+ if (incompleteTagIdx !== -1 &&
531
+ (lastCloseIdx === -1 || lastCloseIdx < incompleteTagIdx)) {
532
+ textToRehydrate = fullText.slice(0, incompleteTagIdx);
533
+ toolCallBuffers.set(td.index, fullText.slice(incompleteTagIdx));
534
+ }
535
+ else {
536
+ const partialLen = trailingPartialTagPrefixLen(fullText, tagPrefix);
537
+ textToRehydrate = fullText.slice(0, fullText.length - partialLen);
538
+ toolCallBuffers.set(td.index, fullText.slice(fullText.length - partialLen));
539
+ }
540
+ if (textToRehydrate.length > 0) {
541
+ const piiMap = await getPiiMap();
542
+ const rehydrated = rehydrate(textToRehydrate, piiMap, false, tagFormat);
543
+ rehydratedArgs.set(td.index, rehydrated);
544
+ }
545
+ }
546
+ if (rehydratedArgs.size > 0) {
547
+ rebuiltData = provider.rebuildSSEToolCallDeltas(rebuiltData, rehydratedArgs);
548
+ }
549
+ }
550
+ }
551
+ if (handled) {
552
+ if (rebuiltData !== parsed) {
553
+ controller.enqueue(encoder.encode(serializeSSEEvent({
554
+ event: event.event,
555
+ data: JSON.stringify(rebuiltData),
556
+ })));
557
+ }
558
+ continue;
559
+ }
560
+ // Check for tool call block stop — flush buffer before forwarding
561
+ if (provider.extractSSEToolCallStop !== undefined &&
562
+ provider.rebuildSSEToolCallDeltas !== undefined) {
563
+ const stopIndex = provider.extractSSEToolCallStop(parsed);
564
+ if (stopIndex !== null) {
565
+ const buffer = toolCallBuffers.get(stopIndex) ?? "";
566
+ if (buffer.length > 0) {
567
+ const piiMap = await getPiiMap();
568
+ const rehydrated = rehydrate(buffer, piiMap, false, tagFormat);
569
+ if (rehydrated.length > 0) {
570
+ const last = toolCallLastEvent.get(stopIndex);
571
+ if (last !== undefined) {
572
+ const rebuilt = provider.rebuildSSEToolCallDeltas(last.parsed, new Map([[stopIndex, rehydrated]]));
573
+ controller.enqueue(encoder.encode(serializeSSEEvent({
574
+ event: last.sseEvent,
575
+ data: JSON.stringify(rebuilt),
576
+ })));
577
+ }
578
+ }
579
+ toolCallBuffers.delete(stopIndex);
580
+ toolCallLastEvent.delete(stopIndex);
581
+ }
582
+ }
583
+ }
584
+ // Pass through as-is
585
+ controller.enqueue(encoder.encode(serializeSSEEvent(event)));
586
+ }
587
+ },
588
+ async flush(controller) {
589
+ const events = sseParser.flush();
590
+ for (const event of events) {
591
+ controller.enqueue(encoder.encode(serializeSSEEvent(event)));
592
+ }
593
+ if (tagBuffer.length > 0) {
594
+ const piiMap = await getPiiMap();
595
+ const rehydrated = rehydrate(tagBuffer, piiMap, false, tagFormat);
596
+ if (rehydrated.length > 0) {
597
+ controller.enqueue(encoder.encode(`data: ${JSON.stringify({ content: rehydrated })}\n\n`));
598
+ }
599
+ tagBuffer = "";
600
+ }
601
+ // Flush remaining tool call buffers
602
+ if (provider.rebuildSSEToolCallDeltas !== undefined) {
603
+ for (const [index, buffer] of toolCallBuffers) {
604
+ if (buffer.length > 0) {
605
+ const piiMap = await getPiiMap();
606
+ const rehydrated = rehydrate(buffer, piiMap, false, tagFormat);
607
+ if (rehydrated.length > 0) {
608
+ const last = toolCallLastEvent.get(index);
609
+ if (last !== undefined) {
610
+ const rebuilt = provider.rebuildSSEToolCallDeltas(last.parsed, new Map([[index, rehydrated]]));
611
+ controller.enqueue(encoder.encode(serializeSSEEvent({
612
+ event: last.sseEvent,
613
+ data: JSON.stringify(rebuilt),
614
+ })));
615
+ }
616
+ }
617
+ }
618
+ }
619
+ toolCallBuffers.clear();
620
+ toolCallLastEvent.clear();
621
+ }
622
+ },
623
+ });
624
+ const transformedBody = response.body.pipeThrough(transformStream);
625
+ return new Response(transformedBody, {
626
+ status: response.status,
627
+ statusText: response.statusText,
628
+ headers: response.headers,
629
+ });
630
+ }
631
+ //# sourceMappingURL=rehydra-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehydra-fetch.js","sourceRoot":"","sources":["../../src/proxy/rehydra-fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,8FAA8F;AAC9F,MAAM,sBAAsB,GAAG,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;AAEtE,SAAS,oBAAoB,CAAC,OAAgB;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,sBAAsB,EAAE,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B,CAAC,IAAY,EAAE,SAAiB;IAClE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAS,mBAAmB;IAC1B,OAAO,iBAAiB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,MAAc,EAAE,OAAe;IACpD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC;QACb,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE;KAChD,CAAC,EACF;QACE,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA0B;IAE1B,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QACpC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS;QAC3C,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,GAAG,MAAM,CAAC,UAAU;QACpB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC,CAAC;IACH,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAErE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,mBAAmB,CAAC;IAChE,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;IAEzD,KAAK,UAAU,iBAAiB;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;YAC9B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,EACV,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,iBAAiB,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,GAAG,KAAK,CAAC,CAAC,8BAA8B;YACnD,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAC/D,OAAO,aAAa,CAAC,GAAG,EAAE,4BAA4B,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEzC,gEAAgE;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxD,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACtE,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAC7B,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,OAAO,EACf,MAAM,CAAC,QAAQ,CAChB,CAAC;QAEF,qBAAqB;QACrB,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;QAC5D,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAE9C,oCAAoC;QACpC,MAAM,OAAO,GAAG,IAAI,qBAAqB,CACvC,UAAU,EACV,SAAS,EACT,MAAM,CAAC,kBAAkB,EACzB,MAAM,CAAC,WAAW,CACnB,CAAC;QAEF,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CACpC,KAAK,CAAC,CAAC,CAAE,EACT,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,MAAM,CACd,CAAC;gBACF,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvC,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;oBACtE,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;wBACd,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;wBACvD,aAAa,IAAI,KAAK,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qEAAqE;YACrE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,CAAC,WAAW,CAAC;oBACjB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,YAAY;oBACZ,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;YAED,gDAAgD;YAChD,IAAI,cAAc,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAExE,yEAAyE;YACzE,qFAAqF;YACrF,IACE,WAAW;gBACX,MAAM,CAAC,iBAAiB,KAAK,KAAK;gBAClC,QAAQ,CAAC,uBAAuB,KAAK,SAAS,EAC9C,CAAC;gBACD,MAAM,WAAW,GACf,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ;oBAC1C,CAAC,CAAC,MAAM,CAAC,iBAAiB;oBAC1B,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;gBAC3C,cAAc,GAAG,QAAQ,CAAC,uBAAuB,CAC/C,cAAc,EACd,WAAW,CACZ,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE;gBAC3C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;aACrC,CAAC,CAAC;YAEH,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;gBACjE,OAAO,aAAa,CAAC,GAAG,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAC;YAElC,wDAAwD;YACxD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjE,MAAM,KAAK,GACT,eAAe;gBACf,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBACjC,mBAAmB,KAAK,IAAI;gBAC5B,mBAAmB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAEpD,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACpC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS;oBAC7E,QAAQ,CAAC,oBAAoB,KAAK,SAAS,IAAI,QAAQ,CAAC,2BAA2B,KAAK,SAAS;oBACjG,QAAQ,CAAC,eAAe,KAAK,SAAS,IAAI,QAAQ,CAAC,iBAAiB,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACpG,OAAO,MAAM,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACrG,CAAC;gBACD,OAAO,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACnE,CAAC;YAED,kEAAkE;YAClE,sEAAsE;YACtE,IACE,MAAM,CAAC,UAAU,KAAK,SAAS;gBAC/B,QAAQ,CAAC,oBAAoB,KAAK,SAAS;gBAC3C,QAAQ,CAAC,2BAA2B,KAAK,SAAS;gBAClD,QAAQ,CAAC,eAAe,KAAK,SAAS;gBACtC,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EACxC,CAAC;gBACD,OAAO,MAAM,cAAc,CACzB,QAAQ,EACR,cAAc,EACd,OAAO,EACP,QAAQ,EACR,MAAM,EACN,OAAO,CACR,CAAC;YACJ,CAAC;YAED,OAAO,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,GAAG,CAAC;YACtC,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAC9D,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,uBAAuB,CACpC,QAAkB,EAClB,cAAuB,EACvB,OAA8B,EAC9B,QAA4B,EAC5B,MAA0B,EAC1B,OAAgB;IAEhB,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAkB,CAAC;IAC5C,IAAI,IAAY,CAAC;IACjB,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,oBAAoB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxG,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,GAAG,CAAC;QACtC,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;IACnG,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,oBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,oBAAoB,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE;YAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC;SACzE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;QAChF,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO;KACjC,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC,aAAa,CAAC,EAAE;QAAE,OAAO,aAAa,CAAC;IAC5C,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAClC,QAAkB,EAClB,OAA8B,EAC9B,QAA4B;IAE5B,gEAAgE;IAChE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;QAC1D,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,6BAA6B,CAC1C,IAAa,EACb,QAAkB,EAClB,OAA8B,EAC9B,QAA4B;IAE5B,sCAAsC;IACtC,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAED,wBAAwB;IACxB,IAAI,cAAc,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAEzE,gCAAgC;IAChC,IACE,QAAQ,CAAC,wBAAwB,KAAK,SAAS;QAC/C,QAAQ,CAAC,wBAAwB,KAAK,SAAS,EAC/C,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAChD,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;YACD,cAAc,GAAG,QAAQ,CAAC,wBAAwB,CAChD,cAAc,EACd,cAAc,CACf,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;QAClD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,KAAK,UAAU,cAAc,CAC3B,eAAyB,EACzB,cAAuB,EACvB,OAA8B,EAC9B,QAA4B,EAC5B,MAA0B,EAC1B,eAAwB;IAExB,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IAE7C,6BAA6B;IAC7B,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAmB,EAAE,CAC3D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,oBAAoB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACrG,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,eAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE;YAC3B,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,OAAO,EAAE,oBAAoB,CAAC,eAAe,CAAC,OAAO,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,QAAQ,CAAC,oBAAqB,CAAC,eAAe,CAAC,EAAE,CAAC;QACrD,OAAO,6BAA6B,CAClC,eAAe,EACf,eAAe,EACf,OAAO,EACP,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,eAAe,GAAG,QAAQ,CAAC,eAAgB,CAAC,cAAc,CAAC,CAAC;IAChE,IAAI,oBAAoB,GAAG,eAAe,CAAC;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OACE,KAAK,GAAG,SAAS;QACjB,QAAQ,CAAC,oBAAqB,CAAC,eAAe,CAAC,EAC/C,CAAC;QACD,KAAK,EAAE,CAAC;QAER,qEAAqE;QACrE,MAAM,aAAa,GACjB,QAAQ,CAAC,2BAA4B,CAAC,eAAe,CAAC,CAAC;QAEzD,qDAAqD;QACrD,MAAM,WAAW,GAAwB,EAAE,CAAC;QAC5C,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,qDAAqD;YACrD,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,IAAI,UAAmC,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAA4B,CAAC;gBACjE,UAAU,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,CAAC;YACD,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAExC,6CAA6C;YAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAEpE,4EAA4E;YAC5E,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAE3F,WAAW,CAAC,IAAI,CAAC;gBACf,UAAU,EAAE,EAAE,CAAC,EAAE;gBACjB,OAAO,EACL,OAAO,gBAAgB,KAAK,QAAQ;oBAClC,CAAC,CAAC,gBAAgB;oBAClB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;QAED,kEAAkE;QAClE,iEAAiE;QACjE,oDAAoD;QACpD,IAAI,iBAAiB,GAAG,eAAe,CAAC;QACxC,IACE,QAAQ,CAAC,wBAAwB,KAAK,SAAS;YAC/C,QAAQ,CAAC,wBAAwB,KAAK,SAAS,EAC/C,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;YACnE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,cAAc,GAAa,EAAE,CAAC;gBACpC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,IAAI,MAAe,CAAC;oBACpB,IAAI,CAAC;wBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3B,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,GAAG,GAAG,CAAC;oBACf,CAAC;oBACD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBACvD,cAAc,CAAC,IAAI,CACjB,OAAO,UAAU,KAAK,QAAQ;wBAC5B,CAAC,CAAC,UAAU;wBACZ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAC/B,CAAC;gBACJ,CAAC;gBACD,iBAAiB,GAAG,QAAQ,CAAC,wBAAwB,CACnD,eAAe,EACf,cAAc,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAED,sFAAsF;QACtF,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAkB,CAC1C,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,CACZ,CAAC;QAEF,sCAAsC;QACtC,eAAe,GAAG,QAAQ,CAAC,eAAgB,CAAC,QAAQ,CAAC,CAAC;QAEtD,mCAAmC;QACnC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,eAAe,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SAC/B,CAAC,CAAC;QAEH,IAAI,YAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACjE,OAAO,aAAa,CAAC,GAAG,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,oBAAoB,GAAG,YAAY,CAAC;QAEpC,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,CAAC,EAAE;YAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE;gBACrD,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU;gBAChE,OAAO,EAAE,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC;aACpD,CAAC,CAAC;QACH,IAAI,CAAC;YACH,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE;gBAC/B,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,OAAO,EAAE,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,OAAO,6BAA6B,CAClC,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,QAAQ,CACT,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAC3B,QAAkB,EAClB,OAA8B,EAC9B,QAA4B,EAC5B,MAA0B;IAE1B,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,SAAS,IAAI,kBAAkB,CAAC;IACrE,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE5C,gEAAgE;IAChE,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,qDAAqD;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAG9B,CAAC;IAEJ,mCAAmC;IACnC,IAAI,aAAa,GAA8B,IAAI,CAAC;IAEpD,SAAS,SAAS;QAChB,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,aAAa,GAAG,CAAC,KAAK,IAAwB,EAAE;gBAC9C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACvE,IAAI,MAAM,KAAK,IAAI;oBAAE,OAAO,IAAI,GAAG,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC9C,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,eAAe,CAAyB;QAClE,KAAK,CAAC,SAAS,CACb,KAAiB,EACjB,UAAwD;YAExD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBAED,IAAI,MAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBAAC,MAAM,CAAC;oBACP,gCAAgC;oBAChC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7D,SAAS;gBACX,CAAC;gBAED,8DAA8D;gBAC9D,gEAAgE;gBAChE,wEAAwE;gBACxE,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,WAAW,GAAY,MAAM,CAAC;gBAElC,gBAAgB;gBAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;oBACnC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAE3D,IAAI,eAAuB,CAAC;oBAC5B,IACE,gBAAgB,KAAK,CAAC,CAAC;wBACvB,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,GAAG,gBAAgB,CAAC,EACxD,CAAC;wBACD,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;wBACtD,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBACpE,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;wBAClE,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;oBAC3D,CAAC;oBAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;wBACjC,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;wBACxE,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBAED,mBAAmB;gBACnB,IAAI,QAAQ,CAAC,wBAAwB,KAAK,SAAS,IAAI,QAAQ,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;oBACvG,MAAM,UAAU,GAAG,QAAQ,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;oBAC7D,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjD,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;wBAEjD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;4BAC5B,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;gCAC9B,QAAQ,EAAE,KAAK,CAAC,KAAK;gCACrB,MAAM;6BACP,CAAC,CAAC;4BACH,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;4BACrD,MAAM,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC;4BAEzC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;4BACzD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAE3D,IAAI,eAAuB,CAAC;4BAC5B,IACE,gBAAgB,KAAK,CAAC,CAAC;gCACvB,CAAC,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,GAAG,gBAAgB,CAAC,EACxD,CAAC;gCACD,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;gCACtD,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;4BAClE,CAAC;iCAAM,CAAC;gCACN,MAAM,UAAU,GAAG,2BAA2B,CAC5C,QAAQ,EACR,SAAS,CACV,CAAC;gCACF,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;gCAClE,eAAe,CAAC,GAAG,CACjB,EAAE,CAAC,KAAK,EACR,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAC7C,CAAC;4BACJ,CAAC;4BAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;gCACjC,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gCACxE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;4BAC3C,CAAC;wBACH,CAAC;wBAED,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;4BAC5B,WAAW,GAAG,QAAQ,CAAC,wBAAwB,CAC7C,WAAW,EACX,cAAc,CACf,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;wBAC3B,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CACZ,iBAAiB,CAAC;4BAChB,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;yBAClC,CAAC,CACH,CACF,CAAC;oBACJ,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,kEAAkE;gBAClE,IACE,QAAQ,CAAC,sBAAsB,KAAK,SAAS;oBAC7C,QAAQ,CAAC,wBAAwB,KAAK,SAAS,EAC/C,CAAC;oBACD,MAAM,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBAC1D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;wBACvB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;wBACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;4BACjC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;4BAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gCAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oCACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CACnC,CAAC;oCACF,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CACZ,iBAAiB,CAAC;wCAChB,KAAK,EAAE,IAAI,CAAC,QAAQ;wCACpB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;qCAC9B,CAAC,CACH,CACF,CAAC;gCACJ,CAAC;4BACH,CAAC;4BACD,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;4BAClC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,qBAAqB;gBACrB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CACT,UAAwD;YAExD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;gBAClE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,CACvE,CAAC;gBACJ,CAAC;gBACD,SAAS,GAAG,EAAE,CAAC;YACjB,CAAC;YAED,oCAAoC;YACpC,IACE,QAAQ,CAAC,wBAAwB,KAAK,SAAS,EAC/C,CAAC;gBACD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;oBAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;wBACjC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;wBAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;4BAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gCACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,wBAAwB,CAC/C,IAAI,CAAC,MAAM,EACX,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAC/B,CAAC;gCACF,UAAU,CAAC,OAAO,CAChB,OAAO,CAAC,MAAM,CACZ,iBAAiB,CAAC;oCAChB,KAAK,EAAE,IAAI,CAAC,QAAQ;oCACpB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iCAC9B,CAAC,CACH,CACF,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,KAAK,EAAE,CAAC;gBACxB,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAEpE,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE;QACnC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC"}