@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,642 +0,0 @@
1
- import { CODEX_IMAGE_GENERATION_MODEL, resolveImageGenerationOptions } from "../../../application/qgrid/qgrid-image-generation.js";
2
- import { createTtftTracker } from "../common/ttft.js";
3
- import { CodexRpcClient } from "./codex-rpc.js";
4
- import { getLogger } from "@logtape/logtape";
5
- import { join } from "node:path";
6
- import { spawn } from "node:child_process";
7
- import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
8
- import { tmpdir } from "node:os";
9
- //#region src/utils/providers/openai/codex-worker.ts
10
- const logger = getLogger(["qgrid", "codex-worker"]);
11
- const MAX_RESTART_ATTEMPTS = 3;
12
- const RESTART_BACKOFF_BASE_MS = 1e3;
13
- const THREAD_DEFAULTS = {
14
- sandbox: "read-only",
15
- approvalPolicy: "never",
16
- config: { apps: { _default: {
17
- enabled: false,
18
- destructive_enabled: false,
19
- open_world_enabled: false
20
- } } }
21
- };
22
- const BASE_INSTRUCTIONS = "You are a helpful assistant. Do not use any tools such as shell, file operations, or web search. Respond with text only.";
23
- const IMAGE_BASE_INSTRUCTIONS = "You are a helpful assistant. When asked to create an image, use the image_generation tool to produce it. Do not use any other tools such as shell, file operations, or web search.";
24
- function imageBaseInstructions(options) {
25
- const resolved = resolveImageGenerationOptions(options);
26
- return `${IMAGE_BASE_INSTRUCTIONS} Requested image output: model ${CODEX_IMAGE_GENERATION_MODEL}, quality ${resolved.quality}, size ${resolved.size}, format png.`;
27
- }
28
- function isCompletedImageResult(result) {
29
- if (typeof result !== "string") return false;
30
- const trimmed = result.trim();
31
- if (trimmed.length === 0 || trimmed.startsWith("data:")) return false;
32
- if (!/^[A-Za-z0-9+/]+={0,2}$/.test(trimmed) || trimmed.length % 4 !== 0) return false;
33
- return true;
34
- }
35
- const CODEX_CONFIG_TOML = `web_search = "disabled"
36
- include_permissions_instructions = false
37
- include_apps_instructions = false
38
- include_environment_context = false
39
-
40
- [features]
41
- shell_tool = false
42
- tool_search = false
43
- tool_suggest = false
44
- multi_agent = false
45
- image_generation = false
46
- apps = false
47
- plugins = false
48
-
49
- [tools]
50
- view_image = false
51
-
52
- [skills]
53
- include_instructions = false
54
-
55
- [skills.bundled]
56
- enabled = false
57
- `;
58
- var CodexAppServerWorker = class CodexAppServerWorker {
59
- config;
60
- proc = null;
61
- rpc = null;
62
- codexHome;
63
- restartAttempts = 0;
64
- terminalFailureNotified = false;
65
- ready = false;
66
- destroyed = false;
67
- busy = false;
68
- activeTurnAbort;
69
- active = true;
70
- onReady;
71
- onTerminalFailure;
72
- serverRequestHandler;
73
- threadMeta = /* @__PURE__ */ new Map();
74
- epochCounter = 0;
75
- static THREAD_IDLE_TTL_MS = 10 * 6e4;
76
- static MAX_THREADS_PER_WORKER = 16;
77
- cachedCapabilities;
78
- cachedModels;
79
- constructor(config) {
80
- this.config = config;
81
- const suffix = config.workerIndex !== void 0 ? `-${config.workerIndex}` : "";
82
- this.codexHome = join(tmpdir(), "qgrid-codex", `${config.tokenId}${suffix}`);
83
- }
84
- async spawnAndInit() {
85
- this.epochCounter++;
86
- this.threadMeta.clear();
87
- this.cachedCapabilities = void 0;
88
- this.cachedModels = void 0;
89
- const cwd = `${this.codexHome}/cwd`;
90
- rmSync(this.codexHome, {
91
- recursive: true,
92
- force: true
93
- });
94
- mkdirSync(cwd, { recursive: true });
95
- writeFileSync(`${this.codexHome}/config.toml`, CODEX_CONFIG_TOML);
96
- this.proc = spawn("codex", [
97
- "app-server",
98
- "--listen",
99
- "stdio://"
100
- ], {
101
- stdio: [
102
- "pipe",
103
- "pipe",
104
- "pipe"
105
- ],
106
- cwd,
107
- env: {
108
- PATH: process.env.PATH,
109
- TMPDIR: process.env.TMPDIR,
110
- CODEX_HOME: this.codexHome,
111
- CODEX_EXEC_SERVER_URL: "none"
112
- }
113
- });
114
- this.proc.on("exit", (code) => {
115
- logger.info(`worker ${this.config.tokenName} exited (code=${code})`);
116
- this.failActiveTurn(/* @__PURE__ */ new Error(`codex worker exited while turn was running (code=${code ?? "unknown"})`));
117
- this.ready = false;
118
- this.rpc = null;
119
- this.proc = null;
120
- if (!this.destroyed) this.scheduleRestart();
121
- });
122
- this.rpc = new CodexRpcClient(this.proc);
123
- this.bindServerRequestHandler();
124
- await this.rpc.request("initialize", {
125
- clientInfo: {
126
- name: "qgrid",
127
- version: "1.0.0"
128
- },
129
- capabilities: { experimentalApi: true }
130
- });
131
- }
132
- waitForLoginCompleted() {
133
- return new Promise((resolve, reject) => {
134
- const timeout = setTimeout(() => reject(/* @__PURE__ */ new Error("login timeout")), 12e4);
135
- this.rpc.onNotification("account/login/completed", (p) => {
136
- clearTimeout(timeout);
137
- if (p.success) resolve();
138
- else reject(/* @__PURE__ */ new Error(`login failed: ${p.error ?? "unknown"}`));
139
- });
140
- });
141
- }
142
- async initialize() {
143
- await this.spawnAndInit();
144
- await this.rpc.request("account/login/start", {
145
- type: "chatgptAuthTokens",
146
- accessToken: this.config.accessToken,
147
- chatgptAccountId: this.config.accountId,
148
- ...this.config.planType ? { chatgptPlanType: this.config.planType } : {}
149
- });
150
- await this.waitForLoginCompleted();
151
- this.ready = true;
152
- this.restartAttempts = 0;
153
- this.terminalFailureNotified = false;
154
- }
155
- async startBrowserLogin() {
156
- await this.spawnAndInit();
157
- const result = await this.rpc.request("account/login/start", { type: "chatgpt" });
158
- logger.info(`worker ${this.config.tokenName} browser login started`);
159
- return result.authUrl;
160
- }
161
- async waitForBrowserLoginComplete() {
162
- await this.waitForLoginCompleted();
163
- this.ready = true;
164
- this.restartAttempts = 0;
165
- this.terminalFailureNotified = false;
166
- logger.info(`worker ${this.config.tokenName} browser login completed`);
167
- }
168
- async readManagedCredentials() {
169
- try {
170
- const raw = JSON.parse(readFileSync(`${this.codexHome}/auth.json`, "utf-8"));
171
- return {
172
- accessToken: raw.tokens?.access_token ?? "",
173
- refreshToken: raw.tokens?.refresh_token ?? "",
174
- idToken: raw.tokens?.id_token,
175
- accountId: raw.tokens?.account_id ?? ""
176
- };
177
- } catch {
178
- return null;
179
- }
180
- }
181
- async kill() {
182
- this.destroyed = true;
183
- this.ready = false;
184
- this.failActiveTurn(/* @__PURE__ */ new Error("codex worker stopped"));
185
- this.rpc?.destroy();
186
- if (this.proc) {
187
- this.proc.kill("SIGTERM");
188
- await new Promise((resolve) => {
189
- const timer = setTimeout(() => {
190
- this.proc?.kill("SIGKILL");
191
- resolve();
192
- }, 3e3);
193
- this.proc.on("exit", () => {
194
- clearTimeout(timer);
195
- resolve();
196
- });
197
- });
198
- }
199
- try {
200
- rmSync(this.codexHome, {
201
- recursive: true,
202
- force: true
203
- });
204
- } catch {}
205
- }
206
- get isReady() {
207
- return this.ready && !this.destroyed;
208
- }
209
- get isDestroyed() {
210
- return this.destroyed;
211
- }
212
- get tokenId() {
213
- return this.config.tokenId;
214
- }
215
- get workerIndex() {
216
- return this.config.workerIndex ?? 0;
217
- }
218
- get tokenName() {
219
- return this.config.tokenName;
220
- }
221
- canReuseForToken(_tokenName, credentials) {
222
- return this.config.accountId === credentials.accountId && (this.config.planType ?? void 0) === (credentials.planType ?? void 0);
223
- }
224
- updateTokenState(tokenName, credentials) {
225
- this.config.tokenName = tokenName;
226
- this.config.accessToken = credentials.accessToken;
227
- this.config.accountId = credentials.accountId;
228
- if (credentials.planType) this.config.planType = credentials.planType;
229
- else delete this.config.planType;
230
- }
231
- async getRateLimits() {
232
- if (!this.rpc || !this.ready) throw new Error("worker not ready");
233
- return this.rpc.request("account/rateLimits/read", {});
234
- }
235
- async loadCapabilities() {
236
- if (!this.rpc || !this.ready) throw new Error("worker not ready");
237
- if (!this.cachedCapabilities) this.cachedCapabilities = await this.rpc.request("modelProvider/capabilities/read", {});
238
- return this.cachedCapabilities;
239
- }
240
- async loadModels() {
241
- if (!this.rpc || !this.ready) throw new Error("worker not ready");
242
- if (!this.cachedModels) {
243
- const res = await this.rpc.request("model/list", {});
244
- this.cachedModels = new Map(res.data.map((m) => [m.model, m]));
245
- }
246
- return this.cachedModels;
247
- }
248
- async checkImageGenerationSupport(model) {
249
- if (!this.rpc || !this.ready) return "worker not ready";
250
- if (!(await this.loadCapabilities()).imageGeneration) return "provider does not support image generation";
251
- if (model) {
252
- const info = (await this.loadModels()).get(model);
253
- if (info && !info.inputModalities.includes("image")) return `model ${model} is not multimodal (no image input modality)`;
254
- }
255
- return null;
256
- }
257
- setServerRequestHandler(handler) {
258
- this.serverRequestHandler = handler;
259
- this.bindServerRequestHandler();
260
- }
261
- bindServerRequestHandler() {
262
- const handler = this.serverRequestHandler;
263
- if (!handler) return;
264
- this.rpc?.onServerRequest("account/chatgptAuthTokens/refresh", (params) => handler("account/chatgptAuthTokens/refresh", params));
265
- }
266
- tryAcquireTurn() {
267
- if (this.busy) return false;
268
- this.busy = true;
269
- return true;
270
- }
271
- releaseTurn() {
272
- this.busy = false;
273
- }
274
- get hasCapacity() {
275
- return !this.busy;
276
- }
277
- async createThread(req) {
278
- if (!this.rpc || !this.ready) throw new Error("worker not ready");
279
- this.sweepIdleThreads(true);
280
- const threadConfig = {
281
- ...THREAD_DEFAULTS.config,
282
- ...req.verbosity ? { model_verbosity: req.verbosity } : {},
283
- ...req.imageGeneration ? { "features.image_generation": true } : {}
284
- };
285
- const { thread, model: threadModel } = await this.rpc.request("thread/start", {
286
- ephemeral: true,
287
- cwd: `${this.codexHome}/cwd`,
288
- baseInstructions: req.imageGeneration ? imageBaseInstructions(req.imageGenerationOptions) : BASE_INSTRUCTIONS,
289
- developerInstructions: req.developerInstructions ?? "",
290
- sandbox: THREAD_DEFAULTS.sandbox,
291
- approvalPolicy: THREAD_DEFAULTS.approvalPolicy,
292
- config: threadConfig
293
- });
294
- const threadId = thread.id;
295
- try {
296
- if (req.history?.length) await this.rpc.request("thread/inject_items", {
297
- threadId,
298
- items: req.history
299
- });
300
- if (!req.imageGeneration) this.threadMeta.set(threadId, { lastUsedAt: Date.now() });
301
- return {
302
- threadId,
303
- model: req.model ?? threadModel
304
- };
305
- } catch (error) {
306
- this.evictThread(threadId);
307
- throw error;
308
- }
309
- }
310
- async startTurnOnThread(threadId, req) {
311
- if (!this.rpc || !this.ready) throw new Error("worker not ready");
312
- const { turn } = await this.rpc.request("turn/start", {
313
- threadId,
314
- input: req.input,
315
- ...req.outputSchema ? { outputSchema: req.outputSchema } : {},
316
- ...req.effort ? { effort: req.effort } : {},
317
- ...req.model ? { model: req.model } : {},
318
- ...req.reasoningSummary ? { summary: req.reasoningSummary } : {},
319
- ...req.serviceTier ? { serviceTier: req.serviceTier } : {}
320
- });
321
- const meta = this.threadMeta.get(threadId);
322
- if (meta) meta.lastUsedAt = Date.now();
323
- return { turnId: turn.id };
324
- }
325
- async executeTurn(req, existingThreadId) {
326
- let threadId;
327
- let model;
328
- if (existingThreadId) {
329
- threadId = existingThreadId;
330
- model = req.model ?? "";
331
- } else ({threadId, model} = await this.createThread(req));
332
- const ttftTracker = createTtftTracker();
333
- const resultPromise = this.consumeTurnNotifications(threadId, model, ttftTracker);
334
- try {
335
- ttftTracker.markStart();
336
- await this.startTurnOnThread(threadId, req);
337
- return {
338
- ...await resultPromise,
339
- threadId
340
- };
341
- } catch (e) {
342
- this.failActiveTurn(e);
343
- await resultPromise.catch(() => {});
344
- throw e;
345
- } finally {
346
- if (req.imageGeneration) this.unsubscribeThread(threadId);
347
- else this.touchThread(threadId);
348
- }
349
- }
350
- async executeTurnStream(req, cb, existingThreadId) {
351
- let threadId;
352
- let model;
353
- if (existingThreadId) {
354
- threadId = existingThreadId;
355
- model = req.model ?? "";
356
- } else ({threadId, model} = await this.createThread(req));
357
- cb.onThreadId?.(threadId);
358
- const ttftTracker = createTtftTracker();
359
- const resultPromise = this.consumeStreamNotifications(threadId, model, cb, ttftTracker);
360
- try {
361
- let turnId;
362
- try {
363
- ttftTracker.markStart();
364
- ({turnId} = await this.startTurnOnThread(threadId, req));
365
- } catch (e) {
366
- this.failActiveTurn(e);
367
- await resultPromise.catch(() => {});
368
- throw e;
369
- }
370
- cb.onTurnId?.(turnId);
371
- await resultPromise;
372
- return { threadId };
373
- } finally {
374
- this.touchThread(threadId);
375
- }
376
- }
377
- get epoch() {
378
- return this.epochCounter;
379
- }
380
- hasThread(threadId) {
381
- return this.threadMeta.has(threadId);
382
- }
383
- sweepIdleThreads(reserveSlotForNewThread = false) {
384
- const now = Date.now();
385
- for (const [id, meta] of this.threadMeta) if (now - meta.lastUsedAt > CodexAppServerWorker.THREAD_IDLE_TTL_MS) this.evictThread(id);
386
- const limit = CodexAppServerWorker.MAX_THREADS_PER_WORKER - (reserveSlotForNewThread ? 1 : 0);
387
- if (this.threadMeta.size > limit) {
388
- const sorted = [...this.threadMeta.entries()].toSorted((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);
389
- const over = this.threadMeta.size - limit;
390
- for (let i = 0; i < over; i++) this.evictThread(sorted[i][0]);
391
- }
392
- }
393
- touchThread(threadId) {
394
- const meta = this.threadMeta.get(threadId);
395
- if (meta) meta.lastUsedAt = Date.now();
396
- }
397
- evictThread(threadId) {
398
- this.threadMeta.delete(threadId);
399
- this.unsubscribeThread(threadId);
400
- }
401
- unsubscribeThread(threadId) {
402
- this.rpc?.request("thread/unsubscribe", { threadId }).catch(() => {});
403
- }
404
- async interruptTurn(threadId, turnId) {
405
- if (!this.rpc || !this.ready) return;
406
- try {
407
- await this.rpc.request("turn/interrupt", {
408
- threadId,
409
- turnId
410
- });
411
- } catch {}
412
- }
413
- failActiveTurn(error) {
414
- const abort = this.activeTurnAbort;
415
- this.activeTurnAbort = void 0;
416
- abort?.(error);
417
- }
418
- cleanupGeneratedImages() {
419
- try {
420
- rmSync(`${this.codexHome}/generated_images`, {
421
- recursive: true,
422
- force: true
423
- });
424
- } catch {}
425
- }
426
- consumeTurnNotifications(threadId, model, ttftTracker = createTtftTracker()) {
427
- return new Promise((resolve, reject) => {
428
- let settled = false;
429
- let abort;
430
- const timeout = setTimeout(() => {
431
- finishWithError(/* @__PURE__ */ new Error("turn timeout (600s)"));
432
- }, 6e5);
433
- let text = "";
434
- let usage = {
435
- totalTokens: 0,
436
- inputTokens: 0,
437
- outputTokens: 0,
438
- cachedInputTokens: 0,
439
- reasoningOutputTokens: 0
440
- };
441
- let durationMs = 0;
442
- const images = /* @__PURE__ */ new Map();
443
- let imageAttempted = false;
444
- const cleanup = () => {
445
- clearTimeout(timeout);
446
- if (this.activeTurnAbort === abort) this.activeTurnAbort = void 0;
447
- for (const n of [
448
- "item/started",
449
- "item/completed",
450
- "item/agentMessage/delta",
451
- "turn/completed",
452
- "thread/tokenUsage/updated",
453
- "error"
454
- ]) this.rpc?.onNotification(n, () => {});
455
- };
456
- const finishWithError = (error) => {
457
- if (settled) return;
458
- settled = true;
459
- cleanup();
460
- reject(error);
461
- };
462
- const finishWithResult = (result) => {
463
- if (settled) return;
464
- settled = true;
465
- cleanup();
466
- if (result.imageAttempted) this.cleanupGeneratedImages();
467
- resolve(result);
468
- };
469
- abort = finishWithError;
470
- this.activeTurnAbort = abort;
471
- this.rpc.onNotification("item/started", (p) => {
472
- if (p.threadId !== threadId) return;
473
- if (p.item.type === "imageGeneration") imageAttempted = true;
474
- });
475
- this.rpc.onNotification("item/completed", (p) => {
476
- if (p.threadId !== threadId) return;
477
- if (p.item.type === "agentMessage") text = p.item.text;
478
- else if (p.item.type === "imageGeneration") {
479
- imageAttempted = true;
480
- if (isCompletedImageResult(p.item.result)) images.set(p.item.id, {
481
- data: p.item.result,
482
- revisedPrompt: p.item.revisedPrompt
483
- });
484
- }
485
- });
486
- this.rpc.onNotification("item/agentMessage/delta", (p) => {
487
- if (p.threadId !== threadId) return;
488
- ttftTracker.recordFirstDelta();
489
- text += p.delta;
490
- });
491
- this.rpc.onNotification("thread/tokenUsage/updated", (p) => {
492
- if (p.threadId !== threadId) return;
493
- usage = p.tokenUsage.last;
494
- });
495
- this.rpc.onNotification("turn/completed", (p) => {
496
- if (p.threadId !== threadId) return;
497
- durationMs = p.turn.durationMs ?? 0;
498
- if (p.turn.status === "completed") finishWithResult({
499
- text,
500
- usage,
501
- durationMs,
502
- ttftMs: ttftTracker.value(),
503
- model,
504
- images: images.size > 0 ? [...images.values()] : void 0,
505
- imageAttempted
506
- });
507
- else finishWithError(/* @__PURE__ */ new Error(`turn failed: ${JSON.stringify(p.turn.error)}`));
508
- });
509
- this.rpc.onNotification("error", (p) => {
510
- if (p.threadId !== threadId) return;
511
- if (!p.willRetry) finishWithError(/* @__PURE__ */ new Error(`codex error: ${p.error.message}`));
512
- });
513
- });
514
- }
515
- consumeStreamNotifications(threadId, model, cb, ttftTracker = createTtftTracker()) {
516
- return new Promise((resolve, reject) => {
517
- let settled = false;
518
- let abort;
519
- const timeout = setTimeout(() => {
520
- finishWithError(/* @__PURE__ */ new Error("turn timeout (600s)"));
521
- }, 6e5);
522
- let text = "";
523
- let usage = {
524
- totalTokens: 0,
525
- inputTokens: 0,
526
- outputTokens: 0,
527
- cachedInputTokens: 0,
528
- reasoningOutputTokens: 0
529
- };
530
- const images = /* @__PURE__ */ new Map();
531
- let imageAttempted = false;
532
- const cleanup = () => {
533
- clearTimeout(timeout);
534
- if (this.activeTurnAbort === abort) this.activeTurnAbort = void 0;
535
- for (const n of [
536
- "item/started",
537
- "item/completed",
538
- "item/agentMessage/delta",
539
- "turn/completed",
540
- "thread/tokenUsage/updated",
541
- "error"
542
- ]) this.rpc?.onNotification(n, () => {});
543
- };
544
- const finishWithError = (error) => {
545
- if (settled) return;
546
- settled = true;
547
- cleanup();
548
- try {
549
- cb.onError(error);
550
- reject(error);
551
- } catch (callbackError) {
552
- reject(callbackError);
553
- }
554
- };
555
- const finishWithComplete = (result) => {
556
- if (settled) return;
557
- settled = true;
558
- cleanup();
559
- if (result.imageAttempted) this.cleanupGeneratedImages();
560
- try {
561
- cb.onComplete(result);
562
- resolve();
563
- } catch (callbackError) {
564
- reject(callbackError);
565
- }
566
- };
567
- abort = finishWithError;
568
- this.activeTurnAbort = abort;
569
- this.rpc.onNotification("item/agentMessage/delta", (p) => {
570
- if (p.threadId !== threadId) return;
571
- ttftTracker.recordFirstDelta();
572
- text += p.delta;
573
- cb.onDelta(p.delta);
574
- });
575
- this.rpc.onNotification("item/started", (p) => {
576
- if (p.threadId !== threadId) return;
577
- if (p.item.type === "imageGeneration") imageAttempted = true;
578
- });
579
- this.rpc.onNotification("item/completed", (p) => {
580
- if (p.threadId !== threadId) return;
581
- if (p.item.type === "agentMessage") text = p.item.text;
582
- else if (p.item.type === "imageGeneration") {
583
- imageAttempted = true;
584
- if (isCompletedImageResult(p.item.result)) images.set(p.item.id, {
585
- data: p.item.result,
586
- revisedPrompt: p.item.revisedPrompt
587
- });
588
- }
589
- });
590
- this.rpc.onNotification("thread/tokenUsage/updated", (p) => {
591
- if (p.threadId !== threadId) return;
592
- usage = p.tokenUsage.last;
593
- });
594
- this.rpc.onNotification("turn/completed", (p) => {
595
- if (p.threadId !== threadId) return;
596
- if (p.turn.status === "completed") finishWithComplete({
597
- text,
598
- usage,
599
- durationMs: p.turn.durationMs ?? 0,
600
- ttftMs: ttftTracker.value(),
601
- model,
602
- images: images.size > 0 ? [...images.values()] : void 0,
603
- imageAttempted
604
- });
605
- else finishWithError(/* @__PURE__ */ new Error(`turn ${p.turn.status}: ${JSON.stringify(p.turn.error)}`));
606
- });
607
- this.rpc.onNotification("error", (p) => {
608
- if (p.threadId !== threadId) return;
609
- if (!p.willRetry) finishWithError(/* @__PURE__ */ new Error(`codex error: ${p.error.message}`));
610
- });
611
- });
612
- }
613
- scheduleRestart() {
614
- if (this.destroyed) return;
615
- if (this.restartAttempts >= MAX_RESTART_ATTEMPTS) {
616
- if (!this.terminalFailureNotified) {
617
- this.terminalFailureNotified = true;
618
- logger.warn(`worker ${this.config.tokenName} max restart attempts reached`);
619
- try {
620
- this.onTerminalFailure?.();
621
- } catch (e) {
622
- logger.warn(`worker ${this.config.tokenName} terminal failure callback failed: ${e.message}`);
623
- }
624
- }
625
- return;
626
- }
627
- this.restartAttempts++;
628
- const delay = RESTART_BACKOFF_BASE_MS * 2 ** (this.restartAttempts - 1) + (this.config.workerIndex ?? 0) * 2e3;
629
- logger.info(`worker ${this.config.tokenName}[${this.config.workerIndex ?? 0}] restarting in ${delay}ms (attempt ${this.restartAttempts})`);
630
- setTimeout(() => {
631
- if (this.destroyed) return;
632
- this.initialize().then(() => this.onReady?.()).catch((e) => {
633
- logger.warn(`worker ${this.config.tokenName} restart failed: ${e.message}`);
634
- this.scheduleRestart();
635
- });
636
- }, delay);
637
- }
638
- };
639
- //#endregion
640
- export { CODEX_CONFIG_TOML, CodexAppServerWorker };
641
-
642
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQge1xuICBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMLFxuICByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Nb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBNb2RlbExpc3RSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Nb2RlbExpc3RSZXNwb25zZVwiO1xuaW1wb3J0IHsgdHlwZSBNb2RlbFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVhZFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL01vZGVsUHJvdmlkZXJDYXBhYmlsaXRpZXNSZWFkUmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkU3RhcnRQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVGhyZWFkU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkU3RhcnRSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFJlc3BvbnNlXCI7XG5pbXBvcnQgeyB0eXBlIFRva2VuVXNhZ2VCcmVha2Rvd24gfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVG9rZW5Vc2FnZUJyZWFrZG93blwiO1xuaW1wb3J0IHsgdHlwZSBUdXJuU3RhcnRQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UGFyYW1zXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1R1cm5TdGFydFJlc3BvbnNlXCI7XG5pbXBvcnQgeyB0eXBlIFN0cmVhbUNhbGxiYWNrcyBhcyBDb21tb25TdHJlYW1DYWxsYmFja3MgfSBmcm9tIFwiLi4vY29tbW9uL3Byb3ZpZGVyLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQgeyBDb2RleFJwY0NsaWVudCB9IGZyb20gXCIuL2NvZGV4LXJwY1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJjb2RleC13b3JrZXJcIl0pO1xuXG5jb25zdCBNQVhfUkVTVEFSVF9BVFRFTVBUUyA9IDM7XG5jb25zdCBSRVNUQVJUX0JBQ0tPRkZfQkFTRV9NUyA9IDFfMDAwO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyQ29uZmlnIHtcbiAgdG9rZW5JZDogbnVtYmVyO1xuICB0b2tlbk5hbWU6IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIHBsYW5UeXBlPzogc3RyaW5nO1xuICB3b3JrZXJJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJuUmVxdWVzdCB7XG4gIGlucHV0OiBUdXJuU3RhcnRQYXJhbXNbXCJpbnB1dFwiXTtcbiAgb3V0cHV0U2NoZW1hPzogVHVyblN0YXJ0UGFyYW1zW1wib3V0cHV0U2NoZW1hXCJdO1xuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBkZXZlbG9wZXJJbnN0cnVjdGlvbnM/OiBzdHJpbmc7XG4gIGhpc3Rvcnk/OiBUaHJlYWRJbmplY3RJdGVtc1BhcmFtc1tcIml0ZW1zXCJdO1xuICB2ZXJib3NpdHk/OiBzdHJpbmc7XG4gIHJlYXNvbmluZ1N1bW1hcnk/OiBzdHJpbmc7XG4gIHNlcnZpY2VUaWVyPzogc3RyaW5nO1xuICAvLyDsnbQgdHVybiDsl5DshJwgY29kZXgg64K07J6lIGltYWdlX2dlbmVyYXRpb24gdG9vbCDsnYQg7Lyg64ukLlxuICAvLyB0aHJlYWQg64uo7JyE66Gc66eMIO2ZnOyEse2ZlOuQmOupsCjsoITsl60gY29uZmlnIOuKlCBpbWFnZV9nZW5lcmF0aW9uPWZhbHNlIOycoOyngCksXG4gIC8vIO2UjOuemOq3uCDsl4bripQg7JqU7LKt7J2AIHRvb2wg6rWs7ISx7J20IO2YhO2WieqzvCDrj5nsnbztlZjri6QuXG4gIGltYWdlR2VuZXJhdGlvbj86IGJvb2xlYW47XG4gIGltYWdlR2VuZXJhdGlvbk9wdGlvbnM/OiBJbWFnZUdlbmVyYXRpb25PcHRpb25zO1xufVxuXG4vLyDtlZwgdHVybiDsl5DshJwg7IOd7ISx65CcIOydtOuvuOyngCDtlZjrgpguIGNvZGV4IGltYWdlR2VuZXJhdGlvbiBpdGVtIOyXkOyEnCDtjIzsg50uXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5JbWFnZSB7XG4gIGRhdGE6IHN0cmluZzsgLy8gYmFzZTY0IGltYWdlIHBheWxvYWQgKGl0ZW0ucmVzdWx0KVxuICByZXZpc2VkUHJvbXB0OiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR1cm5SZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbiAgbW9kZWw6IHN0cmluZztcbiAgLy8g7J2066+47KeAIHR1cm4g7JeQ7ISc66eMIOyxhOybjOynkC4g7JmE7ISxIOydtOuvuOyngOqwgCDsl4bsnLzrqbQg67mIIOuwsOyXtC91bmRlZmluZWQuXG4gIGltYWdlcz86IFR1cm5JbWFnZVtdO1xuICAvLyDsnbTrr7jsp4AgdG9vbCDtmLjstpzsnbQg6rSA7Lih65CQ64qU7KeAKGl0ZW0vc3RhcnRlZCDrmJDripQgaGFzUmVzdWx0IOyeiOuKlCBjb21wbGV0ZWQpLlxuICAvLyDsnbTrr7jsp4AgMOqwnOydvCDrlYwg7J6s7Iuc64+EIOqwgOuKpSDsi6TtjKgoXCLsi5zrj4Qg7ZuEIOuvuOyZhOyEsVwiKeyZgCDsnqzsi5zrj4Qg66y07J21KFwidG9vbCDrr7jtmLjstpxcIinsnYQg6rWs67aELlxuICBpbWFnZUF0dGVtcHRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrcyA9IENvbW1vblN0cmVhbUNhbGxiYWNrczxUdXJuUmVzdWx0PjtcblxudHlwZSBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzID0gUGljazxXb3JrZXJDb25maWcsIFwiYWNjZXNzVG9rZW5cIiB8IFwiYWNjb3VudElkXCIgfCBcInBsYW5UeXBlXCI+O1xudHlwZSBBY3RpdmVUdXJuQWJvcnQgPSAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuXG4vLyB0aHJlYWQvc3RhcnQg6rO17Ya1IOyYteyFmFxuY29uc3QgVEhSRUFEX0RFRkFVTFRTID0ge1xuICBzYW5kYm94OiBcInJlYWQtb25seVwiLFxuICBhcHByb3ZhbFBvbGljeTogXCJuZXZlclwiLFxuICBjb25maWc6IHtcbiAgICBhcHBzOiB7IF9kZWZhdWx0OiB7IGVuYWJsZWQ6IGZhbHNlLCBkZXN0cnVjdGl2ZV9lbmFibGVkOiBmYWxzZSwgb3Blbl93b3JsZF9lbmFibGVkOiBmYWxzZSB9IH0sXG4gIH0sXG59IHNhdGlzZmllcyBQYXJ0aWFsPFRocmVhZFN0YXJ0UGFyYW1zPjtcblxuY29uc3QgQkFTRV9JTlNUUlVDVElPTlMgPVxuICBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4gRG8gbm90IHVzZSBhbnkgdG9vbHMgc3VjaCBhcyBzaGVsbCwgZmlsZSBvcGVyYXRpb25zLCBvciB3ZWIgc2VhcmNoLiBSZXNwb25kIHdpdGggdGV4dCBvbmx5LlwiO1xuXG4vLyDsnbTrr7jsp4Ag7IOd7ISxIHRocmVhZCDsoITsmqkgaW5zdHJ1Y3Rpb24uIOq4sOuzuCBCQVNFX0lOU1RSVUNUSU9OUyDsnZggXCJ0ZXh0IG9ubHlcIiDsp4Dsi5zqsIBcbi8vIOyLpOyniCDslrXsoJzquLDsnbTrr4DroZwoY29kZXggaW1hZ2VfZ2VuZXJhdGlvbiBmZWF0dXJlIOuKlCBkZWZhdWx0LW9uKSwg7J2066+47KeAIOuqqOuTnOyXkOyEnOuKlFxuLy8gaW1hZ2VfZ2VuZXJhdGlvbiB0b29sIOyCrOyaqeydhCDrqoXsi5zsoIHsnLzroZwg7ZeI7Jqp7ZWc64ukLiBzaGVsbC93ZWIg65OxIOuCmOuouOyngCB0b29sIOydgCDsl6zsoITtnogg6riI7KeALlxuY29uc3QgSU1BR0VfQkFTRV9JTlNUUlVDVElPTlMgPVxuICBcIllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC4gV2hlbiBhc2tlZCB0byBjcmVhdGUgYW4gaW1hZ2UsIHVzZSB0aGUgaW1hZ2VfZ2VuZXJhdGlvbiB0b29sIHRvIHByb2R1Y2UgaXQuIERvIG5vdCB1c2UgYW55IG90aGVyIHRvb2xzIHN1Y2ggYXMgc2hlbGwsIGZpbGUgb3BlcmF0aW9ucywgb3Igd2ViIHNlYXJjaC5cIjtcblxuZnVuY3Rpb24gaW1hZ2VCYXNlSW5zdHJ1Y3Rpb25zKG9wdGlvbnM6IEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVJbWFnZUdlbmVyYXRpb25PcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gYCR7SU1BR0VfQkFTRV9JTlNUUlVDVElPTlN9IFJlcXVlc3RlZCBpbWFnZSBvdXRwdXQ6IG1vZGVsICR7Q09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTH0sIHF1YWxpdHkgJHtyZXNvbHZlZC5xdWFsaXR5fSwgc2l6ZSAke3Jlc29sdmVkLnNpemV9LCBmb3JtYXQgcG5nLmA7XG59XG5cbi8vIOyLpOy4oeyDgSDsmYTro4wgaXRlbSDsnZggc3RhdHVzIOuKlCBcImdlbmVyYXRpbmdcIiDsnLzroZwg7JmA64+EIHJlc3VsdCDsl5Ag7JmE7ISxIGJhc2U2NCDqsIAg7Iuk66aw64ukLlxuLy8g65Sw65287IScIOyZhOyEsSDtjJDsoJXsnYAgc3RhdHVzIOusuOyekOyXtOydtCDslYTri4jrnbwgcmVzdWx0IOydmCDsnKDtmqjshLEo67mE7Ja07J6I7KeAIOyViuqzoCDtkZzspIAgYmFzZTY0IOyduOyngCnsnLzroZwg7ZWc64ukLlxuZnVuY3Rpb24gaXNDb21wbGV0ZWRJbWFnZVJlc3VsdChyZXN1bHQ6IHVua25vd24pOiByZXN1bHQgaXMgc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgdHJpbW1lZCA9IHJlc3VsdC50cmltKCk7XG4gIGlmICh0cmltbWVkLmxlbmd0aCA9PT0gMCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIS9eW0EtWmEtejAtOSsvXSs9ezAsMn0kLy50ZXN0KHRyaW1tZWQpIHx8IHRyaW1tZWQubGVuZ3RoICUgNCAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gY29kZXjqsIAg66ekIOyalOyyreyXkCDsnpDrj5kg7KO87J6F7ZWY64qUIOuCtOyepSB0b29sKHNoZWxsL3dlYl9zZWFyY2gvc3Bhd25fYWdlbnQg65OxIDE06rCcKeqzvFxuLy8gaW5zdHJ1Y3Rpb24g67iU66GdKHBlcm1pc3Npb25zL2Vudmlyb25tZW50X2NvbnRleHQvc2tpbGxzLCB+MTBLQinsnYQg67mE7Zmc7ISx7ZmUXG4vLyAkQ09ERVhfSE9NRS9jb25maWcudG9tbCDroZwg7I2o64Sj7Jy866m0IGNvZGV4IOu2gO2MhSDsi5wgc2NhblxuLy8g7Ya17KCc67aI6rCAOiB1cGRhdGVfcGxhbi9yZXF1ZXN0X3VzZXJfaW5wdXRcbmV4cG9ydCBjb25zdCBDT0RFWF9DT05GSUdfVE9NTCA9IGB3ZWJfc2VhcmNoID0gXCJkaXNhYmxlZFwiXG5pbmNsdWRlX3Blcm1pc3Npb25zX2luc3RydWN0aW9ucyA9IGZhbHNlXG5pbmNsdWRlX2FwcHNfaW5zdHJ1Y3Rpb25zID0gZmFsc2VcbmluY2x1ZGVfZW52aXJvbm1lbnRfY29udGV4dCA9IGZhbHNlXG5cbltmZWF0dXJlc11cbnNoZWxsX3Rvb2wgPSBmYWxzZVxudG9vbF9zZWFyY2ggPSBmYWxzZVxudG9vbF9zdWdnZXN0ID0gZmFsc2Vcbm11bHRpX2FnZW50ID0gZmFsc2VcbmltYWdlX2dlbmVyYXRpb24gPSBmYWxzZVxuYXBwcyA9IGZhbHNlXG5wbHVnaW5zID0gZmFsc2VcblxuW3Rvb2xzXVxudmlld19pbWFnZSA9IGZhbHNlXG5cbltza2lsbHNdXG5pbmNsdWRlX2luc3RydWN0aW9ucyA9IGZhbHNlXG5cbltza2lsbHMuYnVuZGxlZF1cbmVuYWJsZWQgPSBmYWxzZVxuYDtcblxuLy8g4pSA4pSAIFdvcmtlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIENvZGV4QXBwU2VydmVyV29ya2VyIHtcbiAgcHJpdmF0ZSBwcm9jOiBDaGlsZFByb2Nlc3MgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBycGM6IENvZGV4UnBjQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29kZXhIb21lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVzdGFydEF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSB0ZXJtaW5hbEZhaWx1cmVOb3RpZmllZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgYnVzeSA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2ZVR1cm5BYm9ydD86IEFjdGl2ZVR1cm5BYm9ydDtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgb25SZWFkeT86ICgpID0+IHZvaWQ7XG4gIG9uVGVybWluYWxGYWlsdXJlPzogKCkgPT4gdm9pZDtcbiAgLy8gcmVzdGFydCDsi5wgcnBjIOqwneyytOqwgCDsg4jroZwg7IOd7ISx65CY66+A66GcLCDtlbjrk6Trn6zrpbwg67O06rSA7ZaI64uk6rCAIOunpCBzcGF3buuniOuLpCDsnqzrsJTsnbjrlKntlZzri6QuXG4gIHNlcnZlclJlcXVlc3RIYW5kbGVyPzogKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj47XG5cbiAgLy8gdGhyZWFkIOyerOyCrOyaqShwcm9tcHQgY2FjaGUpOiB3b3JrZXIg6rCAIOyDneyEse2VnCB0aHJlYWQg65Ok7J2YIOuplO2DgC5cbiAgLy8gZXBoZW1lcmFsIHRocmVhZCDripQg7J20IO2UhOuhnOyEuOyKpCDrqZTrqqjrpqzsl5Drp4wg7KG07J6s7ZWY66+A66GcIHJlc3RhcnQg7IucIOyghOu2gCDrrLTtmqguXG4gIHByaXZhdGUgdGhyZWFkTWV0YSA9IG5ldyBNYXA8c3RyaW5nLCB7IGxhc3RVc2VkQXQ6IG51bWJlciB9PigpO1xuICAvLyBzcGF3biDsubTsmrTthLAuIHJlc3RhcnQg66eI64ukIOymneqwgCDihpIgY29udiDtlbjrk6TsnZggZXBvY2gg7JmAIOuMgOyhsO2VtCBzdGFsZSB0aHJlYWQg6rCQ7KeALlxuICBwcml2YXRlIGVwb2NoQ291bnRlciA9IDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRIUkVBRF9JRExFX1RUTF9NUyA9IDEwICogNjBfMDAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfVEhSRUFEU19QRVJfV09SS0VSID0gMTY7XG4gIC8vIOydtOuvuOyngCDqsozsnbTtirgg6rKA7Kad7JqpIOy6kOyLnC4gc3Bhd24g64uo7JyE66GcIOustO2aqO2ZlChyZXN0YXJ0IOyLnCBjbGVhcikuXG4gIC8vIGNhcGFiaWxpdHkg64qUIHByb3ZpZGVyIOuLqOychCBib29sZWFuLCDrqqjrjbgg66mA7Yuw66qo64usIOyXrOu2gOuKlCBtb2RlbC9saXN0IOuhnCDtmZXsnbguXG4gIHByaXZhdGUgY2FjaGVkQ2FwYWJpbGl0aWVzPzogTW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZTtcbiAgcHJpdmF0ZSBjYWNoZWRNb2RlbHM/OiBNYXA8c3RyaW5nLCBNb2RlbD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IFdvcmtlckNvbmZpZykge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGNvbmZpZy53b3JrZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gYC0ke2NvbmZpZy53b3JrZXJJbmRleH1gIDogXCJcIjtcbiAgICB0aGlzLmNvZGV4SG9tZSA9IGpvaW4odG1wZGlyKCksIFwicWdyaWQtY29kZXhcIiwgYCR7Y29uZmlnLnRva2VuSWR9JHtzdWZmaXh9YCk7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYXN5bmMgc3Bhd25BbmRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOyDiCBjb2RleCDtlITroZzshLjsiqQg4oaSIOq4sOyhtCBlcGhlbWVyYWwgdGhyZWFkIOyghOu2gCDrrLTtmqguIGVwb2NoIOymneqwgOuhnCBzdGFsZSDqsJDsp4AuXG4gICAgdGhpcy5lcG9jaENvdW50ZXIrKztcbiAgICB0aGlzLnRocmVhZE1ldGEuY2xlYXIoKTtcbiAgICAvLyDsg4gg7ZSE66Gc7IS47IqkIOKGkiBjYXBhYmlsaXR5L21vZGVsIOy6kOyLnCDrrLTtmqgo66Gc6re47J24IOqzhOyglS/rsoTsoITsnbQg67CU64CM7JeI7J2EIOyImCDsnojsnYwpLlxuICAgIHRoaXMuY2FjaGVkQ2FwYWJpbGl0aWVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FjaGVkTW9kZWxzID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN3ZCA9IGAke3RoaXMuY29kZXhIb21lfS9jd2RgO1xuICAgIHJtU3luYyh0aGlzLmNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIG1rZGlyU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIGNvZGV4IOuCtOyepSB0b29sL3dlYl9zZWFyY2gvaW5zdHJ1Y3Rpb24g67iU66GdIOu5hO2ZnOyEse2ZlFxuICAgIHdyaXRlRmlsZVN5bmMoYCR7dGhpcy5jb2RleEhvbWV9L2NvbmZpZy50b21sYCwgQ09ERVhfQ09ORklHX1RPTUwpO1xuXG4gICAgdGhpcy5wcm9jID0gc3Bhd24oXCJjb2RleFwiLCBbXCJhcHAtc2VydmVyXCIsIFwiLS1saXN0ZW5cIiwgXCJzdGRpbzovL1wiXSwge1xuICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgIGN3ZCxcbiAgICAgIGVudjoge1xuICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICBUTVBESVI6IHByb2Nlc3MuZW52LlRNUERJUixcbiAgICAgICAgQ09ERVhfSE9NRTogdGhpcy5jb2RleEhvbWUsXG4gICAgICAgIC8vIGVudmlyb25tZW50IOu5hO2ZnOyEse2ZlCDihpIgaGFzX2Vudmlyb25tZW50PWZhbHNlIOKGkiBzaGVsbC9hcHBseV9wYXRjaC92aWV3X2ltYWdlIOygnOqxsFxuICAgICAgICBDT0RFWF9FWEVDX1NFUlZFUl9VUkw6IFwibm9uZVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvYy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGV4aXRlZCAoY29kZT0ke2NvZGV9KWApO1xuICAgICAgdGhpcy5mYWlsQWN0aXZlVHVybihcbiAgICAgICAgbmV3IEVycm9yKGBjb2RleCB3b3JrZXIgZXhpdGVkIHdoaWxlIHR1cm4gd2FzIHJ1bm5pbmcgKGNvZGU9JHtjb2RlID8/IFwidW5rbm93blwifSlgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgICB0aGlzLnJwYyA9IG51bGw7XG4gICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkgdGhpcy5zY2hlZHVsZVJlc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucnBjID0gbmV3IENvZGV4UnBjQ2xpZW50KHRoaXMucHJvYyk7XG4gICAgLy8gcmVzdGFydCDtm4Tsl5Drj4QgcmVmcmVzaCBzZXJ2ZXItcmVxdWVzdCDtlbjrk6Trn6zrpbwg7Jyg7KeAICjsl4bsnLzrqbQgY29kZXgg7Yag7YGwIO2ajOyghCDsi6TtjKgg4oaSIHNlc3Npb24gZXhwaXJlZClcbiAgICB0aGlzLmJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcImluaXRpYWxpemVcIiwge1xuICAgICAgY2xpZW50SW5mbzogeyBuYW1lOiBcInFncmlkXCIsIHZlcnNpb246IFwiMS4wLjBcIiB9LFxuICAgICAgY2FwYWJpbGl0aWVzOiB7IGV4cGVyaW1lbnRhbEFwaTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2dpbiB0aW1lb3V0XCIpKSwgMTIwXzAwMCk7XG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJhY2NvdW50L2xvZ2luL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChwLnN1Y2Nlc3MpIHJlc29sdmUoKTtcbiAgICAgICAgZWxzZSByZWplY3QobmV3IEVycm9yKGBsb2dpbiBmYWlsZWQ6ICR7cC5lcnJvciA/PyBcInVua25vd25cIn1gKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zcGF3bkFuZEluaXQoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRBdXRoVG9rZW5zXCIsXG4gICAgICBhY2Nlc3NUb2tlbjogdGhpcy5jb25maWcuYWNjZXNzVG9rZW4sXG4gICAgICBjaGF0Z3B0QWNjb3VudElkOiB0aGlzLmNvbmZpZy5hY2NvdW50SWQsXG4gICAgICAuLi4odGhpcy5jb25maWcucGxhblR5cGUgPyB7IGNoYXRncHRQbGFuVHlwZTogdGhpcy5jb25maWcucGxhblR5cGUgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckxvZ2luQ29tcGxldGVkKCk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICAgIHRoaXMudGVybWluYWxGYWlsdXJlTm90aWZpZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QnJvd3NlckxvZ2luKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5zcGF3bkFuZEluaXQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJwYyEucmVxdWVzdDx7IGF1dGhVcmw6IHN0cmluZyB9PihcImFjY291bnQvbG9naW4vc3RhcnRcIiwge1xuICAgICAgdHlwZTogXCJjaGF0Z3B0XCIsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gYnJvd3NlciBsb2dpbiBzdGFydGVkYCk7XG4gICAgcmV0dXJuIHJlc3VsdC5hdXRoVXJsO1xuICB9XG5cbiAgYXN5bmMgd2FpdEZvckJyb3dzZXJMb2dpbkNvbXBsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckxvZ2luQ29tcGxldGVkKCk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICAgIHRoaXMudGVybWluYWxGYWlsdXJlTm90aWZpZWQgPSBmYWxzZTtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIGNvbXBsZXRlZGApO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1hbmFnZWRDcmVkZW50aWFscygpOiBQcm9taXNlPHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIGlkVG9rZW4/OiBzdHJpbmc7XG4gICAgYWNjb3VudElkOiBzdHJpbmc7XG4gIH0gfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGAke3RoaXMuY29kZXhIb21lfS9hdXRoLmpzb25gLCBcInV0Zi04XCIpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiByYXcudG9rZW5zPy5hY2Nlc3NfdG9rZW4gPz8gXCJcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiByYXcudG9rZW5zPy5yZWZyZXNoX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIGlkVG9rZW46IHJhdy50b2tlbnM/LmlkX3Rva2VuLFxuICAgICAgICBhY2NvdW50SWQ6IHJhdy50b2tlbnM/LmFjY291bnRfaWQgPz8gXCJcIixcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBraWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5mYWlsQWN0aXZlVHVybihuZXcgRXJyb3IoXCJjb2RleCB3b3JrZXIgc3RvcHBlZFwiKSk7XG4gICAgdGhpcy5ycGM/LmRlc3Ryb3koKTtcblxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jPy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDNfMDAwKTtcbiAgICAgICAgdGhpcy5wcm9jIS5vbihcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBybVN5bmModGhpcy5jb2RleEhvbWUsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSAmJiAhdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZDtcbiAgfVxuICBnZXQgdG9rZW5JZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50b2tlbklkO1xuICB9XG4gIGdldCB3b3JrZXJJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwO1xuICB9XG4gIGdldCB0b2tlbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5OYW1lO1xuICB9XG5cbiAgY2FuUmV1c2VGb3JUb2tlbihfdG9rZW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29uZmlnLmFjY291bnRJZCA9PT0gY3JlZGVudGlhbHMuYWNjb3VudElkICYmXG4gICAgICAodGhpcy5jb25maWcucGxhblR5cGUgPz8gdW5kZWZpbmVkKSA9PT0gKGNyZWRlbnRpYWxzLnBsYW5UeXBlID8/IHVuZGVmaW5lZClcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlVG9rZW5TdGF0ZSh0b2tlbk5hbWU6IHN0cmluZywgY3JlZGVudGlhbHM6IFJlZnJlc2hhYmxlV29ya2VyQ3JlZGVudGlhbHMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy50b2tlbk5hbWUgPSB0b2tlbk5hbWU7XG4gICAgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gPSBjcmVkZW50aWFscy5hY2Nlc3NUb2tlbjtcbiAgICB0aGlzLmNvbmZpZy5hY2NvdW50SWQgPSBjcmVkZW50aWFscy5hY2NvdW50SWQ7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnBsYW5UeXBlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5wbGFuVHlwZSA9IGNyZWRlbnRpYWxzLnBsYW5UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5jb25maWcucGxhblR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFJhdGUgbGltaXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGdldFJhdGVMaW1pdHMoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICByZXR1cm4gdGhpcy5ycGMucmVxdWVzdChcImFjY291bnQvcmF0ZUxpbWl0cy9yZWFkXCIsIHt9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbWFnZSBnZW5lcmF0aW9uIGdhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIOydtOuvuOyngCB0b29sIOydgCBjb2RleCDsl5DshJwgKEF1dGhNb2RlOjpDaGF0Z3B0KSBBTkQgKGltYWdlX2dlbmVyYXRpb24gZmVhdHVyZSlcbiAgLy8gQU5EICjrqqjrjbgg66mA7Yuw66qo64usKSAz7KSRIOqyjOydtO2KuOuLpC4gcWdyaWQg64qUIE9BdXRoIOyghOyaqeydtOqzoCBmZWF0dXJlIOuKlCB0aHJlYWQg7JeQ7IScXG4gIC8vIOy8nOuvgOuhnCwgZGlzcGF0Y2hlciDqsIAg7IKs7KCEIOqygOymne2VoCDrgqjsnYAg7KGw6rG07J2AIGNhcGFiaWxpdHkocHJvdmlkZXIpICsg66qo6424IOupgO2LsOuqqOuLrOydtOuLpC5cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDYXBhYmlsaXRpZXMoKTogUHJvbWlzZTxNb2RlbFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVhZFJlc3BvbnNlPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICBpZiAoIXRoaXMuY2FjaGVkQ2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhY2hlZENhcGFiaWxpdGllcyA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8TW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZT4oXG4gICAgICAgIFwibW9kZWxQcm92aWRlci9jYXBhYmlsaXRpZXMvcmVhZFwiLFxuICAgICAgICB7fSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlZENhcGFiaWxpdGllcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE1vZGVscygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIE1vZGVsPj4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgaWYgKCF0aGlzLmNhY2hlZE1vZGVscykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxNb2RlbExpc3RSZXNwb25zZT4oXCJtb2RlbC9saXN0XCIsIHt9KTtcbiAgICAgIHRoaXMuY2FjaGVkTW9kZWxzID0gbmV3IE1hcChyZXMuZGF0YS5tYXAoKG0pID0+IFttLm1vZGVsLCBtXSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRNb2RlbHM7XG4gIH1cblxuICAvLyDso7zslrTsp4Qg66qo6424KOuvuOyngOygleydtOuptCB0aHJlYWQg6riw67O4IOuqqOuNuCnroZwg7J2066+47KeAIOyDneyEseydtCDqsIDriqXtlZzsp4Ag6rKA7KadLlxuICAvLyDrtojqsIAg7IKs7Jyg66W8IOusuOyekOyXtOuhnCDrsJjtmZjtlZjqs6AsIOqwgOuKpe2VmOuptCBudWxsIOydhCDrsJjtmZjtlZzri6QuXG4gIGFzeW5jIGNoZWNrSW1hZ2VHZW5lcmF0aW9uU3VwcG9ydChtb2RlbD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHJldHVybiBcIndvcmtlciBub3QgcmVhZHlcIjtcbiAgICBjb25zdCBjYXBzID0gYXdhaXQgdGhpcy5sb2FkQ2FwYWJpbGl0aWVzKCk7XG4gICAgaWYgKCFjYXBzLmltYWdlR2VuZXJhdGlvbikgcmV0dXJuIFwicHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCBpbWFnZSBnZW5lcmF0aW9uXCI7XG4gICAgLy8g66qo6424IOupgO2LsOuqqOuLrCDqsoDspp0uIG1vZGVsIOuvuOyngOygleydtOuptCBwcm92aWRlciBjYXBhYmlsaXR5IOunjOycvOuhnCDthrXqs7zsi5ztgqTqs6AsXG4gICAgLy8g7Iuk7KCcIOyggeyaqSDrqqjrjbjsnZgg66mA7Yuw66qo64usIOyXrOu2gOuKlCB0dXJuIOyLpO2WiSDqsrDqs7wo7J2066+47KeAIDDqsJwg4oaSIFUzIOyLpO2MqCDrtoTrpZgp6rCAIOyeoeuKlOuLpC5cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMubG9hZE1vZGVscygpO1xuICAgICAgY29uc3QgaW5mbyA9IG1vZGVscy5nZXQobW9kZWwpO1xuICAgICAgaWYgKGluZm8gJiYgIWluZm8uaW5wdXRNb2RhbGl0aWVzLmluY2x1ZGVzKFwiaW1hZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuIGBtb2RlbCAke21vZGVsfSBpcyBub3QgbXVsdGltb2RhbCAobm8gaW1hZ2UgaW5wdXQgbW9kYWxpdHkpYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyDilIDilIAgU2VydmVyLXJlcXVlc3QgZGVsZWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBzZXRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcihoYW5kbGVyOiAobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc2VydmVyUmVxdWVzdEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuYmluZFNlcnZlclJlcXVlc3RIYW5kbGVyKCk7XG4gIH1cblxuICAvLyBzcGF3bkFuZEluaXTsl5DshJwgcnBjIOyDneyEsSDsp4Htm4Qg7Zi47LacLiByZXN0YXJ066GcIHJwY+qwgCDsg4jroZwg66eM65Ok7Ja07KC464+EIO2VuOuTpOufrOqwgCDsnKDsp4DrkJzri6QuXG4gIGJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zZXJ2ZXJSZXF1ZXN0SGFuZGxlcjtcbiAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcbiAgICB0aGlzLnJwYz8ub25TZXJ2ZXJSZXF1ZXN0KFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIChwYXJhbXMpID0+XG4gICAgICBoYW5kbGVyKFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIHBhcmFtcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUdXJuIGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICB0cnlBY3F1aXJlVHVybigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5idXN5KSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWxlYXNlVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgfVxuICBnZXQgaGFzQ2FwYWNpdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmJ1c3k7XG4gIH1cblxuICAvLyDsg4ggdGhyZWFkIOyDneyEsSAodGhyZWFkL3N0YXJ0ICsg7ZWE7JqUIOyLnCBoaXN0b3J5IGluamVjdCkuIOyyqyB0dXJuIC8g7Y+067CxIOqyveuhnOyaqS5cbiAgLy8g7ZuE7IaNIHR1cm4g7J2AIGNyZWF0ZVRocmVhZCDsl4bsnbQgc3RhcnRUdXJuT25UaHJlYWQg66eMIO2YuOy2nO2VtCBjb252ZXJzYXRpb25faWQg66W8IOqzoOygle2VnOuLpC5cbiAgLy8gdGhyZWFkIOydmCDquLDrs7ggbW9kZWwg64+EIOuwmO2ZmCAocmVxLm1vZGVsIOuvuOyngOyglSDsi5wgZmFsbGJhY2spLlxuICBhc3luYyBjcmVhdGVUaHJlYWQocmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8eyB0aHJlYWRJZDogc3RyaW5nOyBtb2RlbDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuICAgIHRoaXMuc3dlZXBJZGxlVGhyZWFkcyh0cnVlKTtcblxuICAgIGNvbnN0IHRocmVhZENvbmZpZzogVGhyZWFkU3RhcnRQYXJhbXNbXCJjb25maWdcIl0gPSB7XG4gICAgICAuLi5USFJFQURfREVGQVVMVFMuY29uZmlnLFxuICAgICAgLi4uKHJlcS52ZXJib3NpdHkgPyB7IG1vZGVsX3ZlcmJvc2l0eTogcmVxLnZlcmJvc2l0eSB9IDoge30pLFxuICAgICAgLy8g7J2066+47KeAIOuqqOuTnDogdGhyZWFkIOuLqOychOuhnOunjCBpbWFnZV9nZW5lcmF0aW9uIGZlYXR1cmUg66W8IOy8oOuLpC5cbiAgICAgIC8vIOyghOyXrSBjb25maWcudG9tbCDsnYAgaW1hZ2VfZ2VuZXJhdGlvbj1mYWxzZSDsnKDsp4Ao7YWN7Iqk7Yq4IHRocmVhZCDsnbTspJEg7LCo64uoKSxcbiAgICAgIC8vIGRvdHRlZCBDTEkt7Iqk7YOA7J28IG92ZXJyaWRlIO2CpOuhnCDsnbQgdGhyZWFkIOyXkOyEnOunjCDtmZzshLHtmZQo7Iuk7LihIO2ZleyduCkuXG4gICAgICAuLi4ocmVxLmltYWdlR2VuZXJhdGlvbiA/IHsgXCJmZWF0dXJlcy5pbWFnZV9nZW5lcmF0aW9uXCI6IHRydWUgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IHsgdGhyZWFkLCBtb2RlbDogdGhyZWFkTW9kZWwgfSA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8VGhyZWFkU3RhcnRSZXNwb25zZT4oXG4gICAgICBcInRocmVhZC9zdGFydFwiLFxuICAgICAge1xuICAgICAgICBlcGhlbWVyYWw6IHRydWUsXG4gICAgICAgIGN3ZDogYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGAsXG4gICAgICAgIGJhc2VJbnN0cnVjdGlvbnM6IHJlcS5pbWFnZUdlbmVyYXRpb25cbiAgICAgICAgICA/IGltYWdlQmFzZUluc3RydWN0aW9ucyhyZXEuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucylcbiAgICAgICAgICA6IEJBU0VfSU5TVFJVQ1RJT05TLFxuICAgICAgICBkZXZlbG9wZXJJbnN0cnVjdGlvbnM6IHJlcS5kZXZlbG9wZXJJbnN0cnVjdGlvbnMgPz8gXCJcIixcbiAgICAgICAgc2FuZGJveDogVEhSRUFEX0RFRkFVTFRTLnNhbmRib3gsXG4gICAgICAgIGFwcHJvdmFsUG9saWN5OiBUSFJFQURfREVGQVVMVFMuYXBwcm92YWxQb2xpY3ksXG4gICAgICAgIGNvbmZpZzogdGhyZWFkQ29uZmlnLFxuICAgICAgfSBzYXRpc2ZpZXMgUGFydGlhbDxUaHJlYWRTdGFydFBhcmFtcz4sXG4gICAgKTtcblxuICAgIGNvbnN0IHRocmVhZElkID0gdGhyZWFkLmlkO1xuICAgIHRyeSB7XG4gICAgICBpZiAocmVxLmhpc3Rvcnk/Lmxlbmd0aCkge1xuICAgICAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwidGhyZWFkL2luamVjdF9pdGVtc1wiLCB7XG4gICAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgICAgaXRlbXM6IHJlcS5oaXN0b3J5LFxuICAgICAgICB9IHNhdGlzZmllcyBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyk7XG4gICAgICB9XG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsnYAg7J6s7IKs7Jqp7JeQ7IScIOygnOyZuChSOCk6IGJhc2U2NCDqsIAgdGhyZWFkIOuplOuqqOumrMK37LqQ7IucIHByZWZpeCDsl5BcbiAgICAgIC8vIOyDgeyjvO2VmOuKlCDqsoPsnYQg66eJ6rOgLCDsnbTrr7jsp4AgdGhyZWFkIOulvCAxIO2ajOyaqeycvOuhnCDrkZTri6QuIHRocmVhZE1ldGEg66+465Ox66GdIOKGklxuICAgICAgLy8g7ZuE7IaNIHJldXNlIOyhsO2ajOyXkOyEnCDsnbQgdGhyZWFkIOuKlCDtm4Trs7TqsIAg65CY7KeAIOyViuuKlOuLpC5cbiAgICAgIGlmICghcmVxLmltYWdlR2VuZXJhdGlvbikge1xuICAgICAgICB0aGlzLnRocmVhZE1ldGEuc2V0KHRocmVhZElkLCB7IGxhc3RVc2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHRocmVhZElkLCBtb2RlbDogcmVxLm1vZGVsID8/IHRocmVhZE1vZGVsIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIHRocmVhZC9zdGFydCDripQg7ZiE7J6sIFJQQyDsu6TrhKXshZjsnYQg6rWs64+F7J6Q66GcIOuTseuhne2VnOuLpC4g7IOd7ISxIO2bhCDstIjquLDtmZTqsIBcbiAgICAgIC8vIOuBneuCmOq4sCDsoITsl5Ag7Iuk7Yyo7ZWY66m0IGV4ZWN1dGVUdXJuIOydmCBmaW5hbGx5IOyZgCBsYXp5IHN3ZWVwIOyWtOuKkCDsqr3rj4Qg7J20XG4gICAgICAvLyB0aHJlYWQg66W8IOuzvCDsiJgg7JeG7Jy866+A66GcIOyXrOq4sOyEnCDsponsi5wg7J6s7IKs7JqpIOywqOuLqOqzvCDqtazrj4Ug7ZW07KCc66W8IO2VqOq7mCDtlZzri6QuXG4gICAgICB0aGlzLmV2aWN0VGhyZWFkKHRocmVhZElkKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIOq4sOyhtCB0aHJlYWQg7JeQIHR1cm4g66eMIOyLpO2WiSAoaW5qZWN0IOyXhuydjCkuIGNvbnZlcnNhdGlvbl9pZCDsnKDsp4Ag4oaSIHByb21wdCBjYWNoZSDsoIHspJEuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRUdXJuT25UaHJlYWQodGhyZWFkSWQ6IHN0cmluZywgcmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8eyB0dXJuSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcblxuICAgIGNvbnN0IHsgdHVybiB9ID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxUdXJuU3RhcnRSZXNwb25zZT4oXCJ0dXJuL3N0YXJ0XCIsIHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICAgIC4uLihyZXEub3V0cHV0U2NoZW1hID8geyBvdXRwdXRTY2hlbWE6IHJlcS5vdXRwdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuZWZmb3J0ID8geyBlZmZvcnQ6IHJlcS5lZmZvcnQgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEubW9kZWwgPyB7IG1vZGVsOiByZXEubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEucmVhc29uaW5nU3VtbWFyeSA/IHsgc3VtbWFyeTogcmVxLnJlYXNvbmluZ1N1bW1hcnkgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VUaWVyOiByZXEuc2VydmljZVRpZXIgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBjb25zdCBtZXRhID0gdGhpcy50aHJlYWRNZXRhLmdldCh0aHJlYWRJZCk7XG4gICAgaWYgKG1ldGEpIG1ldGEubGFzdFVzZWRBdCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHsgdHVybklkOiB0dXJuLmlkIH07XG4gIH1cblxuICAvLyBleGlzdGluZ1RocmVhZElkIOyeiOycvOuptCDqt7ggdGhyZWFkIOyerOyCrOyaqSjtm4Tsho0gdHVybiksIOyXhuycvOuptCDsg4ggdGhyZWFkIOyDneyEsSjssqsgdHVybikuXG4gIC8vIO2YuOy2nCDtm4Qg7IKs7Jqp7ZWcIHRocmVhZElkIOulvCDrsJjtmZjtlbQgZGlzcGF0Y2hlciDqsIAgY29udiDtlbjrk6TsnYQg67Cc6riJ7ZWc64ukLlxuICBhc3luYyBleGVjdXRlVHVybihcbiAgICByZXE6IFR1cm5SZXF1ZXN0LFxuICAgIGV4aXN0aW5nVGhyZWFkSWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8VHVyblJlc3VsdCAmIHsgdGhyZWFkSWQ6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmc7XG4gICAgbGV0IG1vZGVsOiBzdHJpbmc7XG4gICAgaWYgKGV4aXN0aW5nVGhyZWFkSWQpIHtcbiAgICAgIHRocmVhZElkID0gZXhpc3RpbmdUaHJlYWRJZDtcbiAgICAgIG1vZGVsID0gcmVxLm1vZGVsID8/IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7IHRocmVhZElkLCBtb2RlbCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVUaHJlYWQocmVxKSk7XG4gICAgfVxuICAgIGNvbnN0IHR0ZnRUcmFja2VyID0gY3JlYXRlVHRmdFRyYWNrZXIoKTtcbiAgICBjb25zdCByZXN1bHRQcm9taXNlID0gdGhpcy5jb25zdW1lVHVybk5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCB0dGZ0VHJhY2tlcik7XG4gICAgdHJ5IHtcbiAgICAgIHR0ZnRUcmFja2VyLm1hcmtTdGFydCgpO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFR1cm5PblRocmVhZCh0aHJlYWRJZCwgcmVxKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3VsdFByb21pc2U7XG4gICAgICByZXR1cm4geyAuLi5yZXN1bHQsIHRocmVhZElkIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5mYWlsQWN0aXZlVHVybihlIGFzIEVycm9yKTtcbiAgICAgIGF3YWl0IHJlc3VsdFByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8g7J2066+47KeAIHRocmVhZCDripQgMSDtmozsmqkgY29sZCB0aHJlYWQg7J24642wIHRocmVhZE1ldGEg7JeQIOuTseuhneuQmOyngCDslYrslYRcbiAgICAgIC8vIHN3ZWVwIOydtCDrqrsg7J6h64qU64ukLiBNQiDquIkgYmFzZTY0IOqwgCDsg4Hso7ztlZjrr4DroZwgdHVybiDsooXro4wg7KaJ7IucKOyEseqztS/si6TtjKhcbiAgICAgIC8vIOu2iOusuCkg6rWs64+F7J2EIOuBiuyWtCBjb2RleCAzMOu2hCDslrjroZzrk5wg64yA7IOB7Jy866GcIOunjOuToOuLpC5cbiAgICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVUaHJlYWQodGhyZWFkSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b3VjaFRocmVhZCh0aHJlYWRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZVR1cm5TdHJlYW0oXG4gICAgcmVxOiBUdXJuUmVxdWVzdCxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzLFxuICAgIGV4aXN0aW5nVGhyZWFkSWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyB0aHJlYWRJZDogc3RyaW5nIH0+IHtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZztcbiAgICBsZXQgbW9kZWw6IHN0cmluZztcbiAgICBpZiAoZXhpc3RpbmdUaHJlYWRJZCkge1xuICAgICAgdGhyZWFkSWQgPSBleGlzdGluZ1RocmVhZElkO1xuICAgICAgbW9kZWwgPSByZXEubW9kZWwgPz8gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKHsgdGhyZWFkSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLmNyZWF0ZVRocmVhZChyZXEpKTtcbiAgICB9XG4gICAgY2Iub25UaHJlYWRJZD8uKHRocmVhZElkKTtcbiAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHRoaXMuY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCBjYiwgdHRmdFRyYWNrZXIpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdHVybklkOiBzdHJpbmc7XG4gICAgICB0cnkge1xuICAgICAgICB0dGZ0VHJhY2tlci5tYXJrU3RhcnQoKTtcbiAgICAgICAgKHsgdHVybklkIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VHVybk9uVGhyZWFkKHRocmVhZElkLCByZXEpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5mYWlsQWN0aXZlVHVybihlIGFzIEVycm9yKTtcbiAgICAgICAgYXdhaXQgcmVzdWx0UHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjYi5vblR1cm5JZD8uKHR1cm5JZCk7XG4gICAgICBhd2FpdCByZXN1bHRQcm9taXNlO1xuICAgICAgcmV0dXJuIHsgdGhyZWFkSWQgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50b3VjaFRocmVhZCh0aHJlYWRJZCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIHRocmVhZCDsnqzsgqzsmqkg7KeA7JuQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldCBlcG9jaCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVwb2NoQ291bnRlcjtcbiAgfVxuXG4gIGhhc1RocmVhZCh0aHJlYWRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWFkTWV0YS5oYXModGhyZWFkSWQpO1xuICB9XG5cbiAgLy8gaWRsZSBUVEwg7LSI6rO8IC8g6rCc7IiYIOyDge2VnCDstIjqs7wgdGhyZWFkIOulvCDsoJXrpqwuXG4gIC8vIOuntSDsoJzqsbAo7J6s7IKs7JqpIOudvOyasO2MhSDssKjri6gp7JmAIO2VqOq7mCB0aHJlYWQvdW5zdWJzY3JpYmUg66W8IOuztOuCuOuLpCDigJQgY29kZXgg64qUXG4gIC8vIFwi6rWs64+F7J6QIDAgKyBpZGxlXCIg7J20IDMw67aEKFRIUkVBRF9VTkxPQURJTkdfREVMQVksIO2VmOuTnOy9lOuUqSkg7KeA7IaN65CcIHRocmVhZCDrpbxcbiAgLy8g66mU66qo66as7JeQ7IScIOyekOuPmSDslrjroZzrk5ztlZjripTrjbAsIHRocmVhZC9zdGFydCDqsIAg7J20IOy7pOuEpeyFmOydhCDsnpDrj5kg6rWs64+F7J6Q66GcIOuTseuhne2VtFxuICAvLyDrkZDquLAg65WM66y47JeQIHVuc3Vic2NyaWJlIOyXhuydtOuKlCDqt7gg7Ja466Gc65Oc6rCAIOyYgeybkO2eiCDrsJzrj5ntlZjsp4Ag7JWK64qU64ukKFNPTi01MTYg7Iuk7KadKS5cbiAgc3dlZXBJZGxlVGhyZWFkcyhyZXNlcnZlU2xvdEZvck5ld1RocmVhZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgbWV0YV0gb2YgdGhpcy50aHJlYWRNZXRhKSB7XG4gICAgICBpZiAobm93IC0gbWV0YS5sYXN0VXNlZEF0ID4gQ29kZXhBcHBTZXJ2ZXJXb3JrZXIuVEhSRUFEX0lETEVfVFRMX01TKSB7XG4gICAgICAgIHRoaXMuZXZpY3RUaHJlYWQoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjcmVhdGVUaHJlYWQg7KeB7KCE7JeQ64qUIOyDiCB0aHJlYWQgMeqwnOqwgCDqs6cg7LaU6rCA65CY66+A66GcIE1BWC0x7J2EIOyCrOyaqe2VnOuLpC5cbiAgICAvLyDso7zquLAgc3dlZXDsnYAg7ZiE7J6sIGNhcOyduCBNQVjquYzsp4Drp4wg7KSE7J2464ukLiBMUlU6IGxhc3RVc2VkQXQg7Jik66aE7LCo7Iic7Jy866GcIOygnOqxsC5cbiAgICBjb25zdCBsaW1pdCA9IENvZGV4QXBwU2VydmVyV29ya2VyLk1BWF9USFJFQURTX1BFUl9XT1JLRVIgLSAocmVzZXJ2ZVNsb3RGb3JOZXdUaHJlYWQgPyAxIDogMCk7XG4gICAgaWYgKHRoaXMudGhyZWFkTWV0YS5zaXplID4gbGltaXQpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLnRocmVhZE1ldGEuZW50cmllcygpXS50b1NvcnRlZChcbiAgICAgICAgKGEsIGIpID0+IGFbMV0ubGFzdFVzZWRBdCAtIGJbMV0ubGFzdFVzZWRBdCxcbiAgICAgICk7XG4gICAgICBjb25zdCBvdmVyID0gdGhpcy50aHJlYWRNZXRhLnNpemUgLSBsaW1pdDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3ZlcjsgaSsrKSB0aGlzLmV2aWN0VGhyZWFkKHNvcnRlZFtpXSFbMF0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG91Y2hUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnRocmVhZE1ldGEuZ2V0KHRocmVhZElkKTtcbiAgICBpZiAobWV0YSkgbWV0YS5sYXN0VXNlZEF0ID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8vIHRocmVhZCDsnqzsgqzsmqkg7Y+s6riwOiDrp7Ug7KCc6rGwKOudvOyasO2MhSDssKjri6gp7JmAIOq1rOuPhSDtlbTsoJzrpbwg7ZWcIOuLqOychOuhnCDrrLbripTri6QuXG4gIC8vIHVuc3Vic2NyaWJlIO2VnCB0aHJlYWQg7JeQIHR1cm4g7J2EIOuztOuCtOuptCDslYzrprzsnbQg7J20IOy7pOuEpeyFmOycvOuhnCDsmKTsp4Ag7JWK7Jy866+A66GcXG4gIC8vIOuRkCDrj5nsnpHsnYAg67CY65Oc7IucIO2VqOq7mOyXrOyVvCDtlZzri6QuXG4gIHByaXZhdGUgZXZpY3RUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudGhyZWFkTWV0YS5kZWxldGUodGhyZWFkSWQpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVUaHJlYWQodGhyZWFkSWQpO1xuICB9XG5cbiAgLy8g7J6s7IKs7Jqp7J2EIO2PrOq4sO2VnCB0aHJlYWQg7J2YIOq1rOuPheydhCDrgYrripTri6QuIOq1rOuPheyekOqwgCDsl4bslrTsp4QgaWRsZSB0aHJlYWQg64qUIGNvZGV4IOqwgFxuICAvLyAzMOu2hCDrkqQg66mU66qo66as7JeQ7IScIOyekOuPmSDslrjroZzrk5ztlZzri6QoU09OLTUxNiDsi6Tspp0pLiBmaXJlLWFuZC1mb3JnZXQ6IOyLpO2MqO2VtOuPhFxuICAvLyDrrLTtlbQocmVzdGFydCDsi5wg7ZSE66Gc7IS47Iqk7Ke4IO2ajOyImCkuIHRocmVhZE1ldGEg7JeQIOyXhuuKlCDsnbTrr7jsp4AgMe2ajOyaqSB0aHJlYWQg64qUXG4gIC8vIGV2aWN0VGhyZWFkIOuMgOyLoCDsnbQg66mU7ISc65Oc66W8IOyngeygkSDtmLjstpztlZzri6QuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucnBjPy5yZXF1ZXN0KFwidGhyZWFkL3Vuc3Vic2NyaWJlXCIsIHsgdGhyZWFkSWQgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgYXN5bmMgaW50ZXJydXB0VHVybih0aHJlYWRJZDogc3RyaW5nLCB0dXJuSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInR1cm4vaW50ZXJydXB0XCIsIHsgdGhyZWFkSWQsIHR1cm5JZCB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIGZhaWxBY3RpdmVUdXJuKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IGFib3J0ID0gdGhpcy5hY3RpdmVUdXJuQWJvcnQ7XG4gICAgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgYWJvcnQ/LihlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBHZW5lcmF0ZWRJbWFnZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHJtU3luYyhgJHt0aGlzLmNvZGV4SG9tZX0vZ2VuZXJhdGVkX2ltYWdlc2AsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVUdXJuTm90aWZpY2F0aW9ucyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIG1vZGVsOiBzdHJpbmcsXG4gICAgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpLFxuICApOiBQcm9taXNlPFR1cm5SZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHVyblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBsZXQgZHVyYXRpb25NcyA9IDA7XG4gICAgICBjb25zdCBpbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgVHVybkltYWdlPigpOyAvLyBpdGVtLmlkIOKGkiDsnbTrr7jsp4AgKGRlZHVwKVxuICAgICAgbGV0IGltYWdlQXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL3N0YXJ0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoUmVzdWx0ID0gKHJlc3VsdDogVHVyblJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBpZiAocmVzdWx0LmltYWdlQXR0ZW1wdGVkKSB0aGlzLmNsZWFudXBHZW5lcmF0ZWRJbWFnZXMoKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfTtcblxuICAgICAgYWJvcnQgPSBmaW5pc2hXaXRoRXJyb3I7XG4gICAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IGFib3J0O1xuXG4gICAgICAvLyDsnbTrr7jsp4AgdG9vbCDtmLjstpwg6rSA7LihKOyerOyLnOuPhCDtjJDsoJXsmqkpLiBzdGFydGVkIOuKlCByZXN1bHQg7JeG7J20IOyYpOuvgOuhnFxuICAgICAgLy8gYXR0ZW1wdGVkIOyLoO2YuOuhnOunjCDsk7Dqs6AsIOyZhOyEsSDsnbTrr7jsp4DripQgY29tcGxldGVkIOyXkOyEnCByZXN1bHQg7Jyg7Zqo7ISx7Jy866GcIO2MkOygle2VnOuLpC5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vc3RhcnRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImltYWdlR2VuZXJhdGlvblwiKSBpbWFnZUF0dGVtcHRlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLml0ZW0udHlwZSA9PT0gXCJhZ2VudE1lc3NhZ2VcIikge1xuICAgICAgICAgIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChwLml0ZW0udHlwZSA9PT0gXCJpbWFnZUdlbmVyYXRpb25cIikge1xuICAgICAgICAgIGltYWdlQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoaXNDb21wbGV0ZWRJbWFnZVJlc3VsdChwLml0ZW0ucmVzdWx0KSkge1xuICAgICAgICAgICAgaW1hZ2VzLnNldChwLml0ZW0uaWQsIHsgZGF0YTogcC5pdGVtLnJlc3VsdCwgcmV2aXNlZFByb21wdDogcC5pdGVtLnJldmlzZWRQcm9tcHQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9hZ2VudE1lc3NhZ2UvZGVsdGFcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIHR0ZnRUcmFja2VyLnJlY29yZEZpcnN0RGVsdGEoKTtcbiAgICAgICAgdGV4dCArPSBwLmRlbHRhO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIC8vIHRocmVhZCDsnqzsgqzsmqkg7IucIC50b3RhbCDsnYAg64yA7ZmUIOyghOyytCDriITsoIHsnbTrnbwsIGNvbGQg7JiA642YIOydtOyghCB0dXJuIOq5jOyngCDshJ7sl6xcbiAgICAgICAgLy8g7J20IOyalOyyrSDsnpDssrTsnZggY2FjaGUg7KCB7KSR66Wg7J20IO2drOyEneuQnOuLpCjsmIg6IHR1cm4xIGNvbGQgMCUgKyB0dXJuMiA5MCUg4oaSIDQ4JSDroZwg6riw66GdKS5cbiAgICAgICAgLy8gLmxhc3Qg64qUIOydtOuyiCB0dXJuIOunjOydmCB1c2FnZSDrnbwgcmVxdWVzdF9sb2cg6rCAIOq3uCDsmpTssq3snZgg7Iuk7KCcIO2GoO2BsOydhCDsoJXtmZXtnogg67CY7JiB7ZWc64ukLlxuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS5sYXN0O1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInR1cm4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBkdXJhdGlvbk1zID0gcC50dXJuLmR1cmF0aW9uTXMgPz8gMDtcbiAgICAgICAgaWYgKHAudHVybi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoUmVzdWx0KHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB1c2FnZSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgICB0dGZ0TXM6IHR0ZnRUcmFja2VyLnZhbHVlKCksXG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGltYWdlczogaW1hZ2VzLnNpemUgPiAwID8gWy4uLmltYWdlcy52YWx1ZXMoKV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpbWFnZUF0dGVtcHRlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0dXJuIOyLpO2MqC/spJHri6gg7IucIOu2gOu2hCDsnbTrr7jsp4DripQg7Y+Q6riwKOyEseqzteycvOuhnCDsirnqsqntlZjsp4Ag7JWK7J2MKS5cbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGB0dXJuIGZhaWxlZDogJHtKU09OLnN0cmluZ2lmeShwLnR1cm4uZXJyb3IpfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImVycm9yXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXAud2lsbFJldHJ5KSB7XG4gICAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihgY29kZXggZXJyb3I6ICR7cC5lcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVTdHJlYW1Ob3RpZmljYXRpb25zKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgbW9kZWw6IHN0cmluZyxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzLFxuICAgIHR0ZnRUcmFja2VyID0gY3JlYXRlVHRmdFRyYWNrZXIoKSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgICBsZXQgYWJvcnQ6IEFjdGl2ZVR1cm5BYm9ydDtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihcInR1cm4gdGltZW91dCAoNjAwcylcIikpO1xuICAgICAgfSwgNjAwXzAwMCk7XG5cbiAgICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICAgIGxldCB1c2FnZTogVG9rZW5Vc2FnZUJyZWFrZG93biA9IHtcbiAgICAgICAgdG90YWxUb2tlbnM6IDAsXG4gICAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgICBvdXRwdXRUb2tlbnM6IDAsXG4gICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLFxuICAgICAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gICAgICB9O1xuICAgICAgY29uc3QgaW1hZ2VzID0gbmV3IE1hcDxzdHJpbmcsIFR1cm5JbWFnZT4oKTsgLy8gaXRlbS5pZCDihpIg7J2066+47KeAIChkZWR1cClcbiAgICAgIGxldCBpbWFnZUF0dGVtcHRlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9PT0gYWJvcnQpIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgW1xuICAgICAgICAgIFwiaXRlbS9zdGFydGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwiaXRlbS9hZ2VudE1lc3NhZ2UvZGVsdGFcIixcbiAgICAgICAgICBcInR1cm4vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgICAgdGhpcy5ycGM/Lm9uTm90aWZpY2F0aW9uKG4sICgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aEVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNiLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGNhbGxiYWNrRXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoY2FsbGJhY2tFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmlzaFdpdGhDb21wbGV0ZSA9IChyZXN1bHQ6IFR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pbWFnZUF0dGVtcHRlZCkgdGhpcy5jbGVhbnVwR2VuZXJhdGVkSW1hZ2VzKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2Iub25Db21wbGV0ZShyZXN1bHQpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBjYXRjaCAoY2FsbGJhY2tFcnJvcikge1xuICAgICAgICAgIHJlamVjdChjYWxsYmFja0Vycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgYWJvcnQgPSBmaW5pc2hXaXRoRXJyb3I7XG4gICAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IGFib3J0O1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdHRmdFRyYWNrZXIucmVjb3JkRmlyc3REZWx0YSgpO1xuICAgICAgICB0ZXh0ICs9IHAuZGVsdGE7XG4gICAgICAgIGNiLm9uRGVsdGEocC5kZWx0YSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9zdGFydGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiaW1hZ2VHZW5lcmF0aW9uXCIpIGltYWdlQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImFnZW50TWVzc2FnZVwiKSB7XG4gICAgICAgICAgdGV4dCA9IHAuaXRlbS50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKHAuaXRlbS50eXBlID09PSBcImltYWdlR2VuZXJhdGlvblwiKSB7XG4gICAgICAgICAgaW1hZ2VBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChpc0NvbXBsZXRlZEltYWdlUmVzdWx0KHAuaXRlbS5yZXN1bHQpKSB7XG4gICAgICAgICAgICBpbWFnZXMuc2V0KHAuaXRlbS5pZCwgeyBkYXRhOiBwLml0ZW0ucmVzdWx0LCByZXZpc2VkUHJvbXB0OiBwLml0ZW0ucmV2aXNlZFByb21wdCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0aHJlYWQvdG9rZW5Vc2FnZS91cGRhdGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICAvLyB0aHJlYWQg7J6s7IKs7JqpIOyLnCAudG90YWwg7J2AIOuMgO2ZlCDsoITssrQg64iE7KCB7J206528LCBjb2xkIOyYgOuNmCDsnbTsoIQgdHVybiDquYzsp4Ag7ISe7JesXG4gICAgICAgIC8vIOydtCDsmpTssq0g7J6Q7LK07J2YIGNhY2hlIOyggeykkeuloOydtCDtnazshJ3rkJzri6Qo7JiIOiB0dXJuMSBjb2xkIDAlICsgdHVybjIgOTAlIOKGkiA0OCUg66GcIOq4sOuhnSkuXG4gICAgICAgIC8vIC5sYXN0IOuKlCDsnbTrsoggdHVybiDrp4zsnZggdXNhZ2Ug6528IHJlcXVlc3RfbG9nIOqwgCDqt7gg7JqU7LKt7J2YIOyLpOygnCDthqDtgbDsnYQg7KCV7ZmV7Z6IIOuwmOyYge2VnOuLpC5cbiAgICAgICAgdXNhZ2UgPSBwLnRva2VuVXNhZ2UubGFzdDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJ0dXJuL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAudHVybi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoQ29tcGxldGUoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgICAgZHVyYXRpb25NczogcC50dXJuLmR1cmF0aW9uTXMgPz8gMCxcbiAgICAgICAgICAgIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXMuc2l6ZSA+IDAgPyBbLi4uaW1hZ2VzLnZhbHVlcygpXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGltYWdlQXR0ZW1wdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYHR1cm4gJHtwLnR1cm4uc3RhdHVzfTogJHtKU09OLnN0cmluZ2lmeShwLnR1cm4uZXJyb3IpfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImVycm9yXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXAud2lsbFJldHJ5KSB7XG4gICAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihgY29kZXggZXJyb3I6ICR7cC5lcnJvci5tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVzdGFydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHNjaGVkdWxlUmVzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPj0gTUFYX1JFU1RBUlRfQVRURU1QVFMpIHtcbiAgICAgIGlmICghdGhpcy50ZXJtaW5hbEZhaWx1cmVOb3RpZmllZCkge1xuICAgICAgICB0aGlzLnRlcm1pbmFsRmFpbHVyZU5vdGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gbWF4IHJlc3RhcnQgYXR0ZW1wdHMgcmVhY2hlZGApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25UZXJtaW5hbEZhaWx1cmU/LigpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSB0ZXJtaW5hbCBmYWlsdXJlIGNhbGxiYWNrIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cysrO1xuICAgIGNvbnN0IGJhc2VEZWxheSA9IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TICogMiAqKiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgLSAxKTtcbiAgICBjb25zdCBzdGFnZ2VyID0gKHRoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDApICogMl8wMDA7XG4gICAgY29uc3QgZGVsYXkgPSBiYXNlRGVsYXkgKyBzdGFnZ2VyO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX1bJHt0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwfV0gcmVzdGFydGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5yZXN0YXJ0QXR0ZW1wdHN9KWAsXG4gICAgKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxpemUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLm9uUmVhZHk/LigpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2Fybihgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZXN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVzdGFydCgpO1xuICAgICAgICB9KTtcbiAg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