@cartanova/qgrid-cli 2.7.0 → 2.7.2

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 (1337) hide show
  1. package/README.ko.md +3 -2
  2. package/README.md +3 -2
  3. package/bundle/dist/_virtual/_rolldown/runtime.js +20 -1
  4. package/bundle/dist/application/monit/monit.frame.js +27 -14
  5. package/bundle/dist/application/monit/monit.types.js +22 -13
  6. package/bundle/dist/application/qgrid/conv-routing.js +21 -11
  7. package/bundle/dist/application/qgrid/oauth.js +1 -1
  8. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +15 -4
  9. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +34 -14
  10. package/bundle/dist/application/qgrid/qgrid.frame.js +50 -73
  11. package/bundle/dist/application/qgrid/qgrid.types.js +4 -1
  12. package/bundle/dist/application/qgrid/schema-prompt.js +240 -0
  13. package/bundle/dist/application/qgrid/token-subscriber.js +5 -5
  14. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -1
  15. package/bundle/dist/application/qgrid/tool-emulation.js +8 -6
  16. package/bundle/dist/application/queries.generated.js +3 -1
  17. package/bundle/dist/application/request-log/json-schema-type-text.js +55 -0
  18. package/bundle/dist/application/request-log/request-log.model.js +85 -3
  19. package/bundle/dist/application/request-log/request-log.types.js +3 -2
  20. package/bundle/dist/application/request-log/zod-code-format.js +71 -0
  21. package/bundle/dist/application/setting/setting.constant.js +2 -62
  22. package/bundle/dist/application/setting/setting.model.js +3 -3
  23. package/bundle/dist/application/setting/setting.store.js +2 -2
  24. package/bundle/dist/application/sonamu.generated.js +11 -4
  25. package/bundle/dist/application/sonamu.generated.sso.js +7 -3
  26. package/bundle/dist/i18n/sd.generated.js +5 -2
  27. package/bundle/dist/migrations/20260814130113_alter_request_logs_add1_alter1.js +15 -0
  28. package/bundle/dist/migrations/20260814131051_alter_request_logs_add1_alter1.js +15 -0
  29. package/bundle/dist/migrations/20260814134846_alter_request_logs_add1_alter1.js +15 -0
  30. package/bundle/dist/migrations/20260814140759_alter_request_logs_alter1.js +13 -0
  31. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/2020.js +112 -0
  32. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js +140 -0
  33. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.js +676 -0
  34. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
  35. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.js +104 -0
  36. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.js +225 -0
  37. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/names.js +30 -0
  38. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.js +20 -0
  39. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.js +135 -0
  40. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.js +63 -0
  41. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.js +148 -0
  42. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/applicability.js +25 -0
  43. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
  44. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.js +174 -0
  45. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/defaults.js +33 -0
  46. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.js +435 -0
  47. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/keyword.js +115 -0
  48. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.js +74 -0
  49. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.js +585 -0
  50. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/data.js +20 -0
  51. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +44 -0
  52. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.js +52 -0
  53. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.js +22 -0
  54. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.js +53 -0
  55. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.js +18 -0
  56. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.js +38 -0
  57. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.js +21 -0
  58. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.js +87 -0
  59. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-2020-12/schema.js +61 -0
  60. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/equal.js +14 -0
  61. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/ucs2length.js +27 -0
  62. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/uri.js +14 -0
  63. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.js +18 -0
  64. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +59 -0
  65. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +98 -0
  66. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js +31 -0
  67. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +18 -0
  68. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.js +91 -0
  69. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +89 -0
  70. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +18 -0
  71. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.js +64 -0
  72. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.js +62 -0
  73. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items.js +61 -0
  74. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js +36 -0
  75. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.js +33 -0
  76. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +53 -0
  77. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +63 -0
  78. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +19 -0
  79. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
  80. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +43 -0
  81. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +19 -0
  82. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/code.js +132 -0
  83. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/id.js +16 -0
  84. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/index.js +24 -0
  85. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/ref.js +114 -0
  86. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.js +103 -0
  87. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.js +16 -0
  88. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/draft2020.js +37 -0
  89. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +48 -0
  90. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +47 -0
  91. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/index.js +24 -0
  92. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +22 -0
  93. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +17 -0
  94. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.js +94 -0
  95. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/index.js +12 -0
  96. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/metadata.js +25 -0
  97. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/next.js +21 -0
  98. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/index.js +15 -0
  99. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +48 -0
  100. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +61 -0
  101. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.js +29 -0
  102. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +19 -0
  103. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.js +51 -0
  104. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.js +50 -0
  105. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitContains.js +20 -0
  106. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js +30 -0
  107. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js +35 -0
  108. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +49 -0
  109. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +30 -0
  110. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +29 -0
  111. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.js +40 -0
  112. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.js +74 -0
  113. package/bundle/dist/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +72 -0
  114. package/bundle/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +35 -0
  115. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js +238 -0
  116. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js +189 -0
  117. package/bundle/dist/node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js +284 -0
  118. package/bundle/dist/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js +80 -0
  119. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +9 -0
  120. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +41 -0
  121. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +19 -0
  122. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +202 -0
  123. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +46 -0
  124. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +119 -0
  125. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +3044 -0
  126. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +59 -0
  127. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_3892b4338df694f79f7d384fad23d930/node_modules/vitest/dist/index.js +28 -0
  128. package/bundle/dist/sonamu.config.js +10 -9
  129. package/bundle/dist/testing/schema-bench.js +0 -0
  130. package/bundle/dist/testing/setup-mocks.js +2 -2
  131. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +14 -2
  132. package/bundle/dist/utils/providers/anthropic/claude-session.js +1 -1
  133. package/bundle/dist/utils/providers/anthropic/fence-strip.js +83 -0
  134. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +3 -5
  135. package/bundle/dist/utils/providers/common/model-cost.js +1 -1
  136. package/bundle/dist/utils/providers/common/schema-validation.js +1 -1
  137. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +144 -0
  138. package/bundle/dist/utils/providers/openai/openai-constants.js +4 -2
  139. package/bundle/dist/utils/providers/openai/openai-direct-client.js +327 -0
  140. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +358 -781
  141. package/bundle/dist/utils/providers/openai/openai-oauth.js +84 -0
  142. package/bundle/dist/utils/providers/openai/openai-quota.js +76 -5
  143. package/bundle/dist/utils/providers/openai/openai-refresh.js +3 -3
  144. package/bundle/dist/utils/providers/openai/openai-sse.js +72 -0
  145. package/bundle/dist/utils/providers/openai/openai-transport-config.js +14 -0
  146. package/bundle/src/application/monit/monit.frame.test.ts +14 -17
  147. package/bundle/src/application/monit/monit.frame.ts +23 -12
  148. package/bundle/src/application/monit/monit.types.ts +40 -11
  149. package/bundle/src/application/qgrid/conv-routing.test.ts +67 -0
  150. package/bundle/src/application/qgrid/conv-routing.ts +46 -12
  151. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +92 -2
  152. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +3 -0
  153. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +15 -1
  154. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +286 -40
  155. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +58 -14
  156. package/bundle/src/application/qgrid/qgrid.frame.test.ts +120 -153
  157. package/bundle/src/application/qgrid/qgrid.frame.ts +57 -94
  158. package/bundle/src/application/qgrid/qgrid.types.ts +11 -4
  159. package/bundle/src/application/qgrid/schema-prompt.test.ts +166 -0
  160. package/bundle/src/application/qgrid/schema-prompt.ts +293 -0
  161. package/bundle/src/application/qgrid/token-subscriber.ts +4 -4
  162. package/bundle/src/application/qgrid/tool-emulation-schema.ts +1 -1
  163. package/bundle/src/application/qgrid/tool-emulation.test.ts +37 -0
  164. package/bundle/src/application/qgrid/tool-emulation.ts +19 -7
  165. package/bundle/src/application/queries.generated.ts +6 -0
  166. package/bundle/src/application/request-log/json-schema-type-text.test.ts +96 -0
  167. package/bundle/src/application/request-log/json-schema-type-text.ts +83 -0
  168. package/bundle/src/application/request-log/request-log.entity.json +147 -21
  169. package/bundle/src/application/request-log/request-log.model.ts +108 -0
  170. package/bundle/src/application/request-log/request-log.types.ts +2 -0
  171. package/bundle/src/application/request-log/zod-code-format.test.ts +31 -0
  172. package/bundle/src/application/request-log/zod-code-format.ts +73 -0
  173. package/bundle/src/application/setting/setting.constant.test.ts +22 -24
  174. package/bundle/src/application/setting/setting.constant.ts +2 -63
  175. package/bundle/src/application/setting/setting.entity.json +1 -1
  176. package/bundle/src/application/setting/setting.store.ts +1 -1
  177. package/bundle/src/application/sonamu.generated.http +20 -1
  178. package/bundle/src/application/sonamu.generated.sso.ts +4 -0
  179. package/bundle/src/application/sonamu.generated.ts +10 -0
  180. package/bundle/src/i18n/sd.generated.ts +6 -1
  181. package/bundle/src/migrations/20260814130113_alter_request_logs_add1_alter1.ts +15 -0
  182. package/bundle/src/migrations/20260814131051_alter_request_logs_add1_alter1.ts +15 -0
  183. package/bundle/src/migrations/20260814134846_alter_request_logs_add1_alter1.ts +15 -0
  184. package/bundle/src/migrations/20260814140759_alter_request_logs_alter1.ts +13 -0
  185. package/bundle/src/sonamu.config.ts +9 -13
  186. package/bundle/src/testing/schema-bench.test.ts +358 -0
  187. package/bundle/src/testing/schema-bench.ts +352 -0
  188. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +17 -2
  189. package/bundle/src/utils/providers/anthropic/claude-session.ts +1 -3
  190. package/bundle/src/utils/providers/anthropic/fence-strip.test.ts +122 -0
  191. package/bundle/src/utils/providers/anthropic/fence-strip.ts +105 -0
  192. package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +1 -2
  193. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +4 -11
  194. package/bundle/src/utils/providers/common/model-cost.ts +4 -9
  195. package/bundle/src/utils/providers/common/provider-dispatcher.ts +10 -8
  196. package/bundle/src/utils/providers/common/provider-types.ts +48 -0
  197. package/bundle/src/utils/providers/common/schema-validation.ts +1 -1
  198. package/bundle/src/utils/providers/openai/openai-backend-protocol.test.ts +106 -0
  199. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +255 -0
  200. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  201. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +610 -0
  202. package/bundle/src/utils/providers/openai/openai-direct-client.ts +478 -0
  203. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +336 -1723
  204. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +458 -1175
  205. package/bundle/src/utils/providers/openai/openai-oauth.test.ts +95 -0
  206. package/bundle/src/utils/providers/openai/openai-oauth.ts +141 -0
  207. package/bundle/src/utils/providers/openai/openai-quota.test.ts +80 -7
  208. package/bundle/src/utils/providers/openai/openai-quota.ts +105 -4
  209. package/bundle/src/utils/providers/openai/openai-refresh.test.ts +120 -0
  210. package/bundle/src/utils/providers/openai/openai-refresh.ts +3 -1
  211. package/bundle/src/utils/providers/openai/openai-sse.test.ts +52 -0
  212. package/bundle/src/utils/providers/openai/openai-sse.ts +79 -0
  213. package/bundle/src/utils/providers/openai/openai-transport-config.ts +17 -0
  214. package/bundle/web-dist/client/assets/index-BldeEvAK.css +1 -0
  215. package/bundle/web-dist/client/assets/index-DkAXPF9q.js +106 -0
  216. package/bundle/web-dist/client/assets/logs-DlI6OojL.js +1 -0
  217. package/bundle/web-dist/client/assets/monit-qap66dhi.js +1 -0
  218. package/bundle/web-dist/client/assets/routes-CV07Pzde.js +5 -0
  219. package/bundle/web-dist/client/assets/services.generated-CSW8bhCP.js +51 -0
  220. package/bundle/web-dist/client/assets/settings-CdYub4yo.js +1 -0
  221. package/bundle/web-dist/client/assets/show-DA1L8DVD.js +2 -0
  222. package/bundle/web-dist/client/assets/tokens-Dt3gfkwP.js +1 -0
  223. package/bundle/web-dist/client/assets/use-oauth-login-flow-Cwi0HtJY.js +1 -0
  224. package/bundle/web-dist/client/index.html +3 -3
  225. package/bundle/web-dist/server/assets/lazyRouteComponent-0y-znAfz.js +1856 -0
  226. package/bundle/web-dist/server/assets/logs-CJBbHM3_.js +481 -0
  227. package/bundle/web-dist/server/assets/monit-8WAsPETB.js +1670 -0
  228. package/bundle/web-dist/server/assets/plus-9das21ju.js +19 -0
  229. package/bundle/web-dist/server/assets/react-dom-zmEq8BVp.js +462 -0
  230. package/bundle/web-dist/server/assets/routes-B6bX3o41.js +2924 -0
  231. package/bundle/web-dist/server/assets/services.generated-DyPeBI00.js +23644 -0
  232. package/bundle/web-dist/server/assets/settings-D1u5WdpP.js +597 -0
  233. package/bundle/web-dist/server/assets/show-Cr7vwR0l.js +2861 -0
  234. package/bundle/web-dist/server/assets/tokens-BumM0gnH.js +441 -0
  235. package/bundle/web-dist/server/assets/use-oauth-login-flow-DmsHGOlx.js +160 -0
  236. package/bundle/web-dist/server/entry-server.generated.js +12 -12
  237. package/dist/cli.d.ts +10 -1
  238. package/dist/cli.js +1 -6
  239. package/package.json +3 -2
  240. package/skills/qgrid/SKILL.md +5 -5
  241. package/skills/qgrid/references/ai-sdk-provider-contract.md +36 -25
  242. package/skills/qgrid/references/anthropic-claude-code-runtime.md +31 -14
  243. package/skills/qgrid/references/cli-env-and-server-boot.md +6 -13
  244. package/skills/qgrid/references/decision-rationale.md +28 -26
  245. package/skills/qgrid/references/docs-workflow.md +1 -1
  246. package/skills/qgrid/references/openai-codex-runtime.md +39 -156
  247. package/skills/qgrid/references/prompt-cache-and-usage.md +35 -68
  248. package/skills/qgrid/references/provider-runtime-differences.md +18 -18
  249. package/skills/qgrid/references/repo-map.md +2 -2
  250. package/skills/qgrid/references/request-log-run-lifecycle.md +12 -2
  251. package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
  252. package/skills/qgrid/references/token-auth-quota-lifecycle.md +14 -24
  253. package/skills/qgrid/references/tool-calling-and-multiturn.md +19 -9
  254. package/skills/qgrid/references/verification-and-debugging.md +17 -15
  255. package/bundle/dist/codex-protocol/AgentPath.js +0 -1
  256. package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
  257. package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
  258. package/bundle/dist/codex-protocol/AuthMode.js +0 -1
  259. package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
  260. package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
  261. package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
  262. package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
  263. package/bundle/dist/codex-protocol/ContentItem.js +0 -1
  264. package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
  265. package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
  266. package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
  267. package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
  268. package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
  269. package/bundle/dist/codex-protocol/FileChange.js +0 -1
  270. package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
  271. package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
  272. package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
  273. package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
  274. package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
  275. package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
  276. package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
  277. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
  278. package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
  279. package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
  280. package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
  281. package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
  282. package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
  283. package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
  284. package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
  285. package/bundle/dist/codex-protocol/GitSha.js +0 -1
  286. package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
  287. package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
  288. package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
  289. package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
  290. package/bundle/dist/codex-protocol/InputModality.js +0 -1
  291. package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
  292. package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
  293. package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
  294. package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
  295. package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
  296. package/bundle/dist/codex-protocol/ModeKind.js +0 -1
  297. package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
  298. package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
  299. package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
  300. package/bundle/dist/codex-protocol/Personality.js +0 -1
  301. package/bundle/dist/codex-protocol/PlanType.js +0 -1
  302. package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
  303. package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
  304. package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
  305. package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
  306. package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
  307. package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
  308. package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
  309. package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
  310. package/bundle/dist/codex-protocol/RequestId.js +0 -1
  311. package/bundle/dist/codex-protocol/Resource.js +0 -1
  312. package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
  313. package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
  314. package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
  315. package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
  316. package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
  317. package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
  318. package/bundle/dist/codex-protocol/SessionSource.js +0 -1
  319. package/bundle/dist/codex-protocol/Settings.js +0 -1
  320. package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
  321. package/bundle/dist/codex-protocol/ThreadId.js +0 -1
  322. package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
  323. package/bundle/dist/codex-protocol/Tool.js +0 -1
  324. package/bundle/dist/codex-protocol/Verbosity.js +0 -1
  325. package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
  326. package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
  327. package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
  328. package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
  329. package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
  330. package/bundle/dist/codex-protocol/index.js +0 -2
  331. package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
  332. package/bundle/dist/codex-protocol/v2/Account.js +0 -1
  333. package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
  334. package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
  335. package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
  336. package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
  337. package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
  338. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
  339. package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
  340. package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
  341. package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
  342. package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
  343. package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
  344. package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
  345. package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
  346. package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
  347. package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
  348. package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
  349. package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
  350. package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
  351. package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
  352. package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
  353. package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
  354. package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
  355. package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
  356. package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
  357. package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
  358. package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
  359. package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
  360. package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
  361. package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
  362. package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
  363. package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
  364. package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
  365. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
  366. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
  367. package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
  368. package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
  369. package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
  370. package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
  371. package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
  372. package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
  373. package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
  374. package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
  375. package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
  376. package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
  377. package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
  378. package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
  379. package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
  380. package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
  381. package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
  382. package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
  383. package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
  384. package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
  385. package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
  386. package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
  387. package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
  388. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
  389. package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
  390. package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
  391. package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
  392. package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
  393. package/bundle/dist/codex-protocol/v2/Config.js +0 -1
  394. package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
  395. package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
  396. package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
  397. package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
  398. package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
  399. package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
  400. package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
  401. package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
  402. package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
  403. package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
  404. package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
  405. package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
  406. package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
  407. package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
  408. package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
  409. package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
  410. package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
  411. package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
  412. package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
  413. package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
  414. package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
  415. package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
  416. package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
  417. package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
  418. package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
  419. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
  420. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
  421. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
  422. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
  423. package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
  424. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
  425. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
  426. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
  427. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
  428. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
  429. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
  430. package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
  431. package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
  432. package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
  433. package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
  434. package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
  435. package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
  436. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
  437. package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
  438. package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
  439. package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
  440. package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
  441. package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
  442. package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
  443. package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
  444. package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
  445. package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
  446. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
  447. package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
  448. package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
  449. package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
  450. package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
  451. package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
  452. package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
  453. package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
  454. package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
  455. package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
  456. package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
  457. package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
  458. package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
  459. package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
  460. package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
  461. package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
  462. package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
  463. package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
  464. package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
  465. package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
  466. package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
  467. package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
  468. package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
  469. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
  470. package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
  471. package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
  472. package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
  473. package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
  474. package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
  475. package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
  476. package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
  477. package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
  478. package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
  479. package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
  480. package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
  481. package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
  482. package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
  483. package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
  484. package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
  485. package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
  486. package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
  487. package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
  488. package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
  489. package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
  490. package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
  491. package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
  492. package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
  493. package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
  494. package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
  495. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
  496. package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
  497. package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
  498. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
  499. package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
  500. package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
  501. package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
  502. package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
  503. package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
  504. package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
  505. package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
  506. package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
  507. package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
  508. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
  509. package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
  510. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
  511. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
  512. package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
  513. package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
  514. package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
  515. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
  516. package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
  517. package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
  518. package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
  519. package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
  520. package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
  521. package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
  522. package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
  523. package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
  524. package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
  525. package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
  526. package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
  527. package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
  528. package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
  529. package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
  530. package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
  531. package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
  532. package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
  533. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
  534. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
  535. package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
  536. package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
  537. package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
  538. package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
  539. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
  540. package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
  541. package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
  542. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
  543. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
  544. package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
  545. package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
  546. package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
  547. package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
  548. package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
  549. package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
  550. package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
  551. package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
  552. package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
  553. package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
  554. package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
  555. package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
  556. package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
  557. package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
  558. package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
  559. package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
  560. package/bundle/dist/codex-protocol/v2/Model.js +0 -1
  561. package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
  562. package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
  563. package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
  564. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
  565. package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
  566. package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
  567. package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
  568. package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
  569. package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
  570. package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
  571. package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
  572. package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
  573. package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
  574. package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
  575. package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
  576. package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
  577. package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
  578. package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
  579. package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
  580. package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
  581. package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
  582. package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
  583. package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
  584. package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
  585. package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
  586. package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
  587. package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
  588. package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
  589. package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
  590. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
  591. package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
  592. package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
  593. package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
  594. package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
  595. package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
  596. package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
  597. package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
  598. package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
  599. package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
  600. package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
  601. package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
  602. package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
  603. package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
  604. package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
  605. package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
  606. package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
  607. package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
  608. package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
  609. package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
  610. package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
  611. package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
  612. package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
  613. package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
  614. package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
  615. package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
  616. package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
  617. package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
  618. package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
  619. package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
  620. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
  621. package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
  622. package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
  623. package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
  624. package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
  625. package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
  626. package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
  627. package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
  628. package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
  629. package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
  630. package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
  631. package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
  632. package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
  633. package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
  634. package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
  635. package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
  636. package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
  637. package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
  638. package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
  639. package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
  640. package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
  641. package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
  642. package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
  643. package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
  644. package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
  645. package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
  646. package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
  647. package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
  648. package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
  649. package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
  650. package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
  651. package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
  652. package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
  653. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
  654. package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
  655. package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
  656. package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
  657. package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
  658. package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
  659. package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
  660. package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
  661. package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
  662. package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
  663. package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
  664. package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
  665. package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
  666. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
  667. package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
  668. package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
  669. package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
  670. package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
  671. package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
  672. package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
  673. package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
  674. package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
  675. package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
  676. package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
  677. package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
  678. package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
  679. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
  680. package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
  681. package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
  682. package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
  683. package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
  684. package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
  685. package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
  686. package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
  687. package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
  688. package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
  689. package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
  690. package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
  691. package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
  692. package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
  693. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
  694. package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
  695. package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
  696. package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
  697. package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
  698. package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
  699. package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
  700. package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
  701. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
  702. package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
  703. package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
  704. package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
  705. package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
  706. package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
  707. package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
  708. package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
  709. package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
  710. package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
  711. package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
  712. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
  713. package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
  714. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
  715. package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
  716. package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
  717. package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
  718. package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
  719. package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
  720. package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
  721. package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
  722. package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
  723. package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
  724. package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
  725. package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
  726. package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
  727. package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
  728. package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
  729. package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
  730. package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
  731. package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
  732. package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
  733. package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
  734. package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
  735. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
  736. package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
  737. package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
  738. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
  739. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
  740. package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
  741. package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
  742. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
  743. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
  744. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
  745. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
  746. package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
  747. package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
  748. package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
  749. package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
  750. package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
  751. package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
  752. package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
  753. package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
  754. package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
  755. package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
  756. package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
  757. package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
  758. package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
  759. package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
  760. package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
  761. package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
  762. package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
  763. package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
  764. package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
  765. package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
  766. package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
  767. package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
  768. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
  769. package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
  770. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
  771. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
  772. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
  773. package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
  774. package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
  775. package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
  776. package/bundle/dist/codex-protocol/v2/index.js +0 -7
  777. 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/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
  778. 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/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  779. 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/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  780. 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/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  781. 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/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
  782. 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/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
  783. 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/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
  784. 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/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
  785. 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/node_modules/vitest/dist/index.js +0 -28
  786. package/bundle/dist/utils/providers/openai/codex-rpc.js +0 -153
  787. package/bundle/dist/utils/providers/openai/codex-worker.js +0 -642
  788. package/bundle/dist/utils/providers/openai/openai-worker-pool-config.js +0 -51
  789. package/bundle/src/codex-protocol/AbsolutePathBuf.ts +0 -14
  790. package/bundle/src/codex-protocol/AgentPath.ts +0 -5
  791. package/bundle/src/codex-protocol/ApplyPatchApprovalParams.ts +0 -24
  792. package/bundle/src/codex-protocol/ApplyPatchApprovalResponse.ts +0 -6
  793. package/bundle/src/codex-protocol/AuthMode.ts +0 -8
  794. package/bundle/src/codex-protocol/ClientInfo.ts +0 -5
  795. package/bundle/src/codex-protocol/ClientNotification.ts +0 -5
  796. package/bundle/src/codex-protocol/ClientRequest.ts +0 -176
  797. package/bundle/src/codex-protocol/CollaborationMode.ts +0 -10
  798. package/bundle/src/codex-protocol/ContentItem.ts +0 -9
  799. package/bundle/src/codex-protocol/ConversationGitInfo.ts +0 -9
  800. package/bundle/src/codex-protocol/ConversationSummary.ts +0 -19
  801. package/bundle/src/codex-protocol/ExecCommandApprovalParams.ts +0 -22
  802. package/bundle/src/codex-protocol/ExecCommandApprovalResponse.ts +0 -6
  803. package/bundle/src/codex-protocol/ExecPolicyAmendment.ts +0 -12
  804. package/bundle/src/codex-protocol/FileChange.ts +0 -8
  805. package/bundle/src/codex-protocol/ForcedLoginMethod.ts +0 -5
  806. package/bundle/src/codex-protocol/FunctionCallOutputBody.ts +0 -6
  807. package/bundle/src/codex-protocol/FunctionCallOutputContentItem.ts +0 -12
  808. package/bundle/src/codex-protocol/FuzzyFileSearchMatchType.ts +0 -5
  809. package/bundle/src/codex-protocol/FuzzyFileSearchParams.ts +0 -9
  810. package/bundle/src/codex-protocol/FuzzyFileSearchResponse.ts +0 -6
  811. package/bundle/src/codex-protocol/FuzzyFileSearchResult.ts +0 -16
  812. package/bundle/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +0 -5
  813. package/bundle/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +0 -10
  814. package/bundle/src/codex-protocol/GetAuthStatusParams.ts +0 -5
  815. package/bundle/src/codex-protocol/GetAuthStatusResponse.ts +0 -10
  816. package/bundle/src/codex-protocol/GetConversationSummaryParams.ts +0 -6
  817. package/bundle/src/codex-protocol/GetConversationSummaryResponse.ts +0 -6
  818. package/bundle/src/codex-protocol/GitDiffToRemoteParams.ts +0 -5
  819. package/bundle/src/codex-protocol/GitDiffToRemoteResponse.ts +0 -6
  820. package/bundle/src/codex-protocol/GitSha.ts +0 -5
  821. package/bundle/src/codex-protocol/ImageDetail.ts +0 -5
  822. package/bundle/src/codex-protocol/InitializeCapabilities.ts +0 -18
  823. package/bundle/src/codex-protocol/InitializeParams.ts +0 -10
  824. package/bundle/src/codex-protocol/InitializeResponse.ts +0 -22
  825. package/bundle/src/codex-protocol/InputModality.ts +0 -8
  826. package/bundle/src/codex-protocol/InternalSessionSource.ts +0 -5
  827. package/bundle/src/codex-protocol/LocalShellAction.ts +0 -6
  828. package/bundle/src/codex-protocol/LocalShellExecAction.ts +0 -11
  829. package/bundle/src/codex-protocol/LocalShellStatus.ts +0 -5
  830. package/bundle/src/codex-protocol/MessagePhase.ts +0 -11
  831. package/bundle/src/codex-protocol/ModeKind.ts +0 -8
  832. package/bundle/src/codex-protocol/NetworkPolicyAmendment.ts +0 -6
  833. package/bundle/src/codex-protocol/NetworkPolicyRuleAction.ts +0 -5
  834. package/bundle/src/codex-protocol/ParsedCommand.ts +0 -20
  835. package/bundle/src/codex-protocol/Personality.ts +0 -5
  836. package/bundle/src/codex-protocol/PlanType.ts +0 -17
  837. package/bundle/src/codex-protocol/RealtimeConversationVersion.ts +0 -5
  838. package/bundle/src/codex-protocol/RealtimeOutputModality.ts +0 -5
  839. package/bundle/src/codex-protocol/RealtimeVoice.ts +0 -24
  840. package/bundle/src/codex-protocol/RealtimeVoicesList.ts +0 -11
  841. package/bundle/src/codex-protocol/ReasoningEffort.ts +0 -8
  842. package/bundle/src/codex-protocol/ReasoningItemContent.ts +0 -7
  843. package/bundle/src/codex-protocol/ReasoningItemReasoningSummary.ts +0 -5
  844. package/bundle/src/codex-protocol/ReasoningSummary.ts +0 -10
  845. package/bundle/src/codex-protocol/RequestId.ts +0 -5
  846. package/bundle/src/codex-protocol/Resource.ts +0 -19
  847. package/bundle/src/codex-protocol/ResourceContent.ts +0 -27
  848. package/bundle/src/codex-protocol/ResourceTemplate.ts +0 -16
  849. package/bundle/src/codex-protocol/ResponseItem.ts +0 -63
  850. package/bundle/src/codex-protocol/ReviewDecision.ts +0 -17
  851. package/bundle/src/codex-protocol/ServerNotification.ts +0 -154
  852. package/bundle/src/codex-protocol/ServerRequest.ts +0 -47
  853. package/bundle/src/codex-protocol/SessionSource.ts +0 -15
  854. package/bundle/src/codex-protocol/Settings.ts +0 -13
  855. package/bundle/src/codex-protocol/SubAgentSource.ts +0 -20
  856. package/bundle/src/codex-protocol/ThreadId.ts +0 -5
  857. package/bundle/src/codex-protocol/ThreadMemoryMode.ts +0 -5
  858. package/bundle/src/codex-protocol/Tool.ts +0 -18
  859. package/bundle/src/codex-protocol/Verbosity.ts +0 -9
  860. package/bundle/src/codex-protocol/WebSearchAction.ts +0 -9
  861. package/bundle/src/codex-protocol/WebSearchContextSize.ts +0 -5
  862. package/bundle/src/codex-protocol/WebSearchLocation.ts +0 -10
  863. package/bundle/src/codex-protocol/WebSearchMode.ts +0 -5
  864. package/bundle/src/codex-protocol/WebSearchToolConfig.ts +0 -11
  865. package/bundle/src/codex-protocol/index.ts +0 -79
  866. package/bundle/src/codex-protocol/serde_json/JsonValue.ts +0 -11
  867. package/bundle/src/codex-protocol/v2/Account.ts +0 -9
  868. package/bundle/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +0 -9
  869. package/bundle/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +0 -6
  870. package/bundle/src/codex-protocol/v2/AccountUpdatedNotification.ts +0 -7
  871. package/bundle/src/codex-protocol/v2/ActivePermissionProfile.ts +0 -22
  872. package/bundle/src/codex-protocol/v2/ActivePermissionProfileModification.ts +0 -9
  873. package/bundle/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +0 -5
  874. package/bundle/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +0 -5
  875. package/bundle/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +0 -18
  876. package/bundle/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +0 -5
  877. package/bundle/src/codex-protocol/v2/AdditionalPermissionProfile.ts +0 -13
  878. package/bundle/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +0 -10
  879. package/bundle/src/codex-protocol/v2/AnalyticsConfig.ts +0 -14
  880. package/bundle/src/codex-protocol/v2/AppBranding.ts +0 -15
  881. package/bundle/src/codex-protocol/v2/AppInfo.ts +0 -32
  882. package/bundle/src/codex-protocol/v2/AppListUpdatedNotification.ts +0 -9
  883. package/bundle/src/codex-protocol/v2/AppMetadata.ts +0 -20
  884. package/bundle/src/codex-protocol/v2/AppReview.ts +0 -5
  885. package/bundle/src/codex-protocol/v2/AppScreenshot.ts +0 -5
  886. package/bundle/src/codex-protocol/v2/AppSummary.ts +0 -14
  887. package/bundle/src/codex-protocol/v2/AppToolApproval.ts +0 -5
  888. package/bundle/src/codex-protocol/v2/AppToolsConfig.ts +0 -8
  889. package/bundle/src/codex-protocol/v2/ApprovalsReviewer.ts +0 -12
  890. package/bundle/src/codex-protocol/v2/AppsConfig.ts +0 -17
  891. package/bundle/src/codex-protocol/v2/AppsDefaultConfig.ts +0 -9
  892. package/bundle/src/codex-protocol/v2/AppsListParams.ts +0 -25
  893. package/bundle/src/codex-protocol/v2/AppsListResponse.ts +0 -16
  894. package/bundle/src/codex-protocol/v2/AskForApproval.ts +0 -18
  895. package/bundle/src/codex-protocol/v2/AutoReviewDecisionSource.ts +0 -8
  896. package/bundle/src/codex-protocol/v2/ByteRange.ts +0 -5
  897. package/bundle/src/codex-protocol/v2/CancelLoginAccountParams.ts +0 -5
  898. package/bundle/src/codex-protocol/v2/CancelLoginAccountResponse.ts +0 -6
  899. package/bundle/src/codex-protocol/v2/CancelLoginAccountStatus.ts +0 -5
  900. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +0 -18
  901. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +0 -5
  902. package/bundle/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +0 -9
  903. package/bundle/src/codex-protocol/v2/CodexErrorInfo.ts +0 -27
  904. package/bundle/src/codex-protocol/v2/CollabAgentState.ts +0 -6
  905. package/bundle/src/codex-protocol/v2/CollabAgentStatus.ts +0 -12
  906. package/bundle/src/codex-protocol/v2/CollabAgentTool.ts +0 -5
  907. package/bundle/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +0 -5
  908. package/bundle/src/codex-protocol/v2/CollaborationModeMask.ts +0 -15
  909. package/bundle/src/codex-protocol/v2/CommandAction.ts +0 -10
  910. package/bundle/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +0 -31
  911. package/bundle/src/codex-protocol/v2/CommandExecOutputStream.ts +0 -8
  912. package/bundle/src/codex-protocol/v2/CommandExecParams.ts +0 -87
  913. package/bundle/src/codex-protocol/v2/CommandExecResizeParams.ts +0 -19
  914. package/bundle/src/codex-protocol/v2/CommandExecResizeResponse.ts +0 -8
  915. package/bundle/src/codex-protocol/v2/CommandExecResponse.ts +0 -25
  916. package/bundle/src/codex-protocol/v2/CommandExecTerminalSize.ts +0 -17
  917. package/bundle/src/codex-protocol/v2/CommandExecTerminateParams.ts +0 -14
  918. package/bundle/src/codex-protocol/v2/CommandExecTerminateResponse.ts +0 -8
  919. package/bundle/src/codex-protocol/v2/CommandExecWriteParams.ts +0 -23
  920. package/bundle/src/codex-protocol/v2/CommandExecWriteResponse.ts +0 -8
  921. package/bundle/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +0 -13
  922. package/bundle/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +0 -10
  923. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +0 -47
  924. package/bundle/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +0 -8
  925. package/bundle/src/codex-protocol/v2/CommandExecutionSource.ts +0 -9
  926. package/bundle/src/codex-protocol/v2/CommandExecutionStatus.ts +0 -5
  927. package/bundle/src/codex-protocol/v2/CommandMigration.ts +0 -5
  928. package/bundle/src/codex-protocol/v2/Config.ts +0 -53
  929. package/bundle/src/codex-protocol/v2/ConfigBatchWriteParams.ts +0 -17
  930. package/bundle/src/codex-protocol/v2/ConfigEdit.ts +0 -7
  931. package/bundle/src/codex-protocol/v2/ConfigLayer.ts +0 -12
  932. package/bundle/src/codex-protocol/v2/ConfigLayerMetadata.ts +0 -6
  933. package/bundle/src/codex-protocol/v2/ConfigLayerSource.ts +0 -27
  934. package/bundle/src/codex-protocol/v2/ConfigReadParams.ts +0 -13
  935. package/bundle/src/codex-protocol/v2/ConfigReadResponse.ts +0 -12
  936. package/bundle/src/codex-protocol/v2/ConfigRequirements.ts +0 -15
  937. package/bundle/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +0 -11
  938. package/bundle/src/codex-protocol/v2/ConfigValueWriteParams.ts +0 -16
  939. package/bundle/src/codex-protocol/v2/ConfigWarningNotification.ts +0 -23
  940. package/bundle/src/codex-protocol/v2/ConfigWriteResponse.ts +0 -16
  941. package/bundle/src/codex-protocol/v2/ConfiguredHookHandler.ts +0 -14
  942. package/bundle/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +0 -9
  943. package/bundle/src/codex-protocol/v2/ContextCompactedNotification.ts +0 -8
  944. package/bundle/src/codex-protocol/v2/CreditsSnapshot.ts +0 -5
  945. package/bundle/src/codex-protocol/v2/DeprecationNoticeNotification.ts +0 -14
  946. package/bundle/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +0 -7
  947. package/bundle/src/codex-protocol/v2/DynamicToolCallParams.ts +0 -13
  948. package/bundle/src/codex-protocol/v2/DynamicToolCallResponse.ts +0 -9
  949. package/bundle/src/codex-protocol/v2/DynamicToolCallStatus.ts +0 -5
  950. package/bundle/src/codex-protocol/v2/DynamicToolSpec.ts +0 -12
  951. package/bundle/src/codex-protocol/v2/ErrorNotification.ts +0 -11
  952. package/bundle/src/codex-protocol/v2/ExecPolicyAmendment.ts +0 -5
  953. package/bundle/src/codex-protocol/v2/ExperimentalFeature.ts +0 -38
  954. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +0 -13
  955. package/bundle/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +0 -10
  956. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +0 -14
  957. package/bundle/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +0 -13
  958. package/bundle/src/codex-protocol/v2/ExperimentalFeatureStage.ts +0 -10
  959. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +0 -14
  960. package/bundle/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +0 -6
  961. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +0 -5
  962. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +0 -8
  963. package/bundle/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +0 -5
  964. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +0 -15
  965. package/bundle/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +0 -14
  966. package/bundle/src/codex-protocol/v2/FeedbackUploadParams.ts +0 -12
  967. package/bundle/src/codex-protocol/v2/FeedbackUploadResponse.ts +0 -5
  968. package/bundle/src/codex-protocol/v2/FileChangeApprovalDecision.ts +0 -5
  969. package/bundle/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +0 -15
  970. package/bundle/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +0 -11
  971. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +0 -22
  972. package/bundle/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +0 -6
  973. package/bundle/src/codex-protocol/v2/FileSystemAccessMode.ts +0 -5
  974. package/bundle/src/codex-protocol/v2/FileSystemPath.ts +0 -10
  975. package/bundle/src/codex-protocol/v2/FileSystemSandboxEntry.ts +0 -7
  976. package/bundle/src/codex-protocol/v2/FileSystemSpecialPath.ts +0 -11
  977. package/bundle/src/codex-protocol/v2/FileUpdateChange.ts +0 -6
  978. package/bundle/src/codex-protocol/v2/FsChangedNotification.ts +0 -18
  979. package/bundle/src/codex-protocol/v2/FsCopyParams.ts +0 -22
  980. package/bundle/src/codex-protocol/v2/FsCopyResponse.ts +0 -8
  981. package/bundle/src/codex-protocol/v2/FsCreateDirectoryParams.ts +0 -18
  982. package/bundle/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +0 -8
  983. package/bundle/src/codex-protocol/v2/FsGetMetadataParams.ts +0 -14
  984. package/bundle/src/codex-protocol/v2/FsGetMetadataResponse.ts +0 -29
  985. package/bundle/src/codex-protocol/v2/FsReadDirectoryEntry.ts +0 -21
  986. package/bundle/src/codex-protocol/v2/FsReadDirectoryParams.ts +0 -14
  987. package/bundle/src/codex-protocol/v2/FsReadDirectoryResponse.ts +0 -14
  988. package/bundle/src/codex-protocol/v2/FsReadFileParams.ts +0 -14
  989. package/bundle/src/codex-protocol/v2/FsReadFileResponse.ts +0 -13
  990. package/bundle/src/codex-protocol/v2/FsRemoveParams.ts +0 -22
  991. package/bundle/src/codex-protocol/v2/FsRemoveResponse.ts +0 -8
  992. package/bundle/src/codex-protocol/v2/FsUnwatchParams.ts +0 -13
  993. package/bundle/src/codex-protocol/v2/FsUnwatchResponse.ts +0 -8
  994. package/bundle/src/codex-protocol/v2/FsWatchParams.ts +0 -18
  995. package/bundle/src/codex-protocol/v2/FsWatchResponse.ts +0 -14
  996. package/bundle/src/codex-protocol/v2/FsWriteFileParams.ts +0 -18
  997. package/bundle/src/codex-protocol/v2/FsWriteFileResponse.ts +0 -8
  998. package/bundle/src/codex-protocol/v2/GetAccountParams.ts +0 -14
  999. package/bundle/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +0 -15
  1000. package/bundle/src/codex-protocol/v2/GetAccountResponse.ts +0 -6
  1001. package/bundle/src/codex-protocol/v2/GitInfo.ts +0 -5
  1002. package/bundle/src/codex-protocol/v2/GrantedPermissionProfile.ts +0 -10
  1003. package/bundle/src/codex-protocol/v2/GuardianApprovalReview.ts +0 -18
  1004. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +0 -34
  1005. package/bundle/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +0 -13
  1006. package/bundle/src/codex-protocol/v2/GuardianCommandSource.ts +0 -5
  1007. package/bundle/src/codex-protocol/v2/GuardianRiskLevel.ts +0 -8
  1008. package/bundle/src/codex-protocol/v2/GuardianUserAuthorization.ts +0 -8
  1009. package/bundle/src/codex-protocol/v2/GuardianWarningNotification.ts +0 -14
  1010. package/bundle/src/codex-protocol/v2/HookCompletedNotification.ts +0 -10
  1011. package/bundle/src/codex-protocol/v2/HookErrorInfo.ts +0 -5
  1012. package/bundle/src/codex-protocol/v2/HookEventName.ts +0 -13
  1013. package/bundle/src/codex-protocol/v2/HookExecutionMode.ts +0 -5
  1014. package/bundle/src/codex-protocol/v2/HookHandlerType.ts +0 -5
  1015. package/bundle/src/codex-protocol/v2/HookMetadata.ts +0 -26
  1016. package/bundle/src/codex-protocol/v2/HookMigration.ts +0 -5
  1017. package/bundle/src/codex-protocol/v2/HookOutputEntry.ts +0 -6
  1018. package/bundle/src/codex-protocol/v2/HookOutputEntryKind.ts +0 -5
  1019. package/bundle/src/codex-protocol/v2/HookPromptFragment.ts +0 -5
  1020. package/bundle/src/codex-protocol/v2/HookRunStatus.ts +0 -5
  1021. package/bundle/src/codex-protocol/v2/HookRunSummary.ts +0 -28
  1022. package/bundle/src/codex-protocol/v2/HookScope.ts +0 -5
  1023. package/bundle/src/codex-protocol/v2/HookSource.ts +0 -15
  1024. package/bundle/src/codex-protocol/v2/HookStartedNotification.ts +0 -10
  1025. package/bundle/src/codex-protocol/v2/HookTrustStatus.ts +0 -5
  1026. package/bundle/src/codex-protocol/v2/HooksListEntry.ts +0 -12
  1027. package/bundle/src/codex-protocol/v2/HooksListParams.ts +0 -10
  1028. package/bundle/src/codex-protocol/v2/HooksListResponse.ts +0 -6
  1029. package/bundle/src/codex-protocol/v2/ItemCompletedNotification.ts +0 -14
  1030. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +0 -44
  1031. package/bundle/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +0 -38
  1032. package/bundle/src/codex-protocol/v2/ItemStartedNotification.ts +0 -14
  1033. package/bundle/src/codex-protocol/v2/ListMcpServerStatusParams.ts +0 -20
  1034. package/bundle/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +0 -13
  1035. package/bundle/src/codex-protocol/v2/LoginAccountParams.ts +0 -27
  1036. package/bundle/src/codex-protocol/v2/LoginAccountResponse.ts +0 -27
  1037. package/bundle/src/codex-protocol/v2/LogoutAccountResponse.ts +0 -5
  1038. package/bundle/src/codex-protocol/v2/ManagedHooksRequirements.ts +0 -17
  1039. package/bundle/src/codex-protocol/v2/MarketplaceAddParams.ts +0 -9
  1040. package/bundle/src/codex-protocol/v2/MarketplaceAddResponse.ts +0 -10
  1041. package/bundle/src/codex-protocol/v2/MarketplaceInterface.ts +0 -5
  1042. package/bundle/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +0 -6
  1043. package/bundle/src/codex-protocol/v2/MarketplaceRemoveParams.ts +0 -5
  1044. package/bundle/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +0 -9
  1045. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +0 -5
  1046. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +0 -5
  1047. package/bundle/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +0 -11
  1048. package/bundle/src/codex-protocol/v2/McpAuthStatus.ts +0 -5
  1049. package/bundle/src/codex-protocol/v2/McpElicitationArrayType.ts +0 -5
  1050. package/bundle/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +0 -11
  1051. package/bundle/src/codex-protocol/v2/McpElicitationBooleanType.ts +0 -5
  1052. package/bundle/src/codex-protocol/v2/McpElicitationConstOption.ts +0 -5
  1053. package/bundle/src/codex-protocol/v2/McpElicitationEnumSchema.ts +0 -11
  1054. package/bundle/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +0 -13
  1055. package/bundle/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +0 -9
  1056. package/bundle/src/codex-protocol/v2/McpElicitationNumberSchema.ts +0 -13
  1057. package/bundle/src/codex-protocol/v2/McpElicitationNumberType.ts +0 -5
  1058. package/bundle/src/codex-protocol/v2/McpElicitationObjectType.ts +0 -5
  1059. package/bundle/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +0 -13
  1060. package/bundle/src/codex-protocol/v2/McpElicitationSchema.ts +0 -18
  1061. package/bundle/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +0 -9
  1062. package/bundle/src/codex-protocol/v2/McpElicitationStringFormat.ts +0 -5
  1063. package/bundle/src/codex-protocol/v2/McpElicitationStringSchema.ts +0 -15
  1064. package/bundle/src/codex-protocol/v2/McpElicitationStringType.ts +0 -5
  1065. package/bundle/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +0 -6
  1066. package/bundle/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +0 -15
  1067. package/bundle/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +0 -13
  1068. package/bundle/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +0 -9
  1069. package/bundle/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +0 -15
  1070. package/bundle/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +0 -12
  1071. package/bundle/src/codex-protocol/v2/McpResourceReadParams.ts +0 -5
  1072. package/bundle/src/codex-protocol/v2/McpResourceReadResponse.ts +0 -6
  1073. package/bundle/src/codex-protocol/v2/McpServerElicitationAction.ts +0 -5
  1074. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +0 -27
  1075. package/bundle/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +0 -19
  1076. package/bundle/src/codex-protocol/v2/McpServerMigration.ts +0 -5
  1077. package/bundle/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +0 -9
  1078. package/bundle/src/codex-protocol/v2/McpServerOauthLoginParams.ts +0 -9
  1079. package/bundle/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +0 -5
  1080. package/bundle/src/codex-protocol/v2/McpServerRefreshResponse.ts +0 -5
  1081. package/bundle/src/codex-protocol/v2/McpServerStartupState.ts +0 -5
  1082. package/bundle/src/codex-protocol/v2/McpServerStatus.ts +0 -15
  1083. package/bundle/src/codex-protocol/v2/McpServerStatusDetail.ts +0 -5
  1084. package/bundle/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +0 -10
  1085. package/bundle/src/codex-protocol/v2/McpServerToolCallParams.ts +0 -12
  1086. package/bundle/src/codex-protocol/v2/McpServerToolCallResponse.ts +0 -11
  1087. package/bundle/src/codex-protocol/v2/McpToolCallError.ts +0 -5
  1088. package/bundle/src/codex-protocol/v2/McpToolCallProgressNotification.ts +0 -10
  1089. package/bundle/src/codex-protocol/v2/McpToolCallResult.ts +0 -10
  1090. package/bundle/src/codex-protocol/v2/McpToolCallStatus.ts +0 -5
  1091. package/bundle/src/codex-protocol/v2/MemoryCitation.ts +0 -6
  1092. package/bundle/src/codex-protocol/v2/MemoryCitationEntry.ts +0 -10
  1093. package/bundle/src/codex-protocol/v2/MergeStrategy.ts +0 -5
  1094. package/bundle/src/codex-protocol/v2/MigrationDetails.ts +0 -18
  1095. package/bundle/src/codex-protocol/v2/Model.ts +0 -30
  1096. package/bundle/src/codex-protocol/v2/ModelAvailabilityNux.ts +0 -5
  1097. package/bundle/src/codex-protocol/v2/ModelListParams.ts +0 -18
  1098. package/bundle/src/codex-protocol/v2/ModelListResponse.ts +0 -13
  1099. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +0 -5
  1100. package/bundle/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +0 -9
  1101. package/bundle/src/codex-protocol/v2/ModelRerouteReason.ts +0 -5
  1102. package/bundle/src/codex-protocol/v2/ModelReroutedNotification.ts +0 -12
  1103. package/bundle/src/codex-protocol/v2/ModelServiceTier.ts +0 -5
  1104. package/bundle/src/codex-protocol/v2/ModelUpgradeInfo.ts +0 -10
  1105. package/bundle/src/codex-protocol/v2/ModelVerification.ts +0 -5
  1106. package/bundle/src/codex-protocol/v2/ModelVerificationNotification.ts +0 -10
  1107. package/bundle/src/codex-protocol/v2/NetworkAccess.ts +0 -5
  1108. package/bundle/src/codex-protocol/v2/NetworkApprovalContext.ts +0 -6
  1109. package/bundle/src/codex-protocol/v2/NetworkApprovalProtocol.ts +0 -5
  1110. package/bundle/src/codex-protocol/v2/NetworkDomainPermission.ts +0 -5
  1111. package/bundle/src/codex-protocol/v2/NetworkPolicyAmendment.ts +0 -6
  1112. package/bundle/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +0 -5
  1113. package/bundle/src/codex-protocol/v2/NetworkRequirements.ts +0 -40
  1114. package/bundle/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +0 -5
  1115. package/bundle/src/codex-protocol/v2/NonSteerableTurnKind.ts +0 -5
  1116. package/bundle/src/codex-protocol/v2/OverriddenMetadata.ts +0 -11
  1117. package/bundle/src/codex-protocol/v2/PatchApplyStatus.ts +0 -5
  1118. package/bundle/src/codex-protocol/v2/PatchChangeKind.ts +0 -8
  1119. package/bundle/src/codex-protocol/v2/PermissionGrantScope.ts +0 -5
  1120. package/bundle/src/codex-protocol/v2/PermissionProfile.ts +0 -14
  1121. package/bundle/src/codex-protocol/v2/PermissionProfileFileSystemPermissions.ts +0 -8
  1122. package/bundle/src/codex-protocol/v2/PermissionProfileModificationParams.ts +0 -9
  1123. package/bundle/src/codex-protocol/v2/PermissionProfileNetworkPermissions.ts +0 -5
  1124. package/bundle/src/codex-protocol/v2/PermissionProfileSelectionParams.ts +0 -10
  1125. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +0 -18
  1126. package/bundle/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +0 -14
  1127. package/bundle/src/codex-protocol/v2/PlanDeltaNotification.ts +0 -14
  1128. package/bundle/src/codex-protocol/v2/PluginAuthPolicy.ts +0 -5
  1129. package/bundle/src/codex-protocol/v2/PluginAvailability.ts +0 -5
  1130. package/bundle/src/codex-protocol/v2/PluginDetail.ts +0 -19
  1131. package/bundle/src/codex-protocol/v2/PluginHookSummary.ts +0 -6
  1132. package/bundle/src/codex-protocol/v2/PluginInstallParams.ts +0 -10
  1133. package/bundle/src/codex-protocol/v2/PluginInstallPolicy.ts +0 -5
  1134. package/bundle/src/codex-protocol/v2/PluginInstallResponse.ts +0 -10
  1135. package/bundle/src/codex-protocol/v2/PluginInterface.ts +0 -46
  1136. package/bundle/src/codex-protocol/v2/PluginListMarketplaceKind.ts +0 -5
  1137. package/bundle/src/codex-protocol/v2/PluginListParams.ts +0 -18
  1138. package/bundle/src/codex-protocol/v2/PluginListResponse.ts +0 -11
  1139. package/bundle/src/codex-protocol/v2/PluginMarketplaceEntry.ts +0 -17
  1140. package/bundle/src/codex-protocol/v2/PluginReadParams.ts +0 -10
  1141. package/bundle/src/codex-protocol/v2/PluginReadResponse.ts +0 -6
  1142. package/bundle/src/codex-protocol/v2/PluginShareContext.ts +0 -12
  1143. package/bundle/src/codex-protocol/v2/PluginShareDeleteParams.ts +0 -5
  1144. package/bundle/src/codex-protocol/v2/PluginShareDeleteResponse.ts +0 -5
  1145. package/bundle/src/codex-protocol/v2/PluginShareDiscoverability.ts +0 -5
  1146. package/bundle/src/codex-protocol/v2/PluginShareListItem.ts +0 -11
  1147. package/bundle/src/codex-protocol/v2/PluginShareListParams.ts +0 -5
  1148. package/bundle/src/codex-protocol/v2/PluginShareListResponse.ts +0 -6
  1149. package/bundle/src/codex-protocol/v2/PluginSharePrincipal.ts +0 -10
  1150. package/bundle/src/codex-protocol/v2/PluginSharePrincipalType.ts +0 -5
  1151. package/bundle/src/codex-protocol/v2/PluginShareSaveParams.ts +0 -13
  1152. package/bundle/src/codex-protocol/v2/PluginShareSaveResponse.ts +0 -5
  1153. package/bundle/src/codex-protocol/v2/PluginShareTarget.ts +0 -6
  1154. package/bundle/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +0 -5
  1155. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +0 -11
  1156. package/bundle/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +0 -10
  1157. package/bundle/src/codex-protocol/v2/PluginSkillReadParams.ts +0 -9
  1158. package/bundle/src/codex-protocol/v2/PluginSkillReadResponse.ts +0 -5
  1159. package/bundle/src/codex-protocol/v2/PluginSource.ts +0 -9
  1160. package/bundle/src/codex-protocol/v2/PluginSummary.ts +0 -29
  1161. package/bundle/src/codex-protocol/v2/PluginUninstallParams.ts +0 -5
  1162. package/bundle/src/codex-protocol/v2/PluginUninstallResponse.ts +0 -5
  1163. package/bundle/src/codex-protocol/v2/PluginsMigration.ts +0 -5
  1164. package/bundle/src/codex-protocol/v2/ProcessExitedNotification.ts +0 -43
  1165. package/bundle/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +0 -27
  1166. package/bundle/src/codex-protocol/v2/ProcessOutputStream.ts +0 -8
  1167. package/bundle/src/codex-protocol/v2/ProcessTerminalSize.ts +0 -17
  1168. package/bundle/src/codex-protocol/v2/ProfileV2.ts +0 -37
  1169. package/bundle/src/codex-protocol/v2/RateLimitReachedType.ts +0 -10
  1170. package/bundle/src/codex-protocol/v2/RateLimitSnapshot.ts +0 -17
  1171. package/bundle/src/codex-protocol/v2/RateLimitWindow.ts +0 -9
  1172. package/bundle/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +0 -10
  1173. package/bundle/src/codex-protocol/v2/ReasoningEffortOption.ts +0 -6
  1174. package/bundle/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +0 -10
  1175. package/bundle/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +0 -11
  1176. package/bundle/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +0 -11
  1177. package/bundle/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +0 -5
  1178. package/bundle/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +0 -12
  1179. package/bundle/src/codex-protocol/v2/RequestPermissionProfile.ts +0 -10
  1180. package/bundle/src/codex-protocol/v2/ResidencyRequirement.ts +0 -5
  1181. package/bundle/src/codex-protocol/v2/ReviewDelivery.ts +0 -5
  1182. package/bundle/src/codex-protocol/v2/ReviewStartParams.ts +0 -15
  1183. package/bundle/src/codex-protocol/v2/ReviewStartResponse.ts +0 -15
  1184. package/bundle/src/codex-protocol/v2/ReviewTarget.ts +0 -16
  1185. package/bundle/src/codex-protocol/v2/SandboxMode.ts +0 -5
  1186. package/bundle/src/codex-protocol/v2/SandboxPolicy.ts +0 -17
  1187. package/bundle/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +0 -10
  1188. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +0 -6
  1189. package/bundle/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +0 -6
  1190. package/bundle/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +0 -6
  1191. package/bundle/src/codex-protocol/v2/SessionMigration.ts +0 -5
  1192. package/bundle/src/codex-protocol/v2/SessionSource.ts +0 -13
  1193. package/bundle/src/codex-protocol/v2/SkillDependencies.ts +0 -6
  1194. package/bundle/src/codex-protocol/v2/SkillErrorInfo.ts +0 -5
  1195. package/bundle/src/codex-protocol/v2/SkillInterface.ts +0 -13
  1196. package/bundle/src/codex-protocol/v2/SkillMetadata.ts +0 -21
  1197. package/bundle/src/codex-protocol/v2/SkillScope.ts +0 -5
  1198. package/bundle/src/codex-protocol/v2/SkillSummary.ts +0 -14
  1199. package/bundle/src/codex-protocol/v2/SkillToolDependency.ts +0 -12
  1200. package/bundle/src/codex-protocol/v2/SkillsChangedNotification.ts +0 -11
  1201. package/bundle/src/codex-protocol/v2/SkillsConfigWriteParams.ts +0 -16
  1202. package/bundle/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +0 -5
  1203. package/bundle/src/codex-protocol/v2/SkillsListEntry.ts +0 -11
  1204. package/bundle/src/codex-protocol/v2/SkillsListParams.ts +0 -14
  1205. package/bundle/src/codex-protocol/v2/SkillsListResponse.ts +0 -6
  1206. package/bundle/src/codex-protocol/v2/SortDirection.ts +0 -5
  1207. package/bundle/src/codex-protocol/v2/SubagentMigration.ts +0 -5
  1208. package/bundle/src/codex-protocol/v2/TerminalInteractionNotification.ts +0 -11
  1209. package/bundle/src/codex-protocol/v2/TextElement.ts +0 -15
  1210. package/bundle/src/codex-protocol/v2/TextPosition.ts +0 -14
  1211. package/bundle/src/codex-protocol/v2/TextRange.ts +0 -6
  1212. package/bundle/src/codex-protocol/v2/Thread.ts +0 -88
  1213. package/bundle/src/codex-protocol/v2/ThreadActiveFlag.ts +0 -5
  1214. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +0 -12
  1215. package/bundle/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +0 -5
  1216. package/bundle/src/codex-protocol/v2/ThreadArchiveParams.ts +0 -5
  1217. package/bundle/src/codex-protocol/v2/ThreadArchiveResponse.ts +0 -5
  1218. package/bundle/src/codex-protocol/v2/ThreadArchivedNotification.ts +0 -5
  1219. package/bundle/src/codex-protocol/v2/ThreadClosedNotification.ts +0 -5
  1220. package/bundle/src/codex-protocol/v2/ThreadCompactStartParams.ts +0 -5
  1221. package/bundle/src/codex-protocol/v2/ThreadCompactStartResponse.ts +0 -5
  1222. package/bundle/src/codex-protocol/v2/ThreadForkParams.ts +0 -40
  1223. package/bundle/src/codex-protocol/v2/ThreadForkResponse.ts +0 -30
  1224. package/bundle/src/codex-protocol/v2/ThreadGoal.ts +0 -15
  1225. package/bundle/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +0 -5
  1226. package/bundle/src/codex-protocol/v2/ThreadGoalStatus.ts +0 -5
  1227. package/bundle/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +0 -10
  1228. package/bundle/src/codex-protocol/v2/ThreadInjectItemsParams.ts +0 -12
  1229. package/bundle/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +0 -5
  1230. package/bundle/src/codex-protocol/v2/ThreadItem.ts +0 -156
  1231. package/bundle/src/codex-protocol/v2/ThreadListParams.ts +0 -55
  1232. package/bundle/src/codex-protocol/v2/ThreadListResponse.ts +0 -20
  1233. package/bundle/src/codex-protocol/v2/ThreadLoadedListParams.ts +0 -14
  1234. package/bundle/src/codex-protocol/v2/ThreadLoadedListResponse.ts +0 -15
  1235. package/bundle/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +0 -21
  1236. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +0 -14
  1237. package/bundle/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +0 -6
  1238. package/bundle/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +0 -5
  1239. package/bundle/src/codex-protocol/v2/ThreadReadParams.ts +0 -11
  1240. package/bundle/src/codex-protocol/v2/ThreadReadResponse.ts +0 -6
  1241. package/bundle/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +0 -14
  1242. package/bundle/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +0 -8
  1243. package/bundle/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +0 -8
  1244. package/bundle/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +0 -9
  1245. package/bundle/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +0 -12
  1246. package/bundle/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +0 -8
  1247. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +0 -17
  1248. package/bundle/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +0 -13
  1249. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +0 -16
  1250. package/bundle/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +0 -16
  1251. package/bundle/src/codex-protocol/v2/ThreadResumeParams.ts +0 -39
  1252. package/bundle/src/codex-protocol/v2/ThreadResumeResponse.ts +0 -30
  1253. package/bundle/src/codex-protocol/v2/ThreadRollbackParams.ts +0 -14
  1254. package/bundle/src/codex-protocol/v2/ThreadRollbackResponse.ts +0 -15
  1255. package/bundle/src/codex-protocol/v2/ThreadSetNameParams.ts +0 -5
  1256. package/bundle/src/codex-protocol/v2/ThreadSetNameResponse.ts +0 -5
  1257. package/bundle/src/codex-protocol/v2/ThreadShellCommandParams.ts +0 -14
  1258. package/bundle/src/codex-protocol/v2/ThreadShellCommandResponse.ts +0 -5
  1259. package/bundle/src/codex-protocol/v2/ThreadSortKey.ts +0 -5
  1260. package/bundle/src/codex-protocol/v2/ThreadSource.ts +0 -5
  1261. package/bundle/src/codex-protocol/v2/ThreadSourceKind.ts +0 -15
  1262. package/bundle/src/codex-protocol/v2/ThreadStartParams.ts +0 -33
  1263. package/bundle/src/codex-protocol/v2/ThreadStartResponse.ts +0 -30
  1264. package/bundle/src/codex-protocol/v2/ThreadStartSource.ts +0 -5
  1265. package/bundle/src/codex-protocol/v2/ThreadStartedNotification.ts +0 -6
  1266. package/bundle/src/codex-protocol/v2/ThreadStatus.ts +0 -10
  1267. package/bundle/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +0 -6
  1268. package/bundle/src/codex-protocol/v2/ThreadTokenUsage.ts +0 -10
  1269. package/bundle/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +0 -10
  1270. package/bundle/src/codex-protocol/v2/ThreadUnarchiveParams.ts +0 -5
  1271. package/bundle/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +0 -6
  1272. package/bundle/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +0 -5
  1273. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +0 -5
  1274. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +0 -6
  1275. package/bundle/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +0 -5
  1276. package/bundle/src/codex-protocol/v2/TokenUsageBreakdown.ts +0 -11
  1277. package/bundle/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +0 -8
  1278. package/bundle/src/codex-protocol/v2/ToolRequestUserInputOption.ts +0 -8
  1279. package/bundle/src/codex-protocol/v2/ToolRequestUserInputParams.ts +0 -14
  1280. package/bundle/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +0 -16
  1281. package/bundle/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +0 -11
  1282. package/bundle/src/codex-protocol/v2/ToolsV2.ts +0 -6
  1283. package/bundle/src/codex-protocol/v2/Turn.ts +0 -36
  1284. package/bundle/src/codex-protocol/v2/TurnCompletedNotification.ts +0 -6
  1285. package/bundle/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +0 -9
  1286. package/bundle/src/codex-protocol/v2/TurnEnvironmentParams.ts +0 -6
  1287. package/bundle/src/codex-protocol/v2/TurnError.ts +0 -10
  1288. package/bundle/src/codex-protocol/v2/TurnInterruptParams.ts +0 -5
  1289. package/bundle/src/codex-protocol/v2/TurnInterruptResponse.ts +0 -5
  1290. package/bundle/src/codex-protocol/v2/TurnItemsView.ts +0 -5
  1291. package/bundle/src/codex-protocol/v2/TurnPlanStep.ts +0 -6
  1292. package/bundle/src/codex-protocol/v2/TurnPlanStepStatus.ts +0 -5
  1293. package/bundle/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +0 -11
  1294. package/bundle/src/codex-protocol/v2/TurnStartParams.ts +0 -48
  1295. package/bundle/src/codex-protocol/v2/TurnStartResponse.ts +0 -6
  1296. package/bundle/src/codex-protocol/v2/TurnStartedNotification.ts +0 -6
  1297. package/bundle/src/codex-protocol/v2/TurnStatus.ts +0 -5
  1298. package/bundle/src/codex-protocol/v2/TurnSteerParams.ts +0 -13
  1299. package/bundle/src/codex-protocol/v2/TurnSteerResponse.ts +0 -5
  1300. package/bundle/src/codex-protocol/v2/UserInput.ts +0 -18
  1301. package/bundle/src/codex-protocol/v2/WarningNotification.ts +0 -14
  1302. package/bundle/src/codex-protocol/v2/WebSearchAction.ts +0 -9
  1303. package/bundle/src/codex-protocol/v2/WindowsSandboxReadiness.ts +0 -5
  1304. package/bundle/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +0 -6
  1305. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +0 -10
  1306. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +0 -5
  1307. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +0 -10
  1308. package/bundle/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +0 -5
  1309. package/bundle/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +0 -9
  1310. package/bundle/src/codex-protocol/v2/WriteStatus.ts +0 -5
  1311. package/bundle/src/codex-protocol/v2/index.ts +0 -446
  1312. package/bundle/src/utils/providers/openai/codex-rpc.ts +0 -238
  1313. package/bundle/src/utils/providers/openai/codex-worker.test.ts +0 -1006
  1314. package/bundle/src/utils/providers/openai/codex-worker.ts +0 -927
  1315. package/bundle/src/utils/providers/openai/openai-worker-pool-config.ts +0 -112
  1316. package/bundle/web-dist/client/assets/index-C24D5PiN.js +0 -106
  1317. package/bundle/web-dist/client/assets/index-CcMEpCgt.css +0 -1
  1318. package/bundle/web-dist/client/assets/logs-CIlZG6A3.js +0 -1
  1319. package/bundle/web-dist/client/assets/monit-DZFBMxKl.js +0 -1
  1320. package/bundle/web-dist/client/assets/routes-C3wlSNBL.js +0 -5
  1321. package/bundle/web-dist/client/assets/services.generated-jGypfumC.js +0 -51
  1322. package/bundle/web-dist/client/assets/settings-ClRDWO-8.js +0 -1
  1323. package/bundle/web-dist/client/assets/show-BP7U8yyJ.js +0 -2
  1324. package/bundle/web-dist/client/assets/tokens-DfQeULnJ.js +0 -1
  1325. package/bundle/web-dist/client/assets/use-oauth-login-flow-CY-ASCfL.js +0 -1
  1326. package/bundle/web-dist/server/assets/lazyRouteComponent-DOc8TV-P.js +0 -1856
  1327. package/bundle/web-dist/server/assets/logs-CfF3nmLM.js +0 -451
  1328. package/bundle/web-dist/server/assets/monit-BSaKhh5D.js +0 -1577
  1329. package/bundle/web-dist/server/assets/plus-DLFUHsfx.js +0 -19
  1330. package/bundle/web-dist/server/assets/react-dom-BotjLnTK.js +0 -462
  1331. package/bundle/web-dist/server/assets/routes-CHMxrTT0.js +0 -2924
  1332. package/bundle/web-dist/server/assets/services.generated-D3Q3FYot.js +0 -23570
  1333. package/bundle/web-dist/server/assets/settings-DOQjV28c.js +0 -598
  1334. package/bundle/web-dist/server/assets/show-Cn_C6Qvl.js +0 -2776
  1335. package/bundle/web-dist/server/assets/tokens-c0EN3iCx.js +0 -441
  1336. package/bundle/web-dist/server/assets/use-oauth-login-flow-B68AbMDE.js +0 -160
  1337. /package/bundle/dist/{codex-protocol/AbsolutePathBuf.js → utils/providers/common/provider-types.js} +0 -0
@@ -0,0 +1,240 @@
1
+ //#region src/application/qgrid/schema-prompt.ts
2
+ /**
3
+ * system prompt 말미에 계약을 덧붙인다. anthropic 은 cold-only(매 턴 CC 재스폰 + system
4
+ * 재전송)라 멀티턴에도 계약이 매 턴 일관되게 주입된다. system 이 argv 64KB 를 넘으면
5
+ * claude-session 의 --system-prompt-file 분기가 흡수한다.
6
+ */
7
+ function composeSystemWithSchemaContract(system, input) {
8
+ const contract = renderSchemaContractPrompt(input);
9
+ if (contract === void 0) return system;
10
+ return system ? `${system}\n\n${contract}` : contract;
11
+ }
12
+ /** 요청에 스키마/tools 가 없으면 undefined — 계약 주입 없이 평범한 텍스트 요청이다. */
13
+ function renderSchemaContractPrompt(input) {
14
+ if (input.tools?.length) return renderToolEnvelopePrompt(input.tools, input.jsonSchema);
15
+ if (input.jsonSchema !== void 0) return renderOutputSchemaPrompt(input.jsonSchema);
16
+ }
17
+ function renderOutputSchemaPrompt(jsonSchema) {
18
+ return [
19
+ "## Output Format",
20
+ "",
21
+ "Your entire reply must be a single JSON object that conforms to the JSON Schema below.",
22
+ "Output raw JSON only — no code fences, no prose before or after the JSON.",
23
+ "Start your reply with { and end it with }.",
24
+ "",
25
+ "<output-json-schema>",
26
+ jsonSchema,
27
+ "</output-json-schema>"
28
+ ].join("\n");
29
+ }
30
+ /**
31
+ * envelope 예시 JSON. 렌더 문구와 parseEnvelope 계약의 드리프트를 교차 테스트로 잡기
32
+ * 위해 분리 export 한다 — 예시가 실제 파서를 통과하지 못하면 안내문이 틀린 것이다.
33
+ *
34
+ * 예시는 스스로 계약을 지켜야 한다: args 는 첫 tool 의 inputSchema 를 실제로 만족하는
35
+ * 인스턴스여야 한다. 생성기가 다루지 못하는 keyword(pattern/$ref/allOf 등)가 스키마에
36
+ * 있으면 **fail-closed** — 위반 가능성이 있는 예시를 싣는 대신 예시 자체를 생략하고
37
+ * 렌더러가 프로즈 서술로 대체한다 (`toolCallExample: undefined`).
38
+ */
39
+ function buildEnvelopeExamples(tools) {
40
+ const firstTool = tools[0];
41
+ const args = firstTool ? exampleValueForSchema(firstTool.inputSchema) : {
42
+ ok: true,
43
+ value: {}
44
+ };
45
+ return {
46
+ ...args.ok ? { toolCallExample: JSON.stringify({ result: {
47
+ action: "tool_call",
48
+ answer: null,
49
+ toolCalls: [{
50
+ toolName: firstTool?.name ?? "toolName",
51
+ args: JSON.stringify(args.value)
52
+ }]
53
+ } }) } : {},
54
+ textAnswerExample: JSON.stringify({ result: {
55
+ action: "answer",
56
+ answer: "your final answer",
57
+ toolCalls: null
58
+ } })
59
+ };
60
+ }
61
+ /** 생성기가 값 선택에 반영하는 keyword. 어노테이션(description 등)은 값과 무관해 무시한다. */
62
+ const EXAMPLE_ANNOTATION_KEYWORDS = /* @__PURE__ */ new Set([
63
+ "description",
64
+ "title",
65
+ "default",
66
+ "examples",
67
+ "$comment",
68
+ "deprecated",
69
+ "readOnly",
70
+ "writeOnly"
71
+ ]);
72
+ const EXAMPLE_HANDLED_KEYWORDS = /* @__PURE__ */ new Set([
73
+ "type",
74
+ "enum",
75
+ "const",
76
+ "properties",
77
+ "required",
78
+ "additionalProperties",
79
+ "items",
80
+ "minItems",
81
+ "maxItems",
82
+ "minLength",
83
+ "maxLength",
84
+ "minimum",
85
+ "maximum",
86
+ "exclusiveMinimum",
87
+ "exclusiveMaximum",
88
+ "anyOf",
89
+ "oneOf"
90
+ ]);
91
+ /**
92
+ * inputSchema 를 만족하는 예시 인스턴스 생성. 지원 keyword 집합 밖의 제약
93
+ * (pattern/format/$ref/allOf/not/if/multipleOf/uniqueItems/...)을 만나면 값을
94
+ * 지어내지 않고 { ok: false } 를 돌려준다 — 계약 위반 예시는 모델이 베낀다.
95
+ */
96
+ function exampleValueForSchema(schema) {
97
+ if (schema === true || schema === void 0) return {
98
+ ok: true,
99
+ value: {}
100
+ };
101
+ if (schema === null || typeof schema !== "object" || Array.isArray(schema)) return { ok: false };
102
+ const node = schema;
103
+ for (const keyword of Object.keys(node)) if (!EXAMPLE_HANDLED_KEYWORDS.has(keyword) && !EXAMPLE_ANNOTATION_KEYWORDS.has(keyword)) return { ok: false };
104
+ if (Array.isArray(node.enum) && node.enum.length > 0) return {
105
+ ok: true,
106
+ value: node.enum[0]
107
+ };
108
+ if ("const" in node) return {
109
+ ok: true,
110
+ value: node.const
111
+ };
112
+ for (const kw of ["anyOf", "oneOf"]) if (Array.isArray(node[kw])) {
113
+ const list = node[kw];
114
+ if (kw === "oneOf" && list.length > 1) return { ok: false };
115
+ for (const branch of list) {
116
+ const result = exampleValueForSchema(branch);
117
+ if (result.ok) return result;
118
+ }
119
+ return { ok: false };
120
+ }
121
+ switch (Array.isArray(node.type) ? node.type[0] : node.type) {
122
+ case "string": {
123
+ const min = typeof node.minLength === "number" ? node.minLength : 0;
124
+ if (min > 64) return { ok: false };
125
+ const base = "example";
126
+ const value = 7 >= min ? base : base.padEnd(min, "x");
127
+ if (typeof node.maxLength === "number" && value.length > node.maxLength) {
128
+ if (node.maxLength < min) return { ok: false };
129
+ return {
130
+ ok: true,
131
+ value: value.slice(0, node.maxLength)
132
+ };
133
+ }
134
+ return {
135
+ ok: true,
136
+ value
137
+ };
138
+ }
139
+ case "number":
140
+ case "integer": {
141
+ let value = 0;
142
+ if (typeof node.minimum === "number") value = node.minimum;
143
+ else if (typeof node.exclusiveMinimum === "number") value = node.exclusiveMinimum + 1;
144
+ if (typeof node.maximum === "number" && value > node.maximum) return { ok: false };
145
+ if (typeof node.exclusiveMaximum === "number" && value >= node.exclusiveMaximum) return { ok: false };
146
+ return {
147
+ ok: true,
148
+ value
149
+ };
150
+ }
151
+ case "boolean": return {
152
+ ok: true,
153
+ value: false
154
+ };
155
+ case "null": return {
156
+ ok: true,
157
+ value: null
158
+ };
159
+ case "array": {
160
+ const min = typeof node.minItems === "number" ? node.minItems : 0;
161
+ if (min > 8) return { ok: false };
162
+ if (typeof node.maxItems === "number" && node.maxItems < min) return { ok: false };
163
+ if (min === 0) return {
164
+ ok: true,
165
+ value: []
166
+ };
167
+ const item = exampleValueForSchema(node.items);
168
+ if (!item.ok) return { ok: false };
169
+ return {
170
+ ok: true,
171
+ value: Array.from({ length: min }, () => item.value)
172
+ };
173
+ }
174
+ case void 0:
175
+ case "object": {
176
+ const properties = node.properties && typeof node.properties === "object" && !Array.isArray(node.properties) ? node.properties : {};
177
+ const required = Array.isArray(node.required) ? node.required.filter((k) => typeof k === "string") : [];
178
+ const entries = [];
179
+ for (const key of required) {
180
+ const child = exampleValueForSchema(properties[key]);
181
+ if (!child.ok) return { ok: false };
182
+ entries.push([key, child.value]);
183
+ }
184
+ return {
185
+ ok: true,
186
+ value: Object.fromEntries(entries)
187
+ };
188
+ }
189
+ default: return { ok: false };
190
+ }
191
+ }
192
+ function renderToolEnvelopePrompt(tools, jsonSchema) {
193
+ const { toolCallExample, textAnswerExample } = buildEnvelopeExamples(tools);
194
+ const toolList = tools.map((tool) => {
195
+ const description = tool.description ? ` — ${tool.description}` : "";
196
+ return `- ${tool.name}${description}\n inputSchema: ${JSON.stringify(tool.inputSchema)}`;
197
+ }).join("\n");
198
+ const answerVariant = jsonSchema === void 0 ? [
199
+ "2. Final answer — use only when no further client tool result is needed:",
200
+ textAnswerExample,
201
+ "- \"toolCalls\" must be null.",
202
+ "- \"answer\" must be a plain string with your final answer (not null)."
203
+ ] : [
204
+ "2. Final answer — use only when no further client tool result is needed:",
205
+ "- Set \"action\" to \"answer\" and \"toolCalls\" to null.",
206
+ "- \"answer\" must be a JSON value (not null, and not a string of JSON) that conforms to the JSON Schema below.",
207
+ "",
208
+ "<answer-json-schema>",
209
+ jsonSchema,
210
+ "</answer-json-schema>"
211
+ ];
212
+ return [
213
+ "## Client Tool Protocol",
214
+ "",
215
+ "The client-side tools listed below are executed by the client, which returns each result",
216
+ "in a follow-up turn. Do not invoke them as native Claude Code tools.",
217
+ "",
218
+ "Your entire reply must be a single JSON object of the form {\"result\": ...} —",
219
+ "raw JSON only, no code fences, no prose before or after the JSON.",
220
+ "The \"result\" value is exactly one of the two variants:",
221
+ "",
222
+ ...[
223
+ toolCallExample !== void 0 ? "1. Request client-side tool execution, for example:" : "1. Request client-side tool execution:",
224
+ ...toolCallExample !== void 0 ? [toolCallExample] : ["- Set \"action\" to \"tool_call\" and \"answer\" to null.", "- \"toolCalls\" is an array of objects, each {\"toolName\": ..., \"args\": ...}."],
225
+ "- \"toolCalls\" must contain at least one entry.",
226
+ "- \"toolName\" must be one of the client tool names listed below.",
227
+ "- \"args\" must be the tool arguments encoded as a JSON string (not an object), conforming to that tool's inputSchema.",
228
+ "- \"answer\" must be null."
229
+ ],
230
+ "",
231
+ ...answerVariant,
232
+ "",
233
+ "Available client tools:",
234
+ toolList
235
+ ].join("\n");
236
+ }
237
+ //#endregion
238
+ export { buildEnvelopeExamples, composeSystemWithSchemaContract, renderOutputSchemaPrompt, renderSchemaContractPrompt, renderToolEnvelopePrompt };
239
+
240
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLXByb21wdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvc2NoZW1hLXByb21wdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG91dHB1dCBzY2hlbWEgLyB0b29sIGVudmVsb3BlIOqzhOyVveydmCDtlITroaztlITtirgg66CM642U66eBIChTT04tNTMyKS5cbiAqXG4gKiBhbnRocm9waWMg6rK966Gc64qUIENDIOyXkCAtLWpzb24tc2NoZW1hIOulvCDsoITri6ztlZjsp4Ag7JWK64qU64ukIOKAlCDqsJXsoJwg7JeG64qUIOyCrO2bhCDssYTsoJAoQUpWKeydtFxuICog7IaM67mE7J6QIOydmOuPhOyZgCDstqnrj4ztlbQg64K067aAIOyerOyLnOuPhCDro6jtlITrpbwg66eM65Ok7JeI6riwIOuVjOusuC4g64yA7IugIOyXrOq4sOyEnCDqs4Tslb3snYQg7YWN7Iqk7Yq466GcXG4gKiDroIzrjZTtlbQgc3lzdGVtIHByb21wdCDrp5Drr7jsl5Ag7KO87J6F7ZWY6rOgLCDtjJDsoJXsnYAg7IaM67mE7J6QIHpvZCjsiqTtgqTrp4gpIC8gcGFyc2VFbnZlbG9wZVxuICogKGVudmVsb3BlLCB0b29sLWVtdWxhdGlvbi50cynqsIAg66eh64qU64ukLlxuICpcbiAqIOybkOy5mTpcbiAqIC0gdXNlciDsiqTtgqTrp4jripQg7IiY7IugIOybkO2YlSDqt7jrjIDroZwg7JWI64K07ZWc64ukIOKAlCBzdHJpY3RpZnko7KCEIO2VhOuTnCByZXF1aXJlZCDqsJXsoJwsXG4gKiAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOmZhbHNlKeulvCDqsbDsuZjsp4Ag7JWK7JWEIOyGjOu5hOyekOydmCBudWxsaXNoL29wdGlvbmFsIOydmOuPhOqwgCDrs7TsobTrkJzri6QuXG4gKiAtIGVudmVsb3BlIOydgCBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2wtZW11bGF0aW9uLXNjaGVtYS50cynsspjrn7wgdXNlciDsiqTtgqTrp4jrpbwgJGRlZnMg66GcXG4gKiAgIO2VqeyEse2VmOyngCDslYrripTri6QuIO2FjeyKpO2KuCDslYjrgrTrnbwgYCRyZWZgIOusuOyEnCDro6jtirgg7Lap64+M7J20IOyXhuyWtCByZWJhc2Ug6rCAIOu2iO2VhOyalO2VmOqzoCxcbiAqICAg6re4IOuNleyXkCByZWJhc2Ug6rCAIOqxsOygiO2VmOuNmCDtmJXtg5wobmFtZWQgYW5jaG9yICRyZWYg65OxKeuPhCDqt7jrjIDroZwg7Ya16rO87ZWc64ukLlxuICogLSDroIzrjZTrkJwg6rOE7JW97J2AIHBhcnNlRW52ZWxvcGUg7J2YIHpvZCDqs4Tslb0oe1wicmVzdWx0XCI6IC4uLn0g7ZWcIOqyuSwg7IOB7Zi467Cw7YOAIOuzgO2YlSnqs7xcbiAqICAg7KCV7ZmV7Z6IIOydvOy5mO2VtOyVvCDtlZzri6Qg4oCUIOq1kOywqCDthYzsiqTtirgoc2NoZW1hLXByb21wdC50ZXN0LnRzKeqwgCDrk5zrpqztlITtirjrpbwg66eJ64qU64ukLlxuICovXG5pbXBvcnQgeyB0eXBlIFFncmlkVG9vbCwgdHlwZSBRdWVyeUlucHV0IH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuLyoqXG4gKiBzeXN0ZW0gcHJvbXB0IOunkOuvuOyXkCDqs4Tslb3snYQg642n67aZ7J2464ukLiBhbnRocm9waWMg7J2AIGNvbGQtb25seSjrp6Qg7YS0IENDIOyerOyKpO2PsCArIHN5c3RlbVxuICog7J6s7KCE7IahKeudvCDrqYDti7DthLTsl5Drj4Qg6rOE7JW97J20IOunpCDthLQg7J286rSA65CY6rKMIOyjvOyeheuQnOuLpC4gc3lzdGVtIOydtCBhcmd2IDY0S0Ig66W8IOuEmOycvOuptFxuICogY2xhdWRlLXNlc3Npb24g7J2YIC0tc3lzdGVtLXByb21wdC1maWxlIOu2hOq4sOqwgCDtnaHsiJjtlZzri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlU3lzdGVtV2l0aFNjaGVtYUNvbnRyYWN0KFxuICBzeXN0ZW06IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgaW5wdXQ6IFBpY2s8UXVlcnlJbnB1dCwgXCJ0b29sc1wiIHwgXCJqc29uU2NoZW1hXCI+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29udHJhY3QgPSByZW5kZXJTY2hlbWFDb250cmFjdFByb21wdChpbnB1dCk7XG4gIGlmIChjb250cmFjdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gc3lzdGVtO1xuICByZXR1cm4gc3lzdGVtID8gYCR7c3lzdGVtfVxcblxcbiR7Y29udHJhY3R9YCA6IGNvbnRyYWN0O1xufVxuXG4vKiog7JqU7LKt7JeQIOyKpO2CpOuniC90b29scyDqsIAg7JeG7Jy866m0IHVuZGVmaW5lZCDigJQg6rOE7JW9IOyjvOyehSDsl4bsnbQg7Y+J67KU7ZWcIO2FjeyKpO2KuCDsmpTssq3snbTri6QuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU2NoZW1hQ29udHJhY3RQcm9tcHQoXG4gIGlucHV0OiBQaWNrPFF1ZXJ5SW5wdXQsIFwidG9vbHNcIiB8IFwianNvblNjaGVtYVwiPixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpbnB1dC50b29scz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlbmRlclRvb2xFbnZlbG9wZVByb21wdChpbnB1dC50b29scywgaW5wdXQuanNvblNjaGVtYSk7XG4gIH1cbiAgaWYgKGlucHV0Lmpzb25TY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZW5kZXJPdXRwdXRTY2hlbWFQcm9tcHQoaW5wdXQuanNvblNjaGVtYSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLy8gMTA5MTc0OCDsi6TsuKEo7Iqk7YKk66eIIOybkOusuCArIFwi7Y6c7IqkwrfshKTrqoUg7JeG7J20IEpTT04g66eMXCIg7KeA7IucKeyXkOyEnCDqsoDspp3rkJwg7ZiV7Iud7J2EIOuUsOuluOuLpC5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJPdXRwdXRTY2hlbWFQcm9tcHQoanNvblNjaGVtYTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICBcIiMjIE91dHB1dCBGb3JtYXRcIixcbiAgICBcIlwiLFxuICAgIFwiWW91ciBlbnRpcmUgcmVwbHkgbXVzdCBiZSBhIHNpbmdsZSBKU09OIG9iamVjdCB0aGF0IGNvbmZvcm1zIHRvIHRoZSBKU09OIFNjaGVtYSBiZWxvdy5cIixcbiAgICBcIk91dHB1dCByYXcgSlNPTiBvbmx5IOKAlCBubyBjb2RlIGZlbmNlcywgbm8gcHJvc2UgYmVmb3JlIG9yIGFmdGVyIHRoZSBKU09OLlwiLFxuICAgIFwiU3RhcnQgeW91ciByZXBseSB3aXRoIHsgYW5kIGVuZCBpdCB3aXRoIH0uXCIsXG4gICAgXCJcIixcbiAgICBcIjxvdXRwdXQtanNvbi1zY2hlbWE+XCIsXG4gICAganNvblNjaGVtYSxcbiAgICBcIjwvb3V0cHV0LWpzb24tc2NoZW1hPlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG59XG5cbi8qKlxuICogZW52ZWxvcGUg7JiI7IucIEpTT04uIOugjOuNlCDrrLjqtazsmYAgcGFyc2VFbnZlbG9wZSDqs4Tslb3snZgg65Oc66as7ZSE7Yq466W8IOq1kOywqCDthYzsiqTtirjroZwg7J6h6riwXG4gKiDsnITtlbQg67aE66asIGV4cG9ydCDtlZzri6Qg4oCUIOyYiOyLnOqwgCDsi6TsoJwg7YyM7ISc66W8IO2GteqzvO2VmOyngCDrqrvtlZjrqbQg7JWI64K066y47J20IO2LgOumsCDqsoPsnbTri6QuXG4gKlxuICog7JiI7Iuc64qUIOyKpOyKpOuhnCDqs4Tslb3snYQg7KeA7Lyc7JW8IO2VnOuLpDogYXJncyDripQg7LKrIHRvb2wg7J2YIGlucHV0U2NoZW1hIOulvCDsi6TsoJzroZwg66eM7KGx7ZWY64qUXG4gKiDsnbjsiqTthLTsiqTsl6zslbwg7ZWc64ukLiDsg53shLHquLDqsIAg64uk66Oo7KeAIOuqu+2VmOuKlCBrZXl3b3JkKHBhdHRlcm4vJHJlZi9hbGxPZiDrk7Ep6rCAIOyKpO2CpOuniOyXkFxuICog7J6I7Jy866m0ICoqZmFpbC1jbG9zZWQqKiDigJQg7JyE67CYIOqwgOuKpeyEseydtCDsnojripQg7JiI7Iuc66W8IOyLo+uKlCDrjIDsi6Ag7JiI7IucIOyekOyytOulvCDsg53rnrXtlZjqs6BcbiAqIOugjOuNlOufrOqwgCDtlITroZzspogg7ISc7Iig66GcIOuMgOyytO2VnOuLpCAoYHRvb2xDYWxsRXhhbXBsZTogdW5kZWZpbmVkYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVudmVsb3BlRXhhbXBsZXModG9vbHM6IFFncmlkVG9vbFtdKToge1xuICB0b29sQ2FsbEV4YW1wbGU/OiBzdHJpbmc7XG4gIHRleHRBbnN3ZXJFeGFtcGxlOiBzdHJpbmc7XG59IHtcbiAgY29uc3QgZmlyc3RUb29sID0gdG9vbHNbMF07XG4gIGNvbnN0IGFyZ3MgPSBmaXJzdFRvb2wgPyBleGFtcGxlVmFsdWVGb3JTY2hlbWEoZmlyc3RUb29sLmlucHV0U2NoZW1hKSA6IHsgb2s6IHRydWUsIHZhbHVlOiB7fSB9O1xuICByZXR1cm4ge1xuICAgIC4uLihhcmdzLm9rXG4gICAgICA/IHtcbiAgICAgICAgICB0b29sQ2FsbEV4YW1wbGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICBhY3Rpb246IFwidG9vbF9jYWxsXCIsXG4gICAgICAgICAgICAgIGFuc3dlcjogbnVsbCxcbiAgICAgICAgICAgICAgdG9vbENhbGxzOiBbXG4gICAgICAgICAgICAgICAgeyB0b29sTmFtZTogZmlyc3RUb29sPy5uYW1lID8/IFwidG9vbE5hbWVcIiwgYXJnczogSlNPTi5zdHJpbmdpZnkoYXJncy52YWx1ZSkgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICAgIHRleHRBbnN3ZXJFeGFtcGxlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICByZXN1bHQ6IHsgYWN0aW9uOiBcImFuc3dlclwiLCBhbnN3ZXI6IFwieW91ciBmaW5hbCBhbnN3ZXJcIiwgdG9vbENhbGxzOiBudWxsIH0sXG4gICAgfSksXG4gIH07XG59XG5cbnR5cGUgRXhhbXBsZVJlc3VsdCA9IHsgb2s6IHRydWU7IHZhbHVlOiB1bmtub3duIH0gfCB7IG9rOiBmYWxzZSB9O1xuXG4vKiog7IOd7ISx6riw6rCAIOqwkiDshKDtg53sl5Ag67CY7JiB7ZWY64qUIGtleXdvcmQuIOyWtOuFuO2FjOydtOyFmChkZXNjcmlwdGlvbiDrk7Ep7J2AIOqwkuqzvCDrrLTqtIDtlbQg66y07Iuc7ZWc64ukLiAqL1xuY29uc3QgRVhBTVBMRV9BTk5PVEFUSU9OX0tFWVdPUkRTID0gbmV3IFNldChbXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJ0aXRsZVwiLFxuICBcImRlZmF1bHRcIixcbiAgXCJleGFtcGxlc1wiLFxuICBcIiRjb21tZW50XCIsXG4gIFwiZGVwcmVjYXRlZFwiLFxuICBcInJlYWRPbmx5XCIsXG4gIFwid3JpdGVPbmx5XCIsXG5dKTtcbmNvbnN0IEVYQU1QTEVfSEFORExFRF9LRVlXT1JEUyA9IG5ldyBTZXQoW1xuICBcInR5cGVcIixcbiAgXCJlbnVtXCIsXG4gIFwiY29uc3RcIixcbiAgXCJwcm9wZXJ0aWVzXCIsXG4gIFwicmVxdWlyZWRcIixcbiAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiLFxuICBcIml0ZW1zXCIsXG4gIFwibWluSXRlbXNcIixcbiAgXCJtYXhJdGVtc1wiLFxuICBcIm1pbkxlbmd0aFwiLFxuICBcIm1heExlbmd0aFwiLFxuICBcIm1pbmltdW1cIixcbiAgXCJtYXhpbXVtXCIsXG4gIFwiZXhjbHVzaXZlTWluaW11bVwiLFxuICBcImV4Y2x1c2l2ZU1heGltdW1cIixcbiAgXCJhbnlPZlwiLFxuICBcIm9uZU9mXCIsXG5dKTtcblxuLyoqXG4gKiBpbnB1dFNjaGVtYSDrpbwg66eM7KGx7ZWY64qUIOyYiOyLnCDsnbjsiqTthLTsiqQg7IOd7ISxLiDsp4Dsm5Aga2V5d29yZCDsp5Htlakg67CW7J2YIOygnOyVvVxuICogKHBhdHRlcm4vZm9ybWF0LyRyZWYvYWxsT2Yvbm90L2lmL211bHRpcGxlT2YvdW5pcXVlSXRlbXMvLi4uKeydhCDrp4zrgpjrqbQg6rCS7J2EXG4gKiDsp4DslrTrgrTsp4Ag7JWK6rOgIHsgb2s6IGZhbHNlIH0g66W8IOuPjOugpOykgOuLpCDigJQg6rOE7JW9IOychOuwmCDsmIjsi5zripQg66qo64247J20IOuyoOuCgOuLpC5cbiAqL1xuZnVuY3Rpb24gZXhhbXBsZVZhbHVlRm9yU2NoZW1hKHNjaGVtYTogdW5rbm93bik6IEV4YW1wbGVSZXN1bHQge1xuICBpZiAoc2NoZW1hID09PSB0cnVlIHx8IHNjaGVtYSA9PT0gdW5kZWZpbmVkKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHt9IH07XG4gIGlmIChzY2hlbWEgPT09IG51bGwgfHwgdHlwZW9mIHNjaGVtYSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHNjaGVtYSkpIHJldHVybiB7IG9rOiBmYWxzZSB9O1xuICBjb25zdCBub2RlID0gc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGZvciAoY29uc3Qga2V5d29yZCBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xuICAgIGlmICghRVhBTVBMRV9IQU5ETEVEX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSAmJiAhRVhBTVBMRV9BTk5PVEFUSU9OX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS5lbnVtKSAmJiBub2RlLmVudW0ubGVuZ3RoID4gMCkgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBub2RlLmVudW1bMF0gfTtcbiAgaWYgKFwiY29uc3RcIiBpbiBub2RlKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IG5vZGUuY29uc3QgfTtcblxuICBmb3IgKGNvbnN0IGt3IG9mIFtcImFueU9mXCIsIFwib25lT2ZcIl0gYXMgY29uc3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlW2t3XSkpIHtcbiAgICAgIC8vIG9uZU9mIOuKlCBcIuygle2Zle2eiCDtlZjrgphcIuudvCDssqsg67iM656c7LmYIOqwkuydtCDri6Trpbgg67iM656c7LmY7JeQ64+EIOunpOy5reuQoCDsiJgg7J6I64ukIOKAlFxuICAgICAgLy8g6rKA7Kad6riwIOyXhuydtCDtmZXsi6DtlaAg7IiYIOyXhuycvOuvgOuhnCDruIzrnpzsuZjqsIAg7ZWY64KY7J28IOuVjOunjCDsg53shLHtlZzri6QuXG4gICAgICBjb25zdCBsaXN0ID0gbm9kZVtrd10gYXMgdW5rbm93bltdO1xuICAgICAgaWYgKGt3ID09PSBcIm9uZU9mXCIgJiYgbGlzdC5sZW5ndGggPiAxKSByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGxpc3QpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXhhbXBsZVZhbHVlRm9yU2NoZW1hKGJyYW5jaCk7XG4gICAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0eXBlID0gQXJyYXkuaXNBcnJheShub2RlLnR5cGUpID8gbm9kZS50eXBlWzBdIDogbm9kZS50eXBlO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgIGNvbnN0IG1pbiA9IHR5cGVvZiBub2RlLm1pbkxlbmd0aCA9PT0gXCJudW1iZXJcIiA/IG5vZGUubWluTGVuZ3RoIDogMDtcbiAgICAgIGlmIChtaW4gPiA2NCkgcmV0dXJuIHsgb2s6IGZhbHNlIH07XG4gICAgICBjb25zdCBiYXNlID0gXCJleGFtcGxlXCI7XG4gICAgICBjb25zdCB2YWx1ZSA9IGJhc2UubGVuZ3RoID49IG1pbiA/IGJhc2UgOiBiYXNlLnBhZEVuZChtaW4sIFwieFwiKTtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5tYXhMZW5ndGggPT09IFwibnVtYmVyXCIgJiYgdmFsdWUubGVuZ3RoID4gbm9kZS5tYXhMZW5ndGgpIHtcbiAgICAgICAgaWYgKG5vZGUubWF4TGVuZ3RoIDwgbWluKSByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB2YWx1ZS5zbGljZSgwLCBub2RlLm1heExlbmd0aCkgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZSB9O1xuICAgIH1cbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgY2FzZSBcImludGVnZXJcIjoge1xuICAgICAgbGV0IHZhbHVlID0gMDtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5taW5pbXVtID09PSBcIm51bWJlclwiKSB2YWx1ZSA9IG5vZGUubWluaW11bTtcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiBub2RlLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHZhbHVlID0gbm9kZS5leGNsdXNpdmVNaW5pbXVtICsgMTtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5tYXhpbXVtID09PSBcIm51bWJlclwiICYmIHZhbHVlID4gbm9kZS5tYXhpbXVtKSByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5leGNsdXNpdmVNYXhpbXVtID09PSBcIm51bWJlclwiICYmIHZhbHVlID49IG5vZGUuZXhjbHVzaXZlTWF4aW11bSkge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZSB9O1xuICAgIH1cbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBmYWxzZSB9O1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IG51bGwgfTtcbiAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgY29uc3QgbWluID0gdHlwZW9mIG5vZGUubWluSXRlbXMgPT09IFwibnVtYmVyXCIgPyBub2RlLm1pbkl0ZW1zIDogMDtcbiAgICAgIGlmIChtaW4gPiA4KSByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgIGlmICh0eXBlb2Ygbm9kZS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIiAmJiBub2RlLm1heEl0ZW1zIDwgbWluKSByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgICAgIGlmIChtaW4gPT09IDApIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogW10gfTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBleGFtcGxlVmFsdWVGb3JTY2hlbWEobm9kZS5pdGVtcyk7XG4gICAgICBpZiAoIWl0ZW0ub2spIHJldHVybiB7IG9rOiBmYWxzZSB9O1xuICAgICAgLy8g6rCZ7J2AIOqwkiDrsJjrs7XsnbTrnbwgdW5pcXVlSXRlbXMg7JmAIOy2qeuPjO2VmOyngOunjCwgdW5pcXVlSXRlbXMg64qUIOyngOybkCDsp5Htlakg67CW7J206528XG4gICAgICAvLyDsnITsnZgga2V5d29yZCDqsoDsgqzsl5DshJwg7J2066+4IGZhaWwtY2xvc2VkIOuQnOuLpC5cbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogQXJyYXkuZnJvbSh7IGxlbmd0aDogbWluIH0sICgpID0+IGl0ZW0udmFsdWUpIH07XG4gICAgfVxuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9XG4gICAgICAgIG5vZGUucHJvcGVydGllcyAmJiB0eXBlb2Ygbm9kZS5wcm9wZXJ0aWVzID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG5vZGUucHJvcGVydGllcylcbiAgICAgICAgICA/IChub2RlLnByb3BlcnRpZXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gQXJyYXkuaXNBcnJheShub2RlLnJlcXVpcmVkKVxuICAgICAgICA/IG5vZGUucmVxdWlyZWQuZmlsdGVyKChrKTogayBpcyBzdHJpbmcgPT4gdHlwZW9mIGsgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBlbnRyaWVzOiBBcnJheTxbc3RyaW5nLCB1bmtub3duXT4gPSBbXTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZXhhbXBsZVZhbHVlRm9yU2NoZW1hKHByb3BlcnRpZXNba2V5XSk7XG4gICAgICAgIGlmICghY2hpbGQub2spIHJldHVybiB7IG9rOiBmYWxzZSB9O1xuICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgY2hpbGQudmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4geyBvazogZmFsc2UgfTtcbiAgfVxufVxuXG4vLyBlbnZlbG9wZSDqs4Tslb0g66y46rWs64qUIGJ1aWxkVG9vbENhbGxTY2hlbWEg7J2YIGRlc2NyaXB0aW9uIOuTpOqzvCDqsJnsnYAg7ZGc7ZiE7J2EIOyTtOuLpFxuLy8gKFwiRG8gbm90IGludm9rZSAuLi4gYXMgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2xzXCIg65OxKSDigJQg66qo64247J20IHN0cnVjdHVyZWQv7ZSE66Gs7ZSE7Yq4XG4vLyDslrTripAg7JWI64K066W8IOuwm+yVhOuPhCDqsJnsnYAg6rec7LmZ7J2EIOydveqyjCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVG9vbEVudmVsb3BlUHJvbXB0KHRvb2xzOiBRZ3JpZFRvb2xbXSwganNvblNjaGVtYT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgdG9vbENhbGxFeGFtcGxlLCB0ZXh0QW5zd2VyRXhhbXBsZSB9ID0gYnVpbGRFbnZlbG9wZUV4YW1wbGVzKHRvb2xzKTtcblxuICBjb25zdCB0b29sTGlzdCA9IHRvb2xzXG4gICAgLm1hcCgodG9vbCkgPT4ge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0b29sLmRlc2NyaXB0aW9uID8gYCDigJQgJHt0b29sLmRlc2NyaXB0aW9ufWAgOiBcIlwiO1xuICAgICAgcmV0dXJuIGAtICR7dG9vbC5uYW1lfSR7ZGVzY3JpcHRpb259XFxuICBpbnB1dFNjaGVtYTogJHtKU09OLnN0cmluZ2lmeSh0b29sLmlucHV0U2NoZW1hKX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgLy8g7JiI7Iuc6rCAIHJhdy1KU09OLW9ubHkg6rec7LmZ7J2EIOyKpOyKpOuhnCDslrTquLDrqbQg7JWIIOuQnOuLpDoganNvbiBhbnN3ZXIg64qUIOyKpO2CpOuniCDsooXsho3snbTrnbxcbiAgLy8g7Jyg7Zqo7ZWcIOumrO2EsOuftCDsmIjsi5zrpbwg66eM65OkIOyImCDsl4bsnLzrr4DroZwg7JiI7IucIOyXhuydtCDtlITroZzspojroZzrp4wg7ISc7Iig7ZWc64ukICjsnpDrpqztkZzsi5zsnpDqsIBcbiAgLy8g7ISe7J24IOu5hCBKU09OIOyYiOyLnOulvCDrqqjrjbjsnbQg6re464yA66GcIOuyoOuBvOuKlCDqsoMg67Cp7KeAKS5cbiAgY29uc3QgYW5zd2VyVmFyaWFudCA9XG4gICAganNvblNjaGVtYSA9PT0gdW5kZWZpbmVkXG4gICAgICA/IFtcbiAgICAgICAgICBcIjIuIEZpbmFsIGFuc3dlciDigJQgdXNlIG9ubHkgd2hlbiBubyBmdXJ0aGVyIGNsaWVudCB0b29sIHJlc3VsdCBpcyBuZWVkZWQ6XCIsXG4gICAgICAgICAgdGV4dEFuc3dlckV4YW1wbGUsXG4gICAgICAgICAgJy0gXCJ0b29sQ2FsbHNcIiBtdXN0IGJlIG51bGwuJyxcbiAgICAgICAgICAnLSBcImFuc3dlclwiIG11c3QgYmUgYSBwbGFpbiBzdHJpbmcgd2l0aCB5b3VyIGZpbmFsIGFuc3dlciAobm90IG51bGwpLicsXG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIFwiMi4gRmluYWwgYW5zd2VyIOKAlCB1c2Ugb25seSB3aGVuIG5vIGZ1cnRoZXIgY2xpZW50IHRvb2wgcmVzdWx0IGlzIG5lZWRlZDpcIixcbiAgICAgICAgICAnLSBTZXQgXCJhY3Rpb25cIiB0byBcImFuc3dlclwiIGFuZCBcInRvb2xDYWxsc1wiIHRvIG51bGwuJyxcbiAgICAgICAgICAnLSBcImFuc3dlclwiIG11c3QgYmUgYSBKU09OIHZhbHVlIChub3QgbnVsbCwgYW5kIG5vdCBhIHN0cmluZyBvZiBKU09OKSB0aGF0IGNvbmZvcm1zIHRvIHRoZSBKU09OIFNjaGVtYSBiZWxvdy4nLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgXCI8YW5zd2VyLWpzb24tc2NoZW1hPlwiLFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgXCI8L2Fuc3dlci1qc29uLXNjaGVtYT5cIixcbiAgICAgICAgXTtcblxuICAvLyDsmIjsi5wg7IOd7ISx6riw6rCAIOuLpOujqOyngCDrqrvtlZjripQgaW5wdXRTY2hlbWEoZmFpbC1jbG9zZWQp66m0IOq1rOyhsCDshJzsiKDroZwg64yA7LK07ZWc64ukIOKAlFxuICAvLyDsiqTtgqTrp4jrpbwg7JyE67CY7ZWgIOyImCDsnojripQg7JiI7Iuc66W8IOyLo+uKlCDqsoPrs7Tri6Qg7JiI7Iuc6rCAIOyXhuuKlCDtjrjsnbQg7JWI7KCE7ZWY64ukLlxuICBjb25zdCB0b29sQ2FsbFZhcmlhbnQgPSBbXG4gICAgdG9vbENhbGxFeGFtcGxlICE9PSB1bmRlZmluZWRcbiAgICAgID8gXCIxLiBSZXF1ZXN0IGNsaWVudC1zaWRlIHRvb2wgZXhlY3V0aW9uLCBmb3IgZXhhbXBsZTpcIlxuICAgICAgOiBcIjEuIFJlcXVlc3QgY2xpZW50LXNpZGUgdG9vbCBleGVjdXRpb246XCIsXG4gICAgLi4uKHRvb2xDYWxsRXhhbXBsZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IFt0b29sQ2FsbEV4YW1wbGVdXG4gICAgICA6IFtcbiAgICAgICAgICAnLSBTZXQgXCJhY3Rpb25cIiB0byBcInRvb2xfY2FsbFwiIGFuZCBcImFuc3dlclwiIHRvIG51bGwuJyxcbiAgICAgICAgICAnLSBcInRvb2xDYWxsc1wiIGlzIGFuIGFycmF5IG9mIG9iamVjdHMsIGVhY2gge1widG9vbE5hbWVcIjogLi4uLCBcImFyZ3NcIjogLi4ufS4nLFxuICAgICAgICBdKSxcbiAgICAnLSBcInRvb2xDYWxsc1wiIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZW50cnkuJyxcbiAgICAnLSBcInRvb2xOYW1lXCIgbXVzdCBiZSBvbmUgb2YgdGhlIGNsaWVudCB0b29sIG5hbWVzIGxpc3RlZCBiZWxvdy4nLFxuICAgICctIFwiYXJnc1wiIG11c3QgYmUgdGhlIHRvb2wgYXJndW1lbnRzIGVuY29kZWQgYXMgYSBKU09OIHN0cmluZyAobm90IGFuIG9iamVjdCksIGNvbmZvcm1pbmcgdG8gdGhhdCB0b29sXFwncyBpbnB1dFNjaGVtYS4nLFxuICAgICctIFwiYW5zd2VyXCIgbXVzdCBiZSBudWxsLicsXG4gIF07XG5cbiAgcmV0dXJuIFtcbiAgICBcIiMjIENsaWVudCBUb29sIFByb3RvY29sXCIsXG4gICAgXCJcIixcbiAgICBcIlRoZSBjbGllbnQtc2lkZSB0b29scyBsaXN0ZWQgYmVsb3cgYXJlIGV4ZWN1dGVkIGJ5IHRoZSBjbGllbnQsIHdoaWNoIHJldHVybnMgZWFjaCByZXN1bHRcIixcbiAgICBcImluIGEgZm9sbG93LXVwIHR1cm4uIERvIG5vdCBpbnZva2UgdGhlbSBhcyBuYXRpdmUgQ2xhdWRlIENvZGUgdG9vbHMuXCIsXG4gICAgXCJcIixcbiAgICAnWW91ciBlbnRpcmUgcmVwbHkgbXVzdCBiZSBhIHNpbmdsZSBKU09OIG9iamVjdCBvZiB0aGUgZm9ybSB7XCJyZXN1bHRcIjogLi4ufSDigJQnLFxuICAgIFwicmF3IEpTT04gb25seSwgbm8gY29kZSBmZW5jZXMsIG5vIHByb3NlIGJlZm9yZSBvciBhZnRlciB0aGUgSlNPTi5cIixcbiAgICAnVGhlIFwicmVzdWx0XCIgdmFsdWUgaXMgZXhhY3RseSBvbmUgb2YgdGhlIHR3byB2YXJpYW50czonLFxuICAgIFwiXCIsXG4gICAgLi4udG9vbENhbGxWYXJpYW50LFxuICAgIFwiXCIsXG4gICAgLi4uYW5zd2VyVmFyaWFudCxcbiAgICBcIlwiLFxuICAgIFwiQXZhaWxhYmxlIGNsaWVudCB0b29sczpcIixcbiAgICB0b29sTGlzdCxcbiAgXS5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3QkEsU0FBZ0IsZ0NBQ2QsUUFDQSxPQUNvQjtDQUNwQixNQUFNLFdBQVcsMkJBQTJCLEtBQUs7Q0FDakQsSUFBSSxhQUFhLFFBQVcsT0FBTztDQUNuQyxPQUFPLFNBQVMsR0FBRyxPQUFPLE1BQU0sYUFBYTtBQUMvQzs7QUFHQSxTQUFnQiwyQkFDZCxPQUNvQjtDQUNwQixJQUFJLE1BQU0sT0FBTyxRQUNmLE9BQU8seUJBQXlCLE1BQU0sT0FBTyxNQUFNLFVBQVU7Q0FFL0QsSUFBSSxNQUFNLGVBQWUsUUFDdkIsT0FBTyx5QkFBeUIsTUFBTSxVQUFVO0FBR3BEO0FBR0EsU0FBZ0IseUJBQXlCLFlBQTRCO0NBQ25FLE9BQU87RUFDTDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDRixDQUFDLENBQUMsS0FBSyxJQUFJO0FBQ2I7Ozs7Ozs7Ozs7QUFXQSxTQUFnQixzQkFBc0IsT0FHcEM7Q0FDQSxNQUFNLFlBQVksTUFBTTtDQUN4QixNQUFNLE9BQU8sWUFBWSxzQkFBc0IsVUFBVSxXQUFXLElBQUk7RUFBRSxJQUFJO0VBQU0sT0FBTyxDQUFDO0NBQUU7Q0FDOUYsT0FBTztFQUNMLEdBQUksS0FBSyxLQUNMLEVBQ0UsaUJBQWlCLEtBQUssVUFBVSxFQUM5QixRQUFRO0dBQ04sUUFBUTtHQUNSLFFBQVE7R0FDUixXQUFXLENBQ1Q7SUFBRSxVQUFVLFdBQVcsUUFBUTtJQUFZLE1BQU0sS0FBSyxVQUFVLEtBQUssS0FB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
@@ -130,7 +130,7 @@ var TokenSubscriber = class {
130
130
  const payload = JSON.parse(payloadJson);
131
131
  if (payload.op === "DELETE") {
132
132
  this.dispatcher.removeCache(payload.id);
133
- await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai worker remove failed: ${e.message}`));
133
+ await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
134
134
  this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
135
135
  logger.info(`NOTIFY ${payload.op} id=${payload.id} → removed from cache`);
136
136
  return;
@@ -138,7 +138,7 @@ var TokenSubscriber = class {
138
138
  const row = await TokenModel.findOne("A", { id: payload.id });
139
139
  if (!row) {
140
140
  this.dispatcher.removeCache(payload.id);
141
- await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai worker remove failed: ${e.message}`));
141
+ await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
142
142
  this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
143
143
  logger.info(`NOTIFY ${payload.op} id=${payload.id} → missing, removed from cache`);
144
144
  return;
@@ -147,9 +147,9 @@ var TokenSubscriber = class {
147
147
  if (row.provider === "openai") {
148
148
  const creds = row.credentials;
149
149
  const openaiDispatcher = this.dispatcher.openaiDispatcher;
150
- if (payload.op === "INSERT" && row.active) await openaiDispatcher?.onTokenAdded(payload.id, row.name, creds, row.quota_threshold, row.weight).catch((e) => logger.warn(`openai worker spawn failed: ${e.message}`));
150
+ if (payload.op === "INSERT" && row.active) await openaiDispatcher?.onTokenAdded(payload.id, row.name, creds, row.quota_threshold, row.weight).catch((e) => logger.warn(`openai token add failed: ${e.message}`));
151
151
  else if (row.active) {
152
- if (openaiDispatcher) await openaiDispatcher.onTokenUpdated(payload.id, row.name, creds, row.quota_threshold, row.weight).then(() => openaiDispatcher.onTokenActivated(payload.id)).catch((e) => logger.warn(`openai worker update failed: ${e.message}`));
152
+ if (openaiDispatcher) await openaiDispatcher.onTokenUpdated(payload.id, row.name, creds, row.quota_threshold, row.weight).then(() => openaiDispatcher.onTokenActivated(payload.id)).catch((e) => logger.warn(`openai token update failed: ${e.message}`));
153
153
  } else openaiDispatcher?.onTokenDeactivated(payload.id);
154
154
  } else if (row.provider === "anthropic") {
155
155
  const creds = row.credentials;
@@ -192,4 +192,4 @@ var TokenSubscriber = class {
192
192
  //#endregion
193
193
  export { TokenSubscriber };
194
194
 
195
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9wZXJhdGlvbkNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbm5Db25maWc6IENsaWVudENvbmZpZyxcbiAgICBwdWJsaWMgZGlzcGF0Y2hlcjogUWdyaWREaXNwYXRjaGVyQ2xhc3MsXG4gICkge31cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5lbnN1cmVSZWNvbmNpbGVUaW1lcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfSwgc2NoZWR1bGluZyByZXRyeWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlY29uY2lsZVRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgfVxuXG4gIHN0YXR1cygpOiBTdWJzY3JpYmVyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29ubmVjdGVkOiB0aGlzLmNsaWVudCAhPT0gbnVsbCAmJiB0aGlzLnJlY29ubmVjdFRpbWVyID09PSBudWxsLFxuICAgICAgY29ubmVjdGVkQXQ6IHRoaXMuY29ubmVjdGVkQXQsXG4gICAgICBsYXN0UmVjb25jaWxlQXQ6IHRoaXMubGFzdFJlY29uY2lsZUF0LFxuICAgICAgYXR0ZW1wdDogdGhpcy5hdHRlbXB0LFxuICAgIH07XG4gIH1cblxuICBlbnN1cmVSZWNvbmNpbGVUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikgcmV0dXJuO1xuXG4gICAgLy8gTElTVEVOL05PVElGWSDripQg64GK6ri0IOuPmeyViCDsnKDsi6TrkKAg7IiYIOyeiOyWtCDso7zquLDsoIHsnLzroZwgREIg6riw7KSA7Jy866GcIOunnuy2mOuLpC5cbiAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYHBlcmlvZGljIHJlY29uY2lsZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0sIFJFQ09OQ0lMRV9JTlRFUlZBTF9NUyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kUmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZExpc3RlbigpO1xuICAgIGF3YWl0IHRoaXMucmVjb25jaWxlKCk7XG4gICAgdGhpcy5hdHRlbXB0ID0gMDtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRMaXN0ZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbm5Db25maWcsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzOiAxMF8wMDAsXG4gICAgICBhcHBsaWNhdGlvbl9uYW1lOiBcInFncmlkLWxpc3RlbmVyXCIsXG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwibm90aWZpY2F0aW9uXCIsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuY2hhbm5lbCAhPT0gVE9LRU5TX0NIQU5HRUQgfHwgIW1zZy5wYXlsb2FkKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbihtc2cucGF5bG9hZCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBoYW5kbGUgTk9USUZZIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBzdGF0ZW1lbnRfdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgaWRsZV9pbl90cmFuc2FjdGlvbl9zZXNzaW9uX3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBMSVNURU4gJHtjbGllbnQuZXNjYXBlSWRlbnRpZmllcihUT0tFTlNfQ0hBTkdFRCl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5jb25uZWN0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgbG9nZ2VyLmluZm8oYHN1YnNjcmliZWQgdG8gJHtUT0tFTlNfQ0hBTkdFRH1gKTtcbiAgfVxuXG4gIHJldHJ5TGF0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuXG4gICAgdm9pZCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gICAgdGhpcy5hdHRlbXB0ICs9IDE7XG4gICAgY29uc3QgY2FwID0gTWF0aC5taW4oQkFDS09GRl9CQVNFX01TICogMiAqKiB0aGlzLmF0dGVtcHQsIEJBQ0tPRkZfQ0FQX01TKTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNhcCk7XG4gICAgbG9nZ2VyLmluZm8oYHJlY29ubmVjdGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5hdHRlbXB0fSlgKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHJlY29ubmVjdCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgfSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnQ7XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbihwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5xdWV1ZU9wZXJhdGlvbigoKSA9PiB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVOb3RpZmljYXRpb25Ob3cocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWRKc29uKSBhcyBQYXlsb2FkO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB3b3JrZXIgcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAvLyBhbnRocm9waWMg7Yag7YGwIOydtOuypO2KuOuKlCDrj5nquLAodm9pZCkg4oCUIHByb3ZpZGVyIOulvCDrqqjrpbTrr4DroZwg66y07ZW07ZWY6rKMIO2VreyDgSDsoJzqsbAg7Iuc64+ELlxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0g4oaSIHJlbW92ZWQgZnJvbSBjYWNoZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3cgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQ6IHBheWxvYWQuaWQgfSk7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5yZW1vdmVDYWNoZShwYXlsb2FkLmlkKTtcbiAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgID8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZClcbiAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHdvcmtlciByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiBtaXNzaW5nLCByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoZXIudXBzZXJ0Q2FjaGUocGF5bG9hZC5pZCwgcm93KTtcblxuICAgIGlmIChyb3cucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qgb3BlbmFpRGlzcGF0Y2hlciA9IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgICAgPy5vblRva2VuQWRkZWQoXG4gICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICBjcmVkcyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICAgIClcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgd29ya2VyIHNwYXduIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB9IGVsc2UgaWYgKHJvdy5hY3RpdmUpIHtcbiAgICAgICAgaWYgKG9wZW5haURpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgICAgICAub25Ub2tlblVwZGF0ZWQoXG4gICAgICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgICBjcmVkcyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IG9wZW5haURpc3BhdGNoZXIub25Ub2tlbkFjdGl2YXRlZChwYXlsb2FkLmlkKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB3b3JrZXIgdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5EZWFjdGl2YXRlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgLy8gYW50aHJvcGljIO2GoO2BsCDsnbTrsqTtirjripQg64+Z6riwKHZvaWQpLiB3b3JrZXIg6rCAIOyXhuqzoCDtkoAoTWFwKeunjCDqtIDrpqztlZjrr4DroZwg64uo7IicOlxuICAgICAgLy8gIElOU0VSVCDihpIg7LaU6rCALCBhY3RpdmUg66m0IOqwseyLoChvblRva2VuVXBkYXRlZCDqsIAgaWRlbnRpdHkg67OA6rK964+EIOyymOumrCksIGluYWN0aXZlIOuptCDtkoDsl5DshJwg7KCc6rGwLlxuICAgICAgLy8gICjrs4Trj4QgYWN0aXZhdGUvZGVhY3RpdmF0ZSDsvZzrsLHsnbQg7JeG7Ja0IGFjdGl2ZSDthqDquIDsnYQgYWRkL3JlbW92ZSDroZwg66ek7ZWRLilcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgY3JlZHMsXG4gICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuVXBkYXRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVucXVldWVPcGVyYXRpb24oKCkgPT4gdGhpcy5yZWNvbmNpbGVOb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQWN0aXZlKFwiQVwiKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVwbGFjZUNhY2hlKHJvd3MpO1xuICAgIC8vIE5PVElGWSDsnKDsi6Qg64yA67mEOiBBbnRocm9waWNEaXNwYXRjaGVyIO2SgOuPhCBEQiBhY3RpdmUgYW50aHJvcGljIO2GoO2BsCDquLDspIDsnLzroZwg7J6s64+Z6riw7ZmULlxuICAgIC8vIChyb3dzIOuKlCBhY3RpdmUg66eMIOKAlCBpbmFjdGl2ZS/sgq3soJzrkJwg7Yag7YGw7J2AIOyXrOq4sCDsl4bsnLzrr4DroZwgcmVwbGFjZVRva2VucyDqsIAg7ZKA7JeQ7IScIOygnOqxsO2VnOuLpC4pXG4gICAgY29uc3QgYW50aHJvcGljUm93cyA9IHJvd3NcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpXG4gICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICBpZDogci5pZCxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogci5jcmVkZW50aWFscyBhcyBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHIucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgfSkpO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5yZXBsYWNlVG9rZW5zKGFudGhyb3BpY1Jvd3MpO1xuICAgIGNvbnN0IG9wZW5haVJvd3MgPSByb3dzXG4gICAgICAuZmlsdGVyKChyKSA9PiByLnByb3ZpZGVyID09PSBcIm9wZW5haVwiKVxuICAgICAgLm1hcCgocikgPT4gKHtcbiAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHIuY3JlZGVudGlhbHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgIHF1b3RhVGhyZXNob2xkOiByLnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgd2VpZ2h0OiByLndlaWdodCxcbiAgICAgIH0pKTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgPy5yZXBsYWNlVG9rZW5zKG9wZW5haVJvd3MpXG4gICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgcmVjb25jaWxlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgdGhpcy5sYXN0UmVjb25jaWxlQXQgPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnF1ZXVlT3BlcmF0aW9uKG9wZXJhdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm9wZXJhdGlvbkNoYWluLnRoZW4ob3BlcmF0aW9uLCBvcGVyYXRpb24pO1xuICAgIHRoaXMub3BlcmF0aW9uQ2hhaW4gPSBuZXh0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxZQUFZLENBQUM7QUFFaEQsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx3QkFBd0IsTUFBVTtBQUN4QyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLGlCQUFpQjtBQUl2QixJQUFhLGtCQUFiLE1BQTZCO0NBV2xCO0NBQ0E7Q0FYVCxTQUF3QjtDQUN4QixpQkFBd0M7Q0FDeEMsaUJBQXdDO0NBQ3hDLG9CQUFvQjtDQUNwQixVQUFVO0NBQ1YsY0FBMkI7Q0FDM0Isa0JBQStCO0NBQy9CLGlCQUF3QyxRQUFRLFFBQVE7Q0FFeEQsWUFDRSxZQUNBLFlBQ0E7RUFGTyxLQUFBLGFBQUE7RUFDQSxLQUFBLGFBQUE7Q0FDTjtDQUVILE1BQU0sUUFBMEI7RUFDOUIsS0FBSyxvQkFBb0I7RUFDekIsS0FBSyxxQkFBcUI7RUFFMUIsSUFBSTtHQUNGLE1BQU0sS0FBSyxvQkFBb0I7R0FDL0IsT0FBTztFQUNULFNBQVMsR0FBRztHQUNWLE9BQU8sS0FBSyw0QkFBNkIsRUFBWSxRQUFRLG1CQUFtQjtHQUNoRixLQUFLLFdBQVc7R0FDaEIsT0FBTztFQUNUO0NBQ0Y7Q0FFQSxNQUFNLE9BQXNCO0VBQzFCLEtBQUssb0JBQW9CO0VBQ3pCLElBQUksS0FBSyxnQkFBZ0I7R0FDdkIsY0FBYyxLQUFLLGNBQWM7R0FD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
195
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9wZXJhdGlvbkNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbm5Db25maWc6IENsaWVudENvbmZpZyxcbiAgICBwdWJsaWMgZGlzcGF0Y2hlcjogUWdyaWREaXNwYXRjaGVyQ2xhc3MsXG4gICkge31cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5lbnN1cmVSZWNvbmNpbGVUaW1lcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfSwgc2NoZWR1bGluZyByZXRyeWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlY29uY2lsZVRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgfVxuXG4gIHN0YXR1cygpOiBTdWJzY3JpYmVyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29ubmVjdGVkOiB0aGlzLmNsaWVudCAhPT0gbnVsbCAmJiB0aGlzLnJlY29ubmVjdFRpbWVyID09PSBudWxsLFxuICAgICAgY29ubmVjdGVkQXQ6IHRoaXMuY29ubmVjdGVkQXQsXG4gICAgICBsYXN0UmVjb25jaWxlQXQ6IHRoaXMubGFzdFJlY29uY2lsZUF0LFxuICAgICAgYXR0ZW1wdDogdGhpcy5hdHRlbXB0LFxuICAgIH07XG4gIH1cblxuICBlbnN1cmVSZWNvbmNpbGVUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikgcmV0dXJuO1xuXG4gICAgLy8gTElTVEVOL05PVElGWSDripQg64GK6ri0IOuPmeyViCDsnKDsi6TrkKAg7IiYIOyeiOyWtCDso7zquLDsoIHsnLzroZwgREIg6riw7KSA7Jy866GcIOunnuy2mOuLpC5cbiAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYHBlcmlvZGljIHJlY29uY2lsZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0sIFJFQ09OQ0lMRV9JTlRFUlZBTF9NUyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kUmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZExpc3RlbigpO1xuICAgIGF3YWl0IHRoaXMucmVjb25jaWxlKCk7XG4gICAgdGhpcy5hdHRlbXB0ID0gMDtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRMaXN0ZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbm5Db25maWcsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzOiAxMF8wMDAsXG4gICAgICBhcHBsaWNhdGlvbl9uYW1lOiBcInFncmlkLWxpc3RlbmVyXCIsXG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwibm90aWZpY2F0aW9uXCIsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuY2hhbm5lbCAhPT0gVE9LRU5TX0NIQU5HRUQgfHwgIW1zZy5wYXlsb2FkKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbihtc2cucGF5bG9hZCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBoYW5kbGUgTk9USUZZIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBzdGF0ZW1lbnRfdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgaWRsZV9pbl90cmFuc2FjdGlvbl9zZXNzaW9uX3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBMSVNURU4gJHtjbGllbnQuZXNjYXBlSWRlbnRpZmllcihUT0tFTlNfQ0hBTkdFRCl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5jb25uZWN0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgbG9nZ2VyLmluZm8oYHN1YnNjcmliZWQgdG8gJHtUT0tFTlNfQ0hBTkdFRH1gKTtcbiAgfVxuXG4gIHJldHJ5TGF0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuXG4gICAgdm9pZCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gICAgdGhpcy5hdHRlbXB0ICs9IDE7XG4gICAgY29uc3QgY2FwID0gTWF0aC5taW4oQkFDS09GRl9CQVNFX01TICogMiAqKiB0aGlzLmF0dGVtcHQsIEJBQ0tPRkZfQ0FQX01TKTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNhcCk7XG4gICAgbG9nZ2VyLmluZm8oYHJlY29ubmVjdGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5hdHRlbXB0fSlgKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHJlY29ubmVjdCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgfSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnQ7XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbihwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5xdWV1ZU9wZXJhdGlvbigoKSA9PiB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVOb3RpZmljYXRpb25Ob3cocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWRKc29uKSBhcyBQYXlsb2FkO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIC8vIGFudGhyb3BpYyDthqDtgbAg7J2067Kk7Yq464qUIOuPmeq4sCh2b2lkKSDigJQgcHJvdmlkZXIg66W8IOuqqOultOuvgOuhnCDrrLTtlbTtlZjqsowg7ZWt7IOBIOygnOqxsCDsi5zrj4QuXG4gICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZCk7XG4gICAgICBsb2dnZXIuaW5mbyhgTk9USUZZICR7cGF5bG9hZC5vcH0gaWQ9JHtwYXlsb2FkLmlkfSDihpIgcmVtb3ZlZCBmcm9tIGNhY2hlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZDogcGF5bG9hZC5pZCB9KTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUNhY2hlKHBheWxvYWQuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZCk7XG4gICAgICBsb2dnZXIuaW5mbyhgTk9USUZZICR7cGF5bG9hZC5vcH0gaWQ9JHtwYXlsb2FkLmlkfSDihpIgbWlzc2luZywgcmVtb3ZlZCBmcm9tIGNhY2hlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnVwc2VydENhY2hlKHBheWxvYWQuaWQsIHJvdyk7XG5cbiAgICBpZiAocm93LnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBjb25zdCBjcmVkcyA9IHJvdy5jcmVkZW50aWFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG9wZW5haURpc3BhdGNoZXIgPSB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcjtcbiAgICAgIGlmIChwYXlsb2FkLm9wID09PSBcIklOU0VSVFwiICYmIHJvdy5hY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgICAgcGF5bG9hZC5pZCxcbiAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICByb3cucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHRva2VuIGFkZCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIGlmIChvcGVuYWlEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgICAgLm9uVG9rZW5VcGRhdGVkKFxuICAgICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgICByb3cubmFtZSxcbiAgICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICAgIHJvdy53ZWlnaHQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigoKSA9PiBvcGVuYWlEaXNwYXRjaGVyLm9uVG9rZW5BY3RpdmF0ZWQocGF5bG9hZC5pZCkpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5EZWFjdGl2YXRlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgLy8gYW50aHJvcGljIO2GoO2BsCDsnbTrsqTtirjripQg64+Z6riwKHZvaWQpLiB3b3JrZXIg6rCAIOyXhuqzoCDtkoAoTWFwKeunjCDqtIDrpqztlZjrr4DroZwg64uo7IicOlxuICAgICAgLy8gIElOU0VSVCDihpIg7LaU6rCALCBhY3RpdmUg66m0IOqwseyLoChvblRva2VuVXBkYXRlZCDqsIAgaWRlbnRpdHkg67OA6rK964+EIOyymOumrCksIGluYWN0aXZlIOuptCDtkoDsl5DshJwg7KCc6rGwLlxuICAgICAgLy8gICjrs4Trj4QgYWN0aXZhdGUvZGVhY3RpdmF0ZSDsvZzrsLHsnbQg7JeG7Ja0IGFjdGl2ZSDthqDquIDsnYQgYWRkL3JlbW92ZSDroZwg66ek7ZWRLilcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgY3JlZHMsXG4gICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuVXBkYXRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVucXVldWVPcGVyYXRpb24oKCkgPT4gdGhpcy5yZWNvbmNpbGVOb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQWN0aXZlKFwiQVwiKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVwbGFjZUNhY2hlKHJvd3MpO1xuICAgIC8vIE5PVElGWSDsnKDsi6Qg64yA67mEOiBBbnRocm9waWNEaXNwYXRjaGVyIO2SgOuPhCBEQiBhY3RpdmUgYW50aHJvcGljIO2GoO2BsCDquLDspIDsnLzroZwg7J6s64+Z6riw7ZmULlxuICAgIC8vIChyb3dzIOuKlCBhY3RpdmUg66eMIOKAlCBpbmFjdGl2ZS/sgq3soJzrkJwg7Yag7YGw7J2AIOyXrOq4sCDsl4bsnLzrr4DroZwgcmVwbGFjZVRva2VucyDqsIAg7ZKA7JeQ7IScIOygnOqxsO2VnOuLpC4pXG4gICAgY29uc3QgYW50aHJvcGljUm93cyA9IHJvd3NcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpXG4gICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICBpZDogci5pZCxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogci5jcmVkZW50aWFscyBhcyBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHIucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgfSkpO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5yZXBsYWNlVG9rZW5zKGFudGhyb3BpY1Jvd3MpO1xuICAgIGNvbnN0IG9wZW5haVJvd3MgPSByb3dzXG4gICAgICAuZmlsdGVyKChyKSA9PiByLnByb3ZpZGVyID09PSBcIm9wZW5haVwiKVxuICAgICAgLm1hcCgocikgPT4gKHtcbiAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHIuY3JlZGVudGlhbHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgIHF1b3RhVGhyZXNob2xkOiByLnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgd2VpZ2h0OiByLndlaWdodCxcbiAgICAgIH0pKTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgPy5yZXBsYWNlVG9rZW5zKG9wZW5haVJvd3MpXG4gICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgcmVjb25jaWxlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgdGhpcy5sYXN0UmVjb25jaWxlQXQgPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnF1ZXVlT3BlcmF0aW9uKG9wZXJhdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm9wZXJhdGlvbkNoYWluLnRoZW4ob3BlcmF0aW9uLCBvcGVyYXRpb24pO1xuICAgIHRoaXMub3BlcmF0aW9uQ2hhaW4gPSBuZXh0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxZQUFZLENBQUM7QUFFaEQsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx3QkFBd0IsTUFBVTtBQUN4QyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLGlCQUFpQjtBQUl2QixJQUFhLGtCQUFiLE1BQTZCO0NBV2xCO0NBQ0E7Q0FYVCxTQUF3QjtDQUN4QixpQkFBd0M7Q0FDeEMsaUJBQXdDO0NBQ3hDLG9CQUFvQjtDQUNwQixVQUFVO0NBQ1YsY0FBMkI7Q0FDM0Isa0JBQStCO0NBQy9CLGlCQUF3QyxRQUFRLFFBQVE7Q0FFeEQsWUFDRSxZQUNBLFlBQ0E7RUFGTyxLQUFBLGFBQUE7RUFDQSxLQUFBLGFBQUE7Q0FDTjtDQUVILE1BQU0sUUFBMEI7RUFDOUIsS0FBSyxvQkFBb0I7RUFDekIsS0FBSyxxQkFBcUI7RUFFMUIsSUFBSTtHQUNGLE1BQU0sS0FBSyxvQkFBb0I7R0FDL0IsT0FBTztFQUNULFNBQVMsR0FBRztHQUNWLE9BQU8sS0FBSyw0QkFBNkIsRUFBWSxRQUFRLG1CQUFtQjtHQUNoRixLQUFLLFdBQVc7R0FDaEIsT0FBTztFQUNUO0NBQ0Y7Q0FFQSxNQUFNLE9BQXNCO0VBQzFCLEtBQUssb0JBQW9CO0VBQ3pCLElBQUksS0FBSyxnQkFBZ0I7R0FDdkIsY0FBYyxLQUFLLGNBQWM7R0FDakMsS0FB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
@@ -1,5 +1,17 @@
1
1
  import { SCHEMA_ARRAY_KEYWORDS, SCHEMA_MAP_KEYWORDS, SCHEMA_SINGLE_KEYWORDS, UNSUPPORTED_REFERENCE_KEYWORDS } from "../../utils/providers/common/json-schema-keywords.js";
2
2
  //#region src/application/qgrid/tool-emulation-schema.ts
3
+ /**
4
+ * tool envelope + 사용자 output 스키마 합성 (요청 방향). 응답 해석은 tool-emulation.ts.
5
+ *
6
+ * tools 가 있어도 최종 answer 가 사용자 스키마로 강제되게 하려고 envelope 의 answer 브랜치에
7
+ * 사용자 스키마를 심는다. 통째로 중첩할 수 없는 이유는 `$ref` 가 문서 절대 경로이기 때문 —
8
+ * `#` 은 "이 조각의 루트"가 아니라 "최종 문서의 루트"라, 그대로 넣으면 포인터가 envelope 을
9
+ * 가리켜 조용히 엉뚱한 걸 검증하게 된다. 그래서 예약 이름 아래로 옮기고 로컬 포인터를 재작성한다.
10
+ *
11
+ * 배경·실측·예시·거부 목록은 스킬 문서를 볼 것:
12
+ * packages/cli/skills/qgrid/references/tool-calling-and-multiturn.md
13
+ * → "Composing Tools With A User Output Schema"
14
+ */
3
15
  const USER_OUTPUT_DEFINITION = "__qgrid_user_output";
4
16
  const USER_OUTPUT_REF = `#/$defs/${USER_OUTPUT_DEFINITION}`;
5
17
  var ToolSchemaCompositionError = class extends Error {
@@ -110,4 +122,4 @@ function isJsonObject(value) {
110
122
  //#endregion
111
123
  export { ToolSchemaCompositionError, buildToolCallSchema };
112
124
 
113
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24tc2NoZW1hLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC90b29sLWVtdWxhdGlvbi1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0b29sIGVudmVsb3BlICsg7IKs7Jqp7J6QIG91dHB1dCDsiqTtgqTrp4gg7ZWp7ISxICjsmpTssq0g67Cp7ZalKS4g7J2R64u1IO2VtOyEneydgCB0b29sLWVtdWxhdGlvbi50cy5cbiAqXG4gKiB0b29scyDqsIAg7J6I7Ja064+EIOy1nOyihSBhbnN3ZXIg6rCAIOyCrOyaqeyekCDsiqTtgqTrp4jroZwg6rCV7KCc65CY6rKMIO2VmOugpOqzoCBlbnZlbG9wZSDsnZggYW5zd2VyIOu4jOuenOy5mOyXkFxuICog7IKs7Jqp7J6QIOyKpO2CpOuniOulvCDsi6zripTri6QuIO2GteynuOuhnCDspJHssqntlaAg7IiYIOyXhuuKlCDsnbTsnKDripQgYCRyZWZgIOqwgCDrrLjshJwg7KCI64yAIOqyveuhnOydtOq4sCDrlYzrrLgg4oCUXG4gKiBgI2Ag7J2AIFwi7J20IOyhsOqwgeydmCDro6jtirhcIuqwgCDslYTri4jrnbwgXCLstZzsooUg66y47ISc7J2YIOujqO2KuFwi6528LCDqt7jrjIDroZwg64Sj7Jy866m0IO2PrOyduO2EsOqwgCBlbnZlbG9wZSDsnYRcbiAqIOqwgOumrOy8nCDsobDsmqntnogg7JeJ65qx7ZWcIOqxuCDqsoDspp3tlZjqsowg65Cc64ukLiDqt7jrnpjshJwg7JiI7JW9IOydtOumhCDslYTrnpjroZwg7Jiu6riw6rOgIOuhnOy7rCDtj6zsnbjthLDrpbwg7J6s7J6R7ISx7ZWc64ukLlxuICpcbiAqIOuwsOqyvcK37Iuk7LihwrfsmIjsi5zCt+qxsOu2gCDrqqnroZ3snYAg7Iqk7YKsIOusuOyEnOulvCDrs7wg6rKDOlxuICogICBwYWNrYWdlcy9jbGkvc2tpbGxzL3FncmlkL3JlZmVyZW5jZXMvdG9vbC1jYWxsaW5nLWFuZC1tdWx0aXR1cm4ubWRcbiAqICAg4oaSIFwiQ29tcG9zaW5nIFRvb2xzIFdpdGggQSBVc2VyIE91dHB1dCBTY2hlbWFcIlxuICovXG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQge1xuICBTQ0hFTUFfQVJSQVlfS0VZV09SRFMsXG4gIFNDSEVNQV9ERVBFTkRFTkNJRVNfS0VZV09SRCxcbiAgU0NIRU1BX01BUF9LRVlXT1JEUyxcbiAgU0NIRU1BX1NJTkdMRV9LRVlXT1JEUyxcbiAgVU5TVVBQT1JURURfUkVGRVJFTkNFX0tFWVdPUkRTLFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9qc29uLXNjaGVtYS1rZXl3b3Jkc1wiO1xuaW1wb3J0IHsgdHlwZSBRZ3JpZFRvb2wgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBVU0VSX09VVFBVVF9ERUZJTklUSU9OID0gXCJfX3FncmlkX3VzZXJfb3V0cHV0XCI7XG5jb25zdCBVU0VSX09VVFBVVF9SRUYgPSBgIy8kZGVmcy8ke1VTRVJfT1VUUFVUX0RFRklOSVRJT059YDtcblxuZXhwb3J0IGNsYXNzIFRvb2xTY2hlbWFDb21wb3NpdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHBhdGg6IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoYHRvb2wgc2NoZW1hIGNvbXBvc2l0aW9uOiAke21lc3NhZ2V9IChhdCAke3BhdGh9KWApO1xuICAgIHRoaXMubmFtZSA9IFwiVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3JcIjtcbiAgfVxufVxuXG4vLyBlbnZlbG9wZSDripQgcmVzdWx0IO2VnCDqsrkg7JWE656Y7JeQIGRpc2NyaW1pbmF0ZWQgdW5pb24g7J2EIOuRlOuLpC4g65GQIOuzgO2YleydhCDrrLjrspUg7IiY7KSA7JeQ7IScXG4vLyDsg4HtmLjrsLDtg4DroZwg66eM65Ok7Ja0KGFuc3dlciDrs4DtmJXsnYAgYW5zd2VyIOu5hG51bGwg7ZWE7IiYLCB0b29sX2NhbGwg67OA7ZiV7J2AIHRvb2xDYWxscyAx6rCcIOydtOyDgSlcbi8vIGBhY3Rpb246XCJhbnN3ZXJcIiwgYW5zd2VyOm51bGxgIOqwmeydgCDth7TtmZQg7KGw7ZWp7J2EIOybkOyynCDssKjri6jtlZzri6Qg4oCUIO2Pie2Pie2VnCDsiqTtgqTrp4gg7Iuc7KCIXG4vLyDsnbQg7KGw7ZWp7J20IGNvbnN0cmFpbmVkIGRlY29kaW5nIOydhCDthrXqs7ztlbQgMTMuNWsg6rG07J2YIOyYpOyXvCDsnZHri7XsnYQg66eM65OgIOyLpOyCrOqzoOqwgCDqt7zqsbAuXG4vLyB1bmlvbiDsnYQgcmVzdWx0IHByb3BlcnR5IOyViOyXkCDspJHssqntlZjripQg7J207JygOiBPcGVuQUkgc3RydWN0dXJlZCBvdXRwdXRzIOuKlCDro6jtirjqsIBcbi8vIG9iamVjdCDsl6zslbwg7ZWY6rOgIHRvcC1sZXZlbCBhbnlPZiDrpbwg6rGw67aA7ZWc64ukLiDspJHssqkgYW55T2Yg7JmAIG1pbkl0ZW1zIOuKlCDsp4Dsm5DrkJzri6QuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb29sQ2FsbFNjaGVtYSh0b29sczogUWdyaWRUb29sW10sIGFuc3dlclNjaGVtYT86IEpzb25WYWx1ZSk6IEpzb25WYWx1ZSB7XG4gIGNvbnN0IHRvb2xEZXNjcmlwdGlvbnMgPSB0b29sc1xuICAgIC5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpTT04uc3RyaW5naWZ5KHRvb2wuaW5wdXRTY2hlbWEpO1xuICAgICAgcmV0dXJuIGAtICR7dG9vbC5uYW1lfTogJHt0b29sLmRlc2NyaXB0aW9uID8/IFwiXCJ9XFxuICBpbnB1dFNjaGVtYTogJHtzY2hlbWF9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEgPVxuICAgIGFuc3dlclNjaGVtYSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmViYXNlVXNlck91dHB1dFNjaGVtYShhbnN3ZXJTY2hlbWEpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVXNlIHRoaXMgc2NoZW1hIG9ubHkgdGhyb3VnaCBTdHJ1Y3R1cmVkT3V0cHV0LiBEbyBub3QgaW52b2tlIGxpc3RlZCBjbGllbnQgdG9vbHMgYXMgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2xzLiBUbyByZXF1ZXN0IGNsaWVudC1zaWRlIHRvb2wgZXhlY3V0aW9uLCBzZXQgcmVzdWx0LmFjdGlvbiB0byB0b29sX2NhbGwgYW5kIGluY2x1ZGUgcmVzdWx0LnRvb2xDYWxscy4gVXNlIGFjdGlvbiBhbnN3ZXIgb25seSB3aGVuIG5vIGZ1cnRoZXIgY2xpZW50IHRvb2wgcmVzdWx0IGlzIG5lZWRlZC5cIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmluYWwgYW5zd2VyLiBVc2Ugb25seSB3aGVuIG5vIGZ1cnRoZXIgY2xpZW50IHRvb2wgcmVzdWx0IGlzIG5lZWRlZC5cIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgYWN0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcImFuc3dlclwiXSB9LFxuICAgICAgICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEFuc3dlclNjaGVtYSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICA/IHsgdHlwZTogXCJzdHJpbmdcIiB9XG4gICAgICAgICAgICAgICAgICA6IHsgJHJlZjogVVNFUl9PVVRQVVRfUkVGIH0sXG4gICAgICAgICAgICAgIHRvb2xDYWxsczogeyB0eXBlOiBcIm51bGxcIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJhY3Rpb25cIiwgXCJhbnN3ZXJcIiwgXCJ0b29sQ2FsbHNcIl0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiUmVxdWVzdCBjbGllbnQtc2lkZSB0b29sIGV4ZWN1dGlvbiB0aHJvdWdoIHRoaXMgc3RydWN0dXJlZCBvdXRwdXQuIERvIG5vdCBjYWxsIHRoZXNlIHRvb2xzIGFzIG5hdGl2ZSBDbGF1ZGUgQ29kZSB0b29scy5cIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgYWN0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInRvb2xfY2FsbFwiXSB9LFxuICAgICAgICAgICAgICBhbnN3ZXI6IHsgdHlwZTogXCJudWxsXCIgfSxcbiAgICAgICAgICAgICAgdG9vbENhbGxzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB0b29sTmFtZToge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZW51bTogdG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ2xpZW50LXNpZGUgdG9vbCBuYW1lIHRvIHJlcXVlc3QgdGhyb3VnaCBzdHJ1Y3R1cmVkIG91dHB1dC4gRG8gbm90IGNhbGwgdGhpcyBhcyBhIG5hdGl2ZSBDbGF1ZGUgQ29kZSB0b29sLlxcbiR7dG9vbERlc2NyaXB0aW9uc31gLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUb29sIGFyZ3VtZW50cyBhcyBhIEpTT04gc3RyaW5nIGZvciB0aGUgY2xpZW50LXNpZGUgdG9vbC5cIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogW1widG9vbE5hbWVcIiwgXCJhcmdzXCJdLFxuICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImFjdGlvblwiLCBcImFuc3dlclwiLCBcInRvb2xDYWxsc1wiXSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbXCJyZXN1bHRcIl0sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIC4uLihub3JtYWxpemVkQW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWRcbiAgICAgID8ge31cbiAgICAgIDoge1xuICAgICAgICAgICRkZWZzOiB7XG4gICAgICAgICAgICBbVVNFUl9PVVRQVVRfREVGSU5JVElPTl06IG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYmFzZVVzZXJPdXRwdXRTY2hlbWEoc2NoZW1hOiBKc29uVmFsdWUpOiBKc29uVmFsdWUge1xuICByZXR1cm4gcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBcIiRcIik7XG59XG5cbmNvbnN0IE1BUF9LRVlXT1JEUyA9IG5ldyBTZXQ8c3RyaW5nPihTQ0hFTUFfTUFQX0tFWVdPUkRTKTtcbmNvbnN0IEFSUkFZX0tFWVdPUkRTID0gbmV3IFNldDxzdHJpbmc+KFNDSEVNQV9BUlJBWV9LRVlXT1JEUyk7XG5jb25zdCBTSU5HTEVfS0VZV09SRFMgPSBuZXcgU2V0PHN0cmluZz4oU0NIRU1BX1NJTkdMRV9LRVlXT1JEUyk7XG5cbmZ1bmN0aW9uIHJld3JpdGVTY2hlbWFOb2RlKHZhbHVlOiBKc29uVmFsdWUsIHBhdGg6IHN0cmluZyk6IEpzb25WYWx1ZSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBjb25zdCBzb3VyY2UgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBKc29uVmFsdWU+O1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT4gPSB7IC4uLnNvdXJjZSB9O1xuXG4gIGZvciAoY29uc3QgdW5zdXBwb3J0ZWRLZXl3b3JkIG9mIFVOU1VQUE9SVEVEX1JFRkVSRU5DRV9LRVlXT1JEUykge1xuICAgIGlmIChPYmplY3QuaGFzT3duKHNvdXJjZSwgdW5zdXBwb3J0ZWRLZXl3b3JkKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xTY2hlbWFDb21wb3NpdGlvbkVycm9yKFxuICAgICAgICBgJHt1bnN1cHBvcnRlZEtleXdvcmR9IGlzIG5vdCBzdXBwb3J0ZWRgLFxuICAgICAgICBgJHtwYXRofS4ke3Vuc3VwcG9ydGVkS2V5d29yZH1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoXCIkcmVmXCIgaW4gc291cmNlKSB7XG4gICAgY29uc3QgcmVmID0gc291cmNlLiRyZWY7XG4gICAgaWYgKHR5cGVvZiByZWYgIT09IFwic3RyaW5nXCIgfHwgKHJlZiAhPT0gXCIjXCIgJiYgIXJlZi5zdGFydHNXaXRoKFwiIy9cIikpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IoXG4gICAgICAgIFwib25seSByb290LXJlbGF0aXZlIEpTT04gUG9pbnRlciAkcmVmIHZhbHVlcyBhcmUgc3VwcG9ydGVkXCIsXG4gICAgICAgIGAke3BhdGh9LiRyZWZgLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmVzdWx0LiRyZWYgPSBgJHtVU0VSX09VVFBVVF9SRUZ9JHtyZWYuc2xpY2UoMSl9YDtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleXdvcmQsIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgY29uc3Qga2V5d29yZFBhdGggPSBgJHtwYXRofS4ke2tleXdvcmR9YDtcblxuICAgIGlmIChNQVBfS0VZV09SRFMuaGFzKGtleXdvcmQpICYmIGlzSnNvbk9iamVjdChjaGlsZCkpIHtcbiAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGQpLm1hcCgoW25hbWUsIHNjaGVtYV0pID0+IFtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJld3JpdGVTY2hlbWFOb2RlKHNjaGVtYSwgYCR7a2V5d29yZFBhdGh9LiR7bmFtZX1gKSxcbiAgICAgICAgXSksXG4gICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleXdvcmQgPT09IFNDSEVNQV9ERVBFTkRFTkNJRVNfS0VZV09SRCAmJiBpc0pzb25PYmplY3QoY2hpbGQpKSB7XG4gICAgICByZXN1bHRba2V5d29yZF0gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoaWxkKS5tYXAoKFtuYW1lLCBkZXBlbmRlbmN5XSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KVxuICAgICAgICAgICAgPyBkZXBlbmRlbmN5XG4gICAgICAgICAgICA6IHJld3JpdGVTY2hlbWFOb2RlKGRlcGVuZGVuY3ksIGAke2tleXdvcmRQYXRofS4ke25hbWV9YCksXG4gICAgICAgIF0pLFxuICAgICAgKSBhcyBKc29uVmFsdWU7XG4gICAgfSBlbHNlIGlmIChBUlJBWV9LRVlXT1JEUy5oYXMoa2V5d29yZCkgJiYgQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IGNoaWxkLm1hcCgoc2NoZW1hLCBpbmRleCkgPT5cbiAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH1bJHtpbmRleH1dYCksXG4gICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKFNJTkdMRV9LRVlXT1JEUy5oYXMoa2V5d29yZCkpIHtcbiAgICAgIGlmIChrZXl3b3JkID09PSBcIml0ZW1zXCIgJiYgQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgICAgcmVzdWx0W2tleXdvcmRdID0gY2hpbGQubWFwKChzY2hlbWEsIGluZGV4KSA9PlxuICAgICAgICAgIHJld3JpdGVTY2hlbWFOb2RlKHNjaGVtYSwgYCR7a2V5d29yZFBhdGh9WyR7aW5kZXh9XWApLFxuICAgICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IHJld3JpdGVTY2hlbWFOb2RlKGNoaWxkLCBrZXl3b3JkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBKc29uVmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzSnNvbk9iamVjdCh2YWx1ZTogSnNvblZhbHVlKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQXVCQSxNQUFNLHlCQUF5QjtBQUMvQixNQUFNLGtCQUFrQixXQUFXO0FBRW5DLElBQWEsNkJBQWIsY0FBZ0QsTUFBTTtDQUczQztDQUZULFlBQ0UsU0FDQSxNQUNBO0VBQ0EsTUFBTSw0QkFBNEIsUUFBUSxPQUFPLEtBQUssRUFBRTtFQUZqRCxLQUFBLE9BQUE7RUFHUCxLQUFLLE9BQU87Q0FDZDtBQUNGO0FBUUEsU0FBZ0Isb0JBQW9CLE9BQW9CLGNBQXFDO0NBQzNGLE1BQU0sbUJBQW1CLE1BQ3RCLEtBQUssU0FBUztFQUNiLE1BQU0sU0FBUyxLQUFLLFVBQVUsS0FBSyxXQUFXO0VBQzlDLE9BQU8sS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLGVBQWUsR0FBRyxtQkFBbUI7Q0FDdEUsQ0FBQyxDQUFDLENBQ0QsS0FBSyxJQUFJO0NBRVosTUFBTSx5QkFDSixpQkFBaUIsU0FBWSxTQUFZLHVCQUF1QixZQUFZO0NBRTlFLE9BQU87RUFDTCxNQUFNO0VBQ04sYUFDRTtFQUNGLFlBQVksRUFDVixRQUFRLEVBQ04sT0FBTyxDQUNMO0dBQ0UsTUFBTTtHQUNOLGFBQWE7R0FDYixZQUFZO0lBQ1YsUUFBUTtLQUFFLE1BQU07S0FBVSxNQUFNLENBQUMsUUFBUTtJQUFFO0lBQzNDLFFBQ0UsMkJBQTJCLFNBQ3ZCLEVBQUUsTUFBTSxTQUFTLElBQ2pCLEVBQUUsTUFBTSxnQkFBZ0I7SUFDOUIsV0FBVyxFQUFFLE1BQU0sT0FBTztHQUM1QjtHQUNBLFVBQVU7SUFBQztJQUFVO0lBQVU7R0FBVztHQUMxQyxzQkFBc0I7RUFDeEIsR0FDQTtHQUNFLE1BQU07R0FDTixhQUNFO0dBQ0YsWUFBWTtJQUNWLFFBQVE7S0FBRSxNQUFNO0tBQVUsTUFBTSxDQUFDLFdBQVc7SUFBRTtJQUM5QyxRQUFRLEVBQUUs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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24tc2NoZW1hLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC90b29sLWVtdWxhdGlvbi1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0b29sIGVudmVsb3BlICsg7IKs7Jqp7J6QIG91dHB1dCDsiqTtgqTrp4gg7ZWp7ISxICjsmpTssq0g67Cp7ZalKS4g7J2R64u1IO2VtOyEneydgCB0b29sLWVtdWxhdGlvbi50cy5cbiAqXG4gKiB0b29scyDqsIAg7J6I7Ja064+EIOy1nOyihSBhbnN3ZXIg6rCAIOyCrOyaqeyekCDsiqTtgqTrp4jroZwg6rCV7KCc65CY6rKMIO2VmOugpOqzoCBlbnZlbG9wZSDsnZggYW5zd2VyIOu4jOuenOy5mOyXkFxuICog7IKs7Jqp7J6QIOyKpO2CpOuniOulvCDsi6zripTri6QuIO2GteynuOuhnCDspJHssqntlaAg7IiYIOyXhuuKlCDsnbTsnKDripQgYCRyZWZgIOqwgCDrrLjshJwg7KCI64yAIOqyveuhnOydtOq4sCDrlYzrrLgg4oCUXG4gKiBgI2Ag7J2AIFwi7J20IOyhsOqwgeydmCDro6jtirhcIuqwgCDslYTri4jrnbwgXCLstZzsooUg66y47ISc7J2YIOujqO2KuFwi6528LCDqt7jrjIDroZwg64Sj7Jy866m0IO2PrOyduO2EsOqwgCBlbnZlbG9wZSDsnYRcbiAqIOqwgOumrOy8nCDsobDsmqntnogg7JeJ65qx7ZWcIOqxuCDqsoDspp3tlZjqsowg65Cc64ukLiDqt7jrnpjshJwg7JiI7JW9IOydtOumhCDslYTrnpjroZwg7Jiu6riw6rOgIOuhnOy7rCDtj6zsnbjthLDrpbwg7J6s7J6R7ISx7ZWc64ukLlxuICpcbiAqIOuwsOqyvcK37Iuk7LihwrfsmIjsi5zCt+qxsOu2gCDrqqnroZ3snYAg7Iqk7YKsIOusuOyEnOulvCDrs7wg6rKDOlxuICogICBwYWNrYWdlcy9jbGkvc2tpbGxzL3FncmlkL3JlZmVyZW5jZXMvdG9vbC1jYWxsaW5nLWFuZC1tdWx0aXR1cm4ubWRcbiAqICAg4oaSIFwiQ29tcG9zaW5nIFRvb2xzIFdpdGggQSBVc2VyIE91dHB1dCBTY2hlbWFcIlxuICovXG5cbmltcG9ydCB7XG4gIFNDSEVNQV9BUlJBWV9LRVlXT1JEUyxcbiAgU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JELFxuICBTQ0hFTUFfTUFQX0tFWVdPUkRTLFxuICBTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTLFxuICBVTlNVUFBPUlRFRF9SRUZFUkVOQ0VfS0VZV09SRFMsXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL2pzb24tc2NoZW1hLWtleXdvcmRzXCI7XG5pbXBvcnQgeyB0eXBlIEpzb25WYWx1ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkVG9vbCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IFVTRVJfT1VUUFVUX0RFRklOSVRJT04gPSBcIl9fcWdyaWRfdXNlcl9vdXRwdXRcIjtcbmNvbnN0IFVTRVJfT1VUUFVUX1JFRiA9IGAjLyRkZWZzLyR7VVNFUl9PVVRQVVRfREVGSU5JVElPTn1gO1xuXG5leHBvcnQgY2xhc3MgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihgdG9vbCBzY2hlbWEgY29tcG9zaXRpb246ICR7bWVzc2FnZX0gKGF0ICR7cGF0aH0pYCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvclwiO1xuICB9XG59XG5cbi8vIGVudmVsb3BlIOuKlCByZXN1bHQg7ZWcIOqyuSDslYTrnpjsl5AgZGlzY3JpbWluYXRlZCB1bmlvbiDsnYQg65GU64ukLiDrkZAg67OA7ZiV7J2EIOusuOuylSDsiJjspIDsl5DshJxcbi8vIOyDge2YuOuwsO2DgOuhnCDrp4zrk6TslrQoYW5zd2VyIOuzgO2YleydgCBhbnN3ZXIg67mEbnVsbCDtlYTsiJgsIHRvb2xfY2FsbCDrs4DtmJXsnYAgdG9vbENhbGxzIDHqsJwg7J207IOBKVxuLy8gYGFjdGlvbjpcImFuc3dlclwiLCBhbnN3ZXI6bnVsbGAg6rCZ7J2AIO2HtO2ZlCDsobDtlansnYQg7JuQ7LKcIOywqOuLqO2VnOuLpCDigJQg7Y+J7Y+J7ZWcIOyKpO2CpOuniCDsi5zsoIhcbi8vIOydtCDsobDtlansnbQgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J2EIO2GteqzvO2VtCAxMy41ayDqsbTsnZgg7Jik7Je8IOydkeuLteydhCDrp4zrk6Ag7Iuk7IKs6rOg6rCAIOq3vOqxsC5cbi8vIHVuaW9uIOydhCByZXN1bHQgcHJvcGVydHkg7JWI7JeQIOykkeyyqe2VmOuKlCDsnbTsnKA6IE9wZW5BSSBzdHJ1Y3R1cmVkIG91dHB1dHMg64qUIOujqO2KuOqwgFxuLy8gb2JqZWN0IOyXrOyVvCDtlZjqs6AgdG9wLWxldmVsIGFueU9mIOulvCDqsbDrtoDtlZzri6QuIOykkeyyqSBhbnlPZiDsmYAgbWluSXRlbXMg64qUIOyngOybkOuQnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSwgYW5zd2VyU2NoZW1hPzogSnNvblZhbHVlKTogSnNvblZhbHVlIHtcbiAgY29uc3QgdG9vbERlc2NyaXB0aW9ucyA9IHRvb2xzXG4gICAgLm1hcCgodG9vbCkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5zdHJpbmdpZnkodG9vbC5pbnB1dFNjaGVtYSk7XG4gICAgICByZXR1cm4gYC0gJHt0b29sLm5hbWV9OiAke3Rvb2wuZGVzY3JpcHRpb24gPz8gXCJcIn1cXG4gIGlucHV0U2NoZW1hOiAke3NjaGVtYX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3Qgbm9ybWFsaXplZEFuc3dlclNjaGVtYSA9XG4gICAgYW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWJhc2VVc2VyT3V0cHV0U2NoZW1hKGFuc3dlclNjaGVtYSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJVc2UgdGhpcyBzY2hlbWEgb25seSB0aHJvdWdoIFN0cnVjdHVyZWRPdXRwdXQuIERvIG5vdCBpbnZva2UgbGlzdGVkIGNsaWVudCB0b29scyBhcyBuYXRpdmUgQ2xhdWRlIENvZGUgdG9vbHMuIFRvIHJlcXVlc3QgY2xpZW50LXNpZGUgdG9vbCBleGVjdXRpb24sIHNldCByZXN1bHQuYWN0aW9uIHRvIHRvb2xfY2FsbCBhbmQgaW5jbHVkZSByZXN1bHQudG9vbENhbGxzLiBVc2UgYWN0aW9uIGFuc3dlciBvbmx5IHdoZW4gbm8gZnVydGhlciBjbGllbnQgdG9vbCByZXN1bHQgaXMgbmVlZGVkLlwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBhbnlPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaW5hbCBhbnN3ZXIuIFVzZSBvbmx5IHdoZW4gbm8gZnVydGhlciBjbGllbnQgdG9vbCByZXN1bHQgaXMgbmVlZGVkLlwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBhY3Rpb246IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wiYW5zd2VyXCJdIH0sXG4gICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkQW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8geyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgICAgICAgIDogeyAkcmVmOiBVU0VSX09VVFBVVF9SRUYgfSxcbiAgICAgICAgICAgICAgdG9vbENhbGxzOiB7IHR5cGU6IFwibnVsbFwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImFjdGlvblwiLCBcImFuc3dlclwiLCBcInRvb2xDYWxsc1wiXSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJSZXF1ZXN0IGNsaWVudC1zaWRlIHRvb2wgZXhlY3V0aW9uIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmVkIG91dHB1dC4gRG8gbm90IGNhbGwgdGhlc2UgdG9vbHMgYXMgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2xzLlwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBhY3Rpb246IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1widG9vbF9jYWxsXCJdIH0sXG4gICAgICAgICAgICAgIGFuc3dlcjogeyB0eXBlOiBcIm51bGxcIiB9LFxuICAgICAgICAgICAgICB0b29sQ2FsbHM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBlbnVtOiB0b29scy5tYXAoKHRvb2wpID0+IHRvb2wubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQtc2lkZSB0b29sIG5hbWUgdG8gcmVxdWVzdCB0aHJvdWdoIHN0cnVjdHVyZWQgb3V0cHV0LiBEbyBub3QgY2FsbCB0aGlzIGFzIGEgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2wuXFxuJHt0b29sRGVzY3JpcHRpb25zfWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRvb2wgYXJndW1lbnRzIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHRoZSBjbGllbnQtc2lkZSB0b29sLlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJ0b29sTmFtZVwiLCBcImFyZ3NcIl0sXG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFtcInJlc3VsdFwiXSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgLi4uKG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEgPT09IHVuZGVmaW5lZFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgJGRlZnM6IHtcbiAgICAgICAgICAgIFtVU0VSX09VVFBVVF9ERUZJTklUSU9OXTogbm9ybWFsaXplZEFuc3dlclNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmViYXNlVXNlck91dHB1dFNjaGVtYShzY2hlbWE6IEpzb25WYWx1ZSk6IEpzb25WYWx1ZSB7XG4gIHJldHVybiByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIFwiJFwiKTtcbn1cblxuY29uc3QgTUFQX0tFWVdPUkRTID0gbmV3IFNldDxzdHJpbmc+KFNDSEVNQV9NQVBfS0VZV09SRFMpO1xuY29uc3QgQVJSQVlfS0VZV09SRFMgPSBuZXcgU2V0PHN0cmluZz4oU0NIRU1BX0FSUkFZX0tFWVdPUkRTKTtcbmNvbnN0IFNJTkdMRV9LRVlXT1JEUyA9IG5ldyBTZXQ8c3RyaW5nPihTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTKTtcblxuZnVuY3Rpb24gcmV3cml0ZVNjaGVtYU5vZGUodmFsdWU6IEpzb25WYWx1ZSwgcGF0aDogc3RyaW5nKTogSnNvblZhbHVlIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gIGNvbnN0IHNvdXJjZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT47XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPiA9IHsgLi4uc291cmNlIH07XG5cbiAgZm9yIChjb25zdCB1bnN1cHBvcnRlZEtleXdvcmQgb2YgVU5TVVBQT1JURURfUkVGRVJFTkNFX0tFWVdPUkRTKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd24oc291cmNlLCB1bnN1cHBvcnRlZEtleXdvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IoXG4gICAgICAgIGAke3Vuc3VwcG9ydGVkS2V5d29yZH0gaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgIGAke3BhdGh9LiR7dW5zdXBwb3J0ZWRLZXl3b3JkfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcIiRyZWZcIiBpbiBzb3VyY2UpIHtcbiAgICBjb25zdCByZWYgPSBzb3VyY2UuJHJlZjtcbiAgICBpZiAodHlwZW9mIHJlZiAhPT0gXCJzdHJpbmdcIiB8fCAocmVmICE9PSBcIiNcIiAmJiAhcmVmLnN0YXJ0c1dpdGgoXCIjL1wiKSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvcihcbiAgICAgICAgXCJvbmx5IHJvb3QtcmVsYXRpdmUgSlNPTiBQb2ludGVyICRyZWYgdmFsdWVzIGFyZSBzdXBwb3J0ZWRcIixcbiAgICAgICAgYCR7cGF0aH0uJHJlZmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHQuJHJlZiA9IGAke1VTRVJfT1VUUFVUX1JFRn0ke3JlZi5zbGljZSgxKX1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5d29yZCwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBrZXl3b3JkUGF0aCA9IGAke3BhdGh9LiR7a2V5d29yZH1gO1xuXG4gICAgaWYgKE1BUF9LRVlXT1JEUy5oYXMoa2V5d29yZCkgJiYgaXNKc29uT2JqZWN0KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhjaGlsZCkubWFwKChbbmFtZSwgc2NoZW1hXSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH0uJHtuYW1lfWApLFxuICAgICAgICBdKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JEICYmIGlzSnNvbk9iamVjdChjaGlsZCkpIHtcbiAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGQpLm1hcCgoW25hbWUsIGRlcGVuZGVuY3ldKSA9PiBbXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpXG4gICAgICAgICAgICA/IGRlcGVuZGVuY3lcbiAgICAgICAgICAgIDogcmV3cml0ZVNjaGVtYU5vZGUoZGVwZW5kZW5jeSwgYCR7a2V5d29yZFBhdGh9LiR7bmFtZX1gKSxcbiAgICAgICAgXSksXG4gICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFSUkFZX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gY2hpbGQubWFwKChzY2hlbWEsIGluZGV4KSA9PlxuICAgICAgICByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIGAke2tleXdvcmRQYXRofVske2luZGV4fV1gKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoU0lOR0xFX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSkge1xuICAgICAgaWYgKGtleXdvcmQgPT09IFwiaXRlbXNcIiAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICByZXN1bHRba2V5d29yZF0gPSBjaGlsZC5tYXAoKHNjaGVtYSwgaW5kZXgpID0+XG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH1bJHtpbmRleH1dYCksXG4gICAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleXdvcmRdID0gcmV3cml0ZVNjaGVtYU5vZGUoY2hpbGQsIGtleXdvcmRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIEpzb25WYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiBKc29uVmFsdWUpOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBKc29uVmFsdWU+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sa0JBQWtCLFdBQVc7QUFFbkMsSUFBYSw2QkFBYixjQUFnRCxNQUFNO0NBRzNDO0NBRlQsWUFDRSxTQUNBLE1BQ0E7RUFDQSxNQUFNLDRCQUE0QixRQUFRLE9BQU8sS0FBSyxFQUFFO0VBRmpELEtBQUEsT0FBQTtFQUdQLEtBQUssT0FBTztDQUNkO0FBQ0Y7QUFRQSxTQUFnQixvQkFBb0IsT0FBb0IsY0FBcUM7Q0FDM0YsTUFBTSxtQkFBbUIsTUFDdEIsS0FBSyxTQUFTO0VBQ2IsTUFBTSxTQUFTLEtBQUssVUFBVSxLQUFLLFdBQVc7RUFDOUMsT0FBTyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssZUFBZSxHQUFHLG1CQUFtQjtDQUN0RSxDQUFDLENBQUMsQ0FDRCxLQUFLLElBQUk7Q0FFWixNQUFNLHlCQUNKLGlCQUFpQixTQUFZLFNBQVksdUJBQXVCLFlBQVk7Q0FFOUUsT0FBTztFQUNMLE1BQU07RUFDTixhQUNFO0VBQ0YsWUFBWSxFQUNWLFFBQVEsRUFDTixPQUFPLENBQ0w7R0FDRSxNQUFNO0dBQ04sYUFBYTtHQUNiLFlBQVk7SUFDVixRQUFRO0tBQUUsTUFBTTtLQUFVLE1BQU0sQ0FBQyxRQUFRO0lBQUU7SUFDM0MsUUFDRSwyQkFBMkIsU0FDdkIsRUFBRSxNQUFNLFNBQVMsSUFDakIsRUFBRSxNQUFNLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsTUFBTSxPQUFPO0dBQzVCO0dBQ0EsVUFBVTtJQUFDO0lBQVU7SUFBVTtHQUFXO0dBQzFDLHNCQUFzQjtFQUN4QixHQUNBO0dBQ0UsTUFBTTtHQUNOLGFBQ0U7R0FDRixZQUFZO0lBQ1YsUUFBUTtLQUFFLE1BQU07S0FBVSxNQUFNLENBQUMsV0FBVztJQUFFO0lB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
@@ -1,6 +1,6 @@
1
- import { getLogger } from "@logtape/logtape";
2
1
  import { Buffer } from "node:buffer";
3
2
  import { z } from "zod";
3
+ import { getLogger } from "@logtape/logtape";
4
4
  //#region src/application/qgrid/tool-emulation.ts
5
5
  const STRUCTURED_ENVELOPE_LIMITS = {
6
6
  maxUtf8Bytes: 512 * 1024,
@@ -44,8 +44,9 @@ function parseEnvelope(text, tools, answerKind) {
44
44
  try {
45
45
  value = JSON.parse(text);
46
46
  } catch (error) {
47
- logger.warn(`tool envelope parse failed: ${error.message}`);
48
- throw new ToolCallEmulationError(`invalid tool envelope: ${error.message}`);
47
+ const head = JSON.stringify(text.slice(0, 200));
48
+ logger.warn(`tool envelope parse failed: ${error.message}; head=${head}`);
49
+ throw new ToolCallEmulationError(`invalid tool envelope (response is not JSON — the model ignored the envelope contract; retry is the caller's decision): ${error.message}; response head: ${head}`);
49
50
  }
50
51
  assertStructuredEnvelopeComplexity(value);
51
52
  const validation = (answerKind === "text" ? TEXT_ENVELOPE : JSON_ENVELOPE).safeParse(value);
@@ -53,8 +54,9 @@ function parseEnvelope(text, tools, answerKind) {
53
54
  const issue = validation.error.issues[0];
54
55
  const path = issue && issue.path.length > 0 ? ` at ${issue.path.join(".")}` : "";
55
56
  const detail = issue?.message ?? "unknown validation issue";
56
- logger.warn(`tool envelope validation failed${path}: ${detail}`);
57
- throw new ToolCallEmulationError(`invalid tool envelope${path}: ${detail}`);
57
+ const head = JSON.stringify(text.slice(0, 200));
58
+ logger.warn(`tool envelope validation failed${path}: ${detail}; head=${head}`);
59
+ throw new ToolCallEmulationError(`invalid tool envelope${path}: ${detail}; response head: ${head}`);
58
60
  }
59
61
  const response = value.result;
60
62
  if (response.action === "tool_call") {
@@ -123,4 +125,4 @@ function assertStructuredEnvelopeComplexity(root) {
123
125
  //#endregion
124
126
  export { ToolCallEmulationError, applyToolCallEmulation };
125
127
 
126
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLy8g7J2R64u1KOuqqOuNuCDstpzroKUpIGVudmVsb3BlIOydmCDsnpDsm5Ag7ZWc64+ELiBjYWxsZXIg7Iqk7YKk66eIIOyghOyymOumrCDtlZzrj4QoQ0FMTEVSX1NDSEVNQV9MSU1JVFMp7JmAIOqwkuydtFxuLy8g6rCZ7JWEIOuztOyXrOuPhCDshJzroZwg64uk66W4IOyekOybkOydhCDsp4DtgqTripQg64+F66a9IOyDgeyImOuLpCDigJQg7Iqk7YKk66eIIOq5iuydtOuKlCDsnbjsiqTthLTsiqQg6rmK7J2066W8IGJvdW5kIO2VmOyngFxuLy8g7JWK7Jy866+A66GcKOyerOq3gCAkcmVmIO2XiOyaqSkg7LqY65+sIO2VnOuPhOulvCDsobDsoJXtlbTrj4Qg7J2R64u1IOyImOyaqSDquLDspIDsnbQg65Sw6528IOybgOyngeyXrOyEoCDslYgg65Cc64ukLlxuY29uc3QgU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMgPSB7XG4gIG1heFV0ZjhCeXRlczogNTEyICogMTAyNCxcbiAgbWF4Tm9kZXM6IDIwXzAwMCxcbiAgbWF4RGVwdGg6IDEzMixcbn0gYXMgY29uc3Q7XG5pbXBvcnQge1xuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIEVtdWxhdGlvblJlc3VsdCA9IE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIiB8IFwicnVuQ29udGV4dFwiPjtcbnR5cGUgVG9vbENhbGwgPSB7IHRvb2xOYW1lOiBzdHJpbmc7IGFyZ3M6IHN0cmluZyB9O1xuXG4vLyBlbnZlbG9wZSDripQge3Jlc3VsdDogPHVuaW9uPn0g7ZWcIOqyuSDqtazsobAg4oCUIOyKpO2CpOuniCDqt7zqsbDripQgdG9vbC1lbXVsYXRpb24tc2NoZW1hLnRzIOywuOyhsC5cbi8vIGFuc3dlciDtg4DsnoXrp4wg7JqU7LKtIO2Yle2DnOyXkCDrlLDrnbwg64uk66W064ukOiB0b29scy1vbmx5IOuKlCBzdHJpbmco6re464yA66GcIOuwmO2ZmCksXG4vLyB0b29scytqc29uU2NoZW1hIOuKlCDsgqzsmqnsnpAg7Iqk7YKk66eI7J2YIEpTT04g6rCSKEpTT04uc3RyaW5naWZ5IOuhnCDrsJjtmZgpLlxuZnVuY3Rpb24gYnVpbGRFbnZlbG9wZVNjaGVtYShhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIHJldHVybiB6LnN0cmljdE9iamVjdCh7XG4gICAgcmVzdWx0OiB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcImFjdGlvblwiLCBbXG4gICAgICB6LnN0cmljdE9iamVjdCh7XG4gICAgICAgIGFjdGlvbjogei5saXRlcmFsKFwiYW5zd2VyXCIpLFxuICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgID8gei5zdHJpbmcoKVxuICAgICAgICAgICAgOiB6Lmpzb24oKS5yZWZpbmUoKGFuc3dlcikgPT4gYW5zd2VyICE9PSBudWxsLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJhbnN3ZXIgbXVzdCBiZSBub24tbnVsbFwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgdG9vbENhbGxzOiB6Lm51bGwoKSxcbiAgICAgIH0pLFxuICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICBhY3Rpb246IHoubGl0ZXJhbChcInRvb2xfY2FsbFwiKSxcbiAgICAgICAgYW5zd2VyOiB6Lm51bGwoKSxcbiAgICAgICAgdG9vbENhbGxzOiB6XG4gICAgICAgICAgLmFycmF5KFxuICAgICAgICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICAgICAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgICAgYXJnczogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWluKDEpLFxuICAgICAgfSksXG4gICAgXSksXG4gIH0pO1xufVxuXG5jb25zdCBURVhUX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcInRleHRcIik7XG5jb25zdCBKU09OX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcImpzb25cIik7XG50eXBlIEVudmVsb3BlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBKU09OX0VOVkVMT1BFPltcInJlc3VsdFwiXTtcblxuZXhwb3J0IGNsYXNzIFRvb2xDYWxsRW11bGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGB0b29sLWNhbGwgZW11bGF0aW9uOiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sQ2FsbEVtdWxhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLy8gZGlzcGF0Y2hlciDqsIAg64SY6riw64qUIOydtOuvuOyngCDqsrDqs7wuIHFncmlkIOuKlCBiYXNlNjQgcGF5bG9hZCDrp4wg7KCE64us7ZWY6rOgIO2PrOunt+ydgCDrs7TsnqXtlZjsp4Ag7JWK64qU64ukLlxuaW50ZXJmYWNlIEVtdWxhdGlvbkltYWdlIHtcbiAgZGF0YTogc3RyaW5nO1xuICByZXZpc2VkUHJvbXB0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gYW5zd2VyIOyduOy9lOuUqSDsooXrpZguIGVudmVsb3BlIOuUlOy9lOuNlOuKlCDtlZwg67KM7J206rOgIOydtCDqsJLsnYAgYW5zd2VyIOu4jOuenOy5mOydmCDtg4DsnoXqs7xcbi8vIOy1nOyihSDsp4HroKztmZQodGV4dDog6re464yA66GcIC8ganNvbjogSlNPTi5zdHJpbmdpZnkp66eMIOqwgOuluOuLpC5cbmV4cG9ydCB0eXBlIEFuc3dlcktpbmQgPSBcInRleHRcIiB8IFwianNvblwiO1xuXG5pbnRlcmZhY2UgVG9vbENhbGxFbXVsYXRpb25PcHRpb25zIHtcbiAgdGhyZWFkQ29vcmQ/OiBRZ3JpZFRocmVhZENvb3JkO1xuICBpbWFnZXM/OiBFbXVsYXRpb25JbWFnZVtdO1xuICAvLyDtlYTsiJg6IO2YuOy2nOu2gOqwgCBhbnN3ZXIg7J247L2U65Sp7J2EIO2VreyDgSDrqoXsi5ztlbTslbwg7ZWc64ukIChpbnB1dC5qc29uU2NoZW1hIOycoOustOuhnCDtjJDsoJUpLlxuICBhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbihcbiAgcmVzdWx0OiBFbXVsYXRpb25SZXN1bHQsXG4gIHRvb2xzOiBRZ3JpZFRvb2xbXSB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogVG9vbENhbGxFbXVsYXRpb25PcHRpb25zLFxuKTogUXVlcnlPdXRwdXQge1xuICBjb25zdCB7IHRocmVhZENvb3JkLCBpbWFnZXMsIGFuc3dlcktpbmQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJ1bkNvbnRleHQgPSB0aHJlYWRDb29yZCA/IHsgdGhyZWFkQ29vcmQgfSA6IHVuZGVmaW5lZDtcblxuICBpZiAoIXRvb2xzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYW5zd2VyT3V0cHV0KHJlc3VsdCwgcmVzdWx0LnRleHQsIGltYWdlcywgcnVuQ29udGV4dCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUVudmVsb3BlKHJlc3VsdC50ZXh0LCB0b29scywgYW5zd2VyS2luZCk7XG4gIGlmIChwYXJzZWQuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgcmV0dXJuIHRvb2xDYWxsT3V0cHV0KHJlc3VsdCwgcGFyc2VkLnRvb2xDYWxscywgaW1hZ2VzLCBydW5Db250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhbnN3ZXJPdXRwdXQoXG4gICAgcmVzdWx0LFxuICAgIGFuc3dlcktpbmQgPT09IFwidGV4dFwiID8gKHBhcnNlZC5hbnN3ZXIgYXMgc3RyaW5nKSA6IEpTT04uc3RyaW5naWZ5KHBhcnNlZC5hbnN3ZXIpLFxuICAgIGltYWdlcyxcbiAgICBydW5Db250ZXh0LFxuICApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUVudmVsb3BlKHRleHQ6IHN0cmluZywgdG9vbHM6IFFncmlkVG9vbFtdLCBhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aCh0ZXh0LCBcInV0ZjhcIikgPiBTVFJVQ1RVUkVEX0VOVkVMT1BFX0xJTUlUUy5tYXhVdGY4Qnl0ZXMpIHtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGB0b29sIGVudmVsb3BlIGV4Y2VlZHMgVVRGLTggYnl0ZSBsaW1pdCBvZiAke1NUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heFV0ZjhCeXRlc31gLFxuICAgICk7XG4gIH1cblxuICBsZXQgdmFsdWU6IHVua25vd247XG4gIHRyeSB7XG4gICAgdmFsdWUgPSBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIOq0gOyaqSDtj7TrsLEg7JeG7J2MOiBlbnZlbG9wZSDripQg7JaRIHByb3ZpZGVyIOydmCBzdHJ1Y3R1cmVkIG91dHB1dCDsnLzroZwg6rCV7KCc65CY64qUIOuCtOu2gFxuICAgIC8vIOqzhOyVveydtOudvCDsl6zquLAg64+E64us7ZWcIOu5hCBKU09OIOydgCDrsoTqt7jri6QuIOqzvOqxsOydmCDthY3siqTtirgg6rWs7KCc64qUIO2HtO2ZlCDrtIntiKzrpbwg64u167OA7Jy866GcXG4gICAgLy8g7Z2Y66Ck67O064K0IOyhsOyaqe2VnCDsmKTsl7zsnYQg66eM65Ok7JeI64ukKDIwMjYtMDcgbWVkcGF0aCwgMTMuNWsg6rG0KS5cbiAgICBsb2dnZXIud2FybihgdG9vbCBlbnZlbG9wZSBwYXJzZSBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKGBpbnZhbGlkIHRvb2wgZW52ZWxvcGU6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG5cbiAgYXNzZXJ0U3RydWN0dXJlZEVudmVsb3BlQ29tcGxleGl0eSh2YWx1ZSk7XG4gIGNvbnN0IHNjaGVtYSA9IGFuc3dlcktpbmQgPT09IFwidGV4dFwiID8gVEVYVF9FTlZFTE9QRSA6IEpTT05fRU5WRUxPUEU7XG4gIGNvbnN0IHZhbGlkYXRpb24gPSBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKTtcbiAgaWYgKCF2YWxpZGF0aW9uLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBpc3N1ZSA9IHZhbGlkYXRpb24uZXJyb3IuaXNzdWVzWzBdO1xuICAgIGNvbnN0IHBhdGggPSBpc3N1ZSAmJiBpc3N1ZS5wYXRoLmxlbmd0aCA+IDAgPyBgIGF0ICR7aXNzdWUucGF0aC5qb2luKFwiLlwiKX1gIDogXCJcIjtcbiAgICBjb25zdCBkZXRhaWwgPSBpc3N1ZT8ubWVzc2FnZSA/PyBcInVua25vd24gdmFsaWRhdGlvbiBpc3N1ZVwiO1xuICAgIGxvZ2dlci53YXJuKGB0b29sIGVudmVsb3BlIHZhbGlkYXRpb24gZmFpbGVkJHtwYXRofTogJHtkZXRhaWx9YCk7XG4gICAgdGhyb3cgbmV3IFRvb2xDYWxsRW11bGF0aW9uRXJyb3IoYGludmFsaWQgdG9vbCBlbnZlbG9wZSR7cGF0aH06ICR7ZGV0YWlsfWApO1xuICB9XG5cbiAgLy8gWm9kIGNsb25lcyBKU09OIG9iamVjdHMgYW5kIGRyb3BzIG93biBcIl9fcHJvdG9fX1wiIGtleXMuIFRoZSBwYXJzZWQgSlNPTiBpcyBzYWZlIHRvIHJldHVyblxuICAvLyBhZnRlciB2YWxpZGF0aW9uIGFuZCBwcmVzZXJ2ZXMgdGhlIGNhbGxlcidzIGV4YWN0IHN0cnVjdHVyZWQgdmFsdWUuXG4gIGNvbnN0IHJlc3BvbnNlID0gKHZhbHVlIGFzIHsgcmVzdWx0OiBFbnZlbG9wZVJlc3BvbnNlIH0pLnJlc3VsdDtcbiAgaWYgKHJlc3BvbnNlLmFjdGlvbiA9PT0gXCJ0b29sX2NhbGxcIikge1xuICAgIGNvbnN0IHVua25vd25Ub29sID0gZmluZFVua25vd25Ub29sKHJlc3BvbnNlLnRvb2xDYWxscywgdG9vbHMpO1xuICAgIGlmICh1bmtub3duVG9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihgdW5rbm93biBlbXVsYXRlZCB0b29sOiAke3Vua25vd25Ub29sfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIHRvb2xDYWxsT3V0cHV0KFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdG9vbENhbGxzOiBUb29sQ2FsbFtdLFxuICBpbWFnZXM6IEVtdWxhdGlvbkltYWdlW10gfCB1bmRlZmluZWQsXG4gIHJ1bkNvbnRleHQ6IFF1ZXJ5T3V0cHV0W1wicnVuQ29udGV4dFwiXSxcbik6IFF1ZXJ5T3V0cHV0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHQsXG4gICAgY29udGVudDogYXBwZW5kSW1hZ2VzKFxuICAgICAgdG9vbENhbGxzLm1hcCgodG9vbENhbGwpID0+ICh7XG4gICAgICAgIHR5cGU6IFwidG9vbC1jYWxsXCIsXG4gICAgICAgIHRvb2xDYWxsSWQ6IGBjYWxsXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWAsXG4gICAgICAgIHRvb2xOYW1lOiB0b29sQ2FsbC50b29sTmFtZSxcbiAgICAgICAgaW5wdXQ6IHRvb2xDYWxsLmFyZ3MsXG4gICAgICB9KSksXG4gICAgICBpbWFnZXMsXG4gICAgKSxcbiAgICBmaW5pc2hSZWFzb246IFwidG9vbC1jYWxsc1wiLFxuICAgIHJ1bkNvbnRleHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFuc3dlck91dHB1dChcbiAgcmVzdWx0OiBFbXVsYXRpb25SZXN1bHQsXG4gIHRleHQ6IHN0cmluZyxcbiAgaW1hZ2VzOiBFbXVsYXRpb25JbWFnZVtdIHwgdW5kZWZpbmVkLFxuICBydW5Db250ZXh0OiBRdWVyeU91dHB1dFtcInJ1bkNvbnRleHRcIl0sXG4pOiBRdWVyeU91dHB1dCB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzdWx0LFxuICAgIHRleHQsXG4gICAgY29udGVudDogYXBwZW5kSW1hZ2VzKFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0IH1dLCBpbWFnZXMpLFxuICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZFVua25vd25Ub29sKHRvb2xDYWxsczogVG9vbENhbGxbXSwgdG9vbHM6IFFncmlkVG9vbFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga25vd25Ub29sTmFtZXMgPSBuZXcgU2V0KHRvb2xzLm1hcCgodG9vbCkgPT4gdG9vbC5uYW1lKSk7XG4gIHJldHVybiB0b29sQ2FsbHMuZmluZCgodG9vbENhbGwpID0+ICFrbm93blRvb2xOYW1lcy5oYXModG9vbENhbGwudG9vbE5hbWUpKT8udG9vbE5hbWU7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZEltYWdlcyhjb250ZW50OiBRZ3JpZENvbnRlbnRbXSwgaW1hZ2VzPzogRW11bGF0aW9uSW1hZ2VbXSk6IFFncmlkQ29udGVudFtdIHtcbiAgaWYgKCFpbWFnZXM/Lmxlbmd0aCkgcmV0dXJuIGNvbnRlbnQ7XG4gIHJldHVybiBbXG4gICAgLi4uY29udGVudCxcbiAgICAuLi5pbWFnZXMubWFwKFxuICAgICAgKGltYWdlKTogUWdyaWRDb250ZW50ID0+ICh7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgZGF0YTogaW1hZ2UuZGF0YSxcbiAgICAgICAgcmV2aXNlZFByb21wdDogaW1hZ2UucmV2aXNlZFByb21wdCA/PyBudWxsLFxuICAgICAgfSksXG4gICAgKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RydWN0dXJlZEVudmVsb3BlQ29tcGxleGl0eShyb290OiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IG1heERlcHRoID0gU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4RGVwdGg7XG4gIGNvbnN0IHN0YWNrID0gW3sgdmFsdWU6IHJvb3QsIGRlcHRoOiAwIH1dO1xuICBsZXQgbm9kZXMgPSAwO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YWNrLnBvcCgpITtcbiAgICBub2RlcyArPSAxO1xuICAgIGlmIChub2RlcyA+IFNUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heE5vZGVzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgICAgYHN0cnVjdHVyZWQtb3V0cHV0IGVudmVsb3BlIGV4Y2VlZHMgbm9kZSBsaW1pdCBvZiAke1NUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heE5vZGVzfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudC5kZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgICAgYHN0cnVjdHVyZWQtb3V0cHV0IGVudmVsb3BlIGV4Y2VlZHMgZGVwdGggbGltaXQgb2YgJHttYXhEZXB0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50LnZhbHVlID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNGaW5pdGUoY3VycmVudC52YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFwiYW5zd2VyIG11c3QgYmUgdmFsaWQgSlNPTlwiKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQudmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGN1cnJlbnQudmFsdWUgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGN1cnJlbnQudmFsdWUpKSB7XG4gICAgICBzdGFjay5wdXNoKHsgdmFsdWUsIGRlcHRoOiBjdXJyZW50LmRlcHRoICsgMSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQVFBLE1BQU0sNkJBQTZCO0NBQ2pDLGNBQWMsTUFBTTtDQUNwQixVQUFVO0NBQ1YsVUFBVTtBQUNaO0FBUUEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGdCQUFnQixDQUFDO0FBUXBELFNBQVMsb0JBQW9CLFlBQXdCO0NBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQ3BCLFFBQVEsRUFBRSxtQkFBbUIsVUFBVSxDQUNyQyxFQUFFLGFBQWE7RUFDYixRQUFRLEVBQUUsUUFBUSxRQUFRO0VBQzFCLFFBQ0UsZUFBZSxTQUNYLEVBQUUsT0FBTyxJQUNULEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxXQUFXLFdBQVcsTUFBTSxFQUMzQyxTQUFTLDBCQUNYLENBQUM7RUFDUCxXQUFXLEVBQUUsS0FBSztDQUNwQixDQUFDLEdBQ0QsRUFBRSxhQUFhO0VBQ2IsUUFBUSxFQUFFLFFBQVEsV0FBVztFQUM3QixRQUFRLEVBQUUsS0FBSztFQUNmLFdBQVcsRUFDUixNQUNDLEVBQUUsYUFBYTtHQUNiLFVBQVUsRUFBRSxPQUFPO0dBQ25CLE1BQU0sRUFBRSxPQUFPO0VBQ2pCLENBQUMsQ0FDSCxDQUFDLENBQ0EsSUFBSSxDQUFDO0NBQ1YsQ0FBQyxDQUNILENBQUMsRUFDSCxDQUFDO0FBQ0g7QUFFQSxNQUFNLGdCQUFnQixvQkFBb0IsTUFB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
128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLy8g7J2R64u1KOuqqOuNuCDstpzroKUpIGVudmVsb3BlIOydmCDsnpDsm5Ag7ZWc64+ELiBjYWxsZXIg7Iqk7YKk66eIIOyghOyymOumrCDtlZzrj4QoQ0FMTEVSX1NDSEVNQV9MSU1JVFMp7JmAIOqwkuydtFxuLy8g6rCZ7JWEIOuztOyXrOuPhCDshJzroZwg64uk66W4IOyekOybkOydhCDsp4DtgqTripQg64+F66a9IOyDgeyImOuLpCDigJQg7Iqk7YKk66eIIOq5iuydtOuKlCDsnbjsiqTthLTsiqQg6rmK7J2066W8IGJvdW5kIO2VmOyngFxuLy8g7JWK7Jy866+A66GcKOyerOq3gCAkcmVmIO2XiOyaqSkg7LqY65+sIO2VnOuPhOulvCDsobDsoJXtlbTrj4Qg7J2R64u1IOyImOyaqSDquLDspIDsnbQg65Sw6528IOybgOyngeyXrOyEoCDslYgg65Cc64ukLlxuY29uc3QgU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMgPSB7XG4gIG1heFV0ZjhCeXRlczogNTEyICogMTAyNCxcbiAgbWF4Tm9kZXM6IDIwXzAwMCxcbiAgbWF4RGVwdGg6IDEzMixcbn0gYXMgY29uc3Q7XG5pbXBvcnQge1xuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIEVtdWxhdGlvblJlc3VsdCA9IE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIiB8IFwicnVuQ29udGV4dFwiPjtcbnR5cGUgVG9vbENhbGwgPSB7IHRvb2xOYW1lOiBzdHJpbmc7IGFyZ3M6IHN0cmluZyB9O1xuXG4vLyBlbnZlbG9wZSDripQge3Jlc3VsdDogPHVuaW9uPn0g7ZWcIOqyuSDqtazsobAg4oCUIOyKpO2CpOuniCDqt7zqsbDripQgdG9vbC1lbXVsYXRpb24tc2NoZW1hLnRzIOywuOyhsC5cbi8vIGFuc3dlciDtg4DsnoXrp4wg7JqU7LKtIO2Yle2DnOyXkCDrlLDrnbwg64uk66W064ukOiB0b29scy1vbmx5IOuKlCBzdHJpbmco6re464yA66GcIOuwmO2ZmCksXG4vLyB0b29scytqc29uU2NoZW1hIOuKlCDsgqzsmqnsnpAg7Iqk7YKk66eI7J2YIEpTT04g6rCSKEpTT04uc3RyaW5naWZ5IOuhnCDrsJjtmZgpLlxuZnVuY3Rpb24gYnVpbGRFbnZlbG9wZVNjaGVtYShhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIHJldHVybiB6LnN0cmljdE9iamVjdCh7XG4gICAgcmVzdWx0OiB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcImFjdGlvblwiLCBbXG4gICAgICB6LnN0cmljdE9iamVjdCh7XG4gICAgICAgIGFjdGlvbjogei5saXRlcmFsKFwiYW5zd2VyXCIpLFxuICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgID8gei5zdHJpbmcoKVxuICAgICAgICAgICAgOiB6Lmpzb24oKS5yZWZpbmUoKGFuc3dlcikgPT4gYW5zd2VyICE9PSBudWxsLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJhbnN3ZXIgbXVzdCBiZSBub24tbnVsbFwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgdG9vbENhbGxzOiB6Lm51bGwoKSxcbiAgICAgIH0pLFxuICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICBhY3Rpb246IHoubGl0ZXJhbChcInRvb2xfY2FsbFwiKSxcbiAgICAgICAgYW5zd2VyOiB6Lm51bGwoKSxcbiAgICAgICAgdG9vbENhbGxzOiB6XG4gICAgICAgICAgLmFycmF5KFxuICAgICAgICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICAgICAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgICAgYXJnczogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWluKDEpLFxuICAgICAgfSksXG4gICAgXSksXG4gIH0pO1xufVxuXG5jb25zdCBURVhUX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcInRleHRcIik7XG5jb25zdCBKU09OX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcImpzb25cIik7XG50eXBlIEVudmVsb3BlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBKU09OX0VOVkVMT1BFPltcInJlc3VsdFwiXTtcblxuZXhwb3J0IGNsYXNzIFRvb2xDYWxsRW11bGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGB0b29sLWNhbGwgZW11bGF0aW9uOiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sQ2FsbEVtdWxhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLy8gZGlzcGF0Y2hlciDqsIAg64SY6riw64qUIOydtOuvuOyngCDqsrDqs7wuIHFncmlkIOuKlCBiYXNlNjQgcGF5bG9hZCDrp4wg7KCE64us7ZWY6rOgIO2PrOunt+ydgCDrs7TsnqXtlZjsp4Ag7JWK64qU64ukLlxuaW50ZXJmYWNlIEVtdWxhdGlvbkltYWdlIHtcbiAgZGF0YTogc3RyaW5nO1xuICByZXZpc2VkUHJvbXB0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gYW5zd2VyIOyduOy9lOuUqSDsooXrpZguIGVudmVsb3BlIOuUlOy9lOuNlOuKlCDtlZwg67KM7J206rOgIOydtCDqsJLsnYAgYW5zd2VyIOu4jOuenOy5mOydmCDtg4DsnoXqs7xcbi8vIOy1nOyihSDsp4HroKztmZQodGV4dDog6re464yA66GcIC8ganNvbjogSlNPTi5zdHJpbmdpZnkp66eMIOqwgOuluOuLpC5cbmV4cG9ydCB0eXBlIEFuc3dlcktpbmQgPSBcInRleHRcIiB8IFwianNvblwiO1xuXG5pbnRlcmZhY2UgVG9vbENhbGxFbXVsYXRpb25PcHRpb25zIHtcbiAgdGhyZWFkQ29vcmQ/OiBRZ3JpZFRocmVhZENvb3JkO1xuICBpbWFnZXM/OiBFbXVsYXRpb25JbWFnZVtdO1xuICAvLyDtlYTsiJg6IO2YuOy2nOu2gOqwgCBhbnN3ZXIg7J247L2U65Sp7J2EIO2VreyDgSDrqoXsi5ztlbTslbwg7ZWc64ukIChpbnB1dC5qc29uU2NoZW1hIOycoOustOuhnCDtjJDsoJUpLlxuICBhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbihcbiAgcmVzdWx0OiBFbXVsYXRpb25SZXN1bHQsXG4gIHRvb2xzOiBRZ3JpZFRvb2xbXSB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogVG9vbENhbGxFbXVsYXRpb25PcHRpb25zLFxuKTogUXVlcnlPdXRwdXQge1xuICBjb25zdCB7IHRocmVhZENvb3JkLCBpbWFnZXMsIGFuc3dlcktpbmQgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJ1bkNvbnRleHQgPSB0aHJlYWRDb29yZCA/IHsgdGhyZWFkQ29vcmQgfSA6IHVuZGVmaW5lZDtcblxuICBpZiAoIXRvb2xzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYW5zd2VyT3V0cHV0KHJlc3VsdCwgcmVzdWx0LnRleHQsIGltYWdlcywgcnVuQ29udGV4dCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUVudmVsb3BlKHJlc3VsdC50ZXh0LCB0b29scywgYW5zd2VyS2luZCk7XG4gIGlmIChwYXJzZWQuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgcmV0dXJuIHRvb2xDYWxsT3V0cHV0KHJlc3VsdCwgcGFyc2VkLnRvb2xDYWxscywgaW1hZ2VzLCBydW5Db250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBhbnN3ZXJPdXRwdXQoXG4gICAgcmVzdWx0LFxuICAgIGFuc3dlcktpbmQgPT09IFwidGV4dFwiID8gKHBhcnNlZC5hbnN3ZXIgYXMgc3RyaW5nKSA6IEpTT04uc3RyaW5naWZ5KHBhcnNlZC5hbnN3ZXIpLFxuICAgIGltYWdlcyxcbiAgICBydW5Db250ZXh0LFxuICApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUVudmVsb3BlKHRleHQ6IHN0cmluZywgdG9vbHM6IFFncmlkVG9vbFtdLCBhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIGlmIChCdWZmZXIuYnl0ZUxlbmd0aCh0ZXh0LCBcInV0ZjhcIikgPiBTVFJVQ1RVUkVEX0VOVkVMT1BFX0xJTUlUUy5tYXhVdGY4Qnl0ZXMpIHtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGB0b29sIGVudmVsb3BlIGV4Y2VlZHMgVVRGLTggYnl0ZSBsaW1pdCBvZiAke1NUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heFV0ZjhCeXRlc31gLFxuICAgICk7XG4gIH1cblxuICBsZXQgdmFsdWU6IHVua25vd247XG4gIHRyeSB7XG4gICAgdmFsdWUgPSBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIOq0gOyaqSDtj7TrsLEg7JeG7J2MLiBvcGVuYWkg64qUIGVudmVsb3BlIOydtCBzdHJ1Y3R1cmVkIG91dHB1dCDsnLzroZwg6rCV7KCc65CY66+A66GcIOyXrOq4sCDrj4Tri6ztlZxcbiAgICAvLyDruYQgSlNPTiDsnYAg67KE6re464ukLiBhbnRocm9waWMg7J2AIOqzhOyVveydhCDtlITroaztlITtirjroZzrp4wg7JWI64K07ZWY66+A66GcKFNPTi01MzIpIOu5hCBKU09OIOydtFxuICAgIC8vIFwi7JiI7IOBIOqwgOuKpe2VnCDrqqjrjbgg7Iuk7YyoXCLsp4Drp4wsIOq3uOuemOuPhCDqtazsoJztlZjsp4Ag7JWK64qU64ukIOKAlCDqs7zqsbDsnZgg7YWN7Iqk7Yq4IOq1rOygnOuKlCDth7TtmZRcbiAgICAvLyDrtIntiKzrpbwg64u167OA7Jy866GcIO2dmOugpOuztOuCtCDsobDsmqntlZwg7Jik7Je87J2EIOunjOuTpOyXiOuLpCgyMDI2LTA3IG1lZHBhdGgsIDEzLjVrIOqxtCkuXG4gICAgLy8g7KCV7KeB7ZWcIOyLpO2MqOqwgCDrs7Tsl6zslbwg7IaM67mE7J6Q6rCAIOyerOyLnOuPhO2VmOqxsOuCmCDqt7zrs7gg7JuQ7J247J2EIOqzoOy5nOuLpC5cbiAgICAvLyDsp4Tri6jsl5DripQg7JyE67CYIOybkOusuOydmCDrqLjrpqzqsIAg7ZWE7JqU7ZWY64ukKFNPTi00OTUg7KCE66GAKSDigJQgcGFyc2Ug7JeQ65+sIOychOy5mOunjOycvOuhnOuKlFxuICAgIC8vIFwi7ZSE66Gc7KaI66GcIOuLte2WiOuKlOyngCAvIO2OnOyKpOqwgCDrgqjslZjripTsp4AgLyBKU09OIOydtCDsnpjroLjripTsp4BcIuulvCDqtazrtoTtlaAg7IiYIOyXhuuLpC5cbiAgICBjb25zdCBoZWFkID0gSlNPTi5zdHJpbmdpZnkodGV4dC5zbGljZSgwLCAyMDApKTtcbiAgICBsb2dnZXIud2FybihgdG9vbCBlbnZlbG9wZSBwYXJzZSBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfTsgaGVhZD0ke2hlYWR9YCk7XG4gICAgdGhyb3cgbmV3IFRvb2xDYWxsRW11bGF0aW9uRXJyb3IoXG4gICAgICBgaW52YWxpZCB0b29sIGVudmVsb3BlIChyZXNwb25zZSBpcyBub3QgSlNPTiDigJQgdGhlIG1vZGVsIGlnbm9yZWQgdGhlIGVudmVsb3BlIGNvbnRyYWN0OyByZXRyeSBpcyB0aGUgY2FsbGVyJ3MgZGVjaXNpb24pOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX07IHJlc3BvbnNlIGhlYWQ6ICR7aGVhZH1gLFxuICAgICk7XG4gIH1cblxuICBhc3NlcnRTdHJ1Y3R1cmVkRW52ZWxvcGVDb21wbGV4aXR5KHZhbHVlKTtcbiAgY29uc3Qgc2NoZW1hID0gYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCIgPyBURVhUX0VOVkVMT1BFIDogSlNPTl9FTlZFTE9QRTtcbiAgY29uc3QgdmFsaWRhdGlvbiA9IHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICBpZiAoIXZhbGlkYXRpb24uc3VjY2Vzcykge1xuICAgIGNvbnN0IGlzc3VlID0gdmFsaWRhdGlvbi5lcnJvci5pc3N1ZXNbMF07XG4gICAgY29uc3QgcGF0aCA9IGlzc3VlICYmIGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGAgYXQgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfWAgOiBcIlwiO1xuICAgIGNvbnN0IGRldGFpbCA9IGlzc3VlPy5tZXNzYWdlID8/IFwidW5rbm93biB2YWxpZGF0aW9uIGlzc3VlXCI7XG4gICAgLy8gdmFsaWQgSlNPTiDsnbTsp4Drp4wg6rOE7JW9IOychOuwmOyduCDqsr3smrDsl5Drj4Qg7JuQ66y4IOuouOumrOulvCDrgqjquLTri6Qg4oCUIHpvZCDqsr3roZzrp4zsnLzroZzripRcbiAgICAvLyBcIu2CpCDsg53rnrXsnbjsp4AgLyDrnpjtjbzroZwg6rCQ7IyM64qU7KeAIC8g7YOA7J6F7J20IO2LgOuguOuKlOyngFwi7J2YIOyLpOusvOydhCDrs7wg7IiYIOyXhuuLpC5cbiAgICBjb25zdCBoZWFkID0gSlNPTi5zdHJpbmdpZnkodGV4dC5zbGljZSgwLCAyMDApKTtcbiAgICBsb2dnZXIud2FybihgdG9vbCBlbnZlbG9wZSB2YWxpZGF0aW9uIGZhaWxlZCR7cGF0aH06ICR7ZGV0YWlsfTsgaGVhZD0ke2hlYWR9YCk7XG4gICAgdGhyb3cgbmV3IFRvb2xDYWxsRW11bGF0aW9uRXJyb3IoXG4gICAgICBgaW52YWxpZCB0b29sIGVudmVsb3BlJHtwYXRofTogJHtkZXRhaWx9OyByZXNwb25zZSBoZWFkOiAke2hlYWR9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gWm9kIGNsb25lcyBKU09OIG9iamVjdHMgYW5kIGRyb3BzIG93biBcIl9fcHJvdG9fX1wiIGtleXMuIFRoZSBwYXJzZWQgSlNPTiBpcyBzYWZlIHRvIHJldHVyblxuICAvLyBhZnRlciB2YWxpZGF0aW9uIGFuZCBwcmVzZXJ2ZXMgdGhlIGNhbGxlcidzIGV4YWN0IHN0cnVjdHVyZWQgdmFsdWUuXG4gIGNvbnN0IHJlc3BvbnNlID0gKHZhbHVlIGFzIHsgcmVzdWx0OiBFbnZlbG9wZVJlc3BvbnNlIH0pLnJlc3VsdDtcbiAgaWYgKHJlc3BvbnNlLmFjdGlvbiA9PT0gXCJ0b29sX2NhbGxcIikge1xuICAgIGNvbnN0IHVua25vd25Ub29sID0gZmluZFVua25vd25Ub29sKHJlc3BvbnNlLnRvb2xDYWxscywgdG9vbHMpO1xuICAgIGlmICh1bmtub3duVG9vbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihgdW5rbm93biBlbXVsYXRlZCB0b29sOiAke3Vua25vd25Ub29sfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIHRvb2xDYWxsT3V0cHV0KFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdG9vbENhbGxzOiBUb29sQ2FsbFtdLFxuICBpbWFnZXM6IEVtdWxhdGlvbkltYWdlW10gfCB1bmRlZmluZWQsXG4gIHJ1bkNvbnRleHQ6IFF1ZXJ5T3V0cHV0W1wicnVuQ29udGV4dFwiXSxcbik6IFF1ZXJ5T3V0cHV0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHQsXG4gICAgY29udGVudDogYXBwZW5kSW1hZ2VzKFxuICAgICAgdG9vbENhbGxzLm1hcCgodG9vbENhbGwpID0+ICh7XG4gICAgICAgIHR5cGU6IFwidG9vbC1jYWxsXCIsXG4gICAgICAgIHRvb2xDYWxsSWQ6IGBjYWxsXyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApfWAsXG4gICAgICAgIHRvb2xOYW1lOiB0b29sQ2FsbC50b29sTmFtZSxcbiAgICAgICAgaW5wdXQ6IHRvb2xDYWxsLmFyZ3MsXG4gICAgICB9KSksXG4gICAgICBpbWFnZXMsXG4gICAgKSxcbiAgICBmaW5pc2hSZWFzb246IFwidG9vbC1jYWxsc1wiLFxuICAgIHJ1bkNvbnRleHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFuc3dlck91dHB1dChcbiAgcmVzdWx0OiBFbXVsYXRpb25SZXN1bHQsXG4gIHRleHQ6IHN0cmluZyxcbiAgaW1hZ2VzOiBFbXVsYXRpb25JbWFnZVtdIHwgdW5kZWZpbmVkLFxuICBydW5Db250ZXh0OiBRdWVyeU91dHB1dFtcInJ1bkNvbnRleHRcIl0sXG4pOiBRdWVyeU91dHB1dCB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzdWx0LFxuICAgIHRleHQsXG4gICAgY29udGVudDogYXBwZW5kSW1hZ2VzKFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0IH1dLCBpbWFnZXMpLFxuICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZFVua25vd25Ub29sKHRvb2xDYWxsczogVG9vbENhbGxbXSwgdG9vbHM6IFFncmlkVG9vbFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qga25vd25Ub29sTmFtZXMgPSBuZXcgU2V0KHRvb2xzLm1hcCgodG9vbCkgPT4gdG9vbC5uYW1lKSk7XG4gIHJldHVybiB0b29sQ2FsbHMuZmluZCgodG9vbENhbGwpID0+ICFrbm93blRvb2xOYW1lcy5oYXModG9vbENhbGwudG9vbE5hbWUpKT8udG9vbE5hbWU7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZEltYWdlcyhjb250ZW50OiBRZ3JpZENvbnRlbnRbXSwgaW1hZ2VzPzogRW11bGF0aW9uSW1hZ2VbXSk6IFFncmlkQ29udGVudFtdIHtcbiAgaWYgKCFpbWFnZXM/Lmxlbmd0aCkgcmV0dXJuIGNvbnRlbnQ7XG4gIHJldHVybiBbXG4gICAgLi4uY29udGVudCxcbiAgICAuLi5pbWFnZXMubWFwKFxuICAgICAgKGltYWdlKTogUWdyaWRDb250ZW50ID0+ICh7XG4gICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICAgICAgZGF0YTogaW1hZ2UuZGF0YSxcbiAgICAgICAgcmV2aXNlZFByb21wdDogaW1hZ2UucmV2aXNlZFByb21wdCA/PyBudWxsLFxuICAgICAgfSksXG4gICAgKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U3RydWN0dXJlZEVudmVsb3BlQ29tcGxleGl0eShyb290OiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IG1heERlcHRoID0gU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4RGVwdGg7XG4gIGNvbnN0IHN0YWNrID0gW3sgdmFsdWU6IHJvb3QsIGRlcHRoOiAwIH1dO1xuICBsZXQgbm9kZXMgPSAwO1xuXG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YWNrLnBvcCgpITtcbiAgICBub2RlcyArPSAxO1xuICAgIGlmIChub2RlcyA+IFNUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heE5vZGVzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgICAgYHN0cnVjdHVyZWQtb3V0cHV0IGVudmVsb3BlIGV4Y2VlZHMgbm9kZSBsaW1pdCBvZiAke1NUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heE5vZGVzfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudC5kZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgICAgYHN0cnVjdHVyZWQtb3V0cHV0IGVudmVsb3BlIGV4Y2VlZHMgZGVwdGggbGltaXQgb2YgJHttYXhEZXB0aH1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50LnZhbHVlID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNGaW5pdGUoY3VycmVudC52YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFwiYW5zd2VyIG11c3QgYmUgdmFsaWQgSlNPTlwiKTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnQudmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGN1cnJlbnQudmFsdWUgIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGN1cnJlbnQudmFsdWUpKSB7XG4gICAgICBzdGFjay5wdXNoKHsgdmFsdWUsIGRlcHRoOiBjdXJyZW50LmRlcHRoICsgMSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQVFBLE1BQU0sNkJBQTZCO0NBQ2pDLGNBQWMsTUFBTTtDQUNwQixVQUFVO0NBQ1YsVUFBVTtBQUNaO0FBUUEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGdCQUFnQixDQUFDO0FBUXBELFNBQVMsb0JBQW9CLFlBQXdCO0NBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQ3BCLFFBQVEsRUFBRSxtQkFBbUIsVUFBVSxDQUNyQyxFQUFFLGFBQWE7RUFDYixRQUFRLEVBQUUsUUFBUSxRQUFRO0VBQzFCLFFBQ0UsZUFBZSxTQUNYLEVBQUUsT0FBTyxJQUNULEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxXQUFXLFdBQVcsTUFBTSxFQUMzQyxTQUFTLDBCQUNYLENBQUM7RUFDUCxXQUFXLEVBQUUsS0FBSztDQUNwQixDQUFDLEdBQ0QsRUFBRSxhQUFhO0VBQ2IsUUFBUSxFQUFFLFFBQVEsV0FBVztFQUM3QixRQUFRLEVBQUUsS0FBSztFQUNmLFdBQVcsRUFDUixNQUNDLEVBQUUsYUFBYTtHQUNiLFVBQVUsRUFBRSxPQUFPO0dBQ25CLE1BQU0sRUFBRSxP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