@cartanova/qgrid-cli 2.7.1 → 2.7.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 (1213) hide show
  1. package/README.ko.md +3 -2
  2. package/README.md +3 -2
  3. package/bundle/dist/application/monit/monit.frame.js +27 -14
  4. package/bundle/dist/application/monit/monit.types.js +22 -13
  5. package/bundle/dist/application/qgrid/conv-routing.js +21 -11
  6. package/bundle/dist/application/qgrid/oauth.js +1 -1
  7. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +15 -4
  8. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +18 -9
  9. package/bundle/dist/application/qgrid/qgrid.frame.js +50 -73
  10. package/bundle/dist/application/qgrid/qgrid.types.js +4 -1
  11. package/bundle/dist/application/qgrid/token-subscriber.js +5 -5
  12. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -1
  13. package/bundle/dist/application/qgrid/tool-emulation.js +1 -1
  14. package/bundle/dist/application/queries.generated.js +3 -1
  15. package/bundle/dist/application/request-log/json-schema-type-text.js +55 -0
  16. package/bundle/dist/application/request-log/request-log.model.js +85 -3
  17. package/bundle/dist/application/request-log/request-log.types.js +3 -2
  18. package/bundle/dist/application/request-log/zod-code-format.js +71 -0
  19. package/bundle/dist/application/setting/setting.constant.js +2 -62
  20. package/bundle/dist/application/setting/setting.model.js +3 -3
  21. package/bundle/dist/application/setting/setting.store.js +2 -2
  22. package/bundle/dist/application/sonamu.generated.js +11 -4
  23. package/bundle/dist/application/sonamu.generated.sso.js +7 -3
  24. package/bundle/dist/i18n/sd.generated.js +5 -2
  25. package/bundle/dist/migrations/20260814130113_alter_request_logs_add1_alter1.js +15 -0
  26. package/bundle/dist/migrations/20260814131051_alter_request_logs_add1_alter1.js +15 -0
  27. package/bundle/dist/migrations/20260814134846_alter_request_logs_add1_alter1.js +15 -0
  28. package/bundle/dist/migrations/20260814140759_alter_request_logs_alter1.js +13 -0
  29. 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_2519c2e8d8013fcbc7b443879bc9da6d → 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 +2 -2
  30. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  31. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  32. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +3 -3
  33. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  34. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  35. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  36. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  37. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  38. 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_ms_f9cfcfeddd63e656d4010c98521af26c → 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 +2 -2
  39. package/bundle/dist/sonamu.config.js +10 -9
  40. package/bundle/dist/testing/setup-mocks.js +2 -2
  41. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +14 -2
  42. package/bundle/dist/utils/providers/anthropic/claude-session.js +1 -1
  43. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +1 -1
  44. package/bundle/dist/utils/providers/common/model-cost.js +1 -1
  45. package/bundle/dist/utils/providers/common/schema-validation.js +1 -1
  46. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +144 -0
  47. package/bundle/dist/utils/providers/openai/openai-constants.js +4 -2
  48. package/bundle/dist/utils/providers/openai/openai-direct-client.js +327 -0
  49. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +358 -781
  50. package/bundle/dist/utils/providers/openai/openai-oauth.js +84 -0
  51. package/bundle/dist/utils/providers/openai/openai-quota.js +76 -5
  52. package/bundle/dist/utils/providers/openai/openai-refresh.js +3 -3
  53. package/bundle/dist/utils/providers/openai/openai-sse.js +72 -0
  54. package/bundle/dist/utils/providers/openai/openai-transport-config.js +14 -0
  55. package/bundle/src/application/monit/monit.frame.test.ts +14 -17
  56. package/bundle/src/application/monit/monit.frame.ts +23 -12
  57. package/bundle/src/application/monit/monit.types.ts +40 -11
  58. package/bundle/src/application/qgrid/conv-routing.test.ts +67 -0
  59. package/bundle/src/application/qgrid/conv-routing.ts +46 -12
  60. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +92 -2
  61. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +3 -0
  62. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +15 -1
  63. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +36 -6
  64. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +22 -9
  65. package/bundle/src/application/qgrid/qgrid.frame.ts +55 -94
  66. package/bundle/src/application/qgrid/qgrid.types.ts +11 -4
  67. package/bundle/src/application/qgrid/token-subscriber.ts +4 -4
  68. package/bundle/src/application/qgrid/tool-emulation-schema.ts +1 -1
  69. package/bundle/src/application/qgrid/tool-emulation.test.ts +1 -0
  70. package/bundle/src/application/queries.generated.ts +6 -0
  71. package/bundle/src/application/request-log/json-schema-type-text.test.ts +96 -0
  72. package/bundle/src/application/request-log/json-schema-type-text.ts +83 -0
  73. package/bundle/src/application/request-log/request-log.entity.json +147 -21
  74. package/bundle/src/application/request-log/request-log.model.ts +108 -0
  75. package/bundle/src/application/request-log/request-log.types.ts +2 -0
  76. package/bundle/src/application/request-log/zod-code-format.test.ts +31 -0
  77. package/bundle/src/application/request-log/zod-code-format.ts +73 -0
  78. package/bundle/src/application/setting/setting.constant.test.ts +22 -24
  79. package/bundle/src/application/setting/setting.constant.ts +2 -63
  80. package/bundle/src/application/setting/setting.entity.json +1 -1
  81. package/bundle/src/application/setting/setting.store.ts +1 -1
  82. package/bundle/src/application/sonamu.generated.http +20 -1
  83. package/bundle/src/application/sonamu.generated.sso.ts +4 -0
  84. package/bundle/src/application/sonamu.generated.ts +10 -0
  85. package/bundle/src/i18n/sd.generated.ts +6 -1
  86. package/bundle/src/migrations/20260814130113_alter_request_logs_add1_alter1.ts +15 -0
  87. package/bundle/src/migrations/20260814131051_alter_request_logs_add1_alter1.ts +15 -0
  88. package/bundle/src/migrations/20260814134846_alter_request_logs_add1_alter1.ts +15 -0
  89. package/bundle/src/migrations/20260814140759_alter_request_logs_alter1.ts +13 -0
  90. package/bundle/src/sonamu.config.ts +9 -13
  91. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +17 -2
  92. package/bundle/src/utils/providers/anthropic/claude-session.ts +1 -3
  93. package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +1 -2
  94. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +2 -3
  95. package/bundle/src/utils/providers/common/model-cost.ts +4 -9
  96. package/bundle/src/utils/providers/common/provider-dispatcher.ts +10 -8
  97. package/bundle/src/utils/providers/common/provider-types.ts +48 -0
  98. package/bundle/src/utils/providers/common/schema-validation.ts +1 -1
  99. package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +106 -0
  100. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +255 -0
  101. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  102. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +610 -0
  103. package/bundle/src/utils/providers/openai/openai-direct-client.ts +478 -0
  104. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +336 -1723
  105. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +458 -1175
  106. package/bundle/src/utils/providers/openai/openai-oauth.test.ts +95 -0
  107. package/bundle/src/utils/providers/openai/openai-oauth.ts +141 -0
  108. package/bundle/src/utils/providers/openai/openai-quota.test.ts +80 -7
  109. package/bundle/src/utils/providers/openai/openai-quota.ts +105 -4
  110. package/bundle/src/utils/providers/openai/openai-refresh.test.ts +120 -0
  111. package/bundle/src/utils/providers/openai/openai-refresh.ts +3 -1
  112. package/bundle/src/utils/providers/openai/openai-sse.test.ts +52 -0
  113. package/bundle/src/utils/providers/openai/openai-sse.ts +79 -0
  114. package/bundle/src/utils/providers/openai/openai-transport-config.ts +17 -0
  115. package/bundle/web-dist/client/assets/index-BldeEvAK.css +1 -0
  116. package/bundle/web-dist/client/assets/index-QxWJK2qE.js +106 -0
  117. package/bundle/web-dist/client/assets/logs-DaNYzis5.js +1 -0
  118. package/bundle/web-dist/client/assets/monit-BngOoU4n.js +1 -0
  119. package/bundle/web-dist/client/assets/{routes-J4bnHVfl.js → routes-BnQE0rPF.js} +1 -1
  120. package/bundle/web-dist/client/assets/{services.generated-jGypfumC.js → services.generated-CSW8bhCP.js} +4 -4
  121. package/bundle/web-dist/client/assets/settings-CPeAjsL3.js +1 -0
  122. package/bundle/web-dist/client/assets/show-DUOfuZj1.js +2 -0
  123. package/bundle/web-dist/client/assets/{tokens-DDrATjGA.js → tokens-LHoEigmF.js} +1 -1
  124. package/bundle/web-dist/client/assets/{use-oauth-login-flow-CptleCFM.js → use-oauth-login-flow-YyU4TDzU.js} +1 -1
  125. package/bundle/web-dist/client/index.html +3 -3
  126. package/bundle/web-dist/server/assets/{lazyRouteComponent-DOc8TV-P.js → lazyRouteComponent-0y-znAfz.js} +2 -2
  127. package/bundle/web-dist/server/assets/{logs-CfF3nmLM.js → logs-CJBbHM3_.js} +35 -5
  128. package/bundle/web-dist/server/assets/{monit-BSaKhh5D.js → monit-8WAsPETB.js} +144 -51
  129. package/bundle/web-dist/server/assets/{plus-DLFUHsfx.js → plus-9das21ju.js} +1 -1
  130. package/bundle/web-dist/server/assets/{react-dom-BotjLnTK.js → react-dom-zmEq8BVp.js} +1 -1
  131. package/bundle/web-dist/server/assets/{routes-CHMxrTT0.js → routes-B6bX3o41.js} +3 -3
  132. package/bundle/web-dist/server/assets/{services.generated-D3Q3FYot.js → services.generated-DyPeBI00.js} +76 -2
  133. package/bundle/web-dist/server/assets/{settings-DOQjV28c.js → settings-D1u5WdpP.js} +2 -3
  134. package/bundle/web-dist/server/assets/{show-Cn_C6Qvl.js → show-Cr7vwR0l.js} +93 -8
  135. package/bundle/web-dist/server/assets/{tokens-c0EN3iCx.js → tokens-BumM0gnH.js} +3 -3
  136. package/bundle/web-dist/server/assets/{use-oauth-login-flow-B68AbMDE.js → use-oauth-login-flow-DmsHGOlx.js} +1 -1
  137. package/bundle/web-dist/server/entry-server.generated.js +12 -12
  138. package/dist/cli.d.ts +10 -1
  139. package/dist/cli.js +1 -6
  140. package/package.json +11 -5
  141. package/skills/qgrid/SKILL.md +5 -5
  142. package/skills/qgrid/references/ai-sdk-provider-contract.md +16 -10
  143. package/skills/qgrid/references/cli-env-and-server-boot.md +6 -13
  144. package/skills/qgrid/references/decision-rationale.md +15 -23
  145. package/skills/qgrid/references/docs-workflow.md +1 -1
  146. package/skills/qgrid/references/openai-codex-runtime.md +39 -156
  147. package/skills/qgrid/references/prompt-cache-and-usage.md +35 -71
  148. package/skills/qgrid/references/provider-runtime-differences.md +17 -17
  149. package/skills/qgrid/references/repo-map.md +2 -2
  150. package/skills/qgrid/references/request-log-run-lifecycle.md +12 -2
  151. package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
  152. package/skills/qgrid/references/token-auth-quota-lifecycle.md +14 -24
  153. package/skills/qgrid/references/tool-calling-and-multiturn.md +3 -3
  154. package/skills/qgrid/references/verification-and-debugging.md +17 -15
  155. package/bundle/dist/codex-protocol/AgentPath.js +0 -1
  156. package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
  157. package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
  158. package/bundle/dist/codex-protocol/AuthMode.js +0 -1
  159. package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
  160. package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
  161. package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
  162. package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
  163. package/bundle/dist/codex-protocol/ContentItem.js +0 -1
  164. package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
  165. package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
  166. package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
  167. package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
  168. package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
  169. package/bundle/dist/codex-protocol/FileChange.js +0 -1
  170. package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
  171. package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
  172. package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
  173. package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
  174. package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
  175. package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
  176. package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
  177. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
  178. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
  179. package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
  180. package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
  181. package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
  182. package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
  183. package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
  184. package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
  185. package/bundle/dist/codex-protocol/GitSha.js +0 -1
  186. package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
  187. package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
  188. package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
  189. package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
  190. package/bundle/dist/codex-protocol/InputModality.js +0 -1
  191. package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
  192. package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
  193. package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
  194. package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
  195. package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
  196. package/bundle/dist/codex-protocol/ModeKind.js +0 -1
  197. package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
  198. package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
  199. package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
  200. package/bundle/dist/codex-protocol/Personality.js +0 -1
  201. package/bundle/dist/codex-protocol/PlanType.js +0 -1
  202. package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
  203. package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
  204. package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
  205. package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
  206. package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
  207. package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
  208. package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
  209. package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
  210. package/bundle/dist/codex-protocol/RequestId.js +0 -1
  211. package/bundle/dist/codex-protocol/Resource.js +0 -1
  212. package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
  213. package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
  214. package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
  215. package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
  216. package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
  217. package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
  218. package/bundle/dist/codex-protocol/SessionSource.js +0 -1
  219. package/bundle/dist/codex-protocol/Settings.js +0 -1
  220. package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
  221. package/bundle/dist/codex-protocol/ThreadId.js +0 -1
  222. package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
  223. package/bundle/dist/codex-protocol/Tool.js +0 -1
  224. package/bundle/dist/codex-protocol/Verbosity.js +0 -1
  225. package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
  226. package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
  227. package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
  228. package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
  229. package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
  230. package/bundle/dist/codex-protocol/index.js +0 -2
  231. package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
  232. package/bundle/dist/codex-protocol/v2/Account.js +0 -1
  233. package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
  234. package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
  235. package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
  236. package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
  237. package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
  238. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
  239. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
  240. package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
  241. package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
  242. package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
  243. package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
  244. package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
  245. package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
  246. package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
  247. package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
  248. package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
  249. package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
  250. package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
  251. package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
  252. package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
  253. package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
  254. package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
  255. package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
  256. package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
  257. package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
  258. package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
  259. package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
  260. package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
  261. package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
  262. package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
  263. package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
  264. package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
  265. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
  266. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
  267. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
  268. package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
  269. package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
  270. package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
  271. package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
  272. package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
  273. package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
  274. package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
  275. package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
  276. package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
  277. package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
  278. package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
  279. package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
  280. package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
  281. package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
  282. package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
  283. package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
  284. package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
  285. package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
  286. package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
  287. package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
  288. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
  289. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
  290. package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
  291. package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
  292. package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
  293. package/bundle/dist/codex-protocol/v2/Config.js +0 -1
  294. package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
  295. package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
  296. package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
  297. package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
  298. package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
  299. package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
  300. package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
  301. package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
  302. package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
  303. package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
  304. package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
  305. package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
  306. package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
  307. package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
  308. package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
  309. package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
  310. package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
  311. package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
  312. package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
  313. package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
  314. package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
  315. package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
  316. package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
  317. package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
  318. package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
  319. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
  320. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
  321. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
  322. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
  323. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
  324. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
  325. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
  326. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
  327. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
  328. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
  329. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
  330. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
  331. package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
  332. package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
  333. package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
  334. package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
  335. package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
  336. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
  337. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
  338. package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
  339. package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
  340. package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
  341. package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
  342. package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
  343. package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
  344. package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
  345. package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
  346. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
  347. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
  348. package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
  349. package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
  350. package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
  351. package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
  352. package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
  353. package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
  354. package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
  355. package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
  356. package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
  357. package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
  358. package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
  359. package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
  360. package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
  361. package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
  362. package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
  363. package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
  364. package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
  365. package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
  366. package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
  367. package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
  368. package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
  369. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
  370. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
  371. package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
  372. package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
  373. package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
  374. package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
  375. package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
  376. package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
  377. package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
  378. package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
  379. package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
  380. package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
  381. package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
  382. package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
  383. package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
  384. package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
  385. package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
  386. package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
  387. package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
  388. package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
  389. package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
  390. package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
  391. package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
  392. package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
  393. package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
  394. package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
  395. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
  396. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
  397. package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
  398. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
  399. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
  400. package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
  401. package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
  402. package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
  403. package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
  404. package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
  405. package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
  406. package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
  407. package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
  408. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
  409. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
  410. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
  411. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
  412. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
  413. package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
  414. package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
  415. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
  416. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
  417. package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
  418. package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
  419. package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
  420. package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
  421. package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
  422. package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
  423. package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
  424. package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
  425. package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
  426. package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
  427. package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
  428. package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
  429. package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
  430. package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
  431. package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
  432. package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
  433. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
  434. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
  435. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
  436. package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
  437. package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
  438. package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
  439. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
  440. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
  441. package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
  442. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
  443. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
  444. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
  445. package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
  446. package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
  447. package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
  448. package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
  449. package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
  450. package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
  451. package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
  452. package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
  453. package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
  454. package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
  455. package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
  456. package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
  457. package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
  458. package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
  459. package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
  460. package/bundle/dist/codex-protocol/v2/Model.js +0 -1
  461. package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
  462. package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
  463. package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
  464. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
  465. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
  466. package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
  467. package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
  468. package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
  469. package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
  470. package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
  471. package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
  472. package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
  473. package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
  474. package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
  475. package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
  476. package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
  477. package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
  478. package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
  479. package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
  480. package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
  481. package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
  482. package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
  483. package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
  484. package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
  485. package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
  486. package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
  487. package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
  488. package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
  489. package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
  490. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
  491. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
  492. package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
  493. package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
  494. package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
  495. package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
  496. package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
  497. package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
  498. package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
  499. package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
  500. package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
  501. package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
  502. package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
  503. package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
  504. package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
  505. package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
  506. package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
  507. package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
  508. package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
  509. package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
  510. package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
  511. package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
  512. package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
  513. package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
  514. package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
  515. package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
  516. package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
  517. package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
  518. package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
  519. package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
  520. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
  521. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
  522. package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
  523. package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
  524. package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
  525. package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
  526. package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
  527. package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
  528. package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
  529. package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
  530. package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
  531. package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
  532. package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
  533. package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
  534. package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
  535. package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
  536. package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
  537. package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
  538. package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
  539. package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
  540. package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
  541. package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
  542. package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
  543. package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
  544. package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
  545. package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
  546. package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
  547. package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
  548. package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
  549. package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
  550. package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
  551. package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
  552. package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
  553. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
  554. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
  555. package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
  556. package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
  557. package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
  558. package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
  559. package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
  560. package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
  561. package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
  562. package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
  563. package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
  564. package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
  565. package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
  566. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
  567. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
  568. package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
  569. package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
  570. package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
  571. package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
  572. package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
  573. package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
  574. package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
  575. package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
  576. package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
  577. package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
  578. package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
  579. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
  580. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
  581. package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
  582. package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
  583. package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
  584. package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
  585. package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
  586. package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
  587. package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
  588. package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
  589. package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
  590. package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
  591. package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
  592. package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
  593. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
  594. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
  595. package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
  596. package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
  597. package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
  598. package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
  599. package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
  600. package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
  601. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
  602. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
  603. package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
  604. package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
  605. package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
  606. package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
  607. package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
  608. package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
  609. package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
  610. package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
  611. package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
  612. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
  613. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
  614. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
  615. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
  616. package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
  617. package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
  618. package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
  619. package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
  620. package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
  621. package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
  622. package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
  623. package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
  624. package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
  625. package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
  626. package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
  627. package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
  628. package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
  629. package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
  630. package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
  631. package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
  632. package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
  633. package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
  634. package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
  635. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
  636. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
  637. package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
  638. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
  639. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
  640. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
  641. package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
  642. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
  643. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
  644. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
  645. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
  646. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
  647. package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
  648. package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
  649. package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
  650. package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
  651. package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
  652. package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
  653. package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
  654. package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
  655. package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
  656. package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
  657. package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
  658. package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
  659. package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
  660. package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
  661. package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
  662. package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
  663. package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
  664. package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
  665. package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
  666. package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
  667. package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
  668. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
  669. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
  670. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
  671. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
  672. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
  673. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
  674. package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
  675. package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
  676. package/bundle/dist/codex-protocol/v2/index.js +0 -7
  677. package/bundle/dist/utils/providers/openai/codex-rpc.js +0 -153
  678. package/bundle/dist/utils/providers/openai/codex-worker.js +0 -642
  679. package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +0 -51
  680. package/bundle/src/codex-protocol/AbsolutePathBuf.ts +0 -14
  681. package/bundle/src/codex-protocol/AgentPath.ts +0 -5
  682. package/bundle/src/codex-protocol/ApplyPatchApprovalParams.ts +0 -24
  683. package/bundle/src/codex-protocol/ApplyPatchApprovalResponse.ts +0 -6
  684. package/bundle/src/codex-protocol/AuthMode.ts +0 -8
  685. package/bundle/src/codex-protocol/ClientInfo.ts +0 -5
  686. package/bundle/src/codex-protocol/ClientNotification.ts +0 -5
  687. package/bundle/src/codex-protocol/ClientRequest.ts +0 -176
  688. package/bundle/src/codex-protocol/CollaborationMode.ts +0 -10
  689. package/bundle/src/codex-protocol/ContentItem.ts +0 -9
  690. package/bundle/src/codex-protocol/ConversationGitInfo.ts +0 -9
  691. package/bundle/src/codex-protocol/ConversationSummary.ts +0 -19
  692. package/bundle/src/codex-protocol/ExecCommandApprovalParams.ts +0 -22
  693. package/bundle/src/codex-protocol/ExecCommandApprovalResponse.ts +0 -6
  694. package/bundle/src/codex-protocol/ExecPolicyAmendment.ts +0 -12
  695. package/bundle/src/codex-protocol/FileChange.ts +0 -8
  696. package/bundle/src/codex-protocol/ForcedLoginMethod.ts +0 -5
  697. package/bundle/src/codex-protocol/FunctionCallOutputBody.ts +0 -6
  698. package/bundle/src/codex-protocol/FunctionCallOutputContentItem.ts +0 -12
  699. package/bundle/src/codex-protocol/FuzzyFileSearchMatchType.ts +0 -5
  700. package/bundle/src/codex-protocol/FuzzyFileSearchParams.ts +0 -9
  701. package/bundle/src/codex-protocol/FuzzyFileSearchResponse.ts +0 -6
  702. package/bundle/src/codex-protocol/FuzzyFileSearchResult.ts +0 -16
  703. package/bundle/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  704. package/bundle/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +0 -10
  705. package/bundle/src/codex-protocol/GetAuthStatusParams.ts +0 -5
  706. package/bundle/src/codex-protocol/GetAuthStatusResponse.ts +0 -10
  707. package/bundle/src/codex-protocol/GetConversationSummaryParams.ts +0 -6
  708. package/bundle/src/codex-protocol/GetConversationSummaryResponse.ts +0 -6
  709. package/bundle/src/codex-protocol/GitDiffToRemoteParams.ts +0 -5
  710. package/bundle/src/codex-protocol/GitDiffToRemoteResponse.ts +0 -6
  711. package/bundle/src/codex-protocol/GitSha.ts +0 -5
  712. package/bundle/src/codex-protocol/ImageDetail.ts +0 -5
  713. package/bundle/src/codex-protocol/InitializeCapabilities.ts +0 -18
  714. package/bundle/src/codex-protocol/InitializeParams.ts +0 -10
  715. package/bundle/src/codex-protocol/InitializeResponse.ts +0 -22
  716. package/bundle/src/codex-protocol/InputModality.ts +0 -8
  717. package/bundle/src/codex-protocol/InternalSessionSource.ts +0 -5
  718. package/bundle/src/codex-protocol/LocalShellAction.ts +0 -6
  719. package/bundle/src/codex-protocol/LocalShellExecAction.ts +0 -11
  720. package/bundle/src/codex-protocol/LocalShellStatus.ts +0 -5
  721. package/bundle/src/codex-protocol/MessagePhase.ts +0 -11
  722. package/bundle/src/codex-protocol/ModeKind.ts +0 -8
  723. package/bundle/src/codex-protocol/NetworkPolicyAmendment.ts +0 -6
  724. package/bundle/src/codex-protocol/NetworkPolicyRuleAction.ts +0 -5
  725. package/bundle/src/codex-protocol/ParsedCommand.ts +0 -20
  726. package/bundle/src/codex-protocol/Personality.ts +0 -5
  727. package/bundle/src/codex-protocol/PlanType.ts +0 -17
  728. package/bundle/src/codex-protocol/RealtimeConversationVersion.ts +0 -5
  729. package/bundle/src/codex-protocol/RealtimeOutputModality.ts +0 -5
  730. package/bundle/src/codex-protocol/RealtimeVoice.ts +0 -24
  731. package/bundle/src/codex-protocol/RealtimeVoicesList.ts +0 -11
  732. package/bundle/src/codex-protocol/ReasoningEffort.ts +0 -8
  733. package/bundle/src/codex-protocol/ReasoningItemContent.ts +0 -7
  734. package/bundle/src/codex-protocol/ReasoningItemReasoningSummary.ts +0 -5
  735. package/bundle/src/codex-protocol/ReasoningSummary.ts +0 -10
  736. package/bundle/src/codex-protocol/RequestId.ts +0 -5
  737. package/bundle/src/codex-protocol/Resource.ts +0 -19
  738. package/bundle/src/codex-protocol/ResourceContent.ts +0 -27
  739. package/bundle/src/codex-protocol/ResourceTemplate.ts +0 -16
  740. package/bundle/src/codex-protocol/ResponseItem.ts +0 -63
  741. package/bundle/src/codex-protocol/ReviewDecision.ts +0 -17
  742. package/bundle/src/codex-protocol/ServerNotification.ts +0 -154
  743. package/bundle/src/codex-protocol/ServerRequest.ts +0 -47
  744. package/bundle/src/codex-protocol/SessionSource.ts +0 -15
  745. package/bundle/src/codex-protocol/Settings.ts +0 -13
  746. package/bundle/src/codex-protocol/SubAgentSource.ts +0 -20
  747. package/bundle/src/codex-protocol/ThreadId.ts +0 -5
  748. package/bundle/src/codex-protocol/ThreadMemoryMode.ts +0 -5
  749. package/bundle/src/codex-protocol/Tool.ts +0 -18
  750. package/bundle/src/codex-protocol/Verbosity.ts +0 -9
  751. package/bundle/src/codex-protocol/WebSearchAction.ts +0 -9
  752. package/bundle/src/codex-protocol/WebSearchContextSize.ts +0 -5
  753. package/bundle/src/codex-protocol/WebSearchLocation.ts +0 -10
  754. package/bundle/src/codex-protocol/WebSearchMode.ts +0 -5
  755. package/bundle/src/codex-protocol/WebSearchToolConfig.ts +0 -11
  756. package/bundle/src/codex-protocol/index.ts +0 -79
  757. package/bundle/src/codex-protocol/serde_json/JsonValue.ts +0 -11
  758. package/bundle/src/codex-protocol/v2/Account.ts +0 -9
  759. package/bundle/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +0 -9
  760. package/bundle/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  761. package/bundle/src/codex-protocol/v2/AccountUpdatedNotification.ts +0 -7
  762. package/bundle/src/codex-protocol/v2/ActivePermissionProfile.ts +0 -22
  763. package/bundle/src/codex-protocol/v2/ActivePermissionProfileModification.ts +0 -9
  764. package/bundle/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +0 -5
  765. package/bundle/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +0 -5
  766. package/bundle/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +0 -18
  767. package/bundle/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +0 -5
  768. package/bundle/src/codex-protocol/v2/AdditionalPermissionProfile.ts +0 -13
  769. package/bundle/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +0 -10
  770. package/bundle/src/codex-protocol/v2/AnalyticsConfig.ts +0 -14
  771. package/bundle/src/codex-protocol/v2/AppBranding.ts +0 -15
  772. package/bundle/src/codex-protocol/v2/AppInfo.ts +0 -32
  773. package/bundle/src/codex-protocol/v2/AppListUpdatedNotification.ts +0 -9
  774. package/bundle/src/codex-protocol/v2/AppMetadata.ts +0 -20
  775. package/bundle/src/codex-protocol/v2/AppReview.ts +0 -5
  776. package/bundle/src/codex-protocol/v2/AppScreenshot.ts +0 -5
  777. package/bundle/src/codex-protocol/v2/AppSummary.ts +0 -14
  778. package/bundle/src/codex-protocol/v2/AppToolApproval.ts +0 -5
  779. package/bundle/src/codex-protocol/v2/AppToolsConfig.ts +0 -8
  780. package/bundle/src/codex-protocol/v2/ApprovalsReviewer.ts +0 -12
  781. package/bundle/src/codex-protocol/v2/AppsConfig.ts +0 -17
  782. package/bundle/src/codex-protocol/v2/AppsDefaultConfig.ts +0 -9
  783. package/bundle/src/codex-protocol/v2/AppsListParams.ts +0 -25
  784. package/bundle/src/codex-protocol/v2/AppsListResponse.ts +0 -16
  785. package/bundle/src/codex-protocol/v2/AskForApproval.ts +0 -18
  786. package/bundle/src/codex-protocol/v2/AutoReviewDecisionSource.ts +0 -8
  787. package/bundle/src/codex-protocol/v2/ByteRange.ts +0 -5
  788. package/bundle/src/codex-protocol/v2/CancelLoginAccountParams.ts +0 -5
  789. package/bundle/src/codex-protocol/v2/CancelLoginAccountResponse.ts +0 -6
  790. package/bundle/src/codex-protocol/v2/CancelLoginAccountStatus.ts +0 -5
  791. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +0 -18
  792. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  793. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +0 -9
  794. package/bundle/src/codex-protocol/v2/CodexErrorInfo.ts +0 -27
  795. package/bundle/src/codex-protocol/v2/CollabAgentState.ts +0 -6
  796. package/bundle/src/codex-protocol/v2/CollabAgentStatus.ts +0 -12
  797. package/bundle/src/codex-protocol/v2/CollabAgentTool.ts +0 -5
  798. package/bundle/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +0 -5
  799. package/bundle/src/codex-protocol/v2/CollaborationModeMask.ts +0 -15
  800. package/bundle/src/codex-protocol/v2/CommandAction.ts +0 -10
  801. package/bundle/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +0 -31
  802. package/bundle/src/codex-protocol/v2/CommandExecOutputStream.ts +0 -8
  803. package/bundle/src/codex-protocol/v2/CommandExecParams.ts +0 -87
  804. package/bundle/src/codex-protocol/v2/CommandExecResizeParams.ts +0 -19
  805. package/bundle/src/codex-protocol/v2/CommandExecResizeResponse.ts +0 -8
  806. package/bundle/src/codex-protocol/v2/CommandExecResponse.ts +0 -25
  807. package/bundle/src/codex-protocol/v2/CommandExecTerminalSize.ts +0 -17
  808. package/bundle/src/codex-protocol/v2/CommandExecTerminateParams.ts +0 -14
  809. package/bundle/src/codex-protocol/v2/CommandExecTerminateResponse.ts +0 -8
  810. package/bundle/src/codex-protocol/v2/CommandExecWriteParams.ts +0 -23
  811. package/bundle/src/codex-protocol/v2/CommandExecWriteResponse.ts +0 -8
  812. package/bundle/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +0 -13
  813. package/bundle/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +0 -10
  814. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +0 -47
  815. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +0 -8
  816. package/bundle/src/codex-protocol/v2/CommandExecutionSource.ts +0 -9
  817. package/bundle/src/codex-protocol/v2/CommandExecutionStatus.ts +0 -5
  818. package/bundle/src/codex-protocol/v2/CommandMigration.ts +0 -5
  819. package/bundle/src/codex-protocol/v2/Config.ts +0 -53
  820. package/bundle/src/codex-protocol/v2/ConfigBatchWriteParams.ts +0 -17
  821. package/bundle/src/codex-protocol/v2/ConfigEdit.ts +0 -7
  822. package/bundle/src/codex-protocol/v2/ConfigLayer.ts +0 -12
  823. package/bundle/src/codex-protocol/v2/ConfigLayerMetadata.ts +0 -6
  824. package/bundle/src/codex-protocol/v2/ConfigLayerSource.ts +0 -27
  825. package/bundle/src/codex-protocol/v2/ConfigReadParams.ts +0 -13
  826. package/bundle/src/codex-protocol/v2/ConfigReadResponse.ts +0 -12
  827. package/bundle/src/codex-protocol/v2/ConfigRequirements.ts +0 -15
  828. package/bundle/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +0 -11
  829. package/bundle/src/codex-protocol/v2/ConfigValueWriteParams.ts +0 -16
  830. package/bundle/src/codex-protocol/v2/ConfigWarningNotification.ts +0 -23
  831. package/bundle/src/codex-protocol/v2/ConfigWriteResponse.ts +0 -16
  832. package/bundle/src/codex-protocol/v2/ConfiguredHookHandler.ts +0 -14
  833. package/bundle/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +0 -9
  834. package/bundle/src/codex-protocol/v2/ContextCompactedNotification.ts +0 -8
  835. package/bundle/src/codex-protocol/v2/CreditsSnapshot.ts +0 -5
  836. package/bundle/src/codex-protocol/v2/DeprecationNoticeNotification.ts +0 -14
  837. package/bundle/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +0 -7
  838. package/bundle/src/codex-protocol/v2/DynamicToolCallParams.ts +0 -13
  839. package/bundle/src/codex-protocol/v2/DynamicToolCallResponse.ts +0 -9
  840. package/bundle/src/codex-protocol/v2/DynamicToolCallStatus.ts +0 -5
  841. package/bundle/src/codex-protocol/v2/DynamicToolSpec.ts +0 -12
  842. package/bundle/src/codex-protocol/v2/ErrorNotification.ts +0 -11
  843. package/bundle/src/codex-protocol/v2/ExecPolicyAmendment.ts +0 -5
  844. package/bundle/src/codex-protocol/v2/ExperimentalFeature.ts +0 -38
  845. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +0 -13
  846. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +0 -10
  847. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +0 -14
  848. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +0 -13
  849. package/bundle/src/codex-protocol/v2/ExperimentalFeatureStage.ts +0 -10
  850. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +0 -14
  851. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +0 -6
  852. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +0 -5
  853. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +0 -8
  854. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +0 -5
  855. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +0 -15
  856. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +0 -14
  857. package/bundle/src/codex-protocol/v2/FeedbackUploadParams.ts +0 -12
  858. package/bundle/src/codex-protocol/v2/FeedbackUploadResponse.ts +0 -5
  859. package/bundle/src/codex-protocol/v2/FileChangeApprovalDecision.ts +0 -5
  860. package/bundle/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +0 -15
  861. package/bundle/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +0 -11
  862. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +0 -22
  863. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +0 -6
  864. package/bundle/src/codex-protocol/v2/FileSystemAccessMode.ts +0 -5
  865. package/bundle/src/codex-protocol/v2/FileSystemPath.ts +0 -10
  866. package/bundle/src/codex-protocol/v2/FileSystemSandboxEntry.ts +0 -7
  867. package/bundle/src/codex-protocol/v2/FileSystemSpecialPath.ts +0 -11
  868. package/bundle/src/codex-protocol/v2/FileUpdateChange.ts +0 -6
  869. package/bundle/src/codex-protocol/v2/FsChangedNotification.ts +0 -18
  870. package/bundle/src/codex-protocol/v2/FsCopyParams.ts +0 -22
  871. package/bundle/src/codex-protocol/v2/FsCopyResponse.ts +0 -8
  872. package/bundle/src/codex-protocol/v2/FsCreateDirectoryParams.ts +0 -18
  873. package/bundle/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +0 -8
  874. package/bundle/src/codex-protocol/v2/FsGetMetadataParams.ts +0 -14
  875. package/bundle/src/codex-protocol/v2/FsGetMetadataResponse.ts +0 -29
  876. package/bundle/src/codex-protocol/v2/FsReadDirectoryEntry.ts +0 -21
  877. package/bundle/src/codex-protocol/v2/FsReadDirectoryParams.ts +0 -14
  878. package/bundle/src/codex-protocol/v2/FsReadDirectoryResponse.ts +0 -14
  879. package/bundle/src/codex-protocol/v2/FsReadFileParams.ts +0 -14
  880. package/bundle/src/codex-protocol/v2/FsReadFileResponse.ts +0 -13
  881. package/bundle/src/codex-protocol/v2/FsRemoveParams.ts +0 -22
  882. package/bundle/src/codex-protocol/v2/FsRemoveResponse.ts +0 -8
  883. package/bundle/src/codex-protocol/v2/FsUnwatchParams.ts +0 -13
  884. package/bundle/src/codex-protocol/v2/FsUnwatchResponse.ts +0 -8
  885. package/bundle/src/codex-protocol/v2/FsWatchParams.ts +0 -18
  886. package/bundle/src/codex-protocol/v2/FsWatchResponse.ts +0 -14
  887. package/bundle/src/codex-protocol/v2/FsWriteFileParams.ts +0 -18
  888. package/bundle/src/codex-protocol/v2/FsWriteFileResponse.ts +0 -8
  889. package/bundle/src/codex-protocol/v2/GetAccountParams.ts +0 -14
  890. package/bundle/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +0 -15
  891. package/bundle/src/codex-protocol/v2/GetAccountResponse.ts +0 -6
  892. package/bundle/src/codex-protocol/v2/GitInfo.ts +0 -5
  893. package/bundle/src/codex-protocol/v2/GrantedPermissionProfile.ts +0 -10
  894. package/bundle/src/codex-protocol/v2/GuardianApprovalReview.ts +0 -18
  895. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +0 -34
  896. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +0 -13
  897. package/bundle/src/codex-protocol/v2/GuardianCommandSource.ts +0 -5
  898. package/bundle/src/codex-protocol/v2/GuardianRiskLevel.ts +0 -8
  899. package/bundle/src/codex-protocol/v2/GuardianUserAuthorization.ts +0 -8
  900. package/bundle/src/codex-protocol/v2/GuardianWarningNotification.ts +0 -14
  901. package/bundle/src/codex-protocol/v2/HookCompletedNotification.ts +0 -10
  902. package/bundle/src/codex-protocol/v2/HookErrorInfo.ts +0 -5
  903. package/bundle/src/codex-protocol/v2/HookEventName.ts +0 -13
  904. package/bundle/src/codex-protocol/v2/HookExecutionMode.ts +0 -5
  905. package/bundle/src/codex-protocol/v2/HookHandlerType.ts +0 -5
  906. package/bundle/src/codex-protocol/v2/HookMetadata.ts +0 -26
  907. package/bundle/src/codex-protocol/v2/HookMigration.ts +0 -5
  908. package/bundle/src/codex-protocol/v2/HookOutputEntry.ts +0 -6
  909. package/bundle/src/codex-protocol/v2/HookOutputEntryKind.ts +0 -5
  910. package/bundle/src/codex-protocol/v2/HookPromptFragment.ts +0 -5
  911. package/bundle/src/codex-protocol/v2/HookRunStatus.ts +0 -5
  912. package/bundle/src/codex-protocol/v2/HookRunSummary.ts +0 -28
  913. package/bundle/src/codex-protocol/v2/HookScope.ts +0 -5
  914. package/bundle/src/codex-protocol/v2/HookSource.ts +0 -15
  915. package/bundle/src/codex-protocol/v2/HookStartedNotification.ts +0 -10
  916. package/bundle/src/codex-protocol/v2/HookTrustStatus.ts +0 -5
  917. package/bundle/src/codex-protocol/v2/HooksListEntry.ts +0 -12
  918. package/bundle/src/codex-protocol/v2/HooksListParams.ts +0 -10
  919. package/bundle/src/codex-protocol/v2/HooksListResponse.ts +0 -6
  920. package/bundle/src/codex-protocol/v2/ItemCompletedNotification.ts +0 -14
  921. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +0 -44
  922. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +0 -38
  923. package/bundle/src/codex-protocol/v2/ItemStartedNotification.ts +0 -14
  924. package/bundle/src/codex-protocol/v2/ListMcpServerStatusParams.ts +0 -20
  925. package/bundle/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +0 -13
  926. package/bundle/src/codex-protocol/v2/LoginAccountParams.ts +0 -27
  927. package/bundle/src/codex-protocol/v2/LoginAccountResponse.ts +0 -27
  928. package/bundle/src/codex-protocol/v2/LogoutAccountResponse.ts +0 -5
  929. package/bundle/src/codex-protocol/v2/ManagedHooksRequirements.ts +0 -17
  930. package/bundle/src/codex-protocol/v2/MarketplaceAddParams.ts +0 -9
  931. package/bundle/src/codex-protocol/v2/MarketplaceAddResponse.ts +0 -10
  932. package/bundle/src/codex-protocol/v2/MarketplaceInterface.ts +0 -5
  933. package/bundle/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +0 -6
  934. package/bundle/src/codex-protocol/v2/MarketplaceRemoveParams.ts +0 -5
  935. package/bundle/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +0 -9
  936. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +0 -5
  937. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +0 -5
  938. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +0 -11
  939. package/bundle/src/codex-protocol/v2/McpAuthStatus.ts +0 -5
  940. package/bundle/src/codex-protocol/v2/McpElicitationArrayType.ts +0 -5
  941. package/bundle/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +0 -11
  942. package/bundle/src/codex-protocol/v2/McpElicitationBooleanType.ts +0 -5
  943. package/bundle/src/codex-protocol/v2/McpElicitationConstOption.ts +0 -5
  944. package/bundle/src/codex-protocol/v2/McpElicitationEnumSchema.ts +0 -11
  945. package/bundle/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +0 -13
  946. package/bundle/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +0 -9
  947. package/bundle/src/codex-protocol/v2/McpElicitationNumberSchema.ts +0 -13
  948. package/bundle/src/codex-protocol/v2/McpElicitationNumberType.ts +0 -5
  949. package/bundle/src/codex-protocol/v2/McpElicitationObjectType.ts +0 -5
  950. package/bundle/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +0 -13
  951. package/bundle/src/codex-protocol/v2/McpElicitationSchema.ts +0 -18
  952. package/bundle/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +0 -9
  953. package/bundle/src/codex-protocol/v2/McpElicitationStringFormat.ts +0 -5
  954. package/bundle/src/codex-protocol/v2/McpElicitationStringSchema.ts +0 -15
  955. package/bundle/src/codex-protocol/v2/McpElicitationStringType.ts +0 -5
  956. package/bundle/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +0 -6
  957. package/bundle/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +0 -15
  958. package/bundle/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +0 -13
  959. package/bundle/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +0 -9
  960. package/bundle/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +0 -15
  961. package/bundle/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +0 -12
  962. package/bundle/src/codex-protocol/v2/McpResourceReadParams.ts +0 -5
  963. package/bundle/src/codex-protocol/v2/McpResourceReadResponse.ts +0 -6
  964. package/bundle/src/codex-protocol/v2/McpServerElicitationAction.ts +0 -5
  965. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +0 -27
  966. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +0 -19
  967. package/bundle/src/codex-protocol/v2/McpServerMigration.ts +0 -5
  968. package/bundle/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +0 -9
  969. package/bundle/src/codex-protocol/v2/McpServerOauthLoginParams.ts +0 -9
  970. package/bundle/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +0 -5
  971. package/bundle/src/codex-protocol/v2/McpServerRefreshResponse.ts +0 -5
  972. package/bundle/src/codex-protocol/v2/McpServerStartupState.ts +0 -5
  973. package/bundle/src/codex-protocol/v2/McpServerStatus.ts +0 -15
  974. package/bundle/src/codex-protocol/v2/McpServerStatusDetail.ts +0 -5
  975. package/bundle/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +0 -10
  976. package/bundle/src/codex-protocol/v2/McpServerToolCallParams.ts +0 -12
  977. package/bundle/src/codex-protocol/v2/McpServerToolCallResponse.ts +0 -11
  978. package/bundle/src/codex-protocol/v2/McpToolCallError.ts +0 -5
  979. package/bundle/src/codex-protocol/v2/McpToolCallProgressNotification.ts +0 -10
  980. package/bundle/src/codex-protocol/v2/McpToolCallResult.ts +0 -10
  981. package/bundle/src/codex-protocol/v2/McpToolCallStatus.ts +0 -5
  982. package/bundle/src/codex-protocol/v2/MemoryCitation.ts +0 -6
  983. package/bundle/src/codex-protocol/v2/MemoryCitationEntry.ts +0 -10
  984. package/bundle/src/codex-protocol/v2/MergeStrategy.ts +0 -5
  985. package/bundle/src/codex-protocol/v2/MigrationDetails.ts +0 -18
  986. package/bundle/src/codex-protocol/v2/Model.ts +0 -30
  987. package/bundle/src/codex-protocol/v2/ModelAvailabilityNux.ts +0 -5
  988. package/bundle/src/codex-protocol/v2/ModelListParams.ts +0 -18
  989. package/bundle/src/codex-protocol/v2/ModelListResponse.ts +0 -13
  990. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +0 -5
  991. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +0 -9
  992. package/bundle/src/codex-protocol/v2/ModelRerouteReason.ts +0 -5
  993. package/bundle/src/codex-protocol/v2/ModelReroutedNotification.ts +0 -12
  994. package/bundle/src/codex-protocol/v2/ModelServiceTier.ts +0 -5
  995. package/bundle/src/codex-protocol/v2/ModelUpgradeInfo.ts +0 -10
  996. package/bundle/src/codex-protocol/v2/ModelVerification.ts +0 -5
  997. package/bundle/src/codex-protocol/v2/ModelVerificationNotification.ts +0 -10
  998. package/bundle/src/codex-protocol/v2/NetworkAccess.ts +0 -5
  999. package/bundle/src/codex-protocol/v2/NetworkApprovalContext.ts +0 -6
  1000. package/bundle/src/codex-protocol/v2/NetworkApprovalProtocol.ts +0 -5
  1001. package/bundle/src/codex-protocol/v2/NetworkDomainPermission.ts +0 -5
  1002. package/bundle/src/codex-protocol/v2/NetworkPolicyAmendment.ts +0 -6
  1003. package/bundle/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +0 -5
  1004. package/bundle/src/codex-protocol/v2/NetworkRequirements.ts +0 -40
  1005. package/bundle/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +0 -5
  1006. package/bundle/src/codex-protocol/v2/NonSteerableTurnKind.ts +0 -5
  1007. package/bundle/src/codex-protocol/v2/OverriddenMetadata.ts +0 -11
  1008. package/bundle/src/codex-protocol/v2/PatchApplyStatus.ts +0 -5
  1009. package/bundle/src/codex-protocol/v2/PatchChangeKind.ts +0 -8
  1010. package/bundle/src/codex-protocol/v2/PermissionGrantScope.ts +0 -5
  1011. package/bundle/src/codex-protocol/v2/PermissionProfile.ts +0 -14
  1012. package/bundle/src/codex-protocol/v2/PermissionProfileFileSystemPermissions.ts +0 -8
  1013. package/bundle/src/codex-protocol/v2/PermissionProfileModificationParams.ts +0 -9
  1014. package/bundle/src/codex-protocol/v2/PermissionProfileNetworkPermissions.ts +0 -5
  1015. package/bundle/src/codex-protocol/v2/PermissionProfileSelectionParams.ts +0 -10
  1016. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +0 -18
  1017. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +0 -14
  1018. package/bundle/src/codex-protocol/v2/PlanDeltaNotification.ts +0 -14
  1019. package/bundle/src/codex-protocol/v2/PluginAuthPolicy.ts +0 -5
  1020. package/bundle/src/codex-protocol/v2/PluginAvailability.ts +0 -5
  1021. package/bundle/src/codex-protocol/v2/PluginDetail.ts +0 -19
  1022. package/bundle/src/codex-protocol/v2/PluginHookSummary.ts +0 -6
  1023. package/bundle/src/codex-protocol/v2/PluginInstallParams.ts +0 -10
  1024. package/bundle/src/codex-protocol/v2/PluginInstallPolicy.ts +0 -5
  1025. package/bundle/src/codex-protocol/v2/PluginInstallResponse.ts +0 -10
  1026. package/bundle/src/codex-protocol/v2/PluginInterface.ts +0 -46
  1027. package/bundle/src/codex-protocol/v2/PluginListMarketplaceKind.ts +0 -5
  1028. package/bundle/src/codex-protocol/v2/PluginListParams.ts +0 -18
  1029. package/bundle/src/codex-protocol/v2/PluginListResponse.ts +0 -11
  1030. package/bundle/src/codex-protocol/v2/PluginMarketplaceEntry.ts +0 -17
  1031. package/bundle/src/codex-protocol/v2/PluginReadParams.ts +0 -10
  1032. package/bundle/src/codex-protocol/v2/PluginReadResponse.ts +0 -6
  1033. package/bundle/src/codex-protocol/v2/PluginShareContext.ts +0 -12
  1034. package/bundle/src/codex-protocol/v2/PluginShareDeleteParams.ts +0 -5
  1035. package/bundle/src/codex-protocol/v2/PluginShareDeleteResponse.ts +0 -5
  1036. package/bundle/src/codex-protocol/v2/PluginShareDiscoverability.ts +0 -5
  1037. package/bundle/src/codex-protocol/v2/PluginShareListItem.ts +0 -11
  1038. package/bundle/src/codex-protocol/v2/PluginShareListParams.ts +0 -5
  1039. package/bundle/src/codex-protocol/v2/PluginShareListResponse.ts +0 -6
  1040. package/bundle/src/codex-protocol/v2/PluginSharePrincipal.ts +0 -10
  1041. package/bundle/src/codex-protocol/v2/PluginSharePrincipalType.ts +0 -5
  1042. package/bundle/src/codex-protocol/v2/PluginShareSaveParams.ts +0 -13
  1043. package/bundle/src/codex-protocol/v2/PluginShareSaveResponse.ts +0 -5
  1044. package/bundle/src/codex-protocol/v2/PluginShareTarget.ts +0 -6
  1045. package/bundle/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +0 -5
  1046. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +0 -11
  1047. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +0 -10
  1048. package/bundle/src/codex-protocol/v2/PluginSkillReadParams.ts +0 -9
  1049. package/bundle/src/codex-protocol/v2/PluginSkillReadResponse.ts +0 -5
  1050. package/bundle/src/codex-protocol/v2/PluginSource.ts +0 -9
  1051. package/bundle/src/codex-protocol/v2/PluginSummary.ts +0 -29
  1052. package/bundle/src/codex-protocol/v2/PluginUninstallParams.ts +0 -5
  1053. package/bundle/src/codex-protocol/v2/PluginUninstallResponse.ts +0 -5
  1054. package/bundle/src/codex-protocol/v2/PluginsMigration.ts +0 -5
  1055. package/bundle/src/codex-protocol/v2/ProcessExitedNotification.ts +0 -43
  1056. package/bundle/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +0 -27
  1057. package/bundle/src/codex-protocol/v2/ProcessOutputStream.ts +0 -8
  1058. package/bundle/src/codex-protocol/v2/ProcessTerminalSize.ts +0 -17
  1059. package/bundle/src/codex-protocol/v2/ProfileV2.ts +0 -37
  1060. package/bundle/src/codex-protocol/v2/RateLimitReachedType.ts +0 -10
  1061. package/bundle/src/codex-protocol/v2/RateLimitSnapshot.ts +0 -17
  1062. package/bundle/src/codex-protocol/v2/RateLimitWindow.ts +0 -9
  1063. package/bundle/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +0 -10
  1064. package/bundle/src/codex-protocol/v2/ReasoningEffortOption.ts +0 -6
  1065. package/bundle/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +0 -10
  1066. package/bundle/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +0 -11
  1067. package/bundle/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +0 -11
  1068. package/bundle/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +0 -5
  1069. package/bundle/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +0 -12
  1070. package/bundle/src/codex-protocol/v2/RequestPermissionProfile.ts +0 -10
  1071. package/bundle/src/codex-protocol/v2/ResidencyRequirement.ts +0 -5
  1072. package/bundle/src/codex-protocol/v2/ReviewDelivery.ts +0 -5
  1073. package/bundle/src/codex-protocol/v2/ReviewStartParams.ts +0 -15
  1074. package/bundle/src/codex-protocol/v2/ReviewStartResponse.ts +0 -15
  1075. package/bundle/src/codex-protocol/v2/ReviewTarget.ts +0 -16
  1076. package/bundle/src/codex-protocol/v2/SandboxMode.ts +0 -5
  1077. package/bundle/src/codex-protocol/v2/SandboxPolicy.ts +0 -17
  1078. package/bundle/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +0 -10
  1079. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +0 -6
  1080. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +0 -6
  1081. package/bundle/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +0 -6
  1082. package/bundle/src/codex-protocol/v2/SessionMigration.ts +0 -5
  1083. package/bundle/src/codex-protocol/v2/SessionSource.ts +0 -13
  1084. package/bundle/src/codex-protocol/v2/SkillDependencies.ts +0 -6
  1085. package/bundle/src/codex-protocol/v2/SkillErrorInfo.ts +0 -5
  1086. package/bundle/src/codex-protocol/v2/SkillInterface.ts +0 -13
  1087. package/bundle/src/codex-protocol/v2/SkillMetadata.ts +0 -21
  1088. package/bundle/src/codex-protocol/v2/SkillScope.ts +0 -5
  1089. package/bundle/src/codex-protocol/v2/SkillSummary.ts +0 -14
  1090. package/bundle/src/codex-protocol/v2/SkillToolDependency.ts +0 -12
  1091. package/bundle/src/codex-protocol/v2/SkillsChangedNotification.ts +0 -11
  1092. package/bundle/src/codex-protocol/v2/SkillsConfigWriteParams.ts +0 -16
  1093. package/bundle/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +0 -5
  1094. package/bundle/src/codex-protocol/v2/SkillsListEntry.ts +0 -11
  1095. package/bundle/src/codex-protocol/v2/SkillsListParams.ts +0 -14
  1096. package/bundle/src/codex-protocol/v2/SkillsListResponse.ts +0 -6
  1097. package/bundle/src/codex-protocol/v2/SortDirection.ts +0 -5
  1098. package/bundle/src/codex-protocol/v2/SubagentMigration.ts +0 -5
  1099. package/bundle/src/codex-protocol/v2/TerminalInteractionNotification.ts +0 -11
  1100. package/bundle/src/codex-protocol/v2/TextElement.ts +0 -15
  1101. package/bundle/src/codex-protocol/v2/TextPosition.ts +0 -14
  1102. package/bundle/src/codex-protocol/v2/TextRange.ts +0 -6
  1103. package/bundle/src/codex-protocol/v2/Thread.ts +0 -88
  1104. package/bundle/src/codex-protocol/v2/ThreadActiveFlag.ts +0 -5
  1105. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +0 -12
  1106. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +0 -5
  1107. package/bundle/src/codex-protocol/v2/ThreadArchiveParams.ts +0 -5
  1108. package/bundle/src/codex-protocol/v2/ThreadArchiveResponse.ts +0 -5
  1109. package/bundle/src/codex-protocol/v2/ThreadArchivedNotification.ts +0 -5
  1110. package/bundle/src/codex-protocol/v2/ThreadClosedNotification.ts +0 -5
  1111. package/bundle/src/codex-protocol/v2/ThreadCompactStartParams.ts +0 -5
  1112. package/bundle/src/codex-protocol/v2/ThreadCompactStartResponse.ts +0 -5
  1113. package/bundle/src/codex-protocol/v2/ThreadForkParams.ts +0 -40
  1114. package/bundle/src/codex-protocol/v2/ThreadForkResponse.ts +0 -30
  1115. package/bundle/src/codex-protocol/v2/ThreadGoal.ts +0 -15
  1116. package/bundle/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +0 -5
  1117. package/bundle/src/codex-protocol/v2/ThreadGoalStatus.ts +0 -5
  1118. package/bundle/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +0 -10
  1119. package/bundle/src/codex-protocol/v2/ThreadInjectItemsParams.ts +0 -12
  1120. package/bundle/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +0 -5
  1121. package/bundle/src/codex-protocol/v2/ThreadItem.ts +0 -156
  1122. package/bundle/src/codex-protocol/v2/ThreadListParams.ts +0 -55
  1123. package/bundle/src/codex-protocol/v2/ThreadListResponse.ts +0 -20
  1124. package/bundle/src/codex-protocol/v2/ThreadLoadedListParams.ts +0 -14
  1125. package/bundle/src/codex-protocol/v2/ThreadLoadedListResponse.ts +0 -15
  1126. package/bundle/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +0 -21
  1127. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +0 -14
  1128. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +0 -6
  1129. package/bundle/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +0 -5
  1130. package/bundle/src/codex-protocol/v2/ThreadReadParams.ts +0 -11
  1131. package/bundle/src/codex-protocol/v2/ThreadReadResponse.ts +0 -6
  1132. package/bundle/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +0 -14
  1133. package/bundle/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +0 -8
  1134. package/bundle/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +0 -8
  1135. package/bundle/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +0 -9
  1136. package/bundle/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +0 -12
  1137. package/bundle/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +0 -8
  1138. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +0 -17
  1139. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +0 -13
  1140. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +0 -16
  1141. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +0 -16
  1142. package/bundle/src/codex-protocol/v2/ThreadResumeParams.ts +0 -39
  1143. package/bundle/src/codex-protocol/v2/ThreadResumeResponse.ts +0 -30
  1144. package/bundle/src/codex-protocol/v2/ThreadRollbackParams.ts +0 -14
  1145. package/bundle/src/codex-protocol/v2/ThreadRollbackResponse.ts +0 -15
  1146. package/bundle/src/codex-protocol/v2/ThreadSetNameParams.ts +0 -5
  1147. package/bundle/src/codex-protocol/v2/ThreadSetNameResponse.ts +0 -5
  1148. package/bundle/src/codex-protocol/v2/ThreadShellCommandParams.ts +0 -14
  1149. package/bundle/src/codex-protocol/v2/ThreadShellCommandResponse.ts +0 -5
  1150. package/bundle/src/codex-protocol/v2/ThreadSortKey.ts +0 -5
  1151. package/bundle/src/codex-protocol/v2/ThreadSource.ts +0 -5
  1152. package/bundle/src/codex-protocol/v2/ThreadSourceKind.ts +0 -15
  1153. package/bundle/src/codex-protocol/v2/ThreadStartParams.ts +0 -33
  1154. package/bundle/src/codex-protocol/v2/ThreadStartResponse.ts +0 -30
  1155. package/bundle/src/codex-protocol/v2/ThreadStartSource.ts +0 -5
  1156. package/bundle/src/codex-protocol/v2/ThreadStartedNotification.ts +0 -6
  1157. package/bundle/src/codex-protocol/v2/ThreadStatus.ts +0 -10
  1158. package/bundle/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +0 -6
  1159. package/bundle/src/codex-protocol/v2/ThreadTokenUsage.ts +0 -10
  1160. package/bundle/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +0 -10
  1161. package/bundle/src/codex-protocol/v2/ThreadUnarchiveParams.ts +0 -5
  1162. package/bundle/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +0 -6
  1163. package/bundle/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +0 -5
  1164. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +0 -5
  1165. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +0 -6
  1166. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +0 -5
  1167. package/bundle/src/codex-protocol/v2/TokenUsageBreakdown.ts +0 -11
  1168. package/bundle/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +0 -8
  1169. package/bundle/src/codex-protocol/v2/ToolRequestUserInputOption.ts +0 -8
  1170. package/bundle/src/codex-protocol/v2/ToolRequestUserInputParams.ts +0 -14
  1171. package/bundle/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +0 -16
  1172. package/bundle/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +0 -11
  1173. package/bundle/src/codex-protocol/v2/ToolsV2.ts +0 -6
  1174. package/bundle/src/codex-protocol/v2/Turn.ts +0 -36
  1175. package/bundle/src/codex-protocol/v2/TurnCompletedNotification.ts +0 -6
  1176. package/bundle/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +0 -9
  1177. package/bundle/src/codex-protocol/v2/TurnEnvironmentParams.ts +0 -6
  1178. package/bundle/src/codex-protocol/v2/TurnError.ts +0 -10
  1179. package/bundle/src/codex-protocol/v2/TurnInterruptParams.ts +0 -5
  1180. package/bundle/src/codex-protocol/v2/TurnInterruptResponse.ts +0 -5
  1181. package/bundle/src/codex-protocol/v2/TurnItemsView.ts +0 -5
  1182. package/bundle/src/codex-protocol/v2/TurnPlanStep.ts +0 -6
  1183. package/bundle/src/codex-protocol/v2/TurnPlanStepStatus.ts +0 -5
  1184. package/bundle/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +0 -11
  1185. package/bundle/src/codex-protocol/v2/TurnStartParams.ts +0 -48
  1186. package/bundle/src/codex-protocol/v2/TurnStartResponse.ts +0 -6
  1187. package/bundle/src/codex-protocol/v2/TurnStartedNotification.ts +0 -6
  1188. package/bundle/src/codex-protocol/v2/TurnStatus.ts +0 -5
  1189. package/bundle/src/codex-protocol/v2/TurnSteerParams.ts +0 -13
  1190. package/bundle/src/codex-protocol/v2/TurnSteerResponse.ts +0 -5
  1191. package/bundle/src/codex-protocol/v2/UserInput.ts +0 -18
  1192. package/bundle/src/codex-protocol/v2/WarningNotification.ts +0 -14
  1193. package/bundle/src/codex-protocol/v2/WebSearchAction.ts +0 -9
  1194. package/bundle/src/codex-protocol/v2/WindowsSandboxReadiness.ts +0 -5
  1195. package/bundle/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +0 -6
  1196. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +0 -10
  1197. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +0 -5
  1198. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +0 -10
  1199. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +0 -5
  1200. package/bundle/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +0 -9
  1201. package/bundle/src/codex-protocol/v2/WriteStatus.ts +0 -5
  1202. package/bundle/src/codex-protocol/v2/index.ts +0 -446
  1203. package/bundle/src/utils/providers/openai/codex-rpc.ts +0 -238
  1204. package/bundle/src/utils/providers/openai/codex-worker.test.ts +0 -1006
  1205. package/bundle/src/utils/providers/openai/codex-worker.ts +0 -927
  1206. package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +0 -112
  1207. package/bundle/web-dist/client/assets/index-C0594sjh.js +0 -106
  1208. package/bundle/web-dist/client/assets/index-CcMEpCgt.css +0 -1
  1209. package/bundle/web-dist/client/assets/logs-BotUcOEB.js +0 -1
  1210. package/bundle/web-dist/client/assets/monit-kk3vnGvu.js +0 -1
  1211. package/bundle/web-dist/client/assets/settings-CAAQSIyg.js +0 -1
  1212. package/bundle/web-dist/client/assets/show-BryNvjUT.js +0 -2
  1213. /package/bundle/dist/{codex-protocol/AbsolutePathBuf.js → utils/providers/common/provider-types.js} +0 -0
@@ -1,9 +1,12 @@
1
1
  import { SD } from "../../i18n/sd.generated.js";
2
+ import { calculateCostUsd } from "../../utils/providers/common/model-cost.js";
2
3
  import { requestLogLoaderQueries, requestLogSubsetQueries } from "../sonamu.generated.sso.js";
4
+ import { renderParsedJsonSchemaTypeText } from "./json-schema-type-text.js";
5
+ import { formatZodCode } from "./zod-code-format.js";
3
6
  import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorateMetadata.js";
4
7
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.140.0/helpers/esm/decorate.js";
5
- import { calculateCostUsd } from "../../utils/providers/common/model-cost.js";
6
8
  import { BadRequestException, BaseModelClass, NotFoundException, Puri, api, asArray, transactional } from "sonamu";
9
+ import { jsonSchemaToZod } from "json-schema-to-zod";
7
10
  //#region src/application/request-log/request-log.model.ts
8
11
  const MICRO_USD = 1e6;
9
12
  const REQUEST_LOG_RUN_LOCK_CLASS_ID = 718;
@@ -135,6 +138,7 @@ var RequestLogModelClass = class extends BaseModelClass {
135
138
  else if (params.project_name_is_not_null) qb.where("request_logs.project_name", "!=", null);
136
139
  else if (params.project_name) qb.where("request_logs.project_name", params.project_name);
137
140
  if (params.model_name) qb.where("request_logs.model_name", params.model_name);
141
+ if (params.response_json_broken) qb.where("request_logs.response_json_ok", false);
138
142
  if (params.search && params.keyword && params.keyword.length > 0) if (params.search === "id") qb.where("request_logs.id", Number(params.keyword));
139
143
  else if (params.search === "token_name") qb.where("request_logs.token_name", "like", `%${params.keyword}%`);
140
144
  else if (params.search === "user_prompt") qb.where("request_logs.user_prompt", "like", `%${params.keyword}%`);
@@ -172,6 +176,72 @@ var RequestLogModelClass = class extends BaseModelClass {
172
176
  return await trx.ubUpsert("request_logs");
173
177
  });
174
178
  }
179
+ /**
180
+ * 최근 구간의 provider 별 경량 통계(모니터링용). provider 는 requested_model_name 의
181
+ * "openai/..." | "anthropic/..." prefix 로 판정한다 — serving model_name 은 prefix 가
182
+ * 없고, running 초기엔 아직 비어 있다. 집계는 JS 에서 한다: 폴링 주기가 느슨하고
183
+ * 구간이 짧아 row 수가 작으며, prefix CASE 식을 쿼리 빌더에 박지 않아도 된다.
184
+ */
185
+ async providerStatsSince(since) {
186
+ const rows = await this.getPuri("r").from("request_logs").select({
187
+ requested_model_name: "request_logs.requested_model_name",
188
+ status: "request_logs.status",
189
+ input_tokens: "request_logs.input_tokens",
190
+ cache_read_tokens: "request_logs.cache_read_tokens"
191
+ }).where("request_logs.created_at", ">=", since);
192
+ const byProvider = /* @__PURE__ */ new Map();
193
+ for (const row of rows) {
194
+ const model = row.requested_model_name ?? "";
195
+ const provider = model.startsWith("openai/") ? "openai" : model.startsWith("anthropic/") ? "anthropic" : "unknown";
196
+ const agg = byProvider.get(provider) ?? {
197
+ requests: 0,
198
+ errors: 0,
199
+ inputTokens: 0,
200
+ cacheReadTokens: 0
201
+ };
202
+ agg.requests += 1;
203
+ if (row.status === "error") agg.errors += 1;
204
+ agg.inputTokens += row.input_tokens;
205
+ agg.cacheReadTokens += row.cache_read_tokens;
206
+ byProvider.set(provider, agg);
207
+ }
208
+ return [...byProvider.entries()].map(([provider, agg]) => ({
209
+ provider,
210
+ ...agg
211
+ })).toSorted((a, b) => a.provider.localeCompare(b.provider));
212
+ }
213
+ /**
214
+ * structured output 요청의 JSON Schema 를 표시용 타입 텍스트로 변환한다.
215
+ * typescript 는 간결한 `type` 선언, zod 는 재구성된 zod 표현식이다 — 원본 zod
216
+ * 소스는 wire 를 건너오며 소실되므로 refine/transform 류는 복원되지 않는다.
217
+ * 스키마가 없거나 변환 실패면 null — 화면은 해당 블록 표시를 생략한다.
218
+ */
219
+ async responseTypeTs(id) {
220
+ const schema = (await this.getPuri("r").from("request_logs").select({ json_schema: "request_logs.json_schema" }).where("request_logs.id", id))[0]?.json_schema;
221
+ if (!schema) return {
222
+ typescript: null,
223
+ zod: null
224
+ };
225
+ let parsed;
226
+ try {
227
+ parsed = JSON.parse(schema);
228
+ } catch {
229
+ return {
230
+ typescript: null,
231
+ zod: null
232
+ };
233
+ }
234
+ let zod = null;
235
+ try {
236
+ zod = formatZodCode(jsonSchemaToZod(parsed, { module: "none" }));
237
+ } catch {
238
+ zod = null;
239
+ }
240
+ return {
241
+ typescript: renderParsedJsonSchemaTypeText(parsed),
242
+ zod
243
+ };
244
+ }
175
245
  async createRun(params) {
176
246
  const wdb = this.getPuri("w");
177
247
  wdb.ubRegister("request_logs", {
@@ -190,6 +260,8 @@ var RequestLogModelClass = class extends BaseModelClass {
190
260
  duration_ms: 0,
191
261
  tool_call_count: 0,
192
262
  is_image_generation: params.is_image_generation ?? false,
263
+ json_schema: params.json_schema ?? null,
264
+ is_structured: params.json_schema !== null && params.json_schema !== void 0,
193
265
  ...params.history !== void 0 ? { history: params.history } : {},
194
266
  ...params.tools !== void 0 ? { tools: params.tools } : {}
195
267
  });
@@ -233,7 +305,8 @@ var RequestLogModelClass = class extends BaseModelClass {
233
305
  "error_message",
234
306
  "tool_call_count",
235
307
  "image_cost_usd",
236
- "image_cost_method"
308
+ "image_cost_method",
309
+ "response_json_ok"
237
310
  ]) if (params[key] !== void 0) update[key] = params[key];
238
311
  if (params.history !== void 0) update.history = params.history;
239
312
  update.ttft_ms = await this.firstGenerateStepTtft(requestLogId) ?? 0;
@@ -425,6 +498,15 @@ __decorate([
425
498
  __decorateMetadata("design:paramtypes", [Array]),
426
499
  __decorateMetadata("design:returntype", Promise)
427
500
  ], RequestLogModelClass.prototype, "save", null);
501
+ __decorate([
502
+ api({
503
+ httpMethod: "GET",
504
+ clients: ["axios", "tanstack-query"]
505
+ }),
506
+ __decorateMetadata("design:type", Function),
507
+ __decorateMetadata("design:paramtypes", [Number]),
508
+ __decorateMetadata("design:returntype", Promise)
509
+ ], RequestLogModelClass.prototype, "responseTypeTs", null);
428
510
  __decorate([
429
511
  transactional({ dbPreset: "w" }),
430
512
  __decorateMetadata("design:type", Function),
@@ -454,4 +536,4 @@ const RequestLogModel = new RequestLogModelClass();
454
536
  //#endregion
455
537
  export { MICRO_USD, RequestLogModel };
456
538
 
457
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zLFxuICB0eXBlIFRvb2xEZWZpbml0aW9ucyxcbn0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5jb25zdCBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCA9IDcxODtcblxudHlwZSBUb29sUmVzdWx0Q29udGludWF0aW9uID0ge1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG91dHB1dDogc3RyaW5nO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUgPSB7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgY29zdF91c2Q6IG51bWJlcjtcbiAgY29zdF9zb3VyY2U/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBTVEVQX0FHR1JFR0FURV9TRUxFQ1QgPSB7XG4gIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gIGZhbGxiYWNrX2NvdW50OiBcImZhbGxiYWNrX2NvdW50XCIsXG4gIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlIHtcbiAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICByb3dzLnJlZHVjZSgodG90YWwsIHJvdykgPT4gdG90YWwgKyBOdW1iZXIocm93W2ZpZWxkXSA/PyAwKSwgMCk7XG4gIGNvbnN0IG9wdGlvbmFsU3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT5cbiAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29sbGFwc2UgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgcm93c1xuICAgICAgICAgIC5tYXAoKHJvdykgPT4gcm93W2ZpZWxkXSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICApLFxuICAgIF07XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDEgPyB2YWx1ZXNbMF0gOiBcIm1peGVkXCI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaW5wdXRfdG9rZW5zOiBzdW0oXCJpbnB1dF90b2tlbnNcIiksXG4gICAgb3V0cHV0X3Rva2Vuczogc3VtKFwib3V0cHV0X3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBzdW0oXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBvcHRpb25hbFN1bShcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgIGR1cmF0aW9uX21zOiBzdW0oXCJkdXJhdGlvbl9tc1wiKSxcbiAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgY29zdF91c2Q6IHN1bShcImNvc3RfdXNkXCIpLFxuICAgIGNvc3Rfc291cmNlOiBjb2xsYXBzZShcImNvc3Rfc291cmNlXCIpLFxuICB9O1xufVxuXG50eXBlIFJlcXVlc3RMb2dVc2FnZVJvdyA9IHtcbiAgdG9rZW5fbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG59IHtcbiAgY29uc3QgY2FjaGVSZWFkID0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uID0gcm93LmNhY2hlX2NyZWF0aW9uX3Rva2VucztcbiAgY29uc3Qgc3RvcmVkSW5wdXQgPSByb3cuaW5wdXRfdG9rZW5zO1xuICBjb25zdCBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID1cbiAgICBpc0FudGhyb3BpY1VzYWdlUm93KHJvdykgJiYgc3RvcmVkSW5wdXQgPCBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uO1xuICByZXR1cm4ge1xuICAgIG1vZGVsOiByb3cubW9kZWxfbmFtZSA/IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSkgOiBudWxsLFxuICAgIGlucHV0VG9rZW5zOiBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID8gc3RvcmVkSW5wdXQgKyBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uIDogc3RvcmVkSW5wdXQsXG4gICAgb3V0cHV0VG9rZW5zOiByb3cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGlvbixcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogcm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nVXNhZ2VSb3c+KHJvdzogVCk6IFQge1xuICAvLyDsg4ggcm93IOuKlCDri7nsi5zsnZggcHJvdmlkZXIv6rCA6rKp7ZGcIOu5hOyaqeydhCDtmZXsoJUg7KCA7J6l7ZWc64ukLiDtmITsnqwg6rCA6rKp7ZGc66GcIOuNruyWtOyTsOyngCDslYrripTri6QuXG4gIGlmIChyb3cuY29zdF9zb3VyY2UpIHJldHVybiByb3c7XG4gIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICBpZiAodXNhZ2UuaW5wdXRUb2tlbnMgPT09IHJvdy5pbnB1dF90b2tlbnMpIHJldHVybiByb3c7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdywgaW5wdXRfdG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyB9O1xuICBpZiAodXNhZ2UubW9kZWwpIHtcbiAgICBub3JtYWxpemVkLmNvc3RfdXNkID0gTWF0aC5yb3VuZChjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB1c2FnZSkgKiBNSUNST19VU0QpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIGBvcmRlckJ5YCBlbnVtIOqwkihg7Lus65+8Leuwqe2WpWAp7J2EIOygleugrCDsoIjroZwg7Jiu6ri064ukLlxuICpcbiAqIGVudW0g7J20IDE4IOyiheydtOudvCDsvIDsnbTsiqTrpbwg7J287J287J20IOyggeuKlCDrjIDsi6Ag7YyM7Iux7ZWY65CYLCDsu6zrn7zsnYAg7JWE656YIOuqqeuhneycvOuhnCDtlZzsoJXtlZzri6Qg4oCUXG4gKiDrrLjsnpDsl7TsnYQg6re464yA66GcIOy7rOufvOuqheyXkCDrhJjquLDrqbQgZW51bSDsnbQg67CU64CUIOuVjCDqsoDspp0g7JeG64qUIOyLneuzhOyekOqwgCBTUUwg66GcIO2dmOufrOuToOuLpC5cbiAqIOuqqeuhneyXkCDsl4bripQg6rCS7J2AIOq4sOuzuCDsoJXroKwoaWQgZGVzYynroZwg65ao7Ja07KeE64ukLlxuICovXG5jb25zdCBPUkRFUkFCTEVfQ09MVU1OUyA9IHtcbiAgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIsXG4gIGNyZWF0ZWRfYXQ6IFwicmVxdWVzdF9sb2dzLmNyZWF0ZWRfYXRcIixcbiAgdHRmdF9tczogXCJyZXF1ZXN0X2xvZ3MudHRmdF9tc1wiLFxuICBkdXJhdGlvbl9tczogXCJyZXF1ZXN0X2xvZ3MuZHVyYXRpb25fbXNcIixcbiAgaW5wdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5pbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3Mub3V0cHV0X3Rva2Vuc1wiLFxuICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY29zdF91c2Q6IFwicmVxdWVzdF9sb2dzLmNvc3RfdXNkXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhcHBseU9yZGVyQnkoXG4gIHFiOiBSZXR1cm5UeXBlPFJlcXVlc3RMb2dNb2RlbENsYXNzW1wiZ2V0U3Vic2V0UXVlcmllc1wiXT5bXCJxYlwiXSxcbiAgb3JkZXJCeTogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IG9yZGVyQnkubGFzdEluZGV4T2YoXCItXCIpO1xuICBjb25zdCBrZXkgPSBvcmRlckJ5LnNsaWNlKDAsIHNlcGFyYXRvcikgYXMga2V5b2YgdHlwZW9mIE9SREVSQUJMRV9DT0xVTU5TO1xuICBjb25zdCBkaXJlY3Rpb24gPSBvcmRlckJ5LnNsaWNlKHNlcGFyYXRvciArIDEpID09PSBcImFzY1wiID8gXCJhc2NcIiA6IFwiZGVzY1wiO1xuICBjb25zdCBjb2x1bW4gPSBPUkRFUkFCTEVfQ09MVU1OU1trZXldO1xuXG4gIGlmICghY29sdW1uKSB7XG4gICAgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHFiLm9yZGVyQnkoY29sdW1uLCBkaXJlY3Rpb24pO1xuICAvLyDrj5nsoJAg7ZaJ7J2YIOyInOyEnOqwgCDtjpjsnbTsp4Drp4jri6Qg7Z2U65Ok66as7KeAIOyViuqyjCDqs6DsnKAg7Lus65+87Jy866GcIHRpZS1icmVhayDtlZzri6QuXG4gIGlmIChrZXkgIT09IFwiaWRcIikgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG59XG5cbi8qXG4gIFJlcXVlc3RMb2cgTW9kZWxcbiovXG5jbGFzcyBSZXF1ZXN0TG9nTW9kZWxDbGFzcyBleHRlbmRzIEJhc2VNb2RlbENsYXNzPFxuICBSZXF1ZXN0TG9nU3Vic2V0S2V5LFxuICBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLFxuICB0eXBlb2YgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXNcbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlJlcXVlc3RMb2dcIiwgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ1wiIH0pXG4gIGFzeW5jIGZpbmRCeUlkPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgaWQ6IG51bWJlcixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIGlkLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcbiAgICBpZiAoIXJvd3NbMF0pIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihTRChcImVycm9yLmVudGl0eU5vdEZvdW5kXCIpKFwiUmVxdWVzdExvZ1wiLCBpZCkpO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzWzBdO1xuICB9XG5cbiAgYXN5bmMgZmluZE9uZTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGxpc3RQYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgdGhpcy5maW5kTWFueShzdWJzZXQsIHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvd3NbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDrqqnroZ0g7ZWE7YSw7J2YIOuLqOydvCDsoJXsnZguIGZpbmRNYW55IOyZgCB0b3RhbENvc3Qg6rCAIOqwmeydgCDsobDqsbTsnYQg67O064+E66GdIOqzteycoO2VnOuLpCDigJRcbiAgICog7ZmU66m07JeQ7IScIO2VhO2EsOulvCDqsbjrqbQg7ZaJIOyImOyZgCDruYTsmqnsnbQg7ZWo6ruYIOyige2YgOyguOyVvCDtlZjripTrjbAsIOuRkCDsv7zrpqzqsIAg6rCB7J6QIO2VhO2EsOulvFxuICAgKiDqtaztmITtlZjrqbQg7ZWc7Kq97JeQIOy2leydhCDstpTqsIDtlaAg65WMIOyhsOyaqe2eiCDslrTquIvrgpzri6QuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5TGlzdEZpbHRlcnMoXG4gICAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICAgIHBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgIHFiLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgYXNBcnJheShwYXJhbXMuaWQpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgcGFyYW1zLnRva2VuX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbm90X251bGwpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIHBhcmFtcy5wcm9qZWN0X25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubW9kZWxfbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLCBwYXJhbXMubW9kZWxfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyhxYiwgcGFyYW1zKTtcblxuICAgIGlmIChwYXJhbXMub3JkZXJCeSkgYXBwbHlPcmRlckJ5KHFiLCBwYXJhbXMub3JkZXJCeSk7XG5cbiAgICBjb25zdCBlbmhhbmNlcnMgPSB0aGlzLmNyZWF0ZUVuaGFuY2Vycyh7XG4gICAgICBBOiAocm93KSA9PiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3cocm93KSxcbiAgICAgIEM6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBlZmZvcnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb2plY3RfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgaGlzdG9yeT86IHVua25vd247XG4gICAgdG9vbHM/OiBUb29sRGVmaW5pdGlvbnM7XG4gICAgaXNfaW1hZ2VfZ2VuZXJhdGlvbj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwge1xuICAgICAgdXNlcl9wcm9tcHQ6IHBhcmFtcy51c2VyX3Byb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IHBhcmFtcy5zeXN0ZW1fcHJvbXB0ID8/IG51bGwsXG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCE7J2066+A66GcIHNlcnZpbmcgbW9kZWzsnYAg7JWE7KeBIOyVjCDsiJgg7JeG64ukLlxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHBhcmFtcy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZSA/PyBudWxsLFxuICAgICAgbW9kZWxfbmFtZTogbnVsbCxcbiAgICAgIGVmZm9ydDogcGFyYW1zLmVmZm9ydCA/PyBudWxsLFxuICAgICAgcHJvamVjdF9uYW1lOiBwYXJhbXMucHJvamVjdF9uYW1lID8/IG51bGwsXG4gICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgcmVzcG9uc2U6IFwiXCIsXG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IDAsXG4gICAgICBkdXJhdGlvbl9tczogMCxcbiAgICAgIHRvb2xfY2FsbF9jb3VudDogMCxcbiAgICAgIC8vIOydtOuvuOyngCB0dXJuIOyLneuzhChSMTMpLiBydW4g6rK966GcKHRvb2xzK2ltYWdlIOyhsO2VqSnrj4QgYXV0byDqsr3roZzsmYAg64+Z7J287ZWY6rKMIOuniO2CuS5cbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IHBhcmFtcy5pc19pbWFnZV9nZW5lcmF0aW9uID8/IGZhbHNlLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZmFsbGJhY2tfY291bnQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF9zb3VyY2U/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgaGlzdG9yeT86IHVua25vd247XG4gICAgICBlcnJvcl9tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgdG9vbF9jYWxsX2NvdW50PzogbnVtYmVyO1xuICAgICAgaW1hZ2VfY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgaW1hZ2VfY29zdF9tZXRob2Q/OiBzdHJpbmcgfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkcykge1xuICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHVwZGF0ZVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkKSB1cGRhdGUuaGlzdG9yeSA9IHBhcmFtcy5oaXN0b3J5O1xuICAgIHVwZGF0ZS50dGZ0X21zID0gKGF3YWl0IHRoaXMuZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZCkpID8/IDA7XG5cbiAgICAvLyDshJzrsoQgcnVuIOqyveuhnOuKlCBzdGVwIOyXkOyEnCDtmZXsoJXtlZwgZXhhY3QgY29zdCDrpbwg64SY6ri064ukLiDsmbjrtoAvbGVnYWN5IGNhbGxlciDqsIAg67mE7Jqp7J2EXG4gICAgLy8g7IOd65617ZWcIOqyveyasOyXkOunjCDsoIDsnqXrkJwg66qo6424K3VzYWdlIOuhnCDqs4TsgrDtlZzri6QuXG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmNvc3RfdXNkID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcmFtcy5pbnB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgICAuc2VsZWN0KHsgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIgfSlcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAuZmlyc3QoKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1vZGVsTmFtZSA9IHBhcmFtcy5tb2RlbF9uYW1lID8/IHJvdz8ubW9kZWxfbmFtZTtcbiAgICAgIGlmIChlZmZlY3RpdmVNb2RlbE5hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxNb2RlbE5hbWUoZWZmZWN0aXZlTW9kZWxOYW1lKTtcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHtcbiAgICAgICAgICB0b2tlbl9uYW1lOiBwYXJhbXMudG9rZW5fbmFtZSxcbiAgICAgICAgICBtb2RlbF9uYW1lOiBlZmZlY3RpdmVNb2RlbE5hbWUsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiBwYXJhbXMuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHBhcmFtcy5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBwYXJhbXMuY2FjaGVfcmVhZF90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICAgIH0pICogMV8wMDBfMDAwLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGUuY29zdF9zb3VyY2UgPSBcInByaWNpbmdfdGFibGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHVwZGF0ZSk7XG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyB0dGZ0X21zOiBcInR0ZnRfbXNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmUoXCJ0dGZ0X21zXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwic3RlcF9pbmRleFwiLCBcImFzY1wiKVxuICAgICAgLm9yZGVyQnkoXCJpZFwiLCBcImFzY1wiKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIHJvdz8udHRmdF9tcyA9PT0gbnVsbCB8fCByb3c/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIocm93LnR0ZnRfbXMpO1xuICB9XG5cbiAgYXN5bmMgYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3RlcEFnZ3JlZ2F0ZT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFNURVBfQUdHUkVHQVRFX1NFTEVDVClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKTtcbiAgICByZXR1cm4gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgc3RhbGUgY2FuZGlkYXRlcywgdGhlbiBleHBpcmVzIGVhY2ggcnVuIGluIGl0cyBvd24gc2hvcnQgdHJhbnNhY3Rpb24uXG4gICAqIFRoZSBjYW5kaWRhdGUgcXVlcnkgaXMgb25seSBhIGhpbnQ7IHRoZSB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbiByZWNoZWNrcyBpdFxuICAgKiBhZnRlciBhY3F1aXJpbmcgdGhlIGFkdmlzb3J5IGxvY2sgc2hhcmVkIHdpdGggdG9vbCBmb2xsb3ctdXBzLlxuICAgKi9cbiAgYXN5bmMgZXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bnMoXG4gICAgdGhyZXNob2xkTXM6IG51bWJlcixcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICBsaW1pdDogbnVtYmVyID0gMTAsXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IGNhbmRpZGF0ZUlkcyA9IGF3YWl0IHRoaXMuZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZCwgbGltaXQpO1xuICAgIGNvbnN0IGV4cGlyZWRJZHM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChjb25zdCByZXF1ZXN0TG9nSWQgb2YgY2FuZGlkYXRlSWRzKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy50cnlFeHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVuKHJlcXVlc3RMb2dJZCwgdGhyZXNob2xkLCBlcnJvck1lc3NhZ2UpKSB7XG4gICAgICAgIGV4cGlyZWRJZHMucHVzaChyZXF1ZXN0TG9nSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwaXJlZElkcztcbiAgfVxuXG4gIGFzeW5jIGZpbmRTdGFsZVRvb2xXYWl0aW5nUnVuQ2FuZGlkYXRlcyh0aHJlc2hvbGQ6IERhdGUsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcIndcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuam9pbihcInJlcXVlc3RfbG9nX3N0ZXBzXCIsIFwicmVxdWVzdF9sb2dzLmlkXCIsIFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIilcbiAgICAgIC5kaXN0aW5jdChcInJlcXVlc3RfbG9ncy5pZFwiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcInJlcXVlc3RfbG9ncy5pZFwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsIFwicnVubmluZ1wiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMudHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuY3JlYXRlZF9hdFwiLCBcIjxcIiwgdGhyZXNob2xkKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMudG9vbF9yZXN1bHRcIiwgbnVsbClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLmVycm9yXCIsIG51bGwpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgoeyBpZCB9KSA9PiBpZCk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCh7IGRiUHJlc2V0OiBcIndcIiB9KVxuICBhc3luYyB0cnlFeHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRocmVzaG9sZDogRGF0ZSxcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBjb25zdCBsb2NrUmVzdWx0ID0gKGF3YWl0IHdkYi5rbmV4LnJhdyhcIlNFTEVDVCBwZ190cnlfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pIEFTIGFjcXVpcmVkXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pKSBhcyB7IHJvd3M/OiBBcnJheTx7IGFjcXVpcmVkPzogYm9vbGVhbiB9PiB9O1xuICAgIGlmIChsb2NrUmVzdWx0LnJvd3M/LlswXT8uYWNxdWlyZWQgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFRoZSBmb2xsb3ctdXAgcGF0aCB1c2VzIHRoZSBzYW1lIHdyaXRlciB0cmFuc2FjdGlvbiBsb2NrLiBSZWNoZWNrIGFmdGVyXG4gICAgLy8gbG9ja2luZyBzbyBhIHJlc3VsdCBjb21taXR0ZWQgZHVyaW5nIGNhbmRpZGF0ZSBkaXNjb3ZlcnkgbWFrZXMgdGhpcyBhIG5vLW9wLlxuICAgIGNvbnN0IHVucmVzb2x2ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyBpZDogXCJpZFwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJ0b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwiZXJyb3JcIiwgbnVsbClcbiAgICAgIC5maXJzdCgpO1xuICAgIGlmICghdW5yZXNvbHZlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFJvd3MgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Moc3RlcFJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgICBjb25zdCBmaXJzdFR0ZnQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyB0dGZ0X21zOiBcInR0ZnRfbXNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmUoXCJ0dGZ0X21zXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwic3RlcF9pbmRleFwiLCBcImFzY1wiKVxuICAgICAgLm9yZGVyQnkoXCJpZFwiLCBcImFzY1wiKVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwic3RhdHVzXCIsIFwicnVubmluZ1wiKVxuICAgICAgLnVwZGF0ZSh7XG4gICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGlucHV0X3Rva2VuczogYWdncmVnYXRlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogYWdncmVnYXRlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGR1cmF0aW9uX21zOiBhZ2dyZWdhdGUuZHVyYXRpb25fbXMsXG4gICAgICAgIGZhbGxiYWNrX2NvdW50OiBhZ2dyZWdhdGUuZmFsbGJhY2tfY291bnQsXG4gICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY29zdF9zb3VyY2UgIT09IHVuZGVmaW5lZCA/IHsgY29zdF9zb3VyY2U6IGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSB9IDoge30pLFxuICAgICAgICB0dGZ0X21zOlxuICAgICAgICAgIGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gbnVsbCB8fCBmaXJzdFR0ZnQ/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IE51bWJlcihmaXJzdFR0ZnQudHRmdF9tcyksXG4gICAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlZCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIG5hdGl2ZSBxZ3JpZCB0b29sIGZvbGxvdy11cCBhbmQgY29tcHV0ZXMgaXRzIG5leHQgc3RlcCBpbmRleCB3aGlsZVxuICAgKiBob2xkaW5nIHRoZSBwZXItcnVuIGFkdmlzb3J5IGxvY2sgc2hhcmVkIHdpdGggc3RhbGUgY2xlYW51cC5cbiAgICovXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIGNvbnRpbnVlVG9vbFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sUmVzdWx0czogVG9vbFJlc3VsdENvbnRpbnVhdGlvbltdLFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX2Fkdmlzb3J5X3hhY3RfbG9jayg/LCA/KVwiLCBbXG4gICAgICBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCxcbiAgICAgIHJlcXVlc3RMb2dJZCxcbiAgICBdKTtcblxuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyBzdGF0dXM6IFwic3RhdHVzXCIgfSlcbiAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5maXJzdCgpO1xuICAgIGlmICghcnVuKSB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgbG9nIHJ1biAke3JlcXVlc3RMb2dJZH0gbm90IGZvdW5kYCk7XG4gICAgaWYgKHJ1bi5zdGF0dXMgIT09IFwicnVubmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgbG9nIHJ1biAke3JlcXVlc3RMb2dJZH0gaXMgYWxyZWFkeSAke3J1bi5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgdG9vbFJlc3VsdHMpIHtcbiAgICAgIGF3YWl0IHdkYlxuICAgICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLndoZXJlKFwidG9vbF9jYWxsX2lkXCIsIHJlc3VsdC50b29sQ2FsbElkKVxuICAgICAgICAud2hlcmUoXCJ0eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAgIC51cGRhdGUocmVzdWx0LmlzRXJyb3IgPyB7IGVycm9yOiByZXN1bHQub3V0cHV0IH0gOiB7IHRvb2xfcmVzdWx0OiByZXN1bHQub3V0cHV0IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IG1heF9zdGVwOiBQdXJpLm1heChcInN0ZXBfaW5kZXhcIikgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5maXJzdCgpO1xuICAgIHJldHVybiAocm93Py5tYXhfc3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIO2ZlOuptCDtkZzsi5zsmqkg7LSdIOu5hOyaqS4g66qp66Gd6rO8IOqwmeydgCDtlYTthLDrpbwg7KCB7Jqp7ZWc64ukLlxuICAgKlxuICAgKiDsoITssrTrpbwg7KGw6rG0IOyXhuydtCBTVU0g7ZWcIOuSpCwgYGNvc3Rfc291cmNlYCDqsIAg7JeG64qUIGxlZ2FjeSByb3cg7J2YIOywqOyVoeunjCDrs7TsoJXtlZzri6QuXG4gICAqIOyhsOqxtCDsl4bripQgU1VNIOydtOyWtOyVvCBgKHByb2plY3RfbmFtZSwgY29zdF91c2QpYCDsu6TrsoTrp4Eg7J24642x7Iqk6rCAIEluZGV4IE9ubHkgU2NhbiDsnYRcbiAgICog7YOE64ukIOKAlCBgY29zdF9zb3VyY2UgSVMgTk9UIE5VTExgIOydhCDqsbjrqbQg6re4IOy7rOufvOydtCDsnbjrjbHsiqTsl5Ag7JeG7Ja0IGhlYXAg7J2EIOuLpOyLnCDrtJDslbxcbiAgICog7ZWY66+A66GcIO2UjOuemOuEiOqwgCDsnbjrjbHsiqTrpbwg67KE66as6rOgIHNlcSBzY2FuIOycvOuhnCDrj4zslYTqsITri6Qo7Iuk7LihIDIzMG1zIOKGkiA4MTRtcykuXG4gICAqXG4gICAqIGxlZ2FjeSDrs7TsoJXsnYQg64Ko6rKo65GUIOydtOycoDog67Cx7ZWE66GcIOq4sOyhtCBsZWdhY3kg64qUIDAg7J20IOuQmOyXiOyngOunjCwg7Jm467aAIOuhnOqxsOqwgFxuICAgKiBgQXBwZW5kU3RlcElucHV0YC9gRmluaXNoUnVuSW5wdXRgIOycvOuhnCBjb3N0U291cmNlIOyXhuydtCDrhKPsnLzrqbQg64uk7IucIOyDneq4uCDsiJgg7J6I64ukLlxuICAgKiDqt7jrn7Agcm93IOuKlCDsoIDsnqXqsJIg64yA7IugIO2YhOyerCDqsIDqsqntkZwg7J6s6rOE7IKw6rCS7J20IOunnuycvOuvgOuhnCDssKjslaHsnYQg642U7ZWc64ukLlxuICAgKlxuICAgKiDtlYTthLAg7KGw6rG07J2EIOyXrOq4sOyEnCDri6Tsi5wg6rWs7ZiE7ZWY7KeAIOyViuqzoCBgYXBwbHlMaXN0RmlsdGVyc2Ag66W8IOqzteycoO2VmOuKlCDqsoPsnbQg7ZW17Ius7J2064ukIOKAlFxuICAgKiDrkZAg7L+866as6rCAIOqwgeyekCDtlYTthLDrpbwg6rCA7KeA66m0IO2ZlOuptOyXkOyEnCDtlYTthLDrpbwg6rG47JeI7J2EIOuVjCDtlokg7IiY7JmAIOu5hOyaqeydtCDsobDsmqntnogg7Ja06riL64Kc64ukLlxuICAgKi9cbiAgYXN5bmMgdG90YWxDb3N0KHJhd1BhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMgPSB7IG51bTogMCwgcGFnZTogMSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgUmVxdWVzdExvZ0xpc3RQYXJhbXM7XG5cbiAgICBjb25zdCB7IHFiOiB0b3RhbFFiIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoXCJDXCIpO1xuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyh0b3RhbFFiLCBwYXJhbXMpO1xuICAgIC8vIHN1YnNldCBxYiDripQg7Lus65+8IOuqqeuhneydtCDsnbTrr7ggU0VMRUNUIOyXkCDrsJXtmIAg7J6I7Ja0IOynkeqzhOulvCDslrnsnLzrqbQgR1JPVVAgQlkg7JeQ65+s6rCAIOuCnOuLpC5cbiAgICAvLyBleGVjdXRlQ291bnRRdWVyeSDsmYAg6rCZ7J2AIOuwqeyLneycvOuhnCBzZWxlY3Qg66W8IOu5hOyasOqzoCDsp5Hqs4Trp4wg64Ko6ri064ukLlxuICAgIGNvbnN0IHN0b3JlZCA9IGF3YWl0IHRvdGFsUWJcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLy8g7J2M7IiYIOyggOyepeqwkijqs7zqsbAg67KE6re4KeydgCAwIOycvOuhnCDriIzrn6zshJwg642U7ZWc64ukIOKAlCBKUyDsqr0gTWF0aC5tYXgg7JmAIOqwmeydgCDqt5zsuZkuXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgdG90YWw6IFB1cmkucmF3TnVtYmVyKFwiQ09BTEVTQ0UoU1VNKEdSRUFURVNUKHJlcXVlc3RfbG9ncy5jb3N0X3VzZCwgMCkpLCAwKVwiKSxcbiAgICAgIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHsgcWI6IGxlZ2FjeVFiIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoXCJDXCIpO1xuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyhsZWdhY3lRYiwgcGFyYW1zKTtcbiAgICBjb25zdCBsZWdhY3lSb3dzID0gYXdhaXQgbGVnYWN5UWJcbiAgICAgIC53aGVyZVJhdyhcInJlcXVlc3RfbG9ncy5jb3N0X3NvdXJjZSBJUyBOVUxMIE9SIHJlcXVlc3RfbG9ncy5jb3N0X3VzZCBJUyBOVUxMXCIpXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICB0b2tlbl9uYW1lOiBcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsXG4gICAgICAgIG1vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLm1vZGVsX25hbWVcIixcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5pbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3Mub3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICAgICAgY29zdF91c2Q6IFwicmVxdWVzdF9sb2dzLmNvc3RfdXNkXCIsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHN0b3JlZFRvdGFsID0gTnVtYmVyKHN0b3JlZD8udG90YWwgPz8gMCkgLyBNSUNST19VU0Q7XG5cbiAgICAvLyBsZWdhY3kgcm93IOuKlCDsnIQgU1VNIOyXkCDsoIDsnqXqsJLsnLzroZwg7J2066+4IO2PrO2VqOuQmOyWtCDsnojri6QuIOyerOqzhOyCsOqwkuqzvOydmCDssKjslaHrp4wg642U7ZWc64ukLlxuICAgIHJldHVybiBsZWdhY3lSb3dzLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdW1tZWQgPSBNYXRoLm1heChyb3cuY29zdF91c2QgPz8gMCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93KTtcbiAgICAgIGlmICghdXNhZ2UubW9kZWwpIHJldHVybiBzdW07XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdW0gK1xuICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB7XG4gICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KSAtXG4gICAgICAgIGFscmVhZHlTdW1tZWRcbiAgICAgICk7XG4gICAgfSwgc3RvcmVkVG90YWwpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RQcm9qZWN0TmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmRpc3RpbmN0KFwicHJvamVjdF9uYW1lXCIpXG4gICAgICAud2hlcmUoXCJwcm9qZWN0X25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJwcm9qZWN0X25hbWVcIiwgXCJhc2NcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBwcm9qZWN0X25hbWU6IFwicHJvamVjdF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIucHJvamVjdF9uYW1lISk7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdE1vZGVsTmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmRpc3RpbmN0KFwibW9kZWxfbmFtZVwiKVxuICAgICAgLndoZXJlKFwibW9kZWxfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcIm1vZGVsX25hbWVcIiwgXCJhc2NcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBtb2RlbF9uYW1lOiBcIm1vZGVsX25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5tb2RlbF9uYW1lISk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgZGVsKGlkczogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cnhcbiAgICAgICAgLnRhYmxlKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiLCBpZHMpXG4gICAgICAgIC5kZWxldGUoKTtcbiAgICAgIHJldHVybiB0cngudGFibGUoXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBpZHMpLmRlbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkcy5sZW5ndGg7XG4gIH1cbn1cblxu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
539
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25TY2hlbWFUb1pvZCB9IGZyb20gXCJqc29uLXNjaGVtYS10by16b2RcIjtcbmltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQgeyByZW5kZXJQYXJzZWRKc29uU2NoZW1hVHlwZVRleHQgfSBmcm9tIFwiLi9qc29uLXNjaGVtYS10eXBlLXRleHRcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gIHR5cGUgUmVxdWVzdExvZ1NhdmVQYXJhbXMsXG4gIHR5cGUgVG9vbERlZmluaXRpb25zLFxufSBmcm9tIFwiLi9yZXF1ZXN0LWxvZy50eXBlc1wiO1xuaW1wb3J0IHsgZm9ybWF0Wm9kQ29kZSB9IGZyb20gXCIuL3pvZC1jb2RlLWZvcm1hdFwiO1xuXG4vLyBjb3N0X3VzZOuKlCDsoJXsiJggbWljcm8tVVNE66GcIOyggOyepS4g7Iuk7KCcIFVTRCA9IGNvc3RfdXNkIC8gTUlDUk9fVVNELlxuZXhwb3J0IGNvbnN0IE1JQ1JPX1VTRCA9IDFfMDAwXzAwMDtcbmNvbnN0IFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lEID0gNzE4O1xuXG50eXBlIFRvb2xSZXN1bHRDb250aW51YXRpb24gPSB7XG4gIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxudHlwZSBSZXF1ZXN0TG9nU3RlcEFnZ3JlZ2F0ZSA9IHtcbiAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfcmVhZF90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyO1xuICBkdXJhdGlvbl9tczogbnVtYmVyO1xuICBmYWxsYmFja19jb3VudDogbnVtYmVyO1xuICBjb3N0X3VzZDogbnVtYmVyO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZztcbn07XG5cbmNvbnN0IFNURVBfQUdHUkVHQVRFX1NFTEVDVCA9IHtcbiAgaW5wdXRfdG9rZW5zOiBcImlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcIm91dHB1dF90b2tlbnNcIixcbiAgY2FjaGVfcmVhZF90b2tlbnM6IFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgZHVyYXRpb25fbXM6IFwiZHVyYXRpb25fbXNcIixcbiAgZmFsbGJhY2tfY291bnQ6IFwiZmFsbGJhY2tfY291bnRcIixcbiAgY29zdF91c2Q6IFwiY29zdF91c2RcIixcbiAgY29zdF9zb3VyY2U6IFwiY29zdF9zb3VyY2VcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Mocm93czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUge1xuICBjb25zdCBzdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciA9PlxuICAgIHJvd3MucmVkdWNlKCh0b3RhbCwgcm93KSA9PiB0b3RhbCArIE51bWJlcihyb3dbZmllbGRdID8/IDApLCAwKTtcbiAgY29uc3Qgb3B0aW9uYWxTdW0gPSAoZmllbGQ6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCA9PlxuICAgIHJvd3Muc29tZSgocm93KSA9PiByb3dbZmllbGRdICE9PSBudWxsICYmIHJvd1tmaWVsZF0gIT09IHVuZGVmaW5lZCkgPyBzdW0oZmllbGQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb2xsYXBzZSA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICByb3dzXG4gICAgICAgICAgLm1hcCgocm93KSA9PiByb3dbZmllbGRdKVxuICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5sZW5ndGggPiAwKSxcbiAgICAgICksXG4gICAgXTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc1swXSA6IFwibWl4ZWRcIjtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dF90b2tlbnM6IHN1bShcImlucHV0X3Rva2Vuc1wiKSxcbiAgICBvdXRwdXRfdG9rZW5zOiBzdW0oXCJvdXRwdXRfdG9rZW5zXCIpLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBzdW0oXCJjYWNoZV9yZWFkX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHN1bShcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogb3B0aW9uYWxTdW0oXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIiksXG4gICAgZHVyYXRpb25fbXM6IHN1bShcImR1cmF0aW9uX21zXCIpLFxuICAgIGZhbGxiYWNrX2NvdW50OiBzdW0oXCJmYWxsYmFja19jb3VudFwiKSxcbiAgICBjb3N0X3VzZDogc3VtKFwiY29zdF91c2RcIiksXG4gICAgY29zdF9zb3VyY2U6IGNvbGxhcHNlKFwiY29zdF9zb3VyY2VcIiksXG4gIH07XG59XG5cbnR5cGUgUmVxdWVzdExvZ1VzYWdlUm93ID0ge1xuICB0b2tlbl9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3VzZD86IG51bWJlciB8IG51bGw7XG4gIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGlzQW50aHJvcGljVXNhZ2VSb3cocm93OiBQaWNrPFJlcXVlc3RMb2dVc2FnZVJvdywgXCJ0b2tlbl9uYW1lXCIgfCBcIm1vZGVsX25hbWVcIj4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICByb3cudG9rZW5fbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImNsYXVkZS1cIikgPT09IHRydWUgfHxcbiAgICByb3cubW9kZWxfbmFtZT8uc3RhcnRzV2l0aChcImFudGhyb3BpYy9jbGF1ZGUtXCIpID09PSB0cnVlXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNhbm9uaWNhbE1vZGVsTmFtZShtb2RlbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbE5hbWUuaW5jbHVkZXMoXCIvXCIpID8gbW9kZWxOYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSEgOiBtb2RlbE5hbWU7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93OiBSZXF1ZXN0TG9nVXNhZ2VSb3cpOiB7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVkSW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtPzogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaD86IG51bWJlcjtcbn0ge1xuICBjb25zdCBjYWNoZVJlYWQgPSByb3cuY2FjaGVfcmVhZF90b2tlbnM7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb24gPSByb3cuY2FjaGVfY3JlYXRpb25fdG9rZW5zO1xuICBjb25zdCBzdG9yZWRJbnB1dCA9IHJvdy5pbnB1dF90b2tlbnM7XG4gIGNvbnN0IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPVxuICAgIGlzQW50aHJvcGljVXNhZ2VSb3cocm93KSAmJiBzdG9yZWRJbnB1dCA8IGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb247XG4gIHJldHVybiB7XG4gICAgbW9kZWw6IHJvdy5tb2RlbF9uYW1lID8gY2Fub25pY2FsTW9kZWxOYW1lKHJvdy5tb2RlbF9uYW1lKSA6IG51bGwsXG4gICAgaW5wdXRUb2tlbnM6IGxlZ2FjeUFudGhyb3BpY1NwbGl0SW5wdXQgPyBzdG9yZWRJbnB1dCArIGNhY2hlUmVhZCArIGNhY2hlQ3JlYXRpb24gOiBzdG9yZWRJbnB1dCxcbiAgICBvdXRwdXRUb2tlbnM6IHJvdy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiBjYWNoZVJlYWQsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiBjYWNoZUNyZWF0aW9uLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLihyb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSBudWxsICYmIHJvdy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3c8VCBleHRlbmRzIFJlcXVlc3RMb2dVc2FnZVJvdz4ocm93OiBUKTogVCB7XG4gIC8vIOyDiCByb3cg64qUIOuLueyLnOydmCBwcm92aWRlci/qsIDqsqntkZwg67mE7Jqp7J2EIO2ZleyglSDsoIDsnqXtlZzri6QuIO2YhOyerCDqsIDqsqntkZzroZwg642u7Ja07JOw7KeAIOyViuuKlOuLpC5cbiAgaWYgKHJvdy5jb3N0X3NvdXJjZSkgcmV0dXJuIHJvdztcbiAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gIGlmICh1c2FnZS5pbnB1dFRva2VucyA9PT0gcm93LmlucHV0X3Rva2VucykgcmV0dXJuIHJvdztcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHsgLi4ucm93LCBpbnB1dF90b2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zIH07XG4gIGlmICh1c2FnZS5tb2RlbCkge1xuICAgIG5vcm1hbGl6ZWQuY29zdF91c2QgPSBNYXRoLnJvdW5kKGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHVzYWdlKSAqIE1JQ1JPX1VTRCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogYG9yZGVyQnlgIGVudW0g6rCSKGDsu6zrn7wt67Cp7ZalYCnsnYQg7KCV66CsIOygiOuhnCDsmK7quLTri6QuXG4gKlxuICogZW51bSDsnbQgMTgg7KKF7J206528IOy8gOydtOyKpOulvCDsnbzsnbzsnbQg7KCB64qUIOuMgOyLoCDtjIzsi7HtlZjrkJgsIOy7rOufvOydgCDslYTrnpgg66qp66Gd7Jy866GcIO2VnOygle2VnOuLpCDigJRcbiAqIOusuOyekOyXtOydhCDqt7jrjIDroZwg7Lus65+866qF7JeQIOuEmOq4sOuptCBlbnVtIOydtCDrsJTrgJQg65WMIOqygOymnSDsl4bripQg7Iud67OE7J6Q6rCAIFNRTCDroZwg7Z2Y65+s65Og64ukLlxuICog66qp66Gd7JeQIOyXhuuKlCDqsJLsnYAg6riw67O4IOygleugrChpZCBkZXNjKeuhnCDrlqjslrTsp4Tri6QuXG4gKi9cbmNvbnN0IE9SREVSQUJMRV9DT0xVTU5TID0ge1xuICBpZDogXCJyZXF1ZXN0X2xvZ3MuaWRcIixcbiAgY3JlYXRlZF9hdDogXCJyZXF1ZXN0X2xvZ3MuY3JlYXRlZF9hdFwiLFxuICB0dGZ0X21zOiBcInJlcXVlc3RfbG9ncy50dGZ0X21zXCIsXG4gIGR1cmF0aW9uX21zOiBcInJlcXVlc3RfbG9ncy5kdXJhdGlvbl9tc1wiLFxuICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICBvdXRwdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5vdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICBjb3N0X3VzZDogXCJyZXF1ZXN0X2xvZ3MuY29zdF91c2RcIixcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGFwcGx5T3JkZXJCeShcbiAgcWI6IFJldHVyblR5cGU8UmVxdWVzdExvZ01vZGVsQ2xhc3NbXCJnZXRTdWJzZXRRdWVyaWVzXCJdPltcInFiXCJdLFxuICBvcmRlckJ5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VwYXJhdG9yID0gb3JkZXJCeS5sYXN0SW5kZXhPZihcIi1cIik7XG4gIGNvbnN0IGtleSA9IG9yZGVyQnkuc2xpY2UoMCwgc2VwYXJhdG9yKSBhcyBrZXlvZiB0eXBlb2YgT1JERVJBQkxFX0NPTFVNTlM7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyQnkuc2xpY2Uoc2VwYXJhdG9yICsgMSkgPT09IFwiYXNjXCIgPyBcImFzY1wiIDogXCJkZXNjXCI7XG4gIGNvbnN0IGNvbHVtbiA9IE9SREVSQUJMRV9DT0xVTU5TW2tleV07XG5cbiAgaWYgKCFjb2x1bW4pIHtcbiAgICBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcWIub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gIC8vIOuPmeygkCDtlonsnZgg7Iic7ISc6rCAIO2OmOydtOyngOuniOuLpCDtnZTrk6Trpqzsp4Ag7JWK6rKMIOqzoOycoCDsu6zrn7zsnLzroZwgdGllLWJyZWFrIO2VnOuLpC5cbiAgaWYgKGtleSAhPT0gXCJpZFwiKSBxYi5vcmRlckJ5KFwicmVxdWVzdF9sb2dzLmlkXCIsIFwiZGVzY1wiKTtcbn1cblxuLypcbiAgUmVxdWVzdExvZyBNb2RlbFxuKi9cbmNsYXNzIFJlcXVlc3RMb2dNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8XG4gIFJlcXVlc3RMb2dTdWJzZXRLZXksXG4gIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nLFxuICB0eXBlb2YgcmVxdWVzdExvZ1N1YnNldFF1ZXJpZXMsXG4gIHR5cGVvZiByZXF1ZXN0TG9nTG9hZGVyUXVlcmllc1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiUmVxdWVzdExvZ1wiLCByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcywgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0sIHJlc291cmNlTmFtZTogXCJSZXF1ZXN0TG9nXCIgfSlcbiAgYXN5bmMgZmluZEJ5SWQ8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBpZDogbnVtYmVyLFxuICApOiBQcm9taXNlPFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgaWQsXG4gICAgICBudW06IDEsXG4gICAgICBwYWdlOiAxLFxuICAgIH0pO1xuICAgIGlmICghcm93c1swXSkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFNEKFwiZXJyb3IuZW50aXR5Tm90Rm91bmRcIikoXCJSZXF1ZXN0TG9nXCIsIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NbMF07XG4gIH1cblxuICBhc3luYyBmaW5kT25lPFQgZXh0ZW5kcyBSZXF1ZXN0TG9nU3Vic2V0S2V5PihcbiAgICBzdWJzZXQ6IFQsXG4gICAgbGlzdFBhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMsXG4gICk6IFByb21pc2U8UmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0gfCBudWxsPiB7XG4gICAgY29uc3QgeyByb3dzIH0gPSBhd2FpdCB0aGlzLmZpbmRNYW55KHN1YnNldCwge1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm93c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOuqqeuhnSDtlYTthLDsnZgg64uo7J28IOygleydmC4gZmluZE1hbnkg7JmAIHRvdGFsQ29zdCDqsIAg6rCZ7J2AIOyhsOqxtOydhCDrs7Trj4TroZ0g6rO17Jyg7ZWc64ukIOKAlFxuICAgKiDtmZTrqbTsl5DshJwg7ZWE7YSw66W8IOqxuOuptCDtlokg7IiY7JmAIOu5hOyaqeydtCDtlajqu5gg7KKB7ZiA7KC47JW8IO2VmOuKlOuNsCwg65GQIOy/vOumrOqwgCDqsIHsnpAg7ZWE7YSw66W8XG4gICAqIOq1rO2YhO2VmOuptCDtlZzsqr3sl5Ag7LaV7J2EIOy2lOqwgO2VoCDrlYwg7KGw7Jqp7Z6IIOyWtOq4i+uCnOuLpC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlMaXN0RmlsdGVycyhcbiAgICBxYjogUmV0dXJuVHlwZTxSZXF1ZXN0TG9nTW9kZWxDbGFzc1tcImdldFN1YnNldFF1ZXJpZXNcIl0+W1wicWJcIl0sXG4gICAgcGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHBhcmFtcy5pZCkge1xuICAgICAgcWIud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBhc0FycmF5KHBhcmFtcy5pZCkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBwYXJhbXMudG9rZW5fbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWVfaXNfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIG51bGwpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLnByb2plY3RfbmFtZV9pc19ub3RfbnVsbCkge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucHJvamVjdF9uYW1lXCIsIFwiIT1cIiwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMucHJvamVjdF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgcGFyYW1zLnByb2plY3RfbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5tb2RlbF9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5tb2RlbF9uYW1lXCIsIHBhcmFtcy5tb2RlbF9uYW1lKTtcbiAgICB9XG5cbiAgICAvLyBzdHJ1Y3R1cmVkIOydkeuLteydtCBKU09OIO2MjOyLseyXkCDsi6TtjKjtlZwg7ZaJ66eMIOKAlCBicm9rZW4g67Cw7LmYIOyhsOyCrOyaqSDtlYTthLAuXG4gICAgaWYgKHBhcmFtcy5yZXNwb25zZV9qc29uX2Jyb2tlbikge1xuICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MucmVzcG9uc2VfanNvbl9va1wiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5zZWFyY2ggJiYgcGFyYW1zLmtleXdvcmQgJiYgcGFyYW1zLmtleXdvcmQubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwiaWRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5pZFwiLCBOdW1iZXIocGFyYW1zLmtleXdvcmQpKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ0b2tlbl9uYW1lXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MudG9rZW5fbmFtZVwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnNlYXJjaCA9PT0gXCJ1c2VyX3Byb21wdFwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnVzZXJfcHJvbXB0XCIsIFwibGlrZVwiLCBgJSR7cGFyYW1zLmtleXdvcmR9JWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJlcnJvci51bmtub3duU2VhcmNoRmllbGRcIikocGFyYW1zLnNlYXJjaCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdLCByZXNvdXJjZU5hbWU6IFwiUmVxdWVzdExvZ3NcIiB9KVxuICBhc3luYyBmaW5kTWFueTxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleSwgTFAgZXh0ZW5kcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcz4oXG4gICAgc3Vic2V0OiBULFxuICAgIHJhd1BhcmFtcz86IExQLFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMjQsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICBvcmRlckJ5OiBcImlkLWRlc2NcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWIsIG9uU3Vic2V0OiBfIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoc3Vic2V0KTtcblxuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyhxYiwgcGFyYW1zKTtcblxuICAgIGlmIChwYXJhbXMub3JkZXJCeSkgYXBwbHlPcmRlckJ5KHFiLCBwYXJhbXMub3JkZXJCeSk7XG5cbiAgICBjb25zdCBlbmhhbmNlcnMgPSB0aGlzLmNyZWF0ZUVuaGFuY2Vycyh7XG4gICAgICBBOiAocm93KSA9PiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3cocm93KSxcbiAgICAgIEM6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDstZzqt7wg6rWs6rCE7J2YIHByb3ZpZGVyIOuzhCDqsr3rn4kg7Ya16rOEKOuqqOuLiO2EsOungeyaqSkuIHByb3ZpZGVyIOuKlCByZXF1ZXN0ZWRfbW9kZWxfbmFtZSDsnZhcbiAgICogXCJvcGVuYWkvLi4uXCIgfCBcImFudGhyb3BpYy8uLi5cIiBwcmVmaXgg66GcIO2MkOygle2VnOuLpCDigJQgc2VydmluZyBtb2RlbF9uYW1lIOydgCBwcmVmaXgg6rCAXG4gICAqIOyXhuqzoCwgcnVubmluZyDstIjquLDsl5Qg7JWE7KeBIOu5hOyWtCDsnojri6QuIOynkeqzhOuKlCBKUyDsl5DshJwg7ZWc64ukOiDtj7Trp4Eg7KO86riw6rCAIOuKkOyKqO2VmOqzoFxuICAgKiDqtazqsITsnbQg7Ken7JWEIHJvdyDsiJjqsIAg7J6R7Jy866mwLCBwcmVmaXggQ0FTRSDsi53snYQg7L+866asIOu5jOuNlOyXkCDrsJXsp4Ag7JWK7JWE64+EIOuQnOuLpC5cbiAgICovXG4gIGFzeW5jIHByb3ZpZGVyU3RhdHNTaW5jZShzaW5jZTogRGF0ZSk6IFByb21pc2U8XG4gICAgQXJyYXk8e1xuICAgICAgcHJvdmlkZXI6IHN0cmluZztcbiAgICAgIHJlcXVlc3RzOiBudW1iZXI7XG4gICAgICBlcnJvcnM6IG51bWJlcjtcbiAgICAgIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gICAgICBjYWNoZVJlYWRUb2tlbnM6IG51bWJlcjtcbiAgICB9PlxuICA+IHtcbiAgICBjb25zdCByZGIgPSB0aGlzLmdldFB1cmkoXCJyXCIpO1xuICAgIGNvbnN0IHJvd3MgPSAoYXdhaXQgcmRiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBcInJlcXVlc3RfbG9ncy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgICAgICBzdGF0dXM6IFwicmVxdWVzdF9sb2dzLnN0YXR1c1wiLFxuICAgICAgICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuY3JlYXRlZF9hdFwiLCBcIj49XCIsIHNpbmNlKSkgYXMgdW5rbm93biBhcyBBcnJheTx7XG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zOiBudW1iZXI7XG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICAgIH0+O1xuXG4gICAgY29uc3QgYnlQcm92aWRlciA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICB7IHJlcXVlc3RzOiBudW1iZXI7IGVycm9yczogbnVtYmVyOyBpbnB1dFRva2VuczogbnVtYmVyOyBjYWNoZVJlYWRUb2tlbnM6IG51bWJlciB9XG4gICAgPigpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gcm93LnJlcXVlc3RlZF9tb2RlbF9uYW1lID8/IFwiXCI7XG4gICAgICBjb25zdCBwcm92aWRlciA9IG1vZGVsLnN0YXJ0c1dpdGgoXCJvcGVuYWkvXCIpXG4gICAgICAgID8gXCJvcGVuYWlcIlxuICAgICAgICA6IG1vZGVsLnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpXG4gICAgICAgICAgPyBcImFudGhyb3BpY1wiXG4gICAgICAgICAgOiBcInVua25vd25cIjtcbiAgICAgIGNvbnN0IGFnZyA9IGJ5UHJvdmlkZXIuZ2V0KHByb3ZpZGVyKSA/PyB7XG4gICAgICAgIHJlcXVlc3RzOiAwLFxuICAgICAgICBlcnJvcnM6IDAsXG4gICAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZVJlYWRUb2tlbnM6IDAsXG4gICAgICB9O1xuICAgICAgYWdnLnJlcXVlc3RzICs9IDE7XG4gICAgICBpZiAocm93LnN0YXR1cyA9PT0gXCJlcnJvclwiKSBhZ2cuZXJyb3JzICs9IDE7XG4gICAgICBhZ2cuaW5wdXRUb2tlbnMgKz0gcm93LmlucHV0X3Rva2VucztcbiAgICAgIGFnZy5jYWNoZVJlYWRUb2tlbnMgKz0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICAgICAgYnlQcm92aWRlci5zZXQocHJvdmlkZXIsIGFnZyk7XG4gICAgfVxuICAgIHJldHVybiBbLi4uYnlQcm92aWRlci5lbnRyaWVzKCldXG4gICAgICAubWFwKChbcHJvdmlkZXIsIGFnZ10pID0+ICh7IHByb3ZpZGVyLCAuLi5hZ2cgfSkpXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IGEucHJvdmlkZXIubG9jYWxlQ29tcGFyZShiLnByb3ZpZGVyKSk7XG4gIH1cblxuICAvKipcbiAgICogc3RydWN0dXJlZCBvdXRwdXQg7JqU7LKt7J2YIEpTT04gU2NoZW1hIOulvCDtkZzsi5zsmqkg7YOA7J6FIO2FjeyKpO2KuOuhnCDrs4DtmZjtlZzri6QuXG4gICAqIHR5cGVzY3JpcHQg64qUIOqwhOqysO2VnCBgdHlwZWAg7ISg7Ja4LCB6b2Qg64qUIOyerOq1rOyEseuQnCB6b2Qg7ZGc7ZiE7Iud7J2064ukIOKAlCDsm5Drs7ggem9kXG4gICAqIOyGjOyKpOuKlCB3aXJlIOulvCDqsbTrhIjsmKTrqbAg7IaM7Iuk65CY66+A66GcIHJlZmluZS90cmFuc2Zvcm0g66WY64qUIOuzteybkOuQmOyngCDslYrripTri6QuXG4gICAqIOyKpO2CpOuniOqwgCDsl4bqsbDrgpgg67OA7ZmYIOyLpO2MqOuptCBudWxsIOKAlCDtmZTrqbTsnYAg7ZW064u5IOu4lOuhnSDtkZzsi5zrpbwg7IOd65617ZWc64ukLlxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgcmVzcG9uc2VUeXBlVHMoaWQ6IG51bWJlcik6IFByb21pc2U8e1xuICAgIHR5cGVzY3JpcHQ6IHN0cmluZyB8IG51bGw7XG4gICAgem9kOiBzdHJpbmcgfCBudWxsO1xuICB9PiB7XG4gICAgY29uc3QgcmRiID0gdGhpcy5nZXRQdXJpKFwiclwiKTtcbiAgICBjb25zdCByb3dzID0gKGF3YWl0IHJkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyBqc29uX3NjaGVtYTogXCJyZXF1ZXN0X2xvZ3MuanNvbl9zY2hlbWFcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkKSkgYXMgdW5rbm93biBhcyBBcnJheTx7IGpzb25fc2NoZW1hOiBzdHJpbmcgfCBudWxsIH0+O1xuICAgIGNvbnN0IHNjaGVtYSA9IHJvd3NbMF0/Lmpzb25fc2NoZW1hO1xuICAgIGlmICghc2NoZW1hKSByZXR1cm4geyB0eXBlc2NyaXB0OiBudWxsLCB6b2Q6IG51bGwgfTtcblxuICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2Uoc2NoZW1hKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7IHR5cGVzY3JpcHQ6IG51bGwsIHpvZDogbnVsbCB9O1xuICAgIH1cbiAgICBsZXQgem9kOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgem9kID0gZm9ybWF0Wm9kQ29kZShcbiAgICAgICAganNvblNjaGVtYVRvWm9kKHBhcnNlZCBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBqc29uU2NoZW1hVG9ab2Q+WzBdLCB7IG1vZHVsZTogXCJub25lXCIgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgem9kID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZXNjcmlwdDogcmVuZGVyUGFyc2VkSnNvblNjaGVtYVR5cGVUZXh0KHBhcnNlZCksIHpvZCB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXN5bmMgY3JlYXRlUnVuKHBhcmFtczoge1xuICAgIHVzZXJfcHJvbXB0OiBzdHJpbmc7XG4gICAgc3lzdGVtX3Byb21wdD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGVmZm9ydD86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvamVjdF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBoaXN0b3J5PzogdW5rbm93bjtcbiAgICB0b29scz86IFRvb2xEZWZpbml0aW9ucztcbiAgICBpc19pbWFnZV9nZW5lcmF0aW9uPzogYm9vbGVhbjtcbiAgICBqc29uX3NjaGVtYT86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwge1xuICAgICAgdXNlcl9wcm9tcHQ6IHBhcmFtcy51c2VyX3Byb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IHBhcmFtcy5zeXN0ZW1fcHJvbXB0ID8/IG51bGwsXG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCE7J2066+A66GcIHNlcnZpbmcgbW9kZWzsnYAg7JWE7KeBIOyVjCDsiJgg7JeG64ukLlxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHBhcmFtcy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZSA/PyBudWxsLFxuICAgICAgbW9kZWxfbmFtZTogbnVsbCxcbiAgICAgIGVmZm9ydDogcGFyYW1zLmVmZm9ydCA/PyBudWxsLFxuICAgICAgcHJvamVjdF9uYW1lOiBwYXJhbXMucHJvamVjdF9uYW1lID8/IG51bGwsXG4gICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgcmVzcG9uc2U6IFwiXCIsXG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IDAsXG4gICAgICBkdXJhdGlvbl9tczogMCxcbiAgICAgIHRvb2xfY2FsbF9jb3VudDogMCxcbiAgICAgIC8vIOydtOuvuOyngCB0dXJuIOyLneuzhChSMTMpLiBydW4g6rK966GcKHRvb2xzK2ltYWdlIOyhsO2VqSnrj4QgYXV0byDqsr3roZzsmYAg64+Z7J287ZWY6rKMIOuniO2CuS5cbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IHBhcmFtcy5pc19pbWFnZV9nZW5lcmF0aW9uID8/IGZhbHNlLFxuICAgICAganNvbl9zY2hlbWE6IHBhcmFtcy5qc29uX3NjaGVtYSA/PyBudWxsLFxuICAgICAgaXNfc3RydWN0dXJlZDogcGFyYW1zLmpzb25fc2NoZW1hICE9PSBudWxsICYmIHBhcmFtcy5qc29uX3NjaGVtYSAhPT0gdW5kZWZpbmVkLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZmFsbGJhY2tfY291bnQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF9zb3VyY2U/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgaGlzdG9yeT86IHVua25vd247XG4gICAgICBlcnJvcl9tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgdG9vbF9jYWxsX2NvdW50PzogbnVtYmVyO1xuICAgICAgaW1hZ2VfY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgaW1hZ2VfY29zdF9tZXRob2Q/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgcmVzcG9uc2VfanNvbl9vaz86IGJvb2xlYW4gfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICAgIFwicmVzcG9uc2VfanNvbl9va1wiLFxuICAgIF0gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRzKSB7XG4gICAgICBpZiAocGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkgdXBkYXRlW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQpIHVwZGF0ZS5oaXN0b3J5ID0gcGFyYW1zLmhpc3Rvcnk7XG4gICAgdXBkYXRlLnR0ZnRfbXMgPSAoYXdhaXQgdGhpcy5maXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkKSkgPz8gMDtcblxuICAgIC8vIOyEnOuyhCBydW4g6rK966Gc64qUIHN0ZXAg7JeQ7IScIO2Zleygle2VnCBleGFjdCBjb3N0IOulvCDrhJjquLTri6QuIOyZuOu2gC9sZWdhY3kgY2FsbGVyIOqwgCDruYTsmqnsnYRcbiAgICAvLyDsg53rnrXtlZwg6rK97Jqw7JeQ66eMIOyggOyepeuQnCDrqqjrjbgrdXNhZ2Ug66GcIOqzhOyCsO2VnOuLpC5cbiAgICBpZiAoXG4gICAgICBwYXJhbXMuY29zdF91c2QgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLmlucHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMub3V0cHV0X3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAgIC5zZWxlY3QoeyBtb2RlbF9uYW1lOiBcIm1vZGVsX25hbWVcIiB9KVxuICAgICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC5maXJzdCgpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTW9kZWxOYW1lID0gcGFyYW1zLm1vZGVsX25hbWUgPz8gcm93Py5tb2RlbF9uYW1lO1xuICAgICAgaWYgKGVmZmVjdGl2ZU1vZGVsTmFtZSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGNhbm9uaWNhbE1vZGVsTmFtZShlZmZlY3RpdmVNb2RlbE5hbWUpO1xuICAgICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qoe1xuICAgICAgICAgIHRva2VuX25hbWU6IHBhcmFtcy50b2tlbl9uYW1lLFxuICAgICAgICAgIG1vZGVsX25hbWU6IGVmZmVjdGl2ZU1vZGVsTmFtZSxcbiAgICAgICAgICBpbnB1dF90b2tlbnM6IHBhcmFtcy5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgb3V0cHV0X3Rva2VuczogcGFyYW1zLm91dHB1dF90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IHBhcmFtcy5jYWNoZV9yZWFkX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uX3Rva2VucyA/PyAwLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB1cGRhdGUuY29zdF91c2QgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QobW9kZWwsIHtcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgICAgfSkgKiAxXzAwMF8wMDAsXG4gICAgICAgICk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3NvdXJjZSA9IFwicHJpY2luZ190YWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgdXBkYXRlKTtcbiAgICBhd2FpdCB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gcm93Py50dGZ0X21zID09PSBudWxsIHx8IHJvdz8udHRmdF9tcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IE51bWJlcihyb3cudHRmdF9tcyk7XG4gIH1cblxuICBhc3luYyBhZ2dyZWdhdGVTdGVwVXNhZ2UocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBzdGFsZSBjYW5kaWRhdGVzLCB0aGVuIGV4cGlyZXMgZWFjaCBydW4gaW4gaXRzIG93biBzaG9ydCB0cmFuc2FjdGlvbi5cbiAgICogVGhlIGNhbmRpZGF0ZSBxdWVyeSBpcyBvbmx5IGEgaGludDsgdGhlIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9uIHJlY2hlY2tzIGl0XG4gICAqIGFmdGVyIGFjcXVpcmluZyB0aGUgYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCB0b29sIGZvbGxvdy11cHMuXG4gICAqL1xuICBhc3luYyBleHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVucyhcbiAgICB0aHJlc2hvbGRNczogbnVtYmVyLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxMCxcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSB0aHJlc2hvbGRNcyk7XG4gICAgY29uc3QgY2FuZGlkYXRlSWRzID0gYXdhaXQgdGhpcy5maW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkLCBsaW1pdCk7XG4gICAgY29uc3QgZXhwaXJlZElkczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RMb2dJZCBvZiBjYW5kaWRhdGVJZHMpIHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLnRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4ocmVxdWVzdExvZ0lkLCB0aHJlc2hvbGQsIGVycm9yTWVzc2FnZSkpIHtcbiAgICAgICAgZXhwaXJlZElkcy5wdXNoKHJlcXVlc3RMb2dJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBpcmVkSWRzO1xuICB9XG5cbiAgYXN5bmMgZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZDogRGF0ZSwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwid1wiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5qb2luKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiKVxuICAgICAgLmRpc3RpbmN0KFwicmVxdWVzdF9sb2dzLmlkXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwicmVxdWVzdF9sb2dzLmlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9ncy5zdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5jcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy50b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuZXJyb3JcIiwgbnVsbClcbiAgICAgIC5saW1pdChsaW1pdCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKCh7IGlkIH0pID0+IGlkKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIHRyeUV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdGhyZXNob2xkOiBEYXRlLFxuICAgIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGNvbnN0IGxvY2tSZXN1bHQgPSAoYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX3RyeV9hZHZpc29yeV94YWN0X2xvY2soPywgPykgQVMgYWNxdWlyZWRcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSkpIGFzIHsgcm93cz86IEFycmF5PHsgYWNxdWlyZWQ/OiBib29sZWFuIH0+IH07XG4gICAgaWYgKGxvY2tSZXN1bHQucm93cz8uWzBdPy5hY3F1aXJlZCAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVGhlIGZvbGxvdy11cCBwYXRoIHVzZXMgdGhlIHNhbWUgd3JpdGVyIHRyYW5zYWN0aW9uIGxvY2suIFJlY2hlY2sgYWZ0ZXJcbiAgICAvLyBsb2NraW5nIHNvIGEgcmVzdWx0IGNvbW1pdHRlZCBkdXJpbmcgY2FuZGlkYXRlIGRpc2NvdmVyeSBtYWtlcyB0aGlzIGEgbm8tb3AuXG4gICAgY29uc3QgdW5yZXNvbHZlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcImlkXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcImNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJlcnJvclwiLCBudWxsKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCF1bnJlc29sdmVkKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwUm93cyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgY29uc3QgYWdncmVnYXRlID0gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhzdGVwUm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICAgIGNvbnN0IGZpcnN0VHRmdCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IHR0ZnRfbXM6IFwidHRmdF9tc1wiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIilcbiAgICAgIC53aGVyZShcInR0ZnRfbXNcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJzdGVwX2luZGV4XCIsIFwiYXNjXCIpXG4gICAgICAub3JkZXJCeShcImlkXCIsIFwiYXNjXCIpXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJzdGF0dXNcIiwgXCJydW5uaW5nXCIpXG4gICAgICAudXBkYXRlKHtcbiAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yX21lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBhZ2dyZWdhdGUuaW5wdXRfdG9rZW5zLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9yZWFkX3Rva2VucyxcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgZHVyYXRpb25fbXM6IGFnZ3JlZ2F0ZS5kdXJhdGlvbl9tcyxcbiAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgY29zdF91c2Q6IGFnZ3JlZ2F0ZS5jb3N0X3VzZCxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSAhPT0gdW5kZWZpbmVkID8geyBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlIH0gOiB7fSksXG4gICAgICAgIHR0ZnRfbXM6XG4gICAgICAgICAgZmlyc3RUdGZ0Py50dGZ0X21zID09PSBudWxsIHx8IGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogTnVtYmVyKGZpcnN0VHRmdC50dGZ0X21zKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB1cGRhdGVkID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGEgbmF0aXZlIHFncmlkIHRvb2wgZm9sbG93LXVwIGFuZCBjb21wdXRlcyBpdHMgbmV4dCBzdGVwIGluZGV4IHdoaWxlXG4gICAqIGhvbGRpbmcgdGhlIHBlci1ydW4gYWR2aXNvcnkgbG9jayBzaGFyZWQgd2l0aCBzdGFsZSBjbGVhbnVwLlxuICAgKi9cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgY29udGludWVUb29sUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRvb2xSZXN1bHRzOiBUb29sUmVzdWx0Q29udGludWF0aW9uW10sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pO1xuXG4gICAgY29uc3QgcnVuID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLnNlbGVjdCh7IHN0YXR1czogXCJzdGF0dXNcIiB9KVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgaWYgKCFydW4pIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBub3QgZm91bmRgKTtcbiAgICBpZiAocnVuLnN0YXR1cyAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVxdWVzdCBsb2cgcnVuICR7cmVxdWVzdExvZ0lkfSBpcyBhbHJlYWR5ICR7cnVuLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0b29sUmVzdWx0cykge1xuICAgICAgYXdhaXQgd2RiXG4gICAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAud2hlcmUoXCJ0b29sX2NhbGxfaWRcIiwgcmVzdWx0LnRvb2xDYWxsSWQpXG4gICAgICAgIC53aGVyZShcInR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgICAgLnVwZGF0ZShyZXN1bHQuaXNFcnJvciA/IHsgZXJyb3I6IHJlc3VsdC5vdXRwdXQgfSA6IHsgdG9vbF9yZXN1bHQ6IHJlc3VsdC5vdXRwdXQgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgbWF4X3N0ZXA6IFB1cmkubWF4KFwic3RlcF9pbmRleFwiKSB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIChyb3c/Lm1heF9zdGVwID8/IC0xKSArIDE7XG4gIH1cblxuICAvKipcbiAgICog7ZmU66m0IO2RnOyLnOyaqSDstJ0g67mE7JqpLiDrqqnroZ3qs7wg6rCZ7J2AIO2VhO2EsOulvCDsoIHsmqntlZzri6QuXG4gICAqXG4gICAqIOyghOyytOulvCDsobDqsbQg7JeG7J20IFNVTSDtlZwg65KkLCBgY29zdF9zb3VyY2VgIOqwgCDsl4bripQgbGVnYWN5IHJvdyDsnZgg7LCo7JWh66eMIOuztOygle2VnOuLpC5cbiAgICog7KGw6rG0IOyXhuuKlCBTVU0g7J207Ja07JW8IGAocHJvamVjdF9uYW1lLCBjb3N0X3VzZClgIOy7pOuyhOungSDsnbjrjbHsiqTqsIAgSW5kZXggT25seSBTY2FuIOydhFxuICAgKiDtg4Tri6Qg4oCUIGBjb3N0X3NvdXJjZSBJUyBOT1QgTlVMTGAg7J2EIOqxuOuptCDqt7gg7Lus65+87J20IOyduOuNseyKpOyXkCDsl4bslrQgaGVhcCDsnYQg64uk7IucIOu0kOyVvFxuICAgKiDtlZjrr4DroZwg7ZSM656Y64SI6rCAIOyduOuNseyKpOulvCDrsoTrpqzqs6Agc2VxIHNjYW4g7Jy866GcIOuPjOyVhOqwhOuLpCjsi6TsuKEgMjMwbXMg4oaSIDgxNG1zKS5cbiAgICpcbiAgICogbGVnYWN5IOuztOygleydhCDrgqjqsqjrkZQg7J207JygOiDrsLHtlYTroZwg6riw7KG0IGxlZ2FjeSDripQgMCDsnbQg65CY7JeI7KeA66eMLCDsmbjrtoAg66Gc6rGw6rCAXG4gICAqIGBBcHBlbmRTdGVwSW5wdXRgL2BGaW5pc2hSdW5JbnB1dGAg7Jy866GcIGNvc3RTb3VyY2Ug7JeG7J20IOuEo+ycvOuptCDri6Tsi5wg7IOd6ri4IOyImCDsnojri6QuXG4gICAqIOq3uOufsCByb3cg64qUIOyggOyepeqwkiDrjIDsi6Ag7ZiE7J6sIOqwgOqyqe2RnCDsnqzqs4TsgrDqsJLsnbQg66ee7Jy866+A66GcIOywqOyVoeydhCDrjZTtlZzri6QuXG4gICAqXG4gICAqIO2VhO2EsCDsobDqsbTsnYQg7Jes6riw7IScIOuLpOyLnCDqtaztmITtlZjsp4Ag7JWK6rOgIGBhcHBseUxpc3RGaWx0ZXJzYCDrpbwg6rO17Jyg7ZWY64qUIOqyg+ydtCDtlbXsi6zsnbTri6Qg4oCUXG4gICAqIOuRkCDsv7zrpqzqsIAg6rCB7J6QIO2VhO2EsOulvCDqsIDsp4DrqbQg7ZmU66m07JeQ7IScIO2VhO2EsOulvCDqsbjsl4jsnYQg65WMIO2WiSDsiJjsmYAg67mE7Jqp7J20IOyhsOyaqe2eiCDslrTquIvrgpzri6QuXG4gICAqL1xuICBhc3luYyB0b3RhbENvc3QocmF3UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyA9IHsgbnVtOiAwLCBwYWdlOiAxIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG51bTogMCxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2g6IFwiaWRcIiBhcyBjb25zdCxcbiAgICAgIC4uLnJhd1BhcmFtcyxcbiAgICB9IHNhdGlzZmllcyBSZXF1ZXN0TG9nTGlzdFBhcmFtcztcblxuICAgIGNvbnN0IHsgcWI6IHRvdGFsUWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKHRvdGFsUWIsIHBhcmFtcyk7XG4gICAgLy8gc3Vic2V0IHFiIOuKlCDsu6zrn7wg66qp66Gd7J20IOydtOuvuCBTRUxFQ1Qg7JeQIOuwle2YgCDsnojslrQg7KeR6rOE66W8IOyWueycvOuptCBHUk9VUCBCWSDsl5Drn6zqsIAg64Kc64ukLlxuICAgIC8vIGV4ZWN1dGVDb3VudFF1ZXJ5IOyZgCDqsJnsnYAg67Cp7Iud7Jy866GcIHNlbGVjdCDrpbwg67mE7Jqw6rOgIOynkeqzhOunjCDrgqjquLTri6QuXG4gICAgY29uc3Qgc3RvcmVkID0gYXdhaXQgdG90YWxRYlxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAvLyDsnYzsiJgg7KCA7J6l6rCSKOqzvOqxsCDrsoTqt7gp7J2AIDAg7Jy866GcIOuIjOufrOyEnCDrjZTtlZzri6Qg4oCUIEpTIOyqvSBNYXRoLm1heCDsmYAg6rCZ7J2AIOq3nOy5mS5cbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICB0b3RhbDogUHVyaS5yYXdOdW1iZXIoXCJDT0FMRVNDRShTVU0oR1JFQVRFU1QocmVxdWVzdF9sb2dzLmNvc3RfdXNkLCAwKSksIDApXCIpLFxuICAgICAgfSlcbiAgICAgIC5maXJzdCgpO1xuXG4gICAgY29uc3QgeyBxYjogbGVnYWN5UWIgfSA9IHRoaXMuZ2V0U3Vic2V0UXVlcmllcyhcIkNcIik7XG4gICAgdGhpcy5hcHBseUxpc3RGaWx0ZXJzKGxlZ2FjeVFiLCBwYXJhbXMpO1xuICAgIGNvbnN0IGxlZ2FjeVJvd3MgPSBhd2FpdCBsZWdhY3lRYlxuICAgICAgLndoZXJlUmF3KFwicmVxdWVzdF9sb2dzLmNvc3Rfc291cmNlIElTIE5VTEwgT1IgcmVxdWVzdF9sb2dzLmNvc3RfdXNkIElTIE5VTExcIilcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHRva2VuX25hbWU6IFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIixcbiAgICAgICAgbW9kZWxfbmFtZTogXCJyZXF1ZXN0X2xvZ3MubW9kZWxfbmFtZVwiLFxuICAgICAgICBpbnB1dF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmlucHV0X3Rva2Vuc1wiLFxuICAgICAgICBvdXRwdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5vdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwicmVxdWVzdF9sb2dzLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgICAgICBjb3N0X3VzZDogXCJyZXF1ZXN0X2xvZ3MuY29zdF91c2RcIixcbiAgICAgIH0pO1xuXG4gICAgY29uc3Qgc3RvcmVkVG90YWwgPSBOdW1iZXIoc3RvcmVkPy50b3RhbCA/PyAwKSAvIE1JQ1JPX1VTRDtcblxuICAgIC8vIGxlZ2FjeSByb3cg64qUIOychCBTVU0g7JeQIOyggOyepeqwkuycvOuhnCDsnbTrr7gg7Y+s7ZWo65CY7Ja0IOyeiOuLpC4g7J6s6rOE7IKw6rCS6rO87J2YIOywqOyVoeunjCDrjZTtlZzri6QuXG4gICAgcmV0dXJuIGxlZ2FjeVJvd3MucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgYWxyZWFkeVN1bW1lZCA9IE1hdGgubWF4KHJvdy5jb3N0X3VzZCA/PyAwLCAwKSAvIE1JQ1JPX1VTRDtcbiAgICAgIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICAgICAgaWYgKCF1c2FnZS5tb2RlbCkgcmV0dXJuIHN1bTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHN1bSArXG4gICAgICAgIGNhbGN1bGF0ZUNvc3RVc2QodXNhZ2UubW9kZWwsIHtcbiAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWgsXG4gICAgICAgIH0pIC1cbiAgICAgICAgYWxyZWFkeVN1bW1lZFxuICAgICAgKTtcbiAgICB9LCBzdG9yZWRUb3RhbCk7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIGFzeW5jIGRpc3RpbmN0TW9kZWxOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJtb2RlbF9uYW1lXCIpXG4gICAgICAud2hlcmUoXCJtb2RlbF9uYW1lXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwibW9kZWxfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIG1vZGVsX25hbWU6IFwibW9kZWxfbmFtZVwiLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyKSA9PiByLm1vZGVsX25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUF5QkEsTUFBYSxZQUFZO0FBQ3pCLE1BQU0sZ0NBQWdDO0FBcUJ0QyxNQUFNLHdCQUF3QjtDQUM1QixjQUFjO0NBQ2QsZUFBZTtDQUNmLG1CQUFtQjtDQUNuQix1QkFBdUI7Q0FDdkIsMEJBQTBCO0NBQzFCLDBCQUEwQjtDQUMxQixhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLFVBQVU7Q0FDVixhQUFhO0FBQ2Y7QUFFQSxTQUFTLDBCQUEwQixNQUErRDtDQUNoRyxNQUFNLE9BQU8sVUFDWCxLQUFLLFFBQVEsT0FBTyxRQUFRLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUM7Q0FDaEUsTUFBTSxlQUFlLFVBQ25CLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxRQUFRLElBQUksV0FBVyxNQUFTLElBQUksSUFBSSxLQUFLLElBQUk7Q0FDckYsTUFBTSxZQUFZLFVBQXNDO0VBQ3RELE1BQU0sU0FBUyxDQUNiLEdBQUcsSUFBSSxJQUNMLEtBQ0csS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLENBQ3hCLFFBQVEsVUFBMkIsT0FBTyxVQUFVLFlBQVksTUFBTSxTQUFTLENBQUMsQ0FDckYsQ0FDRjtFQUNBLElBQUksT0FBTyxXQUFXLEdBQUcsT0FBTztFQUNoQyxPQUFPLE9BQU8sV0FBVyxJQUFJLE9BQU8sS0FBSztDQUMzQztDQUNBLE9BQU87RUFDTCxjQUFjLElBQUksY0FBYztFQUNoQyxlQUFlLElBQUksZUFBZTtFQUNsQyxtQkFBbUIsSUFBSSxtQkFBbUI7RUFDMUMsdUJBQXVCLElBQUksdUJBQXVCO0VBQ2xELDBCQUEwQixZQUFZLDBCQUEwQjtFQUNoRSwwQkFBMEIsWUFBWSwwQkFBMEI7RUFDaEUsYUFBYSxJQUFJLGFBQWE7RUFDOUIsZ0JBQWdCLElBQUksZ0JBQWdCO0VBQ3BDLFVBQVUsSUFBSSxVQUFVO0VBQ3hCLGFBQWEsU0FBUyxhQUFhO0NBQ3JDO0FBQ0Y7QUFlQSxTQUFTLG9CQUFvQixLQUFxRTtDQUNoRyxPQUNFLElBQUksWUFBWSxXQUFXLFlBQVksTUFBTSxRQUM3QyxJQUFJLFlBQVksV0FBVyxTQUFTLE1BQU0sUUFDMUMsSUFBSSxZQUFZLFdBQVcsbUJBQW1CLE1BQU07QUFFeEQ7QUFFQSxTQUFTLG1CQUFtQixXQUEyQjtDQUNyRCxPQUFPLFVBQVUsU0FBUyxHQUFHLElBQUksVUFBVSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSztBQUNqRTtBQUVBLFNBQVMsdUJBQXVCLEtBUTlCO0NBQ0EsTUFBTSxZQUFZLElBQUk7Q0FDdEIsTUFBTSxnQkFBZ0IsSUFBSTtDQUMxQixNQUFNLGNBQWMsSUFBSTtDQUN4QixNQUFNLDRCQUNKLG9CQUFvQixHQUFHLEtBQUssY0FBYyxZQUFZO0NBQ3hELE9BQU87RUFDTCxPQUFPLElBQUksYUFBYSxtQkFBbUIsSUFBSSxVQUFVLElBQUk7RUFDN0QsYUFBYSw0QkFBNEIsY0FBYyxZQUFZLGdCQUFnQjtFQUNuRixjQUFjLElBQUk7RUFDbEIsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMxQixHQUFJLElBQUksNkJBQTZCLFFBQVEsSUFBSSw2QkFBNkIsU0FDMUUsRUFBRSw0QkFBNEIsSUFBSSx5QkFBeUIsSUFDM0QsQ0FBQztFQUNMLEdBQUksSUFBSSw2QkFBNkIsUUFBUSxJQUFJLDZCQUE2QixTQUMxRSxFQUFFLDRCQUE0QixJQUFJLHlCQUF5QixJQUMzRCxDQUFDO0NBQ1A7QUFDRjtBQUVBLFNBQVMsNEJBQTBELEtBQVc7Q0FFNUUsSUFBSSxJQUFJLGFBQWEsT0FBTztDQUM1QixNQUFNLFFBQVEsdUJBQXVCLEdBQUc7Q0FDeEMsSUFBSSxNQUFNLGdCQUFnQixJQUFJLGNBQWMsT0FBTztDQUNuRCxNQUFNLGFBQWE7RUFBRSxHQUFHO0VBQUssY0FBYyxNQUFNO0NBQVk7Q0FDN0QsSUFBSSxNQUFNLE9BQ1IsV0FBVyxXQUFXLEtBQUssTUFBTSxpQkFBaUIsTUFBTSxPQUFPLEtBQUssSUFBSSxTQUFTO0NBRW5GLE9BQU87QUFDVDs7Ozs7Ozs7QUFTQSxNQUFNLG9CQUFvQjtDQUN4QixJQUFJO0NBQ0osWUFBWTtDQUNaLFNBQVM7Q0FDVCxhQUFhO0NBQ2IsY0FBYztDQUNkLGVBQWU7Q0FDZixtQkFBbUI7Q0FDbkIsdUJBQXVCO0NBQ3ZCLFVBQVU7QUFDWjtBQUVBLFNBQVMsYUFDUCxJQUNBLFNBQ007Q0FDTixNQUFNLFlBQVksUUFBUSxZQUFZLEdBQUc7Q0FDekMsTUFBTSxNQUFNLFFBQVEsTUFBTSxHQUFHLFNBQVM7Q0FDdEMsTUFBTSxZQUFZLFFBQVEsTUFBTSxZQUFZLENBQUMsTUFBTSxRQUFRLFFBQVE7Q0FDbkUsTUFBTSxTQUFTLGtCQUFrQjtDQUVqQyxJQUFJLENBQUMsUUFBUTtFQUNYLEdBQUcsUUFBUSxtQkFBbUIsTUFBTTtFQUNwQztDQUNGO0NBQ0EsR0FBRyxRQUFRLFFBQVEsU0FBUztDQUU1QixJQUFJLFFBQVEsTUFBTSxHQUFHLFFBQVEsbUJBQW1CLE1BQU07QUFDeEQ7QUFLQSxJQUFNLHVCQUFOLGNBQW1DLGVBS2pDO0NBQ0EsY0FBYztFQUNaLE1BQU0sY0FBYyx5QkFBeUIsdUJBQXVCO0NBQ3RFO0NBRUEsTUFDTSxTQUNKLFFBQ0EsSUFDcUM7RUFDckMsTUFBTSxFQUFFLFNBQVMsTUFBTSxLQUFLLFNBQVMsUUFBUTtHQUMzQztHQUNBLEtBQUs7R0FDTCxNQUFNO0VBQ1IsQ0FBQztFQUNELElBQUksQ0FBQyxLQUFLLElBQ1IsTUFBTSxJQUFJLGtCQUFrQixHQUFHLHNCQUFzQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7RUFHMUUsT0FBTyxLQUFLO0NBQ2Q7Q0FFQSxNQUFNLFFBQ0osUUFDQSxZQUM0QztFQUM1QyxNQUFNLEVBQUUsU0FBUyxNQUFNLEtBQUssU0FBUyxRQUFRO0dBQzNDLEdBQUc7R0FDSCxLQUFLO0dBQ0wsTUFBTTtFQUNSLENBQUM7RUFFRCxPQUFPLEtBQUssTUFBTTtDQUNwQjs7Ozs7O0NBT0EsaUJBQ0UsSUFDQSxRQUNNO0VBQ04sSUFBSSxPQUFPLElBQ1QsR0FBRyxRQUFRLG1CQUFtQixRQUFRLE9BQU8sRUFBRSxDQUFDO0VBR2xELElBQUksT0FBTyxZQUNULEdBQUcsTUFBTSwyQkFBMkIsT0FBTyxVQUFVO0VBR3ZELElBQUksT0FBTyxzQkFDVCxHQUFHLE1BQU0sNkJBQTZCLElBQUk7T0FDckMsSUFBSSxPQUFPLDBCQUNoQixHQUFHLE1BQU0sNkJBQTZCLE1BQU0sSUFBSTtPQUMzQyxJQUFJLE9BQU8sY0FDaEIsR0FBRyxNQUFNLDZCQUE2QixPQUFPLFlBQVk7RUFHM0QsSUFBSSxPQUFPLFlBQ1QsR0FBRyxNQUFNLDJCQUEyQixPQUFPLFVBQVU7RUFJdkQsSUFBSSxPQUFPLHNCQUNULEdBQUcsTUFBTSxpQ0FBaUMsS0FBSztFQUdqRCxJQUFJLE9BQU8sVUFBVSxPQUFPLFdBQVcsT0FBTyxRQUFRLFNBQVMsR0FDN0QsSUFBSSxPQUFPLFdBQVcsTUFDcEIsR0FBRyxNQUFNLG1CQUFtQixPQUFPLE9BQU8sT0FBTyxDQUFDO09BQzdDLElBQUksT0FBTyxXQUFXLGNBQzNCLEdBQUcsTUFBTSwyQkFBMkIsUUFBUSxJQUFJLE9BQU8sUUFBUSxFQUFFO09BQzVELElBQUksT0FBTyxXQUFXLGVBQzNCLEdBQUcsTUFBTSw0QkFBNEIsUUFBUSxJQUFJLE9BQU8sUUFBUSxFQUFFO09BRWxFLE1BQU0sSUFBSSxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDO0NBR2pGO0NBRUEsTUFDTSxTQUNKLFFBQ0EsV0FDcUQ7RUFDckQsTUFBTSxTQUFTO0dBQ2IsS0FBSztHQUNMLE1BQU07R0FDTixRQUFRO0dBQ1IsU0FBUztHQUNULEdBQUc7RUFDTDtFQUVBLE1BQU0sRUFBRSxJQUFJLFVBQVUsTUFBTSxLQUFLLGlCQUFpQixNQUFNO0VBRXhELEtBQUssaUJBQWlCLElBQUksTUFBTTtFQUVoQyxJQUFJLE9BQU8sU0FBUyxhQUFhLElBQUksT0FBTyxPQUFPO0VBRW5ELE1BQU0sWUFBWSxLQUFLLGdCQUFnQjtHQUNyQyxJQUFJLFFBQVEsNEJBQTRCLEdBQUc7R0FDM0MsSUFBSSxRQUFRLDRCQUE0QixHQUFHO0VBQzdDLENBQUM7RUFFRCxPQUFPLEtBQUssbUJBQW1CO0dBQzdCO0dBQ0E7R0FDQTtHQUNBO0dBQ0EsT0FBTztFQUNULENBQUM7Q0FDSDtDQUVBLE1BQ00sS0FBSyxLQUFnRDtFQUN6RCxNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFHNUIsSUFBSSxTQUFTLE9BQU87R0FDbEIsSUFBSSxXQUFXLGdCQUFnQixFQUFFO0VBQ25DLENBQUM7RUFHRCxPQUFPLElBQUksWUFBWSxPQUFPLFFBQVE7R0FHcEMsT0FBTyxNQUZXLElBQUksU0FBUyxjQUFjO0VBRy9DLENBQUM7Q0FDSDs7Ozs7OztDQVFBLE1BQU0sbUJBQW1CLE9BUXZCO0VBRUEsTUFBTSxPQUFRLE1BREYsS0FBSyxRQUFRLEdBQ0wsQ0FBQSxDQUNqQixLQUFLLGNBQWMsQ0FBQyxDQUNwQixPQUFPO0dBQ04sc0JBQXNCO0dBQ3RCLFFBQVE7R0FDUixjQUFjO0dBQ2QsbUJBQW1CO0VBQ3JCLENBQUMsQ0FBQyxDQUNELE1BQU0sMkJBQTJCLE1BQU0sS0FBSztFQU8vQyxNQUFNLDZCQUFhLElBQUksSUFHckI7RUFDRixLQUFLLE1BQU0sT0FBTyxNQUFNO0dBQ3RCLE1BQU0sUUFBUSxJQUFJLHdCQUF3QjtHQUMxQyxNQUFNLFdBQVcsTUFBTSxXQUFXLFNBQVMsSUFDdkMsV0FDQSxNQUFNLFdBQVcsWUFBWSxJQUMzQixjQUNBO0dBQ04sTUFBTSxNQUFNLFdBQVcsSUFBSSxRQUFRLEtBQUs7SUFDdEMsVUFBVTtJQUNWLFFBQVE7SUFDUixhQUFhO0lBQ2IsaUJBQWlCO0dBQ25CO0dBQ0EsSUFBSSxZQUFZO0dBQ2hCLElBQUksSUFBSSxXQUFXLFNBQVMsSUFBSSxVQUFVO0dBQzFDLElBQUksZUFBZSxJQUFJO0dBQ3ZCLElBQUksbUJBQW1CLElBQUk7R0FDM0IsV0FBVyxJQUFJLFVBQVUsR0FBRztFQUM5QjtFQUNBLE9BQU8sQ0FBQyxHQUFHLFdBQVcsUUFBUSxDQUFDLENBQUMsQ0FDN0IsS0FBSyxDQUFDLFVBQVUsVUFBVTtHQUFFO0dBQVUsR0FBRztFQUFJLEVBQUUsQ0FBQyxDQUNoRCxVQUFVLEdBQUcsTUFBTSxFQUFFLFNBQVMsY0FBYyxFQUFFLFFBQVEsQ0FBQztDQUM1RDs7Ozs7OztDQVFBLE1BQ00sZUFBZSxJQUdsQjtFQU1ELE1BQU0sVUFBUyxNQUxILEtBQUssUUFBUSxHQUNMLENBQUEsQ0FDakIsS0FBSyxjQUFjLENBQUMsQ0FDcEIsT0FBTyxFQUFFLGFBQWEsMkJBQTJCLENBQUMsQ0FBQyxDQUNuRCxNQUFNLG1CQUFtQixFQUFFLEVBQ2YsQ0FBSyxFQUFFLEVBQUU7RUFDeEIsSUFBSSxDQUFDLFFBQVEsT0FBTztHQUFFLFlBQVk7R0FBTSxLQUFLO0VBQUs7RUFFbEQsSUFBSTtFQUNKLElBQUk7R0FDRixTQUFTLEtBQUssTUFBTSxNQUFNO0VBQzVCLFFBQVE7R0FDTixPQUFPO0lBQUUsWUFBWTtJQUFNLEtBQUs7R0FBSztFQUN2QztFQUNBLElBQUksTUFBcUI7RUFDekIsSUFBSTtHQUNGLE1BQU0sY0FDSixnQkFBZ0IsUUFBaUQsRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUNyRjtFQUNGLFFBQVE7R0FDTixNQUFNO0VBQ1I7RUFDQSxPQUFPO0dBQUUsWUFBWSwrQkFBK0IsTUFBTTtHQUFHO0VBQUk7Q0FDbkU7Q0FJQSxNQUFNLFVBQVUsUUFVSTtFQUNsQixNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFDNUIsSUFBSSxXQUFXLGdCQUFnQjtHQUM3QixhQUFhLE9BQU87R0FDcEIsZUFBZSxPQUFPLGlCQUFpQjtHQUV2QyxzQkFBc0IsT0FBTyx3QkFBd0I7R0FDckQsWUFBWTtHQUNaLFFBQVEsT0FBTyxVQUFVO0dBQ3pCLGNBQWMsT0FBTyxnQkFBZ0I7R0FDckMsUUFBUTtHQUNSLFVBQVU7R0FDVixjQUFjO0dBQ2QsZUFBZTtHQUNmLG1CQUFtQjtHQUNuQix1QkFBdUI7R0FDdkIsYUFBYTtHQUNiLGlCQUFpQjtHQUVqQixxQkFBcUIsT0FBTyx1QkFBdUI7R0FDbkQsYUFBYSxPQUFPLGVBQWU7R0FDbkMsZUFBZSxPQUFPLGdCQUFnQixRQUFRLE9BQU8sZ0JBQWdCO0dBQ3JFLEdBQUksT0FBTyxZQUFZLFNBQVksRUFBRSxTQUFTLE9BQU8sUUFBOEIsSUFBSSxDQUFDO0dBQ3hGLEdBQUksT0FBTyxVQUFVLFNBQVksRUFBRSxPQUFPLE9BQU8sTUFBTSxJQUFJLENBQUM7RUFDOUQsQ0FBQztFQUNELE9BQU8sSUFBSSxZQUFZLE9BQU8sUUFBUTtHQUVwQyxRQUFPLE1BRFcsSUFBSSxTQUFTLGNBQWMsRUFDdEMsQ0FBSTtFQUNiLENBQUM7Q0FDSDtDQUVBLE1BQU0sV0FBVyxjQUFzQixNQUFnRDtFQUNyRixNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFDNUIsSUFBSSxXQUFXLHFCQUFxQjtHQUFFLGdCQUFnQjtHQUFjLEdBQUc7RUFBSyxDQUFDO0VBQzdFLE9BQU8sSUFBSSxZQUFZLE9BQU8sUUFBUTtHQUNwQyxNQUFNLE1BQU0sTUFBTSxJQUFJLFNBQVMsbUJBQW1CO0dBQ2xELElBQUksS0FBSyxTQUFTLGFBQ2hCLE1BQU0sSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxZQUFZLENBQUMsQ0FBQyxVQUFVLG1CQUFtQixDQUFDO0dBRXpGLE9BQU8sSUFBSTtFQUNiLENBQUM7Q0FDSDtDQUVBLE1BQU0sVUFDSixjQUNBLFFBdUJlO0VBQ2YsSUFBSSxPQUFPLFdBQVcsZUFBZSxDQUFDLE9BQU8sWUFDM0MsTUFBTSxJQUFJLE1BQU0sMENBQTBDO0VBRTVELE1BQU0sU0FBa0M7R0FBRSxJQUFJO0dBQWMsUUFBUSxPQUFPO0VBQU87RUFzQmxGLEtBQUssTUFBTSxPQUFPO0dBcEJoQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtFQUVnQixHQUNoQixJQUFJLE9BQU8sU0FBUyxRQUFXLE9BQU8sT0FBTyxPQUFPO0VBRXRELElBQUksT0FBTyxZQUFZLFFBQVcsT0FBTyxVQUFVLE9BQU87RUFDMUQsT0FBTyxVQUFXLE1BQU0sS0FBSyxzQkFBc0IsWUFBWSxLQUFNO0VBSXJFLElBQ0UsT0FBTyxhQUFhLFVBQ3BCLE9BQU8saUJBQWlCLFVBQ3hCLE9BQU8sa0JBQWtCLFFBQ3pCO0dBQ0EsTUFBTSxNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUNoQyxLQUFLLGNBQWMsQ0FBQyxDQUNwQixPQUFPLEVBQUUsWUFBWSxhQUFhLENBQUMsQ0FBQyxDQUNwQyxNQUFNLE1BQU0sWUFBWSxDQUFDLENBQ3pCLE1BQU07R0FDVCxNQUFNLHFCQUFxQixPQUFPLGNBQWMsS0FBSztHQUNyRCxJQUFJLG9CQUFvQjtJQUN0QixNQUFNLFFBQVEsbUJBQW1CLGtCQUFrQjtJQUNuRCxNQUFNLFFBQVEsdUJBQXVCO0tBQ25DLFlBQVksT0FBTztLQUNuQixZQUFZO0tBQ1osY0FBYyxPQUFPO0tBQ3JCLGVBQWUsT0FBTztLQUN0QixtQkFBbUIsT0FBTyxxQkFBcUI7S0FDL0MsdUJBQXVCLE9BQU8seUJBQXlCO0tBQ3ZELDBCQUEwQixPQUFPO0tBQ2pDLDBCQUEwQixPQUFPO0lBQ25DLENBQUM7SUFDRCxPQUFPLFdBQVcsS0FBSyxNQUNyQixpQkFBaUIsT0FBTztLQUN0QixhQUFhLE1BQU07S0FDbkIsY0FBYyxNQUFNO0tBQ3BCLG1CQUFtQixNQUFNO0tBQ3pCLDBCQUEwQixNQUFNO0tBQ2hDLDRCQUE0QixNQUFNO0tBQ2xDLDRCQUE0QixNQUFNO0lBQ3BDLENBQUMsSUFBSSxHQUNQO0lBQ0EsT0FBTyxjQUFjO0dBQ3ZCO0VBQ0Y7RUFFQSxNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFDNUIsSUFBSSxXQUFXLGdCQUFnQixNQUFNO0VBQ3JDLE1BQU0sSUFBSSxZQUFZLE9BQU8sUUFBUTtHQUNuQyxNQUFNLElBQUksU0FBUyxjQUFjO0VBQ25DLENBQUM7Q0FDSDtDQUVBLE1BQU0sc0JBQXNCLGNBQThDO0VBQ3hFLE1BQU0sTUFBTSxNQUFNLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FDaEMsS0FBSyxtQkFBbUIsQ0FBQyxDQUN6QixPQUFPLEVBQUUsU0FBUyxVQUFVLENBQUMsQ0FBQyxDQUM5QixNQUFNLGtCQUFrQixZQUFZLENBQUMsQ0FDckMsTUFBTSxRQUFRLFVBQVUsQ0FBQyxDQUN6QixNQUFNLFdBQVcsTUFBTSxJQUFJLENBQUMsQ0FDNUIsUUFBUSxjQUFjLEtBQUssQ0FBQyxDQUM1QixRQUFRLE1BQU0sS0FBSyxDQUFDLENBQ3BCLE1BQU07RUFDVCxPQUFPLEtBQUssWUFBWSxRQUFRLEtBQUssWUFBWSxTQUFZLE9BQU8sT0FBTyxJQUFJLE9BQU87Q0FDeEY7Q0FFQSxNQUFNLG1CQUFtQixjQUF3RDtFQU0vRSxPQUFPLDBCQUEwQixNQUxkLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FDakMsS0FBSyxtQkFBbUIsQ0FBQyxDQUN6QixPQUFPLHFCQUFxQixDQUFDLENBQzdCLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxDQUNyQyxNQUFNLFFBQVEsVUFBVSxDQUM0QztDQUN6RTs7Ozs7O0NBT0EsTUFBTSwyQkFDSixhQUNBLGNBQ0EsUUFBZ0IsSUFDRztFQUNuQixNQUFNLFlBQVksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFdBQVc7RUFDbkQsTUFBTSxlQUFlLE1BQU0sS0FBSyxrQ0FBa0MsV0FBVyxLQUFLO0VBQ2xGLE1BQU0sYUFBdUIsQ0FBQztFQUM5QixLQUFLLE1BQU0sZ0JBQWdCLGNBQ3pCLElBQUksTUFBTSxLQUFLLDZCQUE2QixjQUFjLFdBQVcsWUFBWSxHQUMvRSxXQUFXLEtBQUssWUFBWTtFQUdoQyxPQUFPO0NBQ1Q7Q0FFQSxNQUFNLGtDQUFrQyxXQUFpQixPQUFrQztFQVl6RixRQUFPLE1BWFksS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUNqQyxLQUFLLGNBQWMsQ0FBQyxDQUNwQixLQUFLLHFCQUFxQixtQkFBbUIsa0NBQWtDLENBQUMsQ0FDaEYsU0FBUyxpQkFBaUIsQ0FBQyxDQUMzQixPQUFPLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQ2pDLE1BQU0sdUJBQXVCLFNBQVMsQ0FBQyxDQUN2QyxNQUFNLDBCQUEwQixXQUFXLENBQUMsQ0FDNUMsTUFBTSxnQ0FBZ0MsS0FBSyxTQUFTLENBQUMsQ0FDckQsTUFBTSxpQ0FBaUMsSUFBSSxDQUFDLENBQzVDLE1BQU0sMkJBQTJCLElBQUksQ0FBQyxDQUN0QyxNQUFNLEtBQUssRUFDUCxDQUFLLEtBQUssRUFBRSxTQUFTLEVBQUU7Q0FDaEM7Q0FFQSxNQUNNLDZCQUNKLGNBQ0EsV0FDQSxjQUNrQjtFQUNsQixNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFLNUIsS0FBSSxNQUpzQixJQUFJLEtBQUssSUFBSSxzREFBc0QsQ0FDM0YsK0JBQ0EsWUFDRixDQUFDLEVBQ0csQ0FBVyxPQUFPLEVBQUUsRUFBRSxhQUFhLE1BQU0sT0FBTztFQWFwRCxJQUFJLENBQUMsTUFUb0IsSUFDdEIsS0FBSyxtQkFBbUIsQ0FBQyxDQUN6QixPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUNwQixNQUFNLGtCQUFrQixZQUFZLENBQUMsQ0FDckMsTUFBTSxRQUFRLFdBQVcsQ0FBQyxDQUMxQixNQUFNLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FDbkMsTUFBTSxlQUFlLElBQUksQ0FBQyxDQUMxQixNQUFNLFNBQVMsSUFBSSxDQUFDLENBQ3BCLE1BQU0sR0FDUSxPQUFPO0VBT3hCLE1BQU0sWUFBWSwwQkFBMEIsTUFMckIsSUFDcEIsS0FBSyxtQkFBbUIsQ0FBQyxDQUN6QixPQUFPLHFCQUFxQixDQUFDLENBQzdCLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxDQUNyQyxNQUFNLFFBQVEsVUFBVSxDQUMyRDtFQUN0RixNQUFNLFlBQVksTUFBTSxJQUNyQixLQUFLLG1CQUFtQixDQUFDLENBQ3pCLE9BQU8sRUFBRSxTQUFTLFVBQVUsQ0FBQyxDQUFDLENBQzlCLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxDQUNyQyxNQUFNLFFBQVEsVUFBVSxDQUFDLENBQ3pCLE1BQU0sV0FBVyxNQUFNLElBQUksQ0FBQyxDQUM1QixRQUFRLGNBQWMsS0FBSyxDQUFDLENBQzVCLFFBQVEsTUFBTSxLQUFLLENBQUMsQ0FDcEIsTUFBTTtFQTRCVCxPQUFPLE1BMUJlLElBQ25CLEtBQUssY0FBYyxDQUFDLENBQ3BCLE1BQU0sTUFBTSxZQUFZLENBQUMsQ0FDekIsTUFBTSxVQUFVLFNBQVMsQ0FBQyxDQUMxQixPQUFPO0dBQ04sUUFBUTtHQUNSLGVBQWU7R0FDZixjQUFjLFVBQVU7R0FDeEIsZUFBZSxVQUFVO0dBQ3pCLG1CQUFtQixVQUFVO0dBQzdCLHVCQUF1QixVQUFVO0dBQ2pDLEdBQUksVUFBVSw2QkFBNkIsU0FDdkMsRUFBRSwwQkFBMEIsVUFBVSx5QkFBeUIsSUFDL0QsQ0FBQztHQUNMLEdBQUksVUFBVSw2QkFBNkIsU0FDdkMsRUFBRSwwQkFBMEIsVUFBVSx5QkFBeUIsSUFDL0QsQ0FBQztHQUNMLGFBQWEsVUFBVTtHQUN2QixnQkFBZ0IsVUFBVTtHQUMxQixVQUFVLFVBQVU7R0FDcEIsR0FBSSxVQUFVLGdCQUFnQixTQUFZLEVBQUUsYUFBYSxVQUFVLFlBQVksSUFBSSxDQUFDO0dBQ3BGLFNBQ0UsV0FBVyxZQUFZLFFBQVEsV0FBVyxZQUFZLFNBQ2xELElBQ0EsT0FBTyxVQUFVLE9BQU87RUFDaEMsQ0FBQyxJQUNjO0NBQ25COzs7OztDQU1BLE1BQ00sZ0JBQ0osY0FDQSxhQUNpQjtFQUNqQixNQUFNLE1BQU0sS0FBSyxRQUFRLEdBQUc7RUFDNUIsTUFBTSxJQUFJLEtBQUssSUFBSSxzQ0FBc0MsQ0FDdkQsK0JBQ0EsWUFDRixDQUFDO0VBRUQsTUFBTSxNQUFNLE1BQU0sSUFDZixLQUFLLGNBQWMsQ0FBQyxDQUNwQixPQUFPLEVBQUUsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUM1QixNQUFNLE1BQU0sWUFBWSxDQUFDLENBQ3pCLE1BQU07RUFDVCxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksTUFBTSxtQkFBbUIsYUFBYSxXQUFXO0VBQ3JFLElBQUksSUFBSSxXQUFXLFdBQ2pCLE1BQU0sSUFBSSxNQUFNLG1CQUFtQixhQUFhLGNBQWMsSUFBSSxRQUFRO0VBRzVFLEtBQUssTUFBTSxVQUFVLGFBQ25CLE1BQU0sSUFDSCxLQUFLLG1CQUFtQixDQUFDLENBQ3pCLE1BQU0sa0JBQWtCLFlBQVksQ0FBQyxDQUNyQyxNQUFNLGdCQUFnQixPQUFPLFVBQVUsQ0FBQyxDQUN4QyxNQUFNLFFBQVEsV0FBVyxDQUFDLENBQzFCLE9BQU8sT0FBTyxVQUFVLEVBQUUsT0FBTyxPQUFPLE9BQU8sSUFBSSxFQUFFLGFBQWEsT0FBTyxPQUFPLENBQUM7RUFRdEYsU0FBUSxNQUxVLElBQ2YsS0FBSyxtQkFBbUIsQ0FBQyxDQUN6QixPQUFPLEVBQUUsVUFBVSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUM1QyxNQUFNLGtCQUFrQixZQUFZLENBQUMsQ0FDckMsTUFBTSxFQUNELEVBQUssWUFBWSxNQUFNO0NBQ2pDOzs7Ozs7Ozs7Ozs7Ozs7O0NBaUJBLE1BQU0sVUFBVSxZQUFrQztFQUFFLEtBQUs7RUFBRyxNQUFNO0NBQUUsR0FBb0I7RUFDdEYsTUFBTSxTQUFTO0dBQ2IsS0FBSztHQUNMLE1BQU07R0FDTixRQUFRO0dBQ1IsR0FBRztFQUNMO0VBRUEsTUFBTSxFQUFFLElBQUksWUFBWSxLQUFLLGlCQUFpQixHQUFHO0VBQ2pELEtBQUssaUJBQWlCLFNBQVMsTUFBTTtFQUdyQyxNQUFNLFNBQVMsTUFBTSxRQUNsQixNQUFNLFFBQVEsQ0FBQyxDQUVmLE9BQU8sRUFDTixPQUFPLEtBQUssVUFBVSxzREFBc0QsRUFDOUUsQ0FBQyxDQUFDLENBQ0QsTUFBTTtFQUVULE1BQU0sRUFBRSxJQUFJLGFBQWEsS0FBSyxpQkFBaUIsR0FBRztFQUNsRCxLQUFLLGlCQUFpQixVQUFVLE1BQU07RUFDdEMsTUFBTSxhQUFhLE1BQU0sU0FDdEIsU0FBUyxtRUFBbUUsQ0FBQyxDQUM3RSxNQUFNLFFBQVEsQ0FBQyxDQUNmLE9BQU87R0FDTixZQUFZO0dBQ1osWUFBWTtHQUNaLGNBQWM7R0FDZCxlQUFlO0dBQ2YsbUJBQW1CO0dBQ25CLHVCQUF1QjtHQUN2QiwwQkFBMEI7R0FDMUIsMEJBQTBCO0dBQzFCLFVBQVU7RUFDWixDQUFDO0VBRUgsTUFBTSxjQUFjLE9BQU8sUUFBUSxTQUFTLENBQUMsSUFBSTtFQUdqRCxPQUFPLFdBQVcsUUFBUSxLQUFLLFFBQVE7R0FDckMsTUFBTSxnQkFBZ0IsS0FBSyxJQUFJLElBQUksWUFBWSxHQUFHLENBQUMsSUFBSTtHQUN2RCxNQUFNLFFBQVEsdUJBQXVCLEdBQUc7R0FDeEMsSUFBSSxDQUFDLE1BQU0sT0FBTyxPQUFPO0dBQ3pCLE9BQ0UsTUFDQSxpQkFBaUIsTUFBTSxPQUFPO0lBQzVCLGFBQWEsTUFBTTtJQUNuQixjQUFjLE1BQU07SUFDcEIsbUJBQW1CLE1BQU07SUFDekIsMEJBQTBCLE1BQU07SUFDaEMsNEJBQTRCLE1BQU07SUFDbEMsNEJBQTRCLE1BQU07R0FDcEMsQ0FBQyxJQUNEO0VBRUosR0FBRyxXQUFXO0NBQ2hCO0NBRUEsTUFBTSx1QkFBMEM7RUFTOUMsUUFBTyxNQVJZLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FDakMsS0FBSyxjQUFjLENBQUMsQ0FDcEIsU0FBUyxjQUFjLENBQUMsQ0FDeEIsTUFBTSxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsQ0FDakMsUUFBUSxnQkFBZ0IsS0FBSyxDQUFDLENBQzlCLE9BQU8sRUFDTixjQUFjLGVBQ2hCLENBQUMsRUFDSSxDQUFLLEtBQUssTUFBTSxFQUFFLFlBQWE7Q0FDeEM7Q0FFQSxNQUFNLHFCQUF3QztFQVM1QyxRQUFPLE1BUlksS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUNqQyxLQUFLLGNBQWMsQ0FBQyxDQUNwQixTQUFTLFlBQVksQ0FBQyxDQUN0QixNQUFNLGNBQWMsTUFBTSxJQUFJLENBQUMsQ0FDL0IsUUFBUSxjQUFjLEtBQUssQ0FBQyxDQUM1QixPQUFPLEVBQ04sWUFBWSxhQUNkLENBQUMsRUFDSSxDQUFLLEtBQUssTUFBTSxFQUFFLFVBQVc7Q0FDdEM7Q0FFQSxNQUNNLElBQUksS0FBZ0M7RUFJeEMsTUFIWSxLQUFLLFFBQVEsR0FHbkIsQ0FBQSxDQUFJLFlBQVksT0FBTyxRQUFRO0dBQ25DLE1BQU0sSUFDSCxNQUFNLG1CQUFtQixDQUFDLENBQzFCLFFBQVEsb0NBQW9DLEdBQUcsQ0FBQyxDQUNoRCxPQUFPO0dBQ1YsT0FBTyxJQUFJLE1BQU0sY0FBYyxDQUFDLENBQUMsUUFBUSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsT0FBTztFQUMxRSxDQUFDO0VBRUQsT0FBTyxJQUFJO0NBQ2I7QUFDRjs7Q0F4cEJHLElBQUk7RUFBRSxZQUFZO0VBQU8sU0FBUyxDQUFDLFNBQVMsZ0JBQWdCO0VBQUcsY0FBYztDQUFhLENBQUM7Ozs7OztDQTZFM0YsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7RUFBRyxjQUFjO0NBQWMsQ0FBQzs7Ozs7O0NBaUM1RixJQUFJO0VBQUUsWUFBWTtFQUFRLFNBQVMsQ0FBQyxTQUFTLG1CQUFtQjtDQUFFLENBQUM7Ozs7OztDQWtGbkUsSUFBSTtFQUFFLFlBQVk7RUFBTyxTQUFTLENBQUMsU0FBUyxnQkFBZ0I7Q0FBRSxDQUFDOzs7Ozs7Q0FzUC9ELGNBQWMsRUFBRSxVQUFVLElBQUksQ0FBQzs7Ozs7Ozs7OztDQTJFL0IsY0FBYyxFQUFFLFVBQVUsSUFBSSxDQUFDOzs7Ozs7Q0F3SS9CLElBQUk7RUFBRSxZQUFZO0VBQVEsU0FBUyxDQUFDLFNBQVMsbUJBQW1CO0NBQUUsQ0FBQzs7Ozs7QUFpQnRFLE1BQWEsa0JBQWtCLElBQUkscUJBQXFCIn0=
@@ -14,7 +14,8 @@ const HistoryItems = z.array(z.object({
14
14
  const ToolDefinitions = z.array(QgridTool);
15
15
  const RequestLogListParams = RequestLogBaseListParams.extend({
16
16
  project_name_is_null: z.boolean().optional(),
17
- project_name_is_not_null: z.boolean().optional()
17
+ project_name_is_not_null: z.boolean().optional(),
18
+ response_json_broken: z.boolean().optional()
18
19
  });
19
20
  const RequestLogSaveParams = RequestLogBaseSchema.partial({
20
21
  id: true,
@@ -26,4 +27,4 @@ const RequestLogSaveParams = RequestLogBaseSchema.partial({
26
27
  //#endregion
27
28
  export { HistoryItems, RequestLogListParams, RequestLogSaveParams, ToolDefinitions };
28
29
 
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFFncmlkVG9vbCB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjb25zdCBIaXN0b3J5SXRlbXMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICByb2xlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2FsbF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyDsmpTssq3sl5Ag7J6l7LCp65CcIHRvb2wg7KCV7J2YIOuqqeuhnSDigJQg7KCA7J6lIO2Yle2DnOuKlCBRZ3JpZFRvb2wg6rOE7JW97J2EIOq3uOuMgOuhnCDrlLDrpbjri6QuXG5leHBvcnQgY29uc3QgVG9vbERlZmluaXRpb25zID0gei5hcnJheShRZ3JpZFRvb2wpO1xuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb25zID0gei5pbmZlcjx0eXBlb2YgVG9vbERlZmluaXRpb25zPjtcblxuLy8gUmVxdWVzdExvZyAtIExpc3RQYXJhbXNcbi8vIHByb2plY3RfbmFtZSBOVUxMIOu2hOq4sDogSVMgTlVMTOunjCDsobDtmowodW5hc3NpZ25lZCDtlYTthLApIOuYkOuKlCBJUyBOT1QgTlVMTOunjChkaXN0aW5jdCDsobDtmowpLlxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dMaXN0UGFyYW1zID0gUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLmV4dGVuZCh7XG4gIHByb2plY3RfbmFtZV9pc19udWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0X25hbWVfaXNfbm90X251bGw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ0xpc3RQYXJhbXM+O1xuXG4vLyBSZXF1ZXN0TG9nIC0gU2F2ZVBhcmFtc1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTYXZlUGFyYW1zID0gUmVxdWVzdExvZ0Jhc2VTY2hlbWEucGFydGlhbCh7XG4gIGlkOiB0cnVlLFxuICBjcmVhdGVkX2F0OiB0cnVlLFxuICB0b2tlbl9uYW1lOiB0cnVlLFxuICBzdGF0dXM6IHRydWUsXG4gIGVycm9yX21lc3NhZ2U6IHRydWUsXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1NhdmVQYXJhbXM+O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBS0EsTUFBYSxlQUFlLEVBQUUsTUFDNUIsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLE9BQU87Q0FDZixNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQixTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUztDQUM5QixNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztBQUM5QixDQUFDLENBQ0g7QUFJQSxNQUFhLGtCQUFrQixFQUFFLE1BQU0sU0FBUztBQUtoRCxNQUFhLHVCQUF1Qix5QkFBeUIsT0FBTztDQUNsRSxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDakQsQ0FBQztBQUlELE1BQWEsdUJBQXVCLHFCQUFxQixRQUFRO0NBQy9ELElBQUk7Q0FDSixZQUFZO0NBQ1osWUFBWTtDQUNaLFFBQVE7Q0FDUixlQUFlO0FBQ2pCLENBQUMifQ==
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFFncmlkVG9vbCB9IGZyb20gXCIuLi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjb25zdCBIaXN0b3J5SXRlbXMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICByb2xlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY2FsbF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyDsmpTssq3sl5Ag7J6l7LCp65CcIHRvb2wg7KCV7J2YIOuqqeuhnSDigJQg7KCA7J6lIO2Yle2DnOuKlCBRZ3JpZFRvb2wg6rOE7JW97J2EIOq3uOuMgOuhnCDrlLDrpbjri6QuXG5leHBvcnQgY29uc3QgVG9vbERlZmluaXRpb25zID0gei5hcnJheShRZ3JpZFRvb2wpO1xuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb25zID0gei5pbmZlcjx0eXBlb2YgVG9vbERlZmluaXRpb25zPjtcblxuLy8gUmVxdWVzdExvZyAtIExpc3RQYXJhbXNcbi8vIHByb2plY3RfbmFtZSBOVUxMIOu2hOq4sDogSVMgTlVMTOunjCDsobDtmowodW5hc3NpZ25lZCDtlYTthLApIOuYkOuKlCBJUyBOT1QgTlVMTOunjChkaXN0aW5jdCDsobDtmowpLlxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dMaXN0UGFyYW1zID0gUmVxdWVzdExvZ0Jhc2VMaXN0UGFyYW1zLmV4dGVuZCh7XG4gIHByb2plY3RfbmFtZV9pc19udWxsOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0X25hbWVfaXNfbm90X251bGw6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIC8vIHN0cnVjdHVyZWQg7J2R64u17J20IOq5qOynhChKU09OIO2MjOyLsSDsi6TtjKgpIO2WieunjCDsobDtmoxcbiAgcmVzcG9uc2VfanNvbl9icm9rZW46IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ0xpc3RQYXJhbXM+O1xuXG4vLyBSZXF1ZXN0TG9nIC0gU2F2ZVBhcmFtc1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTYXZlUGFyYW1zID0gUmVxdWVzdExvZ0Jhc2VTY2hlbWEucGFydGlhbCh7XG4gIGlkOiB0cnVlLFxuICBjcmVhdGVkX2F0OiB0cnVlLFxuICB0b2tlbl9uYW1lOiB0cnVlLFxuICBzdGF0dXM6IHRydWUsXG4gIGVycm9yX21lc3NhZ2U6IHRydWUsXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1NhdmVQYXJhbXM+O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBS0EsTUFBYSxlQUFlLEVBQUUsTUFDNUIsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLE9BQU87Q0FDZixNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQixTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUztDQUM5QixNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztBQUM5QixDQUFDLENBQ0g7QUFJQSxNQUFhLGtCQUFrQixFQUFFLE1BQU0sU0FBUztBQUtoRCxNQUFhLHVCQUF1Qix5QkFBeUIsT0FBTztDQUNsRSxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Q0FFL0Msc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUMsU0FBUztBQUM3QyxDQUFDO0FBSUQsTUFBYSx1QkFBdUIscUJBQXFCLFFBQVE7Q0FDL0QsSUFBSTtDQUNKLFlBQVk7Q0FDWixZQUFZO0NBQ1osUUFBUTtDQUNSLGVBQWU7QUFDakIsQ0FBQyJ9
@@ -0,0 +1,71 @@
1
+ import { IDENT_SOURCE } from "./json-schema-type-text.js";
2
+ //#region src/application/request-log/zod-code-format.ts
3
+ /**
4
+ * json-schema-to-zod 출력(한 줄 표현식)을 표시용으로 정리한다.
5
+ *
6
+ * - object 리터럴 경계(`{`, `}`, 멤버 `,`)에서만 줄을 바꾼다 — 메서드 체인과
7
+ * 배열/인자 목록은 한 줄 유지가 더 읽기 좋다.
8
+ * - `"dish":` 처럼 식별자인데 따옴표가 붙은 키는 따옴표를 벗긴다.
9
+ * - 문자열 리터럴 내부는 절대 건드리지 않는다.
10
+ */
11
+ const QUOTED_IDENT_KEY_RE = new RegExp(`"(${IDENT_SOURCE})"(\\s*:)`, "g");
12
+ function formatZodCode(code) {
13
+ const source = code.replace(QUOTED_IDENT_KEY_RE, "$1$2").trim();
14
+ let out = "";
15
+ let depth = 0;
16
+ const stack = [];
17
+ let inString = false;
18
+ let escaped = false;
19
+ let skipSpaces = false;
20
+ const newline = () => {
21
+ out = out.trimEnd();
22
+ out += `\n${" ".repeat(depth)}`;
23
+ skipSpaces = true;
24
+ };
25
+ for (const ch of source) {
26
+ if (inString) {
27
+ out += ch;
28
+ if (escaped) escaped = false;
29
+ else if (ch === "\\") escaped = true;
30
+ else if (ch === "\"") inString = false;
31
+ continue;
32
+ }
33
+ if (ch === "\"") {
34
+ inString = true;
35
+ out += ch;
36
+ skipSpaces = false;
37
+ continue;
38
+ }
39
+ if (skipSpaces && (ch === " " || ch === " ")) continue;
40
+ skipSpaces = false;
41
+ if (ch === "{" || ch === "(" || ch === "[") {
42
+ stack.push(ch);
43
+ out += ch;
44
+ if (ch === "{") {
45
+ depth++;
46
+ newline();
47
+ }
48
+ continue;
49
+ }
50
+ if (ch === "}" || ch === ")" || ch === "]") {
51
+ const opener = stack.pop();
52
+ if (ch === "}" && opener === "{") {
53
+ depth = Math.max(0, depth - 1);
54
+ newline();
55
+ }
56
+ out += ch;
57
+ continue;
58
+ }
59
+ if (ch === "," && stack.at(-1) === "{") {
60
+ out += ch;
61
+ newline();
62
+ continue;
63
+ }
64
+ out += ch;
65
+ }
66
+ return out;
67
+ }
68
+ //#endregion
69
+ export { formatZodCode };
70
+
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kLWNvZGUtZm9ybWF0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9yZXF1ZXN0LWxvZy96b2QtY29kZS1mb3JtYXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBqc29uLXNjaGVtYS10by16b2Qg7Lac66ClKO2VnCDspIQg7ZGc7ZiE7IudKeydhCDtkZzsi5zsmqnsnLzroZwg7KCV66as7ZWc64ukLlxuICpcbiAqIC0gb2JqZWN0IOumrO2EsOuftCDqsr3qs4QoYHtgLCBgfWAsIOuppOuyhCBgLGAp7JeQ7ISc66eMIOykhOydhCDrsJTqvrzri6Qg4oCUIOuplOyEnOuTnCDssrTsnbjqs7xcbiAqICAg67Cw7Je0L+yduOyekCDrqqnroZ3snYAg7ZWcIOykhCDsnKDsp4DqsIAg642UIOydveq4sCDsoovri6QuXG4gKiAtIGBcImRpc2hcIjpgIOyymOufvCDsi53rs4TsnpDsnbjrjbAg65Sw7Ji07ZGc6rCAIOu2meydgCDtgqTripQg65Sw7Ji07ZGc66W8IOuyl+q4tOuLpC5cbiAqIC0g66y47J6Q7Je0IOumrO2EsOuftCDrgrTrtoDripQg7KCI64yAIOqxtOuTnOumrOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgSURFTlRfU09VUkNFIH0gZnJvbSBcIi4vanNvbi1zY2hlbWEtdHlwZS10ZXh0XCI7XG5cbmNvbnN0IFFVT1RFRF9JREVOVF9LRVlfUkUgPSBuZXcgUmVnRXhwKGBcIigke0lERU5UX1NPVVJDRX0pXCIoXFxcXHMqOilgLCBcImdcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRab2RDb2RlKGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNvdXJjZSA9IGNvZGUucmVwbGFjZShRVU9URURfSURFTlRfS0VZX1JFLCBcIiQxJDJcIikudHJpbSgpO1xuXG4gIGxldCBvdXQgPSBcIlwiO1xuICBsZXQgZGVwdGggPSAwO1xuICBjb25zdCBzdGFjazogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gIGxldCBza2lwU3BhY2VzID0gZmFsc2U7XG5cbiAgY29uc3QgbmV3bGluZSA9ICgpID0+IHtcbiAgICBvdXQgPSBvdXQudHJpbUVuZCgpO1xuICAgIG91dCArPSBgXFxuJHtcIiAgXCIucmVwZWF0KGRlcHRoKX1gO1xuICAgIHNraXBTcGFjZXMgPSB0cnVlO1xuICB9O1xuXG4gIGZvciAoY29uc3QgY2ggb2Ygc291cmNlKSB7XG4gICAgaWYgKGluU3RyaW5nKSB7XG4gICAgICBvdXQgKz0gY2g7XG4gICAgICBpZiAoZXNjYXBlZCkgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKGNoID09PSAnXCInKSBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgb3V0ICs9IGNoO1xuICAgICAgc2tpcFNwYWNlcyA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChza2lwU3BhY2VzICYmIChjaCA9PT0gXCIgXCIgfHwgY2ggPT09IFwiXFx0XCIpKSBjb250aW51ZTtcbiAgICBza2lwU3BhY2VzID0gZmFsc2U7XG5cbiAgICBpZiAoY2ggPT09IFwie1wiIHx8IGNoID09PSBcIihcIiB8fCBjaCA9PT0gXCJbXCIpIHtcbiAgICAgIHN0YWNrLnB1c2goY2gpO1xuICAgICAgb3V0ICs9IGNoO1xuICAgICAgaWYgKGNoID09PSBcIntcIikge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICBuZXdsaW5lKCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGNoID09PSBcIn1cIiB8fCBjaCA9PT0gXCIpXCIgfHwgY2ggPT09IFwiXVwiKSB7XG4gICAgICBjb25zdCBvcGVuZXIgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChjaCA9PT0gXCJ9XCIgJiYgb3BlbmVyID09PSBcIntcIikge1xuICAgICAgICBkZXB0aCA9IE1hdGgubWF4KDAsIGRlcHRoIC0gMSk7XG4gICAgICAgIG5ld2xpbmUoKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSBjaDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoY2ggPT09IFwiLFwiICYmIHN0YWNrLmF0KC0xKSA9PT0gXCJ7XCIpIHtcbiAgICAgIG91dCArPSBjaDtcbiAgICAgIG5ld2xpbmUoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXQgKz0gY2g7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVdBLE1BQU0sc0JBQXNCLElBQUksT0FBTyxLQUFLLGFBQWEsWUFBWSxHQUFHO0FBRXhFLFNBQWdCLGNBQWMsTUFBc0I7Q0FDbEQsTUFBTSxTQUFTLEtBQUssUUFBUSxxQkFBcUIsTUFBTSxDQUFDLENBQUMsS0FBSztDQUU5RCxJQUFJLE1BQU07Q0FDVixJQUFJLFFBQVE7Q0FDWixNQUFNLFFBQWtCLENBQUM7Q0FDekIsSUFBSSxXQUFXO0NBQ2YsSUFBSSxVQUFVO0NBQ2QsSUFBSSxhQUFhO0NBRWpCLE1BQU0sZ0JBQWdCO0VBQ3BCLE1BQU0sSUFBSSxRQUFRO0VBQ2xCLE9BQU8sS0FBSyxLQUFLLE9BQU8sS0FBSztFQUM3QixhQUFhO0NBQ2Y7Q0FFQSxLQUFLLE1BQU0sTUFBTSxRQUFRO0VBQ3ZCLElBQUksVUFBVTtHQUNaLE9BQU87R0FDUCxJQUFJLFNBQVMsVUFBVTtRQUNsQixJQUFJLE9BQU8sTUFBTSxVQUFVO1FBQzNCLElBQUksT0FBTyxNQUFLLFdBQVc7R0FDaEM7RUFDRjtFQUNBLElBQUksT0FBTyxNQUFLO0dBQ2QsV0FBVztHQUNYLE9BQU87R0FDUCxhQUFhO0dBQ2I7RUFDRjtFQUNBLElBQUksZUFBZSxPQUFPLE9BQU8sT0FBTyxNQUFPO0VBQy9DLGFBQWE7RUFFYixJQUFJLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0dBQzFDLE1BQU0sS0FBSyxFQUFFO0dBQ2IsT0FBTztHQUNQLElBQUksT0FBTyxLQUFLO0lBQ2Q7SUFDQSxRQUFRO0dBQ1Y7R0FDQTtFQUNGO0VBQ0EsSUFBSSxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sS0FBSztHQUMxQyxNQUFNLFNBQVMsTUFBTSxJQUFJO0dBQ3pCLElBQUksT0FBTyxPQUFPLFdBQVcsS0FBSztJQUNoQyxRQUFRLEtBQUssSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUM3QixRQUFRO0dBQ1Y7R0FDQSxPQUFPO0dBQ1A7RUFDRjtFQUNBLElBQUksT0FBTyxPQUFPLE1BQU0sR0FBRyxFQUFFLE1BQU0sS0FBSztHQUN0QyxPQUFPO0dBQ1AsUUFBUTtHQUNSO0VBQ0Y7RUFDQSxPQUFPO0NBQ1Q7Q0FDQSxPQUFPO0FBQ1QifQ==