@code-yeongyu/senpi 2026.9.18 → 2026.9.19

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 (195) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/dist/bundle/chunks/{anthropic-messages-ZEJ3DPCP.js → anthropic-messages-WZCFP6BT.js} +1 -1
  3. package/dist/bundle/chunks/{app-server-command-ELSORC4D.js → app-server-command-QK7Q6XK5.js} +1 -1
  4. package/dist/bundle/chunks/bun-extension-importer-JQZRPNJH.js +10 -0
  5. package/dist/bundle/chunks/{chunk-Y6HDGVS5.js → chunk-34GCWLNV.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-XJUVWITG.js → chunk-3FRTRCR6.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-VRAYXSST.js → chunk-FDLVINNY.js} +2 -2
  8. package/dist/bundle/chunks/{chunk-QNZ24YOQ.js → chunk-HGAX6JZ7.js} +3 -1
  9. package/dist/bundle/chunks/{chunk-QGBRSL64.js → chunk-HSH674C6.js} +1 -1
  10. package/dist/bundle/chunks/chunk-IUZUN32Z.js +13 -0
  11. package/dist/bundle/chunks/chunk-IXAUDPOK.js +2 -0
  12. package/dist/bundle/chunks/{chunk-AH72FRZ2.js → chunk-KKDSBABY.js} +11 -11
  13. package/dist/bundle/chunks/{chunk-NLOZDJQX.js → chunk-LF3XTYYF.js} +3 -3
  14. package/dist/bundle/chunks/{chunk-ANTGWIGI.js → chunk-MUC3MZTV.js} +1 -1
  15. package/dist/bundle/chunks/chunk-NARL7XFO.js +8 -0
  16. package/dist/bundle/chunks/chunk-NQAVM5XL.js +2 -0
  17. package/dist/bundle/chunks/chunk-P7PWCGLJ.js +5 -0
  18. package/dist/bundle/chunks/{chunk-4C7LNOHI.js → chunk-PLZK7ABD.js} +1 -1
  19. package/dist/bundle/chunks/{chunk-CKNRCW35.js → chunk-RLRLQRI2.js} +1 -1
  20. package/dist/bundle/chunks/{chunk-7FXIHFZU.js → chunk-UAYBYTFN.js} +1 -1
  21. package/dist/bundle/chunks/{chunk-7A47FVQC.js → chunk-W4SRGDQ4.js} +3 -6
  22. package/dist/bundle/chunks/{chunk-QROWINIH.js → chunk-XK24AFYU.js} +1 -1
  23. package/dist/bundle/chunks/cli-main-7SG3K4K3.js +3 -0
  24. package/dist/bundle/chunks/cursor-agent.js +38 -0
  25. package/dist/bundle/chunks/cursor.js +2 -0
  26. package/dist/bundle/chunks/devin-agent.js +5 -0
  27. package/dist/bundle/chunks/devin.js +75 -0
  28. package/dist/bundle/chunks/{help-fast-path-WQCATMI4.js → help-fast-path-RQDCLDQT.js} +1 -1
  29. package/dist/bundle/chunks/host-command-3LS772D5.js +2 -0
  30. package/dist/bundle/chunks/{host-lifecycle-EAXSS3F2.js → host-lifecycle-TA5XGUW5.js} +1 -1
  31. package/dist/bundle/chunks/host-lifecycle.js +20 -0
  32. package/dist/bundle/chunks/interactive-host-runtime-AITXUDCT.js +4 -0
  33. package/dist/bundle/chunks/interactive-mode-7MN6GGCG.js +2 -0
  34. package/dist/bundle/chunks/{multi-session-host-OK6WMHB4.js → multi-session-host-WKX34SOP.js} +1 -1
  35. package/dist/bundle/chunks/{openai-completions-2RS3VSPV.js → openai-completions-TOWYKX2U.js} +1 -1
  36. package/dist/bundle/chunks/{package-manager-cli-C2K4YRGI.js → package-manager-cli-CB2X57TD.js} +1 -1
  37. package/dist/bundle/chunks/{rotation-stream-536AQTIS.js → rotation-stream-KDLA7K6X.js} +1 -1
  38. package/dist/bundle/chunks/rpc-mode-CI6V2SBW.js +2 -0
  39. package/dist/bundle/chunks/{session-picker-BUHK3FCS.js → session-picker-DXCITGLS.js} +1 -1
  40. package/dist/bundle/chunks/session-worker.js +359 -346
  41. package/dist/bundle/chunks/{state-store-OYDXEIXU.js → state-store-HBBOD7I5.js} +1 -1
  42. package/dist/bundle/cli.js +1 -1
  43. package/dist/bundle/index.js +1 -1
  44. package/dist/bundle/rpc-entry.js +1 -1
  45. package/dist/cli/args.d.ts.map +1 -1
  46. package/dist/cli/args.js +2 -0
  47. package/dist/cli/args.js.map +1 -1
  48. package/dist/cli/deferred-commands.d.ts +7 -0
  49. package/dist/cli/deferred-commands.d.ts.map +1 -1
  50. package/dist/cli/deferred-commands.js +12 -0
  51. package/dist/cli/deferred-commands.js.map +1 -1
  52. package/dist/cli/host-command.d.ts +21 -0
  53. package/dist/cli/host-command.d.ts.map +1 -0
  54. package/dist/cli/host-command.js +148 -0
  55. package/dist/cli/host-command.js.map +1 -0
  56. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.d.ts +1 -1
  57. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.d.ts.map +1 -1
  58. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js +2 -17
  59. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js.map +1 -1
  60. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-8.d.ts +3 -0
  61. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-8.d.ts.map +1 -0
  62. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-8.js +5 -0
  63. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-8.js.map +1 -0
  64. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-code.d.ts +3 -0
  65. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-code.d.ts.map +1 -0
  66. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-code.js +28 -0
  67. package/dist/core/extensions/builtin/prompt-preset/kimi-k2-code.js.map +1 -0
  68. package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
  69. package/dist/core/extensions/builtin/prompt-preset/presets.js +21 -1
  70. package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
  71. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
  72. package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
  73. package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
  74. package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
  75. package/dist/core/extensions/bun-extension-importer.d.ts.map +1 -1
  76. package/dist/core/extensions/bun-extension-importer.js +31 -5
  77. package/dist/core/extensions/bun-extension-importer.js.map +1 -1
  78. package/dist/core/extensions/bun-extension-registry.d.ts +9 -0
  79. package/dist/core/extensions/bun-extension-registry.d.ts.map +1 -1
  80. package/dist/core/extensions/bun-extension-registry.js +72 -16
  81. package/dist/core/extensions/bun-extension-registry.js.map +1 -1
  82. package/dist/core/extensions/extension-runtime-module.d.ts +5 -0
  83. package/dist/core/extensions/extension-runtime-module.d.ts.map +1 -0
  84. package/dist/core/extensions/extension-runtime-module.js +6 -0
  85. package/dist/core/extensions/extension-runtime-module.js.map +1 -0
  86. package/dist/core/model-resolver.d.ts.map +1 -1
  87. package/dist/core/model-resolver.js +1 -0
  88. package/dist/core/model-resolver.js.map +1 -1
  89. package/dist/index.d.ts +2 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +3 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/main.d.ts.map +1 -1
  94. package/dist/main.js +7 -1
  95. package/dist/main.js.map +1 -1
  96. package/dist/modes/index.d.ts +3 -0
  97. package/dist/modes/index.d.ts.map +1 -1
  98. package/dist/modes/index.js +5 -0
  99. package/dist/modes/index.js.map +1 -1
  100. package/dist/modes/rpc/host-daemon-env.d.ts +18 -0
  101. package/dist/modes/rpc/host-daemon-env.d.ts.map +1 -0
  102. package/dist/modes/rpc/host-daemon-env.js +95 -0
  103. package/dist/modes/rpc/host-daemon-env.js.map +1 -0
  104. package/dist/modes/rpc/host-decision.d.ts +1 -1
  105. package/dist/modes/rpc/host-decision.d.ts.map +1 -1
  106. package/dist/modes/rpc/host-decision.js +2 -0
  107. package/dist/modes/rpc/host-decision.js.map +1 -1
  108. package/dist/modes/rpc/host-ensure.js +8 -1
  109. package/dist/modes/rpc/host-ensure.js.map +1 -1
  110. package/dist/modes/rpc/host-launch-spec.d.ts +43 -0
  111. package/dist/modes/rpc/host-launch-spec.d.ts.map +1 -0
  112. package/dist/modes/rpc/host-launch-spec.js +183 -0
  113. package/dist/modes/rpc/host-launch-spec.js.map +1 -0
  114. package/dist/modes/rpc/host-launch.d.ts +3 -1
  115. package/dist/modes/rpc/host-launch.d.ts.map +1 -1
  116. package/dist/modes/rpc/host-launch.js +24 -5
  117. package/dist/modes/rpc/host-launch.js.map +1 -1
  118. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  119. package/dist/modes/rpc/host-lifecycle.js +36 -2
  120. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  121. package/dist/modes/rpc/host-probe.d.ts +7 -0
  122. package/dist/modes/rpc/host-probe.d.ts.map +1 -1
  123. package/dist/modes/rpc/host-probe.js +15 -4
  124. package/dist/modes/rpc/host-probe.js.map +1 -1
  125. package/dist/modes/rpc/host-process-metrics.d.ts +10 -0
  126. package/dist/modes/rpc/host-process-metrics.d.ts.map +1 -0
  127. package/dist/modes/rpc/host-process-metrics.js +83 -0
  128. package/dist/modes/rpc/host-process-metrics.js.map +1 -0
  129. package/dist/modes/rpc/host-runner.d.ts +38 -0
  130. package/dist/modes/rpc/host-runner.d.ts.map +1 -0
  131. package/dist/modes/rpc/host-runner.js +195 -0
  132. package/dist/modes/rpc/host-runner.js.map +1 -0
  133. package/dist/modes/rpc/host-status.d.ts +58 -0
  134. package/dist/modes/rpc/host-status.d.ts.map +1 -0
  135. package/dist/modes/rpc/host-status.js +117 -0
  136. package/dist/modes/rpc/host-status.js.map +1 -0
  137. package/docs/extensions.md +35 -0
  138. package/docs/providers.md +30 -0
  139. package/docs/rpc.md +177 -15
  140. package/docs/settings.md +1 -1
  141. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +72 -0
  142. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  143. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  144. package/node_modules/@earendil-works/pi-ai/README.md +9 -0
  145. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.d.ts.map +1 -1
  146. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js +1 -0
  147. package/node_modules/@earendil-works/pi-ai/dist/env-api-keys.js.map +1 -1
  148. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts +2 -2
  149. package/node_modules/@earendil-works/pi-ai/dist/models.generated.d.ts.map +1 -1
  150. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js +2 -2
  151. package/node_modules/@earendil-works/pi-ai/dist/models.generated.js.map +1 -1
  152. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts +150 -7
  153. package/node_modules/@earendil-works/pi-ai/dist/providers/all.d.ts.map +1 -1
  154. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js +17 -3
  155. package/node_modules/@earendil-works/pi-ai/dist/providers/all.js.map +1 -1
  156. package/node_modules/@earendil-works/pi-ai/dist/providers/bai-stream.d.ts +13 -0
  157. package/node_modules/@earendil-works/pi-ai/dist/providers/bai-stream.d.ts.map +1 -0
  158. package/node_modules/@earendil-works/pi-ai/dist/providers/bai-stream.js +55 -0
  159. package/node_modules/@earendil-works/pi-ai/dist/providers/bai-stream.js.map +1 -0
  160. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.d.ts +11 -0
  161. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.d.ts.map +1 -0
  162. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.js +94 -0
  163. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.js.map +1 -0
  164. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.models.d.ts +4 -0
  165. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.models.d.ts.map +1 -0
  166. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.models.js +6 -0
  167. package/node_modules/@earendil-works/pi-ai/dist/providers/bai.models.js.map +1 -0
  168. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  169. package/node_modules/@earendil-works/pi-ai/dist/providers/data/bai.json +1 -0
  170. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  171. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  172. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
  173. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  174. package/node_modules/@earendil-works/pi-ai/dist/providers/data/venice.json +1 -1
  175. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  176. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts +142 -1
  177. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.d.ts.map +1 -1
  178. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js +156 -3
  179. package/node_modules/@earendil-works/pi-ai/dist/providers/kimi-coding.models.js.map +1 -1
  180. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
  181. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  182. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  183. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  184. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  185. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  186. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  187. package/package.json +7 -7
  188. package/dist/bundle/chunks/bun-extension-importer-SW7XGNSG.js +0 -10
  189. package/dist/bundle/chunks/chunk-AGXZF7RF.js +0 -2
  190. package/dist/bundle/chunks/chunk-F5JZNLDE.js +0 -8
  191. package/dist/bundle/chunks/cli-main-4TWJXJKM.js +0 -3
  192. package/dist/bundle/chunks/interactive-host-runtime-EDXG6A5L.js +0 -4
  193. package/dist/bundle/chunks/interactive-mode-PD7S7KFZ.js +0 -2
  194. package/dist/bundle/chunks/rpc-mode-TIJFUWXS.js +0 -2
  195. package/node_modules/@earendil-works/pi-ai/dist/providers/data/kimi-coding.json +0 -1
@@ -0,0 +1,38 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
+ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function(){try{return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports}catch(e){throw mod=0,e}};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod));var require_options=__commonJS({"node_modules/partial-json/dist/options.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Allow=exports.ALL=exports.COLLECTION=exports.ATOM=exports.SPECIAL=exports.INF=exports._INFINITY=exports.INFINITY=exports.NAN=exports.BOOL=exports.NULL=exports.OBJ=exports.ARR=exports.NUM=exports.STR=void 0;exports.STR=1;exports.NUM=2;exports.ARR=4;exports.OBJ=8;exports.NULL=16;exports.BOOL=32;exports.NAN=64;exports.INFINITY=128;exports._INFINITY=256;exports.INF=exports.INFINITY|exports._INFINITY;exports.SPECIAL=exports.NULL|exports.BOOL|exports.INF|exports.NAN;exports.ATOM=exports.STR|exports.NUM|exports.SPECIAL;exports.COLLECTION=exports.ARR|exports.OBJ;exports.ALL=exports.ATOM|exports.COLLECTION;exports.Allow={STR:exports.STR,NUM:exports.NUM,ARR:exports.ARR,OBJ:exports.OBJ,NULL:exports.NULL,BOOL:exports.BOOL,NAN:exports.NAN,INFINITY:exports.INFINITY,_INFINITY:exports._INFINITY,INF:exports.INF,SPECIAL:exports.SPECIAL,ATOM:exports.ATOM,COLLECTION:exports.COLLECTION,ALL:exports.ALL};exports.default=exports.Allow}});var require_dist=__commonJS({"node_modules/partial-json/dist/index.js"(exports){"use strict";var __createBinding=exports&&exports.__createBinding||(Object.create?(function(o,m,k,k2){k2===void 0&&(k2=k);var desc=Object.getOwnPropertyDescriptor(m,k);(!desc||("get"in desc?!m.__esModule:desc.writable||desc.configurable))&&(desc={enumerable:!0,get:function(){return m[k]}}),Object.defineProperty(o,k2,desc)}):(function(o,m,k,k2){k2===void 0&&(k2=k),o[k2]=m[k]})),__exportStar=exports&&exports.__exportStar||function(m,exports2){for(var p in m)p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p)&&__createBinding(exports2,m,p)};Object.defineProperty(exports,"__esModule",{value:!0});exports.Allow=exports.MalformedJSON=exports.PartialJSON=exports.parseJSON=exports.parse=void 0;var options_1=require_options();Object.defineProperty(exports,"Allow",{enumerable:!0,get:function(){return options_1.Allow}});__exportStar(require_options(),exports);var PartialJSON=class extends Error{};exports.PartialJSON=PartialJSON;var MalformedJSON=class extends Error{};exports.MalformedJSON=MalformedJSON;function parseJSON(jsonString,allowPartial=options_1.Allow.ALL){if(typeof jsonString!="string")throw new TypeError(`expecting str, got ${typeof jsonString}`);if(!jsonString.trim())throw new Error(`${jsonString} is empty`);return _parseJSON(jsonString.trim(),allowPartial)}exports.parseJSON=parseJSON;var _parseJSON=(jsonString,allow)=>{let length=jsonString.length,index=0,markPartialJSON=msg=>{throw new PartialJSON(`${msg} at position ${index}`)},throwMalformedError=msg=>{throw new MalformedJSON(`${msg} at position ${index}`)},parseAny=()=>(skipBlank(),index>=length&&markPartialJSON("Unexpected end of input"),jsonString[index]==='"'?parseStr():jsonString[index]==="{"?parseObj():jsonString[index]==="["?parseArr():jsonString.substring(index,index+4)==="null"||options_1.Allow.NULL&allow&&length-index<4&&"null".startsWith(jsonString.substring(index))?(index+=4,null):jsonString.substring(index,index+4)==="true"||options_1.Allow.BOOL&allow&&length-index<4&&"true".startsWith(jsonString.substring(index))?(index+=4,!0):jsonString.substring(index,index+5)==="false"||options_1.Allow.BOOL&allow&&length-index<5&&"false".startsWith(jsonString.substring(index))?(index+=5,!1):jsonString.substring(index,index+8)==="Infinity"||options_1.Allow.INFINITY&allow&&length-index<8&&"Infinity".startsWith(jsonString.substring(index))?(index+=8,1/0):jsonString.substring(index,index+9)==="-Infinity"||options_1.Allow._INFINITY&allow&&1<length-index&&length-index<9&&"-Infinity".startsWith(jsonString.substring(index))?(index+=9,-1/0):jsonString.substring(index,index+3)==="NaN"||options_1.Allow.NAN&allow&&length-index<3&&"NaN".startsWith(jsonString.substring(index))?(index+=3,NaN):parseNum()),parseStr=()=>{let start=index,escape=!1;for(index++;index<length&&(jsonString[index]!=='"'||escape&&jsonString[index-1]==="\\");)escape=jsonString[index]==="\\"?!escape:!1,index++;if(jsonString.charAt(index)=='"')try{return JSON.parse(jsonString.substring(start,++index-Number(escape)))}catch(e){throwMalformedError(String(e))}else if(options_1.Allow.STR&allow)try{return JSON.parse(jsonString.substring(start,index-Number(escape))+'"')}catch{return JSON.parse(jsonString.substring(start,jsonString.lastIndexOf("\\"))+'"')}markPartialJSON("Unterminated string literal")},parseObj=()=>{index++,skipBlank();let obj={};try{for(;jsonString[index]!=="}";){if(skipBlank(),index>=length&&options_1.Allow.OBJ&allow)return obj;let key=parseStr();skipBlank(),index++;try{let value=parseAny();obj[key]=value}catch(e){if(options_1.Allow.OBJ&allow)return obj;throw e}skipBlank(),jsonString[index]===","&&index++}}catch{if(options_1.Allow.OBJ&allow)return obj;markPartialJSON("Expected '}' at end of object")}return index++,obj},parseArr=()=>{index++;let arr=[];try{for(;jsonString[index]!=="]";)arr.push(parseAny()),skipBlank(),jsonString[index]===","&&index++}catch{if(options_1.Allow.ARR&allow)return arr;markPartialJSON("Expected ']' at end of array")}return index++,arr},parseNum=()=>{if(index===0){jsonString==="-"&&throwMalformedError("Not sure what '-' is");try{return JSON.parse(jsonString)}catch(e){if(options_1.Allow.NUM&allow)try{return JSON.parse(jsonString.substring(0,jsonString.lastIndexOf("e")))}catch{}throwMalformedError(String(e))}}let start=index;for(jsonString[index]==="-"&&index++;jsonString[index]&&",]}".indexOf(jsonString[index])===-1;)index++;index==length&&!(options_1.Allow.NUM&allow)&&markPartialJSON("Unterminated number literal");try{return JSON.parse(jsonString.substring(start,index))}catch{jsonString.substring(start,index)==="-"&&markPartialJSON("Not sure what '-' is");try{return JSON.parse(jsonString.substring(start,jsonString.lastIndexOf("e")))}catch(e2){throwMalformedError(String(e2))}}},skipBlank=()=>{for(;index<length&&`
3
+ \r `.includes(jsonString[index]);)index++};return parseAny()},parse=parseJSON;exports.parse=parse}});import{createHash as createHash3,randomUUID as randomUUID3}from"node:crypto";import*as http2 from"node:http2";function isMessage(arg,schema){return arg!==null&&typeof arg=="object"&&"$typeName"in arg&&typeof arg.$typeName=="string"?schema===void 0?!0:schema.typeName===arg.$typeName:!1}var ScalarType;(function(ScalarType2){ScalarType2[ScalarType2.DOUBLE=1]="DOUBLE",ScalarType2[ScalarType2.FLOAT=2]="FLOAT",ScalarType2[ScalarType2.INT64=3]="INT64",ScalarType2[ScalarType2.UINT64=4]="UINT64",ScalarType2[ScalarType2.INT32=5]="INT32",ScalarType2[ScalarType2.FIXED64=6]="FIXED64",ScalarType2[ScalarType2.FIXED32=7]="FIXED32",ScalarType2[ScalarType2.BOOL=8]="BOOL",ScalarType2[ScalarType2.STRING=9]="STRING",ScalarType2[ScalarType2.BYTES=12]="BYTES",ScalarType2[ScalarType2.UINT32=13]="UINT32",ScalarType2[ScalarType2.SFIXED32=15]="SFIXED32",ScalarType2[ScalarType2.SFIXED64=16]="SFIXED64",ScalarType2[ScalarType2.SINT32=17]="SINT32",ScalarType2[ScalarType2.SINT64=18]="SINT64"})(ScalarType||(ScalarType={}));function varint64read(){let buf=this.buf,pos=this.pos,lo=0,hi=0;for(let shift=0;shift<28;shift+=7){let b=buf[pos++];if(lo|=(b&127)<<shift,(b&128)==0){this.pos=pos,this.assertBounds(),this.varint64Lo=lo,this.varint64Hi=hi;return}}let middleByte=buf[pos++];if(lo|=(middleByte&15)<<28,hi=(middleByte&112)>>4,(middleByte&128)==0){this.pos=pos,this.assertBounds(),this.varint64Lo=lo,this.varint64Hi=hi;return}for(let shift=3;shift<=31;shift+=7){let b=buf[pos++];if(hi|=(b&127)<<shift,(b&128)==0){this.pos=pos,this.assertBounds(),this.varint64Lo=lo,this.varint64Hi=hi;return}}throw new Error("invalid varint")}var TWO_PWR_32_DBL=4294967296;function int64FromString(dec){let minus=dec[0]==="-";minus&&(dec=dec.slice(1));let base=1e6,lowBits=0,highBits=0;function add1e6digit(begin,end){let digit1e6=Number(dec.slice(begin,end));highBits*=base,lowBits=lowBits*base+digit1e6,lowBits>=TWO_PWR_32_DBL&&(highBits=highBits+(lowBits/TWO_PWR_32_DBL|0),lowBits=lowBits%TWO_PWR_32_DBL)}return add1e6digit(-24,-18),add1e6digit(-18,-12),add1e6digit(-12,-6),add1e6digit(-6),minus?negate(lowBits,highBits):newBits(lowBits,highBits)}function int64ToString(lo,hi){let bits=newBits(lo,hi),negative=bits.hi&2147483648;negative&&(bits=negate(bits.lo,bits.hi));let result=uInt64ToString(bits.lo,bits.hi);return negative?"-"+result:result}function uInt64ToString(lo,hi){if({lo,hi}=toUnsigned(lo,hi),hi<=2097151)return String(TWO_PWR_32_DBL*hi+lo);let low=lo&16777215,mid=(lo>>>24|hi<<8)&16777215,high=hi>>16&65535,digitA=low+mid*6777216+high*6710656,digitB=mid+high*8147497,digitC=high*2,base=1e7;return digitA>=base&&(digitB+=Math.floor(digitA/base),digitA%=base),digitB>=base&&(digitC+=Math.floor(digitB/base),digitB%=base),digitC.toString()+decimalFrom1e7WithLeadingZeros(digitB)+decimalFrom1e7WithLeadingZeros(digitA)}function toUnsigned(lo,hi){return{lo:lo>>>0,hi:hi>>>0}}function newBits(lo,hi){return{lo:lo|0,hi:hi|0}}function negate(lowBits,highBits){return highBits=~highBits,lowBits?lowBits=~lowBits+1:highBits+=1,newBits(lowBits,highBits)}var decimalFrom1e7WithLeadingZeros=digit1e7=>{let partial=String(digit1e7);return"0000000".slice(partial.length)+partial};function varint32write(value,bytes){if(value>>>0<128){bytes.push(value);return}if(value>=0){for(;value>127;)bytes.push(value&127|128),value=value>>>7;bytes.push(value)}else{for(let i=0;i<9;i++)bytes.push(value&127|128),value=value>>7;bytes.push(1)}}function varint32read(){let b=this.buf[this.pos++];if((b&128)===0)return this.assertBounds(),b;let result=b&127;if(b=this.buf[this.pos++],result|=(b&127)<<7,(b&128)===0)return this.assertBounds(),result;if(b=this.buf[this.pos++],result|=(b&127)<<14,(b&128)===0)return this.assertBounds(),result;if(b=this.buf[this.pos++],result|=(b&127)<<21,(b&128)===0)return this.assertBounds(),result;b=this.buf[this.pos++],result|=(b&15)<<28;for(let readBytes=5;(b&128)!==0&&readBytes<10;readBytes++)b=this.buf[this.pos++];if((b&128)!==0)throw new Error("invalid varint");return this.assertBounds(),result>>>0}var protoInt64=makeInt64Support();function makeInt64Support(){let dv=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof dv.getBigInt64=="function"&&typeof dv.getBigUint64=="function"&&typeof dv.setBigInt64=="function"&&typeof dv.setBigUint64=="function"&&(!!globalThis.Deno||!!globalThis.Bun||typeof process!="object"||typeof process.env!="object"||process.env.BUF_BIGINT_DISABLE!=="1")){let MIN=BigInt("-9223372036854775808"),MAX=BigInt("9223372036854775807"),UMIN=BigInt("0"),UMAX=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(value){let bi=typeof value=="bigint"?value:BigInt(value);if(bi>MAX||bi<MIN)throw new Error(`invalid int64: ${value}`);return bi},uParse(value){let bi=typeof value=="bigint"?value:BigInt(value);if(bi>UMAX||bi<UMIN)throw new Error(`invalid uint64: ${value}`);return bi},enc(value){return dv.setBigInt64(0,this.parse(value),!0),{lo:dv.getInt32(0,!0),hi:dv.getInt32(4,!0)}},uEnc(value){return dv.setBigInt64(0,this.uParse(value),!0),{lo:dv.getInt32(0,!0),hi:dv.getInt32(4,!0)}},dec(lo,hi){return dv.setInt32(0,lo,!0),dv.setInt32(4,hi,!0),dv.getBigInt64(0,!0)},uDec(lo,hi){return dv.setInt32(0,lo,!0),dv.setInt32(4,hi,!0),dv.getBigUint64(0,!0)}}}return{zero:"0",supported:!1,parse(value){return typeof value!="string"&&(value=value.toString()),assertInt64String(value),value},uParse(value){return typeof value!="string"&&(value=value.toString()),assertUInt64String(value),value},enc(value){return typeof value!="string"&&(value=value.toString()),assertInt64String(value),int64FromString(value)},uEnc(value){return typeof value!="string"&&(value=value.toString()),assertUInt64String(value),int64FromString(value)},dec(lo,hi){return int64ToString(lo,hi)},uDec(lo,hi){return uInt64ToString(lo,hi)}}}function assertInt64String(value){if(!/^-?[0-9]+$/.test(value))throw new Error("invalid int64: "+value)}function assertUInt64String(value){if(!/^[0-9]+$/.test(value))throw new Error("invalid uint64: "+value)}function scalarZeroValue(type,longAsString){switch(type){case ScalarType.STRING:return"";case ScalarType.BOOL:return!1;case ScalarType.DOUBLE:case ScalarType.FLOAT:return 0;case ScalarType.INT64:case ScalarType.UINT64:case ScalarType.SFIXED64:case ScalarType.FIXED64:case ScalarType.SINT64:return longAsString?"0":protoInt64.zero;case ScalarType.BYTES:return new Uint8Array(0);default:return 0}}function isScalarZeroValue(type,value){switch(type){case ScalarType.BOOL:return value===!1;case ScalarType.STRING:return value==="";case ScalarType.BYTES:return value instanceof Uint8Array&&!value.byteLength;case ScalarType.DOUBLE:case ScalarType.FLOAT:return Object.is(value,0);default:return value==0}}var IMPLICIT=2,unsafeLocal=Symbol.for("reflect unsafe local");function unsafeOneofCase(target,oneof){let c=target[oneof.localName].case;return c===void 0?c:oneof.fields.find(f=>f.localName===c)}function unsafeIsSet(target,field){let name=field.localName;if(field.oneof)return target[field.oneof.localName].case===name;if(field.presence!=IMPLICIT)return target[name]!==void 0&&Object.prototype.hasOwnProperty.call(target,name);switch(field.fieldKind){case"list":return target[name].length>0;case"map":return Object.keys(target[name]).length>0;case"scalar":return!isScalarZeroValue(field.scalar,target[name]);case"enum":return target[name]!==field.enum.values[0].number}throw new Error("message field with implicit presence")}function unsafeIsSetExplicit(target,localName){return Object.prototype.hasOwnProperty.call(target,localName)&&target[localName]!==void 0}function unsafeGet(target,field){if(field.oneof){let oneof=target[field.oneof.localName];return oneof.case===field.localName?oneof.value:void 0}return target[field.localName]}function unsafeSet(target,field,value){field.oneof?target[field.oneof.localName]={case:field.localName,value}:target[field.localName]=value}function unsafeClear(target,field){let name=field.localName;if(field.oneof){let oneofLocalName=field.oneof.localName;target[oneofLocalName].case===name&&(target[oneofLocalName]={case:void 0})}else if(field.presence!=IMPLICIT)delete target[name];else switch(field.fieldKind){case"map":target[name]={};break;case"list":target[name]=[];break;case"enum":target[name]=field.enum.values[0].number;break;case"scalar":target[name]=scalarZeroValue(field.scalar,field.longAsString);break}}function isObject(arg){return arg!==null&&typeof arg=="object"&&!Array.isArray(arg)}function isReflectList(arg,field){var _a,_b,_c,_d;if(isObject(arg)&&unsafeLocal in arg&&"add"in arg&&"field"in arg&&typeof arg.field=="function"){if(field!==void 0){let a=field,b=arg.field();return a.listKind==b.listKind&&a.scalar===b.scalar&&((_a=a.message)===null||_a===void 0?void 0:_a.typeName)===((_b=b.message)===null||_b===void 0?void 0:_b.typeName)&&((_c=a.enum)===null||_c===void 0?void 0:_c.typeName)===((_d=b.enum)===null||_d===void 0?void 0:_d.typeName)}return!0}return!1}function isReflectMap(arg,field){var _a,_b,_c,_d;if(isObject(arg)&&unsafeLocal in arg&&"has"in arg&&"field"in arg&&typeof arg.field=="function"){if(field!==void 0){let a=field,b=arg.field();return a.mapKey===b.mapKey&&a.mapKind==b.mapKind&&a.scalar===b.scalar&&((_a=a.message)===null||_a===void 0?void 0:_a.typeName)===((_b=b.message)===null||_b===void 0?void 0:_b.typeName)&&((_c=a.enum)===null||_c===void 0?void 0:_c.typeName)===((_d=b.enum)===null||_d===void 0?void 0:_d.typeName)}return!0}return!1}function isReflectMessage(arg,messageDesc2){return isObject(arg)&&unsafeLocal in arg&&"desc"in arg&&isObject(arg.desc)&&arg.desc.kind==="message"&&(messageDesc2===void 0||arg.desc.typeName==messageDesc2.typeName)}function isWrapper(arg){return isWrapperTypeName(arg.$typeName)}function isWrapperDesc(messageDesc2){let f=messageDesc2.fields[0];return isWrapperTypeName(messageDesc2.typeName)&&f!==void 0&&f.fieldKind=="scalar"&&f.name=="value"&&f.number==1}function hasCustomJsonRepresentation(desc){switch(desc.typeName){case"google.protobuf.Any":case"google.protobuf.Timestamp":case"google.protobuf.Duration":case"google.protobuf.FieldMask":case"google.protobuf.Struct":case"google.protobuf.Value":case"google.protobuf.ListValue":return!0;default:return isWrapperDesc(desc)}}var wrapperTypeNames=new Set(["google.protobuf.DoubleValue","google.protobuf.FloatValue","google.protobuf.Int64Value","google.protobuf.UInt64Value","google.protobuf.Int32Value","google.protobuf.UInt32Value","google.protobuf.BoolValue","google.protobuf.StringValue","google.protobuf.BytesValue"]);function isWrapperTypeName(name){return wrapperTypeNames.has(name)}var EDITION_PROTO3=999,EDITION_PROTO2=998,IMPLICIT2=2;function create(schema,init){return isMessage(init,schema)?init:compiledCreate(schema)(init)}var compiledCreates=new WeakMap;function compiledCreate(desc){let compiled=compiledCreates.get(desc);return compiled===void 0&&(compiled=compileCreate(desc),compiledCreates.set(desc,compiled)),compiled}var INIT_SINGULAR=0,INIT_LIST=1,INIT_MAP=2,INIT_ONEOF=3;function compileCreate(desc){let typeName=desc.typeName,{properties,prototype}=compileInitMessage(desc);return init=>{let message;prototype!==void 0?(message=Object.create(prototype),message.$typeName=typeName):message={$typeName:typeName};for(let i=0;i<properties.length;i++){let property=properties[i],name=property.name,initValue=init?.[name];switch(property.kind){case INIT_SINGULAR:initValue!=null?message[name]=property.convert!==void 0?property.convert(initValue):initValue:property.constant!==void 0&&(message[name]=property.constant);break;case INIT_LIST:message[name]=property.convert!==void 0&&Array.isArray(initValue)?initValue.map(property.convert):initValue??[];break;case INIT_MAP:if(property.convert===void 0||!isObject(initValue))message[name]=initValue??{};else{let converted={},keys=Object.keys(initValue);for(let k=0;k<keys.length;k++)converted[keys[k]]=property.convert(initValue[keys[k]]);message[name]=converted}break;case INIT_ONEOF:{let oneofValue=initValue;if(oneofValue?.case!=null){let convert=property.convert.get(oneofValue.case);if(convert!==void 0){message[name]={case:oneofValue.case,value:convert(oneofValue.value)};break}}message[name]={case:void 0};break}}}return message}}function compileInitMessage(desc){var _a,_b;let properties=[],prototype={},usePrototype=needsPrototypeChain(desc);for(let member of desc.members){let name=member.localName;if(member.kind=="oneof"){properties.push({name,kind:INIT_ONEOF,constant:void 0,convert:compileConvertOneof(member)});continue}switch(member.fieldKind){case"message":{properties.push({name,kind:INIT_SINGULAR,constant:void 0,convert:compileConvertMessage(member)});break}case"list":{properties.push({name,kind:INIT_LIST,constant:void 0,convert:member.listKind=="message"?(_a=compileConvertMessage(member))!==null&&_a!==void 0?_a:(value=>value):member.scalar==ScalarType.BYTES?toU8Arr:void 0});break}case"map":{properties.push({name,kind:INIT_MAP,constant:void 0,convert:member.mapKind=="message"?(_b=compileConvertMessage(member))!==null&&_b!==void 0?_b:(value=>value):member.scalar==ScalarType.BYTES?toU8Arr:void 0});break}default:{let zeroValue=createZeroValue(member);properties.push({name,kind:INIT_SINGULAR,constant:member.presence==IMPLICIT2?zeroValue:void 0,convert:member.fieldKind=="scalar"&&member.scalar==ScalarType.BYTES?toU8Arr:void 0}),usePrototype&&(prototype[name]=zeroValue);break}}}return{properties,prototype:usePrototype?prototype:void 0}}function compileConvertOneof(oneof){let converters=new Map;for(let field of oneof.fields){let convert;field.fieldKind=="message"?convert=compileConvertMessage(field):field.fieldKind=="scalar"&&field.scalar==ScalarType.BYTES&&(convert=toU8Arr),converters.set(field.localName,convert??(value=>value))}return converters}function compileConvertMessage(field){if(field.fieldKind=="message"&&!field.oneof&&isWrapperDesc(field.message))return field.message.fields[0].scalar==ScalarType.BYTES?toU8Arr:void 0;if(field.message.typeName=="google.protobuf.Struct"&&field.parent.typeName!=="google.protobuf.Value")return;let messageDesc2=field.message,compiled;return value=>!isObject(value)||isMessage(value,messageDesc2)?value:(compiled??(compiled=compiledCreate(messageDesc2)),compiled(value))}function toU8Arr(value){return Array.isArray(value)?new Uint8Array(value):value}function needsPrototypeChain(desc){switch(desc.file.edition){case EDITION_PROTO3:return!1;case EDITION_PROTO2:return!0;default:return desc.fields.some(f=>f.presence!=IMPLICIT2&&f.fieldKind!="message"&&!f.oneof)}}function createZeroValue(field){let defaultValue=field.getDefaultValue();return defaultValue!==void 0?field.fieldKind=="scalar"&&field.longAsString?defaultValue.toString():defaultValue:field.fieldKind=="scalar"?scalarZeroValue(field.scalar,field.longAsString):field.enum.values[0].number}var errorNames=["FieldValueInvalidError","FieldListRangeError","ForeignFieldError"],FieldError=class extends Error{constructor(fieldOrOneof,message,name="FieldValueInvalidError"){super(message),this.name=name,this.field=()=>fieldOrOneof}};function isFieldError(arg){return arg instanceof Error&&errorNames.includes(arg.name)&&"field"in arg&&typeof arg.field=="function"}var symbol=Symbol.for("@bufbuild/protobuf/text-encoding");function configureTextEncoding(textEncoding){var _a;globalThis[symbol]=Object.assign(Object.assign({},textEncoding),{encodeUtf8Into:(_a=textEncoding.encodeUtf8Into)!==null&&_a!==void 0?_a:emulateEncodeInto(textEncoding.encodeUtf8.bind(textEncoding))})}function getTextEncoding(){let globals=globalThis;if(!globals[symbol]){let textEncoder=new globals.TextEncoder,textDecoder=new globals.TextDecoder,textDecoderStrict,config={encodeUtf8(text){return textEncoder.encode(text)},decodeUtf8(bytes,strict){return strict?(textDecoderStrict||(textDecoderStrict=new globals.TextDecoder("utf-8",{fatal:!0})),textDecoderStrict.decode(bytes)):textDecoder.decode(bytes)},checkUtf8(text){try{return encodeURIComponent(text),!0}catch{return!1}}};textEncoder.encodeInto&&(config.encodeUtf8Into=textEncoder.encodeInto.bind(textEncoder));let nativeStringIsWellFormed=String.prototype.isWellFormed;nativeStringIsWellFormed&&(config.checkUtf8=text=>nativeStringIsWellFormed.call(text)),configureTextEncoding(config)}return globals[symbol]}function emulateEncodeInto(encodeUtf8){return(text,dest)=>{let bytes=encodeUtf8(text);return dest.set(bytes),{written:bytes.byteLength}}}var WireType;(function(WireType2){WireType2[WireType2.Varint=0]="Varint",WireType2[WireType2.Bit64=1]="Bit64",WireType2[WireType2.LengthDelimited=2]="LengthDelimited",WireType2[WireType2.StartGroup=3]="StartGroup",WireType2[WireType2.EndGroup=4]="EndGroup",WireType2[WireType2.Bit32=5]="Bit32"})(WireType||(WireType={}));var FLOAT32_MAX=34028234663852886e22,FLOAT32_MIN=-34028234663852886e22,UINT32_MAX=4294967295,INT32_MAX=2147483647,INT32_MIN=-2147483648,BinaryWriter=class{constructor(encodeUtf8){this.stackPos=[],this.encodeUtf8Into=encodeUtf8?emulateEncodeInto(encodeUtf8):getTextEncoding().encodeUtf8Into,this.buffer=EMPTY_BUFFER,this.viewCache=EMPTY_VIEW,this.pos=0}ensureCapacity(size){let required=this.pos+size;if(required>this.buffer.length){let newLen=this.buffer.length||INITIAL_SIZE;for(;newLen<required;)newLen*=2;let newBuf=new Uint8Array(newLen);this.pos>0&&newBuf.set(this.buffer),this.buffer=newBuf}}view(){let bytes=this.buffer,view=this.viewCache;if(view.byteLength===bytes.byteLength)return view;let newView=new DataView(bytes.buffer);return this.viewCache=newView,newView}finish(){let result=this.buffer.slice(0,this.pos);return this.pos=0,this.stackPos=[],result}fork(){return this.stackPos.push(this.pos),this.ensureCapacity(DEFAULT_LEN_PREFIX_SIZE),this.buffer[this.pos++]=0,this}join(){let forkPos=this.stackPos.pop();if(forkPos===void 0)throw new Error("invalid state, fork stack empty");let len=this.pos-forkPos-DEFAULT_LEN_PREFIX_SIZE,lenPrefixSize=varint32Size(len);return lenPrefixSize>DEFAULT_LEN_PREFIX_SIZE&&(this.ensureCapacity(lenPrefixSize-DEFAULT_LEN_PREFIX_SIZE),this.buffer.copyWithin(forkPos+lenPrefixSize,forkPos+DEFAULT_LEN_PREFIX_SIZE,this.pos)),this.pos=forkPos,this.uint32(len),this.pos+=len,this}tag(fieldNo,type){return this.uint32((fieldNo<<3|type)>>>0)}raw(chunk){return this.ensureCapacity(chunk.length),this.buffer.set(chunk,this.pos),this.pos+=chunk.length,this}uint32(value){if(assertUInt32(value),this.ensureCapacity(5),value<128)return this.buffer[this.pos++]=value,this;for(;value>127;)this.buffer[this.pos++]=value&127|128,value>>>=7;return this.buffer[this.pos++]=value,this}int32(value){if(assertInt32(value),value>=0)return this.uint32(value);this.ensureCapacity(10);for(let i=0;i<9;i++)this.buffer[this.pos++]=value&127|128,value>>=7;return this.buffer[this.pos++]=1,this}bool(value){return this.ensureCapacity(1),this.buffer[this.pos++]=value?1:0,this}bytes(value){return this.uint32(value.byteLength),this.raw(value)}string(value){typeof value!="string"&&(value=String(value));let len=value.length;if(len<=ASCII_MAX_LENGTH){this.ensureCapacity(len+1);let ascii=this.buffer,pos=this.pos;ascii[pos++]=len;let i=0;for(;i<len;i++){let code=value.charCodeAt(i);if(code>127)break;ascii[pos++]=code}if(i==len)return this.pos=pos,this}this.ensureCapacity(len*3+5);let lenPrefixSizeGuess=varint32Size(len),buf=this.buffer,start=this.pos,{written}=this.encodeUtf8Into(value,buf.subarray(start+lenPrefixSizeGuess)),lenPrefixSize=varint32Size(written);return lenPrefixSize!=lenPrefixSizeGuess&&buf.copyWithin(start+lenPrefixSize,start+lenPrefixSizeGuess,start+lenPrefixSizeGuess+written),this.uint32(written),this.pos+=written,this}float(value){return assertFloat32(value),this.ensureCapacity(4),this.view().setFloat32(this.pos,value,!0),this.pos+=4,this}double(value){return this.ensureCapacity(8),this.view().setFloat64(this.pos,value,!0),this.pos+=8,this}fixed32(value){return assertUInt32(value),this.ensureCapacity(4),this.view().setUint32(this.pos,value,!0),this.pos+=4,this}sfixed32(value){return assertInt32(value),this.ensureCapacity(4),this.view().setInt32(this.pos,value,!0),this.pos+=4,this}sint32(value){return assertInt32(value),this.uint32((value<<1^value>>31)>>>0)}sfixed64(value){let tc=protoInt64.enc(value);this.ensureCapacity(8);let view=this.view();return view.setInt32(this.pos,tc.lo,!0),view.setInt32(this.pos+4,tc.hi,!0),this.pos+=8,this}fixed64(value){let tc=protoInt64.uEnc(value);this.ensureCapacity(8);let view=this.view();return view.setInt32(this.pos,tc.lo,!0),view.setInt32(this.pos+4,tc.hi,!0),this.pos+=8,this}int64(value){let tc=protoInt64.enc(value);return this.writeVarint64(tc.lo,tc.hi)}sint64(value){let tc=protoInt64.enc(value),sign=tc.hi>>31,lo=tc.lo<<1^sign,hi=(tc.hi<<1|tc.lo>>>31)^sign;return this.writeVarint64(lo,hi)}uint64(value){let tc=protoInt64.uEnc(value);return this.writeVarint64(tc.lo,tc.hi)}writeVarint64(lo,hi){this.ensureCapacity(10);let buf=this.buffer,pos=this.pos;for(let i=0;i<28;i=i+7){let shift=lo>>>i,hasNext=!(!(shift>>>7)&&hi==0);if(buf[pos++]=(hasNext?shift|128:shift)&255,!hasNext)return this.pos=pos,this}let splitBits=lo>>>28&15|(hi&7)<<4,hasMoreBits=hi>>3!=0;if(buf[pos++]=(hasMoreBits?splitBits|128:splitBits)&255,!hasMoreBits)return this.pos=pos,this;for(let i=3;i<31;i=i+7){let shift=hi>>>i,hasNext=!!(shift>>>7);if(buf[pos++]=(hasNext?shift|128:shift)&255,!hasNext)return this.pos=pos,this}return buf[pos++]=hi>>>31&1,this.pos=pos,this}},INITIAL_SIZE=128,DEFAULT_LEN_PREFIX_SIZE=1,EMPTY_BUFFER=new Uint8Array(0),EMPTY_VIEW=new DataView(EMPTY_BUFFER.buffer),ASCII_MAX_LENGTH=32;function varint32Size(value){return value<128?1:value<16384?2:value<2097152?3:value<268435456?4:5}var BinaryReader=class{constructor(buf,decodeUtf8=getTextEncoding().decodeUtf8){this.decodeUtf8=decodeUtf8,this.varint64Lo=0,this.varint64Hi=0,this.varint64=varint64read,this.uint32=varint32read,this.buf=buf,this.len=buf.length,this.pos=0,this.view=new DataView(buf.buffer,buf.byteOffset,buf.byteLength)}tag(){let start=this.pos,tag=this.uint32(),bytesRead=this.pos-start;if(bytesRead>5||bytesRead==5&&this.buf[this.pos-1]>15)throw new Error("illegal tag: varint overflows uint32");let fieldNo=tag>>>3,wireType=tag&7;if(fieldNo<=0||wireType>5)throw new Error("illegal tag: field no "+fieldNo+" wire type "+wireType);return[fieldNo,wireType]}skip(wireType,fieldNo,recursionLimit=100){let start=this.pos;switch(wireType){case WireType.Varint:for(;this.buf[this.pos++]&128;);break;case WireType.Bit64:this.pos+=4;case WireType.Bit32:this.pos+=4;break;case WireType.LengthDelimited:let len=this.uint32();this.pos+=len;break;case WireType.StartGroup:if(recursionLimit<=0)throw new Error("maximum recursion depth reached");for(;;){let[fn,wt]=this.tag();if(wt===WireType.EndGroup){if(fieldNo!==void 0&&fn!==fieldNo)throw new Error("invalid end group tag");break}this.skip(wt,fn,recursionLimit-1)}break;default:throw new Error("cant skip wire type "+wireType)}return this.assertBounds(),this.buf.subarray(start,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let zze=this.uint32();return zze>>>1^-(zze&1)}int64(){return this.varint64(),protoInt64.dec(this.varint64Lo,this.varint64Hi)}uint64(){return this.varint64(),protoInt64.uDec(this.varint64Lo,this.varint64Hi)}sint64(){this.varint64();let lo=this.varint64Lo,hi=this.varint64Hi,s=-(lo&1);return lo=(lo>>>1|(hi&1)<<31)^s,hi=hi>>>1^s,protoInt64.dec(lo,hi)}bool(){let b=this.buf[this.pos];return b<128?(this.pos++,b!==0):(this.varint64(),this.varint64Lo!==0||this.varint64Hi!==0)}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return protoInt64.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return protoInt64.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let len=this.uint32(),start=this.pos;return this.pos+=len,this.assertBounds(),this.buf.subarray(start,start+len)}string(strict){let bytes=this.bytes(),len=bytes.length;if(len<=ASCII_MAX_LENGTH){let codes=new Array(len);for(let i=0;i<len;i++){let byte=bytes[i];if(byte>127)return this.decodeUtf8(bytes,strict);codes[i]=byte}return String.fromCharCode.apply(String,codes)}return this.decodeUtf8(bytes,strict)}};function assertInt32(arg){if(typeof arg=="string")arg=Number(arg);else if(typeof arg!="number")throw new Error("invalid int32: "+typeof arg);if(!Number.isInteger(arg)||arg>INT32_MAX||arg<INT32_MIN)throw new Error("invalid int32: "+arg)}function assertUInt32(arg){if(typeof arg=="string")arg=Number(arg);else if(typeof arg!="number")throw new Error("invalid uint32: "+typeof arg);if(!Number.isInteger(arg)||arg>UINT32_MAX||arg<0)throw new Error("invalid uint32: "+arg)}function assertFloat32(arg){if(typeof arg=="string"){let o=arg;if(arg=Number(arg),Number.isNaN(arg)&&o!=="NaN")throw new Error("invalid float32: "+o)}else if(typeof arg!="number")throw new Error("invalid float32: "+typeof arg);if(Number.isFinite(arg)&&(arg>FLOAT32_MAX||arg<FLOAT32_MIN))throw new Error("invalid float32: "+arg)}function checkField(field,value){let check=field.fieldKind=="list"?isReflectList(value,field):field.fieldKind=="map"?isReflectMap(value,field):checkSingular(field,value);if(check===!0)return;let reason;switch(field.fieldKind){case"list":reason=`expected ${formatReflectList(field)}, got ${formatVal(value)}`;break;case"map":reason=`expected ${formatReflectMap(field)}, got ${formatVal(value)}`;break;default:reason=reasonSingular(field,value,check)}return new FieldError(field,reason)}function checkListItem(field,index,value){let check=checkSingular(field,value);if(check!==!0)return new FieldError(field,`list item #${index+1}: ${reasonSingular(field,value,check)}`)}function checkMapEntry(field,key,value){let checkKey=checkScalarValue(field.mapKey)(key);if(checkKey!==!0)return new FieldError(field,`invalid map key: ${reasonSingular({scalar:field.mapKey},key,checkKey)}`);let checkVal=checkSingular(field,value);if(checkVal!==!0)return new FieldError(field,`map entry ${formatVal(key)}: ${reasonSingular(field,value,checkVal)}`)}function checkSingular(field,value){return field.scalar!==void 0?checkScalarValue(field.scalar)(value):field.enum!==void 0?field.enum.open?checkScalarValue(ScalarType.INT32)(value):field.enum.values.some(v=>v.number===value):isReflectMessage(value,field.message)}function checkScalarValue(scalar){switch(scalar){case ScalarType.DOUBLE:return value=>typeof value=="number";case ScalarType.FLOAT:return value=>typeof value!="number"?!1:Number.isNaN(value)||!Number.isFinite(value)?!0:value>FLOAT32_MAX||value<FLOAT32_MIN?`${value.toFixed()} out of range`:!0;case ScalarType.INT32:case ScalarType.SFIXED32:case ScalarType.SINT32:return value=>typeof value!="number"||!Number.isInteger(value)?!1:value>INT32_MAX||value<INT32_MIN?`${value.toFixed()} out of range`:!0;case ScalarType.FIXED32:case ScalarType.UINT32:return value=>typeof value!="number"||!Number.isInteger(value)?!1:value>UINT32_MAX||value<0?`${value.toFixed()} out of range`:!0;case ScalarType.BOOL:return value=>typeof value=="boolean";case ScalarType.STRING:return value=>typeof value!="string"?!1:getTextEncoding().checkUtf8(value)||"invalid UTF8";case ScalarType.BYTES:return value=>value instanceof Uint8Array;case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:return value=>{if(typeof value=="bigint"||typeof value=="number"||typeof value=="string"&&value.length>0)try{return protoInt64.parse(value),!0}catch{return`${value} out of range`}return!1};case ScalarType.FIXED64:case ScalarType.UINT64:return value=>{if(typeof value=="bigint"||typeof value=="number"||typeof value=="string"&&value.length>0)try{return protoInt64.uParse(value),!0}catch{return`${value} out of range`}return!1}}}function reasonSingular(field,val,details){return details=typeof details=="string"?`: ${details}`:`, got ${formatVal(val)}`,field.scalar!==void 0?`expected ${scalarTypeDescription(field.scalar)}`+details:field.enum!==void 0?`expected ${field.enum.toString()}`+details:`expected ${formatReflectMessage(field.message)}`+details}function formatVal(val){switch(typeof val){case"object":return val===null?"null":val instanceof Uint8Array?`Uint8Array(${val.length})`:Array.isArray(val)?`Array(${val.length})`:isReflectList(val)?formatReflectList(val.field()):isReflectMap(val)?formatReflectMap(val.field()):isReflectMessage(val)?formatReflectMessage(val.desc):isMessage(val)?`message ${val.$typeName}`:"object";case"string":return val.length>30?"string":`"${val.split('"').join('\\"')}"`;case"boolean":return String(val);case"number":return String(val);case"bigint":return String(val)+"n";default:return typeof val}}function formatReflectMessage(desc){return`ReflectMessage (${desc.typeName})`}function formatReflectList(field){switch(field.listKind){case"message":return`ReflectList (${field.message.toString()})`;case"enum":return`ReflectList (${field.enum.toString()})`;case"scalar":return`ReflectList (${ScalarType[field.scalar]})`}}function formatReflectMap(field){switch(field.mapKind){case"message":return`ReflectMap (${ScalarType[field.mapKey]}, ${field.message.toString()})`;case"enum":return`ReflectMap (${ScalarType[field.mapKey]}, ${field.enum.toString()})`;case"scalar":return`ReflectMap (${ScalarType[field.mapKey]}, ${ScalarType[field.scalar]})`}}function scalarTypeDescription(scalar){switch(scalar){case ScalarType.STRING:return"string";case ScalarType.BOOL:return"boolean";case ScalarType.INT64:case ScalarType.SINT64:case ScalarType.SFIXED64:return"bigint (int64)";case ScalarType.UINT64:case ScalarType.FIXED64:return"bigint (uint64)";case ScalarType.BYTES:return"Uint8Array";case ScalarType.DOUBLE:return"number (float64)";case ScalarType.FLOAT:return"number (float32)";case ScalarType.FIXED32:case ScalarType.UINT32:return"number (uint32)";case ScalarType.INT32:case ScalarType.SFIXED32:case ScalarType.SINT32:return"number (int32)"}}var NULL_VALUE=0;function localMessageMapper(field){if(usesJsonRepresentation(field))return{toMessage:local=>wktStructToReflect(local),toLocal:message=>wktStructToLocal(message)};if(field.fieldKind=="message"&&!field.oneof&&isWrapperDesc(field.message)){let wrapperDesc=field.message,valueLocalName=wrapperDesc.fields[0].localName;return{toMessage:local=>{let message=create(wrapperDesc);return local!==void 0&&(message[valueLocalName]=local),message},toLocal:message=>message[valueLocalName]}}let childDesc=field.message;return{toMessage:local=>local===void 0?create(childDesc):local,toLocal:message=>message}}function usesJsonRepresentation(field){return field.message.typeName=="google.protobuf.Struct"&&field.parent.typeName!="google.protobuf.Value"}function wktStructToReflect(json){let struct={$typeName:"google.protobuf.Struct",fields:{}};if(isObject(json))for(let k of Object.keys(json))struct.fields[k]=wktValueToReflect(json[k]);return struct}function wktStructToLocal(val){let json={};for(let k of Object.keys(val.fields))json[k]=wktValueToLocal(val.fields[k]);return json}function wktValueToLocal(val){switch(val.kind.case){case"structValue":return wktStructToLocal(val.kind.value);case"listValue":return val.kind.value.values.map(wktValueToLocal);case"nullValue":case void 0:return null;default:return val.kind.value}}function wktValueToReflect(json){let value={$typeName:"google.protobuf.Value",kind:{case:void 0}};switch(typeof json){case"number":value.kind={case:"numberValue",value:json};break;case"string":value.kind={case:"stringValue",value:json};break;case"boolean":value.kind={case:"boolValue",value:json};break;case"object":if(json===null)value.kind={case:"nullValue",value:NULL_VALUE};else if(Array.isArray(json)){let listValue={$typeName:"google.protobuf.ListValue",values:[]};if(Array.isArray(json))for(let e of json)listValue.values.push(wktValueToReflect(e));value.kind={case:"listValue",value:listValue}}else value.kind={case:"structValue",value:wktStructToReflect(json)};break}return value}function reflect(messageDesc2,message,check=!0){return new ReflectMessageImpl(messageDesc2,message,check)}var messageSortedFields=new WeakMap,ReflectMessageImpl=class{get sortedFields(){let cached=messageSortedFields.get(this.desc);if(cached)return cached;let sortedFields=this.desc.fields.concat().sort((a,b)=>a.number-b.number);return messageSortedFields.set(this.desc,sortedFields),sortedFields}constructor(messageDesc2,message,check=!0){this.lists=new Map,this.maps=new Map,this.check=check,this.desc=messageDesc2,this.message=this[unsafeLocal]=message??create(messageDesc2),this.fields=messageDesc2.fields,this.oneofs=messageDesc2.oneofs,this.members=messageDesc2.members}findNumber(number){return this._fieldsByNumber||(this._fieldsByNumber=new Map(this.desc.fields.map(f=>[f.number,f]))),this._fieldsByNumber.get(number)}oneofCase(oneof){return assertOwn(this.message,oneof),unsafeOneofCase(this.message,oneof)}isSet(field){return assertOwn(this.message,field),unsafeIsSet(this.message,field)}clear(field){assertOwn(this.message,field),unsafeClear(this.message,field)}get(field){assertOwn(this.message,field);let value=unsafeGet(this.message,field);switch(field.fieldKind){case"list":let list=this.lists.get(field);return(!list||list[unsafeLocal]!==value)&&this.lists.set(field,list=new ReflectListImpl(field,value,this.check)),list;case"map":let map=this.maps.get(field);return(!map||map[unsafeLocal]!==value)&&this.maps.set(field,map=new ReflectMapImpl(field,value,this.check)),map;case"message":return messageToReflect(field,value,this.check);case"scalar":return value===void 0?scalarZeroValue(field.scalar,!1):longToReflect(field,value);case"enum":return value??field.enum.values[0].number}}set(field,value){if(assertOwn(this.message,field),this.check){let err=checkField(field,value);if(err)throw err}let local;field.fieldKind=="message"?local=messageToLocal(field,value):isReflectMap(value)||isReflectList(value)?local=value[unsafeLocal]:local=longToLocal(field,value),unsafeSet(this.message,field,local)}getUnknown(){return this.message.$unknown}setUnknown(value){this.message.$unknown=value}};function assertOwn(owner,member){if(member.parent.typeName!==owner.$typeName)throw new FieldError(member,`cannot use ${member.toString()} with message ${owner.$typeName}`,"ForeignFieldError")}var ReflectListImpl=class{field(){return this._field}get size(){return this._arr.length}constructor(field,unsafeInput,check){this._field=field,this._arr=this[unsafeLocal]=unsafeInput,this.check=check}get(index){let item=this._arr[index];return item===void 0?void 0:listItemToReflect(this._field,item,this.check)}set(index,item){if(index<0||index>=this._arr.length)throw new FieldError(this._field,`list item #${index+1}: out of range`);if(this.check){let err=checkListItem(this._field,index,item);if(err)throw err}this._arr[index]=listItemToLocal(this._field,item)}add(item){if(this.check){let err=checkListItem(this._field,this._arr.length,item);if(err)throw err}this._arr.push(listItemToLocal(this._field,item))}clear(){this._arr.splice(0,this._arr.length)}[Symbol.iterator](){return this.values()}keys(){return this._arr.keys()}*values(){for(let item of this._arr)yield listItemToReflect(this._field,item,this.check)}*entries(){for(let i=0;i<this._arr.length;i++)yield[i,listItemToReflect(this._field,this._arr[i],this.check)]}};var ReflectMapImpl=class{constructor(field,unsafeInput,check=!0){this.obj=this[unsafeLocal]=unsafeInput??{},this.check=check,this._field=field}field(){return this._field}set(key,value){if(this.check){let err=checkMapEntry(this._field,key,value);if(err)throw err}return this.obj[mapKeyToLocal(key)]=mapValueToLocal(this._field,value),this}delete(key){let k=mapKeyToLocal(key),has=Object.prototype.hasOwnProperty.call(this.obj,k);return has&&delete this.obj[k],has}clear(){for(let key of Object.keys(this.obj))delete this.obj[key]}get(key){let val=this.obj[mapKeyToLocal(key)];return val!==void 0&&(val=mapValueToReflect(this._field,val,this.check)),val}has(key){return Object.prototype.hasOwnProperty.call(this.obj,mapKeyToLocal(key))}*keys(){for(let objKey of Object.keys(this.obj))yield mapKeyToReflect(objKey,this._field.mapKey)}*entries(){for(let objEntry of Object.entries(this.obj))yield[mapKeyToReflect(objEntry[0],this._field.mapKey),mapValueToReflect(this._field,objEntry[1],this.check)]}[Symbol.iterator](){return this.entries()}get size(){return Object.keys(this.obj).length}*values(){for(let val of Object.values(this.obj))yield mapValueToReflect(this._field,val,this.check)}forEach(callbackfn,thisArg){for(let mapEntry of this.entries())callbackfn.call(thisArg,mapEntry[1],mapEntry[0],this)}};function messageToLocal(field,value){return isReflectMessage(value)?isWrapper(value.message)&&!field.oneof&&field.fieldKind=="message"?value.message.value:value.desc.typeName=="google.protobuf.Struct"&&field.parent.typeName!="google.protobuf.Value"?wktStructToLocal(value.message):value.message:value}function messageToReflect(field,value,check){return value!==void 0&&(isWrapperDesc(field.message)&&!field.oneof&&field.fieldKind=="message"?value={$typeName:field.message.typeName,value:longToReflect(field.message.fields[0],value)}:field.message.typeName=="google.protobuf.Struct"&&field.parent.typeName!="google.protobuf.Value"&&isObject(value)&&(value=wktStructToReflect(value))),new ReflectMessageImpl(field.message,value,check)}function listItemToLocal(field,value){return field.listKind=="message"?messageToLocal(field,value):longToLocal(field,value)}function listItemToReflect(field,value,check){return field.listKind=="message"?messageToReflect(field,value,check):longToReflect(field,value)}function mapValueToLocal(field,value){return field.mapKind=="message"?messageToLocal(field,value):longToLocal(field,value)}function mapValueToReflect(field,value,check){return field.mapKind=="message"?messageToReflect(field,value,check):value}function mapKeyToLocal(key){return typeof key=="string"||typeof key=="number"?key:String(key)}function mapKeyToReflect(key,type){switch(type){case ScalarType.STRING:return key;case ScalarType.INT32:case ScalarType.FIXED32:case ScalarType.UINT32:case ScalarType.SFIXED32:case ScalarType.SINT32:{let n=Number.parseInt(key);if(Number.isFinite(n))return n;break}case ScalarType.BOOL:switch(key){case"true":return!0;case"false":return!1}break;case ScalarType.UINT64:case ScalarType.FIXED64:try{return protoInt64.uParse(key)}catch{}break;default:try{return protoInt64.parse(key)}catch{}break}return key}function longToReflect(field,value){switch(field.scalar){case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:"longAsString"in field&&field.longAsString&&typeof value=="string"&&(value=protoInt64.parse(value));break;case ScalarType.FIXED64:case ScalarType.UINT64:"longAsString"in field&&field.longAsString&&typeof value=="string"&&(value=protoInt64.uParse(value));break}return value}function longToLocal(field,value){switch(field.scalar){case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:"longAsString"in field&&field.longAsString?value=String(value):(typeof value=="string"||typeof value=="number")&&(value=protoInt64.parse(value));break;case ScalarType.FIXED64:case ScalarType.UINT64:"longAsString"in field&&field.longAsString?value=String(value):(typeof value=="string"||typeof value=="number")&&(value=protoInt64.uParse(value));break}return value}var nativeSetFromBase64=Uint8Array.prototype.setFromBase64;function base64Decode(base64Str){let len=base64Str.length,size=len-(len+3>>2);(len&3)==0&&base64Str[len-1]=="="&&(size-=base64Str[len-2]=="="?2:1);let bytes=new Uint8Array(size),written=-1;if(nativeSetFromBase64)try{let result=nativeSetFromBase64.call(bytes,base64Str);result.read==len&&(written=result.written)}catch{}return written<0&&(written=setFromBase64(bytes,base64Str)),written==size?bytes:bytes.subarray(0,written)}function setFromBase64(bytes,base64Str){let table=getDecodeTable(),bytePos=0,groupPos=0,b,p=0;for(let i=0;i<base64Str.length;i++){if(b=table[base64Str.charCodeAt(i)],b===void 0)switch(base64Str[i]){case"=":groupPos=0;case`
4
+ `:case"\r":case" ":case" ":continue;default:throw Error("invalid base64 string")}switch(groupPos){case 0:p=b,groupPos=1;break;case 1:bytes[bytePos++]=p<<2|(b&48)>>4,p=b,groupPos=2;break;case 2:bytes[bytePos++]=(p&15)<<4|(b&60)>>2,p=b,groupPos=3;break;case 3:bytes[bytePos++]=(p&3)<<6|b,groupPos=0;break}}if(groupPos==1)throw Error("invalid base64 string");return bytePos}var nativeToBase64=Uint8Array.prototype.toBase64,toBase64OptionsMap={std:{alphabet:"base64",omitPadding:!1},std_raw:{alphabet:"base64",omitPadding:!0},url:{alphabet:"base64url",omitPadding:!0}};function base64Encode(bytes,encoding="std"){if(nativeToBase64)return nativeToBase64.call(bytes,toBase64OptionsMap[encoding]);let table=getEncodeTable(encoding),pad=encoding=="std",base64="",groupPos=0,b,p=0;for(let i=0;i<bytes.length;i++)switch(b=bytes[i],groupPos){case 0:base64+=table[b>>2],p=(b&3)<<4,groupPos=1;break;case 1:base64+=table[p|b>>4],p=(b&15)<<2,groupPos=2;break;case 2:base64+=table[p|b>>6],base64+=table[b&63],groupPos=0;break}return groupPos&&(base64+=table[p],pad&&(base64+="=",groupPos==1&&(base64+="="))),base64}var encodeTableStd,encodeTableUrl,decodeTable;function getEncodeTable(encoding){return encodeTableStd||(encodeTableStd="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),encodeTableUrl=encodeTableStd.slice(0,-2).concat("-","_")),encoding=="url"?encodeTableUrl:encodeTableStd}function getDecodeTable(){if(!decodeTable){decodeTable=[];let encodeTable=getEncodeTable("std");for(let i=0;i<encodeTable.length;i++)decodeTable[encodeTable[i].charCodeAt(0)]=i;decodeTable[45]=encodeTable.indexOf("+"),decodeTable[95]=encodeTable.indexOf("/")}return decodeTable}function protoCamelCase(snakeCase){let capNext=!1,b=[];for(let i=0;i<snakeCase.length;i++){let c=snakeCase.charAt(i);switch(c){case"_":capNext=!0;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":b.push(c),capNext=!1;break;default:capNext&&(capNext=!1,c=c.toUpperCase()),b.push(c);break}}return b.join("")}function protoSnakeCase(lowerCamelCase){return lowerCamelCase.replace(/[A-Z]/g,letter=>"_"+letter.toLowerCase())}var reservedObjectProperties=new Set(["constructor","toString","toJSON","valueOf"]);function safeObjectProperty(name){return reservedObjectProperties.has(name)?name+"$":name}function restoreJsonNames(message){for(let f of message.field)unsafeIsSetExplicit(f,"jsonName")||(f.jsonName=protoCamelCase(f.name));message.nestedType.forEach(restoreJsonNames)}function parseTextFormatEnumValue(descEnum,value){let enumValue=descEnum.values.find(v=>v.name===value);if(!enumValue)throw new Error(`cannot parse ${descEnum} default value: ${value}`);return enumValue.number}function parseTextFormatScalarValue(type,value){switch(type){case ScalarType.STRING:return value;case ScalarType.BYTES:{let u=unescapeBytesDefaultValue(value);if(u===!1)throw new Error(`cannot parse ${ScalarType[type]} default value: ${value}`);return u}case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:return protoInt64.parse(value);case ScalarType.UINT64:case ScalarType.FIXED64:return protoInt64.uParse(value);case ScalarType.DOUBLE:case ScalarType.FLOAT:switch(value){case"inf":return Number.POSITIVE_INFINITY;case"-inf":return Number.NEGATIVE_INFINITY;case"nan":return Number.NaN;default:return parseFloat(value)}case ScalarType.BOOL:return value==="true";case ScalarType.INT32:case ScalarType.UINT32:case ScalarType.SINT32:case ScalarType.FIXED32:case ScalarType.SFIXED32:return parseInt(value,10)}}function unescapeBytesDefaultValue(str){let b=[],input={tail:str,c:"",next(){return this.tail.length==0?!1:(this.c=this.tail[0],this.tail=this.tail.substring(1),!0)},take(n){if(this.tail.length>=n){let r=this.tail.substring(0,n);return this.tail=this.tail.substring(n),r}return!1}};for(;input.next();)switch(input.c){case"\\":if(input.next())switch(input.c){case"\\":b.push(input.c.charCodeAt(0));break;case"b":b.push(8);break;case"f":b.push(12);break;case"n":b.push(10);break;case"r":b.push(13);break;case"t":b.push(9);break;case"v":b.push(11);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":{let s=input.c,t=input.take(2);if(t===!1)return!1;let n=parseInt(s+t,8);if(Number.isNaN(n))return!1;b.push(n);break}case"x":{let s=input.c,t=input.take(2);if(t===!1)return!1;let n=parseInt(s+t,16);if(Number.isNaN(n))return!1;b.push(n);break}case"u":{let s=input.c,t=input.take(4);if(t===!1)return!1;let n=parseInt(s+t,16);if(Number.isNaN(n))return!1;let chunk=new Uint8Array(4);new DataView(chunk.buffer).setInt32(0,n,!0),b.push(chunk[0],chunk[1],chunk[2],chunk[3]);break}case"U":{let s=input.c,t=input.take(8);if(t===!1)return!1;let tc=protoInt64.uEnc(s+t),chunk=new Uint8Array(8),view=new DataView(chunk.buffer);view.setInt32(0,tc.lo,!0),view.setInt32(4,tc.hi,!0),b.push(chunk[0],chunk[1],chunk[2],chunk[3],chunk[4],chunk[5],chunk[6],chunk[7]);break}}break;default:b.push(input.c.charCodeAt(0))}return new Uint8Array(b)}function*nestedTypes(desc){switch(desc.kind){case"file":for(let message of desc.messages)yield message,yield*nestedTypes(message);yield*desc.enums,yield*desc.services,yield*desc.extensions;break;case"message":for(let message of desc.nestedMessages)yield message,yield*nestedTypes(message);yield*desc.nestedEnums,yield*desc.nestedExtensions;break}}function createFileRegistry(...args){let registry=createBaseRegistry();if(!args.length)return registry;if("$typeName"in args[0]&&args[0].$typeName=="google.protobuf.FileDescriptorSet"){for(let file of args[0].file)addFile(file,registry);return registry}if("$typeName"in args[0]){let recurseDeps=function(file){let deps=[];for(let protoFileName of file.dependency){if(registry.getFile(protoFileName)!=null||seen.has(protoFileName))continue;let dep=resolve(protoFileName);if(!dep)throw new Error(`Unable to resolve ${protoFileName}, imported by ${file.name}`);"kind"in dep?registry.addFile(dep,!1,!0):(seen.add(dep.name),deps.push(dep))}return deps.concat(...deps.map(recurseDeps))},input=args[0],resolve=args[1],seen=new Set;for(let file of[input,...recurseDeps(input)].reverse())addFile(file,registry)}else for(let fileReg of args)for(let file of fileReg.files)registry.addFile(file);return registry}function createBaseRegistry(){let types=new Map,extendees=new Map,files=new Map;return{kind:"registry",types,extendees,[Symbol.iterator](){return types.values()},get files(){return files.values()},addFile(file,skipTypes,withDeps){if(files.set(file.proto.name,file),!skipTypes)for(let type of nestedTypes(file))this.add(type);if(withDeps)for(let f of file.dependencies)this.addFile(f,skipTypes,withDeps)},add(desc){if(desc.kind=="extension"){let numberToExt=extendees.get(desc.extendee.typeName);numberToExt||extendees.set(desc.extendee.typeName,numberToExt=new Map),numberToExt.set(desc.number,desc)}types.set(desc.typeName,desc)},get(typeName){return types.get(typeName)},getFile(fileName){return files.get(fileName)},getMessage(typeName){let t=types.get(typeName);return t?.kind=="message"?t:void 0},getEnum(typeName){let t=types.get(typeName);return t?.kind=="enum"?t:void 0},getExtension(typeName){let t=types.get(typeName);return t?.kind=="extension"?t:void 0},getExtensionFor(extendee,no){var _a;return(_a=extendees.get(extendee.typeName))===null||_a===void 0?void 0:_a.get(no)},getService(typeName){let t=types.get(typeName);return t?.kind=="service"?t:void 0}}}var EDITION_PROTO22=998,EDITION_PROTO32=999,EDITION_UNSTABLE=9999,TYPE_STRING=9,TYPE_GROUP=10,TYPE_MESSAGE=11,TYPE_BYTES=12,TYPE_ENUM=14,LABEL_REPEATED=3,LABEL_REQUIRED=2,JS_STRING=1,IDEMPOTENCY_UNKNOWN=0,EXPLICIT=1,IMPLICIT3=2,LEGACY_REQUIRED=3,PACKED=1,DELIMITED=2,OPEN=1,VERIFY=2;var maximumEdition=1001,featureDefaults={998:{fieldPresence:1,enumType:2,repeatedFieldEncoding:2,utf8Validation:3,messageEncoding:1,jsonFormat:2,enforceNamingStyle:2,defaultSymbolVisibility:1},999:{fieldPresence:2,enumType:1,repeatedFieldEncoding:1,utf8Validation:2,messageEncoding:1,jsonFormat:1,enforceNamingStyle:2,defaultSymbolVisibility:1},1e3:{fieldPresence:1,enumType:1,repeatedFieldEncoding:1,utf8Validation:2,messageEncoding:1,jsonFormat:1,enforceNamingStyle:2,defaultSymbolVisibility:1},1001:{fieldPresence:1,enumType:1,repeatedFieldEncoding:1,utf8Validation:2,messageEncoding:1,jsonFormat:1,enforceNamingStyle:1,defaultSymbolVisibility:2}};function addFile(proto,reg){var _a,_b;let file={kind:"file",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,edition:getFileEdition(proto),name:proto.name.replace(/\.proto$/,""),dependencies:findFileDependencies(proto,reg),enums:[],messages:[],extensions:[],services:[],toString(){return`file ${proto.name}`}},mapEntriesStore=new Map,mapEntries={get(typeName){return mapEntriesStore.get(typeName)},add(desc){var _a2;assert(((_a2=desc.proto.options)===null||_a2===void 0?void 0:_a2.mapEntry)===!0),mapEntriesStore.set(desc.typeName,desc)}};for(let enumProto of proto.enumType)addEnum(enumProto,file,void 0,reg);for(let messageProto of proto.messageType)addMessage(messageProto,file,void 0,reg,mapEntries);for(let serviceProto of proto.service)addService(serviceProto,file,reg);addExtensions(file,reg);for(let mapEntry of mapEntriesStore.values())addFields(mapEntry,reg,mapEntries);for(let message of file.messages)addFields(message,reg,mapEntries),addExtensions(message,reg);reg.addFile(file,!0)}function addExtensions(desc,reg){switch(desc.kind){case"file":for(let proto of desc.proto.extension){let ext=newField(proto,desc,reg);desc.extensions.push(ext),reg.add(ext)}break;case"message":for(let proto of desc.proto.extension){let ext=newField(proto,desc,reg);desc.nestedExtensions.push(ext),reg.add(ext)}for(let message of desc.nestedMessages)addExtensions(message,reg);break}}function addFields(message,reg,mapEntries){let allOneofs=message.proto.oneofDecl.map(proto=>newOneof(proto,message)),oneofsSeen=new Set;for(let proto of message.proto.field){let oneof=findOneof(proto,allOneofs),field=newField(proto,message,reg,oneof,mapEntries);message.fields.push(field),message.field[field.localName]=field,oneof===void 0?message.members.push(field):(oneof.fields.push(field),oneofsSeen.has(oneof)||(oneofsSeen.add(oneof),message.members.push(oneof)))}for(let oneof of allOneofs.filter(o=>oneofsSeen.has(o)))message.oneofs.push(oneof);for(let child of message.nestedMessages)addFields(child,reg,mapEntries)}function addEnum(proto,file,parent,reg){var _a,_b,_c,_d,_e;let sharedPrefix=findEnumSharedPrefix(proto.name,proto.value),desc={kind:"enum",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,file,parent,open:!0,name:proto.name,typeName:makeTypeName(proto,parent,file),value:{},values:[],sharedPrefix,toString(){return`enum ${this.typeName}`}};desc.open=isEnumOpen(desc),reg.add(desc);for(let p of proto.value){let name=p.name;desc.values.push(desc.value[p.number]={kind:"enum_value",proto:p,deprecated:(_d=(_c=p.options)===null||_c===void 0?void 0:_c.deprecated)!==null&&_d!==void 0?_d:!1,parent:desc,name,localName:safeObjectProperty(sharedPrefix==null?name:name.substring(sharedPrefix.length)),number:p.number,toString(){return`enum value ${desc.typeName}.${name}`}})}((_e=parent?.nestedEnums)!==null&&_e!==void 0?_e:file.enums).push(desc)}function addMessage(proto,file,parent,reg,mapEntries){var _a,_b,_c,_d;let desc={kind:"message",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,file,parent,name:proto.name,typeName:makeTypeName(proto,parent,file),fields:[],field:{},oneofs:[],members:[],nestedEnums:[],nestedMessages:[],nestedExtensions:[],toString(){return`message ${this.typeName}`}};((_c=proto.options)===null||_c===void 0?void 0:_c.mapEntry)===!0?mapEntries.add(desc):(((_d=parent?.nestedMessages)!==null&&_d!==void 0?_d:file.messages).push(desc),reg.add(desc));for(let enumProto of proto.enumType)addEnum(enumProto,file,desc,reg);for(let messageProto of proto.nestedType)addMessage(messageProto,file,desc,reg,mapEntries)}function addService(proto,file,reg){var _a,_b;let desc={kind:"service",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,file,name:proto.name,typeName:makeTypeName(proto,void 0,file),methods:[],method:{},toString(){return`service ${this.typeName}`}};file.services.push(desc),reg.add(desc);for(let methodProto of proto.method){let method=newMethod(methodProto,desc,reg);desc.methods.push(method),desc.method[method.localName]=method}}function newMethod(proto,parent,reg){var _a,_b,_c,_d;let methodKind;proto.clientStreaming&&proto.serverStreaming?methodKind="bidi_streaming":proto.clientStreaming?methodKind="client_streaming":proto.serverStreaming?methodKind="server_streaming":methodKind="unary";let input=reg.getMessage(trimLeadingDot(proto.inputType)),output=reg.getMessage(trimLeadingDot(proto.outputType));assert(input,`invalid MethodDescriptorProto: input_type ${proto.inputType} not found`),assert(output,`invalid MethodDescriptorProto: output_type ${proto.inputType} not found`);let name=proto.name;return{kind:"rpc",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,parent,name,localName:safeObjectProperty(name.length?safeObjectProperty(name[0].toLowerCase()+name.substring(1)):name),methodKind,input,output,idempotency:(_d=(_c=proto.options)===null||_c===void 0?void 0:_c.idempotencyLevel)!==null&&_d!==void 0?_d:IDEMPOTENCY_UNKNOWN,toString(){return`rpc ${parent.typeName}.${name}`}}}function newOneof(proto,parent){return{kind:"oneof",proto,deprecated:!1,parent,fields:[],name:proto.name,localName:safeObjectProperty(protoCamelCase(proto.name)),toString(){return`oneof ${parent.typeName}.${this.name}`}}}function newField(proto,parentOrFile,reg,oneof,mapEntries){var _a,_b,_c;let isExtension=mapEntries===void 0,field={kind:"field",proto,deprecated:(_b=(_a=proto.options)===null||_a===void 0?void 0:_a.deprecated)!==null&&_b!==void 0?_b:!1,name:proto.name,number:proto.number,scalar:void 0,message:void 0,enum:void 0,presence:getFieldPresence(proto,oneof,isExtension,parentOrFile),utf8Validation:isUtf8Validated(proto,parentOrFile),listKind:void 0,mapKind:void 0,mapKey:void 0,delimitedEncoding:void 0,packed:void 0,longAsString:!1,getDefaultValue:void 0},toStr;if(isExtension){let file=parentOrFile.kind=="file"?parentOrFile:parentOrFile.file,parent=parentOrFile.kind=="file"?void 0:parentOrFile,typeName=makeTypeName(proto,parent,file);field.kind="extension",field.file=file,field.parent=parent,field.oneof=void 0,field.typeName=typeName,field.jsonName=`[${typeName}]`,toStr=()=>`extension ${typeName}`;let extendee=reg.getMessage(trimLeadingDot(proto.extendee));assert(extendee,`invalid FieldDescriptorProto: extendee ${proto.extendee} not found`),field.extendee=extendee}else{let parent=parentOrFile;assert(parent.kind=="message"),field.parent=parent,field.oneof=oneof,field.localName=oneof?protoCamelCase(proto.name):safeObjectProperty(protoCamelCase(proto.name)),field.jsonName=proto.jsonName,toStr=()=>`field ${parent.typeName}.${proto.name}`}Object.defineProperty(field,"toString",{value:toStr,writable:!0,enumerable:!0,configurable:!0});let label=proto.label,type=proto.type,jstype=(_c=proto.options)===null||_c===void 0?void 0:_c.jstype;if(label===LABEL_REPEATED){let mapEntry=type==TYPE_MESSAGE?mapEntries?.get(trimLeadingDot(proto.typeName)):void 0;if(mapEntry){field.fieldKind="map";let{key,value}=findMapEntryFields(mapEntry);return field.mapKey=key.scalar,field.mapKind=value.fieldKind,field.message=value.message,field.delimitedEncoding=!1,field.enum=value.enum,field.scalar=value.scalar,field}switch(field.fieldKind="list",type){case TYPE_MESSAGE:case TYPE_GROUP:field.listKind="message",field.message=reg.getMessage(trimLeadingDot(proto.typeName)),assert(field.message),field.delimitedEncoding=isDelimitedEncoding(proto,parentOrFile);break;case TYPE_ENUM:field.listKind="enum",field.enum=reg.getEnum(trimLeadingDot(proto.typeName)),assert(field.enum);break;default:field.listKind="scalar",field.scalar=type,field.longAsString=jstype==JS_STRING;break}return field.packed=isPackedField(proto,parentOrFile),field}switch(type){case TYPE_MESSAGE:case TYPE_GROUP:field.fieldKind="message",field.message=reg.getMessage(trimLeadingDot(proto.typeName)),assert(field.message,`invalid FieldDescriptorProto: type_name ${proto.typeName} not found`),field.delimitedEncoding=isDelimitedEncoding(proto,parentOrFile),field.getDefaultValue=()=>{};break;case TYPE_ENUM:{let enumeration=reg.getEnum(trimLeadingDot(proto.typeName));assert(enumeration!==void 0,`invalid FieldDescriptorProto: type_name ${proto.typeName} not found`),field.fieldKind="enum",field.enum=reg.getEnum(trimLeadingDot(proto.typeName)),field.getDefaultValue=()=>unsafeIsSetExplicit(proto,"defaultValue")?parseTextFormatEnumValue(enumeration,proto.defaultValue):void 0;break}default:{field.fieldKind="scalar",field.scalar=type,field.longAsString=jstype==JS_STRING,field.getDefaultValue=()=>unsafeIsSetExplicit(proto,"defaultValue")?parseTextFormatScalarValue(type,proto.defaultValue):void 0;break}}return field}function getFileEdition(proto){switch(proto.syntax){case"":case"proto2":return EDITION_PROTO22;case"proto3":return EDITION_PROTO32;case"editions":if(proto.edition===EDITION_UNSTABLE)return maximumEdition;if(proto.edition in featureDefaults)return proto.edition;throw new Error(`${proto.name}: unsupported edition`);default:throw new Error(`${proto.name}: unsupported syntax "${proto.syntax}"`)}}function findFileDependencies(proto,reg){return proto.dependency.map(wantName=>{let dep=reg.getFile(wantName);if(!dep)throw new Error(`Cannot find ${wantName}, imported by ${proto.name}`);return dep})}function findEnumSharedPrefix(enumName,values){let prefix=camelToSnakeCase(enumName)+"_";for(let value of values){if(!value.name.toLowerCase().startsWith(prefix))return;let shortName=value.name.substring(prefix.length);if(shortName.length==0||/^\d/.test(shortName))return}return prefix}function camelToSnakeCase(camel){return(camel.substring(0,1)+camel.substring(1).replace(/[A-Z]/g,c=>"_"+c)).toLowerCase()}function makeTypeName(proto,parent,file){let typeName;return parent?typeName=`${parent.typeName}.${proto.name}`:file.proto.package.length>0?typeName=`${file.proto.package}.${proto.name}`:typeName=`${proto.name}`,typeName}function trimLeadingDot(typeName){return typeName.startsWith(".")?typeName.substring(1):typeName}function findOneof(proto,allOneofs){if(!unsafeIsSetExplicit(proto,"oneofIndex")||proto.proto3Optional)return;let oneof=allOneofs[proto.oneofIndex];return assert(oneof,`invalid FieldDescriptorProto: oneof #${proto.oneofIndex} for field #${proto.number} not found`),oneof}function getFieldPresence(proto,oneof,isExtension,parent){if(proto.label==LABEL_REQUIRED)return LEGACY_REQUIRED;if(proto.label==LABEL_REPEATED)return IMPLICIT3;if(oneof||proto.proto3Optional||isExtension)return EXPLICIT;let resolved=resolveFeature("fieldPresence",{proto,parent});return resolved==IMPLICIT3&&(proto.type==TYPE_MESSAGE||proto.type==TYPE_GROUP)?EXPLICIT:resolved}function isPackedField(proto,parent){if(proto.label!=LABEL_REPEATED)return!1;switch(proto.type){case TYPE_STRING:case TYPE_BYTES:case TYPE_GROUP:case TYPE_MESSAGE:return!1}let o=proto.options;return o&&unsafeIsSetExplicit(o,"packed")?o.packed:PACKED==resolveFeature("repeatedFieldEncoding",{proto,parent})}function findMapEntryFields(mapEntry){let key=mapEntry.fields.find(f=>f.number===1),value=mapEntry.fields.find(f=>f.number===2);return assert(key&&key.fieldKind=="scalar"&&key.scalar!=ScalarType.BYTES&&key.scalar!=ScalarType.FLOAT&&key.scalar!=ScalarType.DOUBLE&&value&&value.fieldKind!="list"&&value.fieldKind!="map"),{key,value}}function isEnumOpen(desc){var _a;return OPEN==resolveFeature("enumType",{proto:desc.proto,parent:(_a=desc.parent)!==null&&_a!==void 0?_a:desc.file})}function isDelimitedEncoding(proto,parent){return proto.type==TYPE_GROUP?!0:DELIMITED==resolveFeature("messageEncoding",{proto,parent})}function isUtf8Validated(proto,parent){return VERIFY==resolveFeature("utf8Validation",{proto,parent})}function resolveFeature(name,ref){var _a,_b;let featureSet=(_a=ref.proto.options)===null||_a===void 0?void 0:_a.features;if(featureSet){let val=featureSet[name];if(val!=0)return val}if("kind"in ref){if(ref.kind=="message")return resolveFeature(name,(_b=ref.parent)!==null&&_b!==void 0?_b:ref.file);let editionDefaults=featureDefaults[ref.edition];if(!editionDefaults)throw new Error(`feature default for edition ${ref.edition} not found`);return editionDefaults[name]}return resolveFeature(name,ref.parent)}function assert(condition,msg){if(!condition)throw new Error(msg)}function boot(boot2){let root=bootFileDescriptorProto(boot2);return root.messageType.forEach(restoreJsonNames),createFileRegistry(root,()=>{}).getFile(root.name)}function bootFileDescriptorProto(init){return Object.assign(Object.create({syntax:"",edition:0}),Object.assign(Object.assign({$typeName:"google.protobuf.FileDescriptorProto",dependency:[],publicDependency:[],weakDependency:[],optionDependency:[],service:[],extension:[]},init),{messageType:init.messageType.map(bootDescriptorProto),enumType:init.enumType.map(bootEnumDescriptorProto)}))}function bootDescriptorProto(init){var _a,_b,_c,_d,_e,_f,_g,_h;return Object.assign(Object.create({visibility:0}),{$typeName:"google.protobuf.DescriptorProto",name:init.name,field:(_b=(_a=init.field)===null||_a===void 0?void 0:_a.map(bootFieldDescriptorProto))!==null&&_b!==void 0?_b:[],extension:[],nestedType:(_d=(_c=init.nestedType)===null||_c===void 0?void 0:_c.map(bootDescriptorProto))!==null&&_d!==void 0?_d:[],enumType:(_f=(_e=init.enumType)===null||_e===void 0?void 0:_e.map(bootEnumDescriptorProto))!==null&&_f!==void 0?_f:[],extensionRange:(_h=(_g=init.extensionRange)===null||_g===void 0?void 0:_g.map(e=>Object.assign({$typeName:"google.protobuf.DescriptorProto.ExtensionRange"},e)))!==null&&_h!==void 0?_h:[],oneofDecl:[],reservedRange:[],reservedName:[]})}function bootFieldDescriptorProto(init){return Object.assign(Object.create({label:1,typeName:"",extendee:"",defaultValue:"",oneofIndex:0,jsonName:"",proto3Optional:!1}),Object.assign(Object.assign({$typeName:"google.protobuf.FieldDescriptorProto"},init),{options:init.options?bootFieldOptions(init.options):void 0}))}function bootFieldOptions(init){var _a,_b,_c;return Object.assign(Object.create({ctype:0,packed:!1,jstype:0,lazy:!1,unverifiedLazy:!1,deprecated:!1,weak:!1,debugRedact:!1,retention:0}),Object.assign(Object.assign({$typeName:"google.protobuf.FieldOptions"},init),{targets:(_a=init.targets)!==null&&_a!==void 0?_a:[],editionDefaults:(_c=(_b=init.editionDefaults)===null||_b===void 0?void 0:_b.map(e=>Object.assign({$typeName:"google.protobuf.FieldOptions.EditionDefault"},e)))!==null&&_c!==void 0?_c:[],uninterpretedOption:[]}))}function bootEnumDescriptorProto(init){return Object.assign(Object.create({visibility:0}),{$typeName:"google.protobuf.EnumDescriptorProto",name:init.name,reservedName:[],reservedRange:[],value:init.value.map(e=>Object.assign({$typeName:"google.protobuf.EnumValueDescriptorProto"},e))})}function messageDesc(file,path,...paths){return paths.reduce((acc,cur)=>acc.nestedMessages[cur],file.messages[path])}var file_google_protobuf_descriptor=boot({name:"google/protobuf/descriptor.proto",package:"google.protobuf",messageType:[{name:"FileDescriptorSet",field:[{name:"file",number:1,type:11,label:3,typeName:".google.protobuf.FileDescriptorProto"}],extensionRange:[{start:536e6,end:536000001}]},{name:"FileDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"package",number:2,type:9,label:1},{name:"dependency",number:3,type:9,label:3},{name:"public_dependency",number:10,type:5,label:3},{name:"weak_dependency",number:11,type:5,label:3},{name:"option_dependency",number:15,type:9,label:3},{name:"message_type",number:4,type:11,label:3,typeName:".google.protobuf.DescriptorProto"},{name:"enum_type",number:5,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto"},{name:"service",number:6,type:11,label:3,typeName:".google.protobuf.ServiceDescriptorProto"},{name:"extension",number:7,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"options",number:8,type:11,label:1,typeName:".google.protobuf.FileOptions"},{name:"source_code_info",number:9,type:11,label:1,typeName:".google.protobuf.SourceCodeInfo"},{name:"syntax",number:12,type:9,label:1},{name:"edition",number:14,type:14,label:1,typeName:".google.protobuf.Edition"}]},{name:"DescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"field",number:2,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"extension",number:6,type:11,label:3,typeName:".google.protobuf.FieldDescriptorProto"},{name:"nested_type",number:3,type:11,label:3,typeName:".google.protobuf.DescriptorProto"},{name:"enum_type",number:4,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto"},{name:"extension_range",number:5,type:11,label:3,typeName:".google.protobuf.DescriptorProto.ExtensionRange"},{name:"oneof_decl",number:8,type:11,label:3,typeName:".google.protobuf.OneofDescriptorProto"},{name:"options",number:7,type:11,label:1,typeName:".google.protobuf.MessageOptions"},{name:"reserved_range",number:9,type:11,label:3,typeName:".google.protobuf.DescriptorProto.ReservedRange"},{name:"reserved_name",number:10,type:9,label:3},{name:"visibility",number:11,type:14,label:1,typeName:".google.protobuf.SymbolVisibility"}],nestedType:[{name:"ExtensionRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.ExtensionRangeOptions"}]},{name:"ReservedRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1}]}]},{name:"ExtensionRangeOptions",field:[{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"},{name:"declaration",number:2,type:11,label:3,typeName:".google.protobuf.ExtensionRangeOptions.Declaration",options:{retention:2}},{name:"features",number:50,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"verification",number:3,type:14,label:1,typeName:".google.protobuf.ExtensionRangeOptions.VerificationState",defaultValue:"UNVERIFIED",options:{retention:2}}],nestedType:[{name:"Declaration",field:[{name:"number",number:1,type:5,label:1},{name:"full_name",number:2,type:9,label:1},{name:"type",number:3,type:9,label:1},{name:"reserved",number:5,type:8,label:1},{name:"repeated",number:6,type:8,label:1}]}],enumType:[{name:"VerificationState",value:[{name:"DECLARATION",number:0},{name:"UNVERIFIED",number:1}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"FieldDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"number",number:3,type:5,label:1},{name:"label",number:4,type:14,label:1,typeName:".google.protobuf.FieldDescriptorProto.Label"},{name:"type",number:5,type:14,label:1,typeName:".google.protobuf.FieldDescriptorProto.Type"},{name:"type_name",number:6,type:9,label:1},{name:"extendee",number:2,type:9,label:1},{name:"default_value",number:7,type:9,label:1},{name:"oneof_index",number:9,type:5,label:1},{name:"json_name",number:10,type:9,label:1},{name:"options",number:8,type:11,label:1,typeName:".google.protobuf.FieldOptions"},{name:"proto3_optional",number:17,type:8,label:1}],enumType:[{name:"Type",value:[{name:"TYPE_DOUBLE",number:1},{name:"TYPE_FLOAT",number:2},{name:"TYPE_INT64",number:3},{name:"TYPE_UINT64",number:4},{name:"TYPE_INT32",number:5},{name:"TYPE_FIXED64",number:6},{name:"TYPE_FIXED32",number:7},{name:"TYPE_BOOL",number:8},{name:"TYPE_STRING",number:9},{name:"TYPE_GROUP",number:10},{name:"TYPE_MESSAGE",number:11},{name:"TYPE_BYTES",number:12},{name:"TYPE_UINT32",number:13},{name:"TYPE_ENUM",number:14},{name:"TYPE_SFIXED32",number:15},{name:"TYPE_SFIXED64",number:16},{name:"TYPE_SINT32",number:17},{name:"TYPE_SINT64",number:18}]},{name:"Label",value:[{name:"LABEL_OPTIONAL",number:1},{name:"LABEL_REPEATED",number:3},{name:"LABEL_REQUIRED",number:2}]}]},{name:"OneofDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"options",number:2,type:11,label:1,typeName:".google.protobuf.OneofOptions"}]},{name:"EnumDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"value",number:2,type:11,label:3,typeName:".google.protobuf.EnumValueDescriptorProto"},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.EnumOptions"},{name:"reserved_range",number:4,type:11,label:3,typeName:".google.protobuf.EnumDescriptorProto.EnumReservedRange"},{name:"reserved_name",number:5,type:9,label:3},{name:"visibility",number:6,type:14,label:1,typeName:".google.protobuf.SymbolVisibility"}],nestedType:[{name:"EnumReservedRange",field:[{name:"start",number:1,type:5,label:1},{name:"end",number:2,type:5,label:1}]}]},{name:"EnumValueDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"number",number:2,type:5,label:1},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.EnumValueOptions"}]},{name:"ServiceDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"method",number:2,type:11,label:3,typeName:".google.protobuf.MethodDescriptorProto"},{name:"options",number:3,type:11,label:1,typeName:".google.protobuf.ServiceOptions"}]},{name:"MethodDescriptorProto",field:[{name:"name",number:1,type:9,label:1},{name:"input_type",number:2,type:9,label:1},{name:"output_type",number:3,type:9,label:1},{name:"options",number:4,type:11,label:1,typeName:".google.protobuf.MethodOptions"},{name:"client_streaming",number:5,type:8,label:1,defaultValue:"false"},{name:"server_streaming",number:6,type:8,label:1,defaultValue:"false"}]},{name:"FileOptions",field:[{name:"java_package",number:1,type:9,label:1},{name:"java_outer_classname",number:8,type:9,label:1},{name:"java_multiple_files",number:10,type:8,label:1,defaultValue:"false",options:{}},{name:"java_generate_equals_and_hash",number:20,type:8,label:1,options:{deprecated:!0}},{name:"java_string_check_utf8",number:27,type:8,label:1,defaultValue:"false"},{name:"optimize_for",number:9,type:14,label:1,typeName:".google.protobuf.FileOptions.OptimizeMode",defaultValue:"SPEED"},{name:"go_package",number:11,type:9,label:1},{name:"cc_generic_services",number:16,type:8,label:1,defaultValue:"false"},{name:"java_generic_services",number:17,type:8,label:1,defaultValue:"false"},{name:"py_generic_services",number:18,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:23,type:8,label:1,defaultValue:"false"},{name:"cc_enable_arenas",number:31,type:8,label:1,defaultValue:"true"},{name:"objc_class_prefix",number:36,type:9,label:1},{name:"csharp_namespace",number:37,type:9,label:1},{name:"swift_prefix",number:39,type:9,label:1},{name:"php_class_prefix",number:40,type:9,label:1},{name:"php_namespace",number:41,type:9,label:1},{name:"php_metadata_namespace",number:44,type:9,label:1},{name:"ruby_package",number:45,type:9,label:1},{name:"features",number:50,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],enumType:[{name:"OptimizeMode",value:[{name:"SPEED",number:1},{name:"CODE_SIZE",number:2},{name:"LITE_RUNTIME",number:3}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"MessageOptions",field:[{name:"message_set_wire_format",number:1,type:8,label:1,defaultValue:"false"},{name:"no_standard_descriptor_accessor",number:2,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"map_entry",number:7,type:8,label:1},{name:"deprecated_legacy_json_field_conflicts",number:11,type:8,label:1,options:{deprecated:!0}},{name:"features",number:12,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"FieldOptions",field:[{name:"ctype",number:1,type:14,label:1,typeName:".google.protobuf.FieldOptions.CType",defaultValue:"STRING"},{name:"packed",number:2,type:8,label:1},{name:"jstype",number:6,type:14,label:1,typeName:".google.protobuf.FieldOptions.JSType",defaultValue:"JS_NORMAL"},{name:"lazy",number:5,type:8,label:1,defaultValue:"false"},{name:"unverified_lazy",number:15,type:8,label:1,defaultValue:"false"},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"weak",number:10,type:8,label:1,defaultValue:"false",options:{deprecated:!0}},{name:"debug_redact",number:16,type:8,label:1,defaultValue:"false"},{name:"retention",number:17,type:14,label:1,typeName:".google.protobuf.FieldOptions.OptionRetention"},{name:"targets",number:19,type:14,label:3,typeName:".google.protobuf.FieldOptions.OptionTargetType"},{name:"edition_defaults",number:20,type:11,label:3,typeName:".google.protobuf.FieldOptions.EditionDefault"},{name:"features",number:21,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"feature_support",number:22,type:11,label:1,typeName:".google.protobuf.FieldOptions.FeatureSupport"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],nestedType:[{name:"EditionDefault",field:[{name:"edition",number:3,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"value",number:2,type:9,label:1}]},{name:"FeatureSupport",field:[{name:"edition_introduced",number:1,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"edition_deprecated",number:2,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"deprecation_warning",number:3,type:9,label:1},{name:"edition_removed",number:4,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"removal_error",number:5,type:9,label:1}]}],enumType:[{name:"CType",value:[{name:"STRING",number:0},{name:"CORD",number:1},{name:"STRING_PIECE",number:2}]},{name:"JSType",value:[{name:"JS_NORMAL",number:0},{name:"JS_STRING",number:1},{name:"JS_NUMBER",number:2}]},{name:"OptionRetention",value:[{name:"RETENTION_UNKNOWN",number:0},{name:"RETENTION_RUNTIME",number:1},{name:"RETENTION_SOURCE",number:2}]},{name:"OptionTargetType",value:[{name:"TARGET_TYPE_UNKNOWN",number:0},{name:"TARGET_TYPE_FILE",number:1},{name:"TARGET_TYPE_EXTENSION_RANGE",number:2},{name:"TARGET_TYPE_MESSAGE",number:3},{name:"TARGET_TYPE_FIELD",number:4},{name:"TARGET_TYPE_ONEOF",number:5},{name:"TARGET_TYPE_ENUM",number:6},{name:"TARGET_TYPE_ENUM_ENTRY",number:7},{name:"TARGET_TYPE_SERVICE",number:8},{name:"TARGET_TYPE_METHOD",number:9}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"OneofOptions",field:[{name:"features",number:1,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"EnumOptions",field:[{name:"allow_alias",number:2,type:8,label:1},{name:"deprecated",number:3,type:8,label:1,defaultValue:"false"},{name:"deprecated_legacy_json_field_conflicts",number:6,type:8,label:1,options:{deprecated:!0}},{name:"features",number:7,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"EnumValueOptions",field:[{name:"deprecated",number:1,type:8,label:1,defaultValue:"false"},{name:"features",number:2,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"debug_redact",number:3,type:8,label:1,defaultValue:"false"},{name:"feature_support",number:4,type:11,label:1,typeName:".google.protobuf.FieldOptions.FeatureSupport"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"ServiceOptions",field:[{name:"features",number:34,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"deprecated",number:33,type:8,label:1,defaultValue:"false"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],extensionRange:[{start:1e3,end:536870912}]},{name:"MethodOptions",field:[{name:"deprecated",number:33,type:8,label:1,defaultValue:"false"},{name:"idempotency_level",number:34,type:14,label:1,typeName:".google.protobuf.MethodOptions.IdempotencyLevel",defaultValue:"IDEMPOTENCY_UNKNOWN"},{name:"features",number:35,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"uninterpreted_option",number:999,type:11,label:3,typeName:".google.protobuf.UninterpretedOption"}],enumType:[{name:"IdempotencyLevel",value:[{name:"IDEMPOTENCY_UNKNOWN",number:0},{name:"NO_SIDE_EFFECTS",number:1},{name:"IDEMPOTENT",number:2}]}],extensionRange:[{start:1e3,end:536870912}]},{name:"UninterpretedOption",field:[{name:"name",number:2,type:11,label:3,typeName:".google.protobuf.UninterpretedOption.NamePart"},{name:"identifier_value",number:3,type:9,label:1},{name:"positive_int_value",number:4,type:4,label:1},{name:"negative_int_value",number:5,type:3,label:1},{name:"double_value",number:6,type:1,label:1},{name:"string_value",number:7,type:12,label:1},{name:"aggregate_value",number:8,type:9,label:1}],nestedType:[{name:"NamePart",field:[{name:"name_part",number:1,type:9,label:2},{name:"is_extension",number:2,type:8,label:2}]}]},{name:"FeatureSet",field:[{name:"field_presence",number:1,type:14,label:1,typeName:".google.protobuf.FeatureSet.FieldPresence",options:{retention:1,targets:[4,1],editionDefaults:[{value:"EXPLICIT",edition:900},{value:"IMPLICIT",edition:999},{value:"EXPLICIT",edition:1e3}]}},{name:"enum_type",number:2,type:14,label:1,typeName:".google.protobuf.FeatureSet.EnumType",options:{retention:1,targets:[6,1],editionDefaults:[{value:"CLOSED",edition:900},{value:"OPEN",edition:999}]}},{name:"repeated_field_encoding",number:3,type:14,label:1,typeName:".google.protobuf.FeatureSet.RepeatedFieldEncoding",options:{retention:1,targets:[4,1],editionDefaults:[{value:"EXPANDED",edition:900},{value:"PACKED",edition:999}]}},{name:"utf8_validation",number:4,type:14,label:1,typeName:".google.protobuf.FeatureSet.Utf8Validation",options:{retention:1,targets:[4,1],editionDefaults:[{value:"NONE",edition:900},{value:"VERIFY",edition:999}]}},{name:"message_encoding",number:5,type:14,label:1,typeName:".google.protobuf.FeatureSet.MessageEncoding",options:{retention:1,targets:[4,1],editionDefaults:[{value:"LENGTH_PREFIXED",edition:900}]}},{name:"json_format",number:6,type:14,label:1,typeName:".google.protobuf.FeatureSet.JsonFormat",options:{retention:1,targets:[3,6,1],editionDefaults:[{value:"LEGACY_BEST_EFFORT",edition:900},{value:"ALLOW",edition:999}]}},{name:"enforce_naming_style",number:7,type:14,label:1,typeName:".google.protobuf.FeatureSet.EnforceNamingStyle",options:{retention:2,targets:[1,2,3,4,5,6,7,8,9],editionDefaults:[{value:"STYLE_LEGACY",edition:900},{value:"STYLE2024",edition:1001}]}},{name:"default_symbol_visibility",number:8,type:14,label:1,typeName:".google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility",options:{retention:2,targets:[1],editionDefaults:[{value:"EXPORT_ALL",edition:900},{value:"EXPORT_TOP_LEVEL",edition:1001}]}}],nestedType:[{name:"VisibilityFeature",enumType:[{name:"DefaultSymbolVisibility",value:[{name:"DEFAULT_SYMBOL_VISIBILITY_UNKNOWN",number:0},{name:"EXPORT_ALL",number:1},{name:"EXPORT_TOP_LEVEL",number:2},{name:"LOCAL_ALL",number:3},{name:"STRICT",number:4}]}]}],enumType:[{name:"FieldPresence",value:[{name:"FIELD_PRESENCE_UNKNOWN",number:0},{name:"EXPLICIT",number:1},{name:"IMPLICIT",number:2},{name:"LEGACY_REQUIRED",number:3}]},{name:"EnumType",value:[{name:"ENUM_TYPE_UNKNOWN",number:0},{name:"OPEN",number:1},{name:"CLOSED",number:2}]},{name:"RepeatedFieldEncoding",value:[{name:"REPEATED_FIELD_ENCODING_UNKNOWN",number:0},{name:"PACKED",number:1},{name:"EXPANDED",number:2}]},{name:"Utf8Validation",value:[{name:"UTF8_VALIDATION_UNKNOWN",number:0},{name:"VERIFY",number:2},{name:"NONE",number:3}]},{name:"MessageEncoding",value:[{name:"MESSAGE_ENCODING_UNKNOWN",number:0},{name:"LENGTH_PREFIXED",number:1},{name:"DELIMITED",number:2}]},{name:"JsonFormat",value:[{name:"JSON_FORMAT_UNKNOWN",number:0},{name:"ALLOW",number:1},{name:"LEGACY_BEST_EFFORT",number:2}]},{name:"EnforceNamingStyle",value:[{name:"ENFORCE_NAMING_STYLE_UNKNOWN",number:0},{name:"STYLE2024",number:1},{name:"STYLE_LEGACY",number:2}]}],extensionRange:[{start:1e3,end:9995},{start:9995,end:1e4},{start:1e4,end:10001}]},{name:"FeatureSetDefaults",field:[{name:"defaults",number:1,type:11,label:3,typeName:".google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault"},{name:"minimum_edition",number:4,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"maximum_edition",number:5,type:14,label:1,typeName:".google.protobuf.Edition"}],nestedType:[{name:"FeatureSetEditionDefault",field:[{name:"edition",number:3,type:14,label:1,typeName:".google.protobuf.Edition"},{name:"overridable_features",number:4,type:11,label:1,typeName:".google.protobuf.FeatureSet"},{name:"fixed_features",number:5,type:11,label:1,typeName:".google.protobuf.FeatureSet"}]}]},{name:"SourceCodeInfo",field:[{name:"location",number:1,type:11,label:3,typeName:".google.protobuf.SourceCodeInfo.Location"}],nestedType:[{name:"Location",field:[{name:"path",number:1,type:5,label:3,options:{packed:!0}},{name:"span",number:2,type:5,label:3,options:{packed:!0}},{name:"leading_comments",number:3,type:9,label:1},{name:"trailing_comments",number:4,type:9,label:1},{name:"leading_detached_comments",number:6,type:9,label:3}]}],extensionRange:[{start:536e6,end:536000001}]},{name:"GeneratedCodeInfo",field:[{name:"annotation",number:1,type:11,label:3,typeName:".google.protobuf.GeneratedCodeInfo.Annotation"}],nestedType:[{name:"Annotation",field:[{name:"path",number:1,type:5,label:3,options:{packed:!0}},{name:"source_file",number:2,type:9,label:1},{name:"begin",number:3,type:5,label:1},{name:"end",number:4,type:5,label:1},{name:"semantic",number:5,type:14,label:1,typeName:".google.protobuf.GeneratedCodeInfo.Annotation.Semantic"}],enumType:[{name:"Semantic",value:[{name:"NONE",number:0},{name:"SET",number:1},{name:"ALIAS",number:2}]}]}]}],enumType:[{name:"Edition",value:[{name:"EDITION_UNKNOWN",number:0},{name:"EDITION_LEGACY",number:900},{name:"EDITION_PROTO2",number:998},{name:"EDITION_PROTO3",number:999},{name:"EDITION_2023",number:1e3},{name:"EDITION_2024",number:1001},{name:"EDITION_UNSTABLE",number:9999},{name:"EDITION_1_TEST_ONLY",number:1},{name:"EDITION_2_TEST_ONLY",number:2},{name:"EDITION_99997_TEST_ONLY",number:99997},{name:"EDITION_99998_TEST_ONLY",number:99998},{name:"EDITION_99999_TEST_ONLY",number:99999},{name:"EDITION_MAX",number:2147483647}]},{name:"SymbolVisibility",value:[{name:"VISIBILITY_UNSET",number:0},{name:"VISIBILITY_LOCAL",number:1},{name:"VISIBILITY_EXPORT",number:2}]}]});var FileDescriptorProtoSchema=messageDesc(file_google_protobuf_descriptor,1);var ExtensionRangeOptions_VerificationState;(function(ExtensionRangeOptions_VerificationState2){ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2.DECLARATION=0]="DECLARATION",ExtensionRangeOptions_VerificationState2[ExtensionRangeOptions_VerificationState2.UNVERIFIED=1]="UNVERIFIED"})(ExtensionRangeOptions_VerificationState||(ExtensionRangeOptions_VerificationState={}));var FieldDescriptorProto_Type;(function(FieldDescriptorProto_Type2){FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.DOUBLE=1]="DOUBLE",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.FLOAT=2]="FLOAT",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.INT64=3]="INT64",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.UINT64=4]="UINT64",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.INT32=5]="INT32",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.FIXED64=6]="FIXED64",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.FIXED32=7]="FIXED32",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.BOOL=8]="BOOL",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.STRING=9]="STRING",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.GROUP=10]="GROUP",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.MESSAGE=11]="MESSAGE",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.BYTES=12]="BYTES",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.UINT32=13]="UINT32",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.ENUM=14]="ENUM",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.SFIXED32=15]="SFIXED32",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.SFIXED64=16]="SFIXED64",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.SINT32=17]="SINT32",FieldDescriptorProto_Type2[FieldDescriptorProto_Type2.SINT64=18]="SINT64"})(FieldDescriptorProto_Type||(FieldDescriptorProto_Type={}));var FieldDescriptorProto_Label;(function(FieldDescriptorProto_Label2){FieldDescriptorProto_Label2[FieldDescriptorProto_Label2.OPTIONAL=1]="OPTIONAL",FieldDescriptorProto_Label2[FieldDescriptorProto_Label2.REPEATED=3]="REPEATED",FieldDescriptorProto_Label2[FieldDescriptorProto_Label2.REQUIRED=2]="REQUIRED"})(FieldDescriptorProto_Label||(FieldDescriptorProto_Label={}));var FileOptions_OptimizeMode;(function(FileOptions_OptimizeMode2){FileOptions_OptimizeMode2[FileOptions_OptimizeMode2.SPEED=1]="SPEED",FileOptions_OptimizeMode2[FileOptions_OptimizeMode2.CODE_SIZE=2]="CODE_SIZE",FileOptions_OptimizeMode2[FileOptions_OptimizeMode2.LITE_RUNTIME=3]="LITE_RUNTIME"})(FileOptions_OptimizeMode||(FileOptions_OptimizeMode={}));var FieldOptions_CType;(function(FieldOptions_CType2){FieldOptions_CType2[FieldOptions_CType2.STRING=0]="STRING",FieldOptions_CType2[FieldOptions_CType2.CORD=1]="CORD",FieldOptions_CType2[FieldOptions_CType2.STRING_PIECE=2]="STRING_PIECE"})(FieldOptions_CType||(FieldOptions_CType={}));var FieldOptions_JSType;(function(FieldOptions_JSType2){FieldOptions_JSType2[FieldOptions_JSType2.JS_NORMAL=0]="JS_NORMAL",FieldOptions_JSType2[FieldOptions_JSType2.JS_STRING=1]="JS_STRING",FieldOptions_JSType2[FieldOptions_JSType2.JS_NUMBER=2]="JS_NUMBER"})(FieldOptions_JSType||(FieldOptions_JSType={}));var FieldOptions_OptionRetention;(function(FieldOptions_OptionRetention2){FieldOptions_OptionRetention2[FieldOptions_OptionRetention2.RETENTION_UNKNOWN=0]="RETENTION_UNKNOWN",FieldOptions_OptionRetention2[FieldOptions_OptionRetention2.RETENTION_RUNTIME=1]="RETENTION_RUNTIME",FieldOptions_OptionRetention2[FieldOptions_OptionRetention2.RETENTION_SOURCE=2]="RETENTION_SOURCE"})(FieldOptions_OptionRetention||(FieldOptions_OptionRetention={}));var FieldOptions_OptionTargetType;(function(FieldOptions_OptionTargetType2){FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_UNKNOWN=0]="TARGET_TYPE_UNKNOWN",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_FILE=1]="TARGET_TYPE_FILE",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_EXTENSION_RANGE=2]="TARGET_TYPE_EXTENSION_RANGE",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_MESSAGE=3]="TARGET_TYPE_MESSAGE",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_FIELD=4]="TARGET_TYPE_FIELD",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_ONEOF=5]="TARGET_TYPE_ONEOF",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_ENUM=6]="TARGET_TYPE_ENUM",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_ENUM_ENTRY=7]="TARGET_TYPE_ENUM_ENTRY",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_SERVICE=8]="TARGET_TYPE_SERVICE",FieldOptions_OptionTargetType2[FieldOptions_OptionTargetType2.TARGET_TYPE_METHOD=9]="TARGET_TYPE_METHOD"})(FieldOptions_OptionTargetType||(FieldOptions_OptionTargetType={}));var MethodOptions_IdempotencyLevel;(function(MethodOptions_IdempotencyLevel2){MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2.IDEMPOTENCY_UNKNOWN=0]="IDEMPOTENCY_UNKNOWN",MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2.NO_SIDE_EFFECTS=1]="NO_SIDE_EFFECTS",MethodOptions_IdempotencyLevel2[MethodOptions_IdempotencyLevel2.IDEMPOTENT=2]="IDEMPOTENT"})(MethodOptions_IdempotencyLevel||(MethodOptions_IdempotencyLevel={}));var FeatureSet_VisibilityFeature_DefaultSymbolVisibility;(function(FeatureSet_VisibilityFeature_DefaultSymbolVisibility2){FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2.DEFAULT_SYMBOL_VISIBILITY_UNKNOWN=0]="DEFAULT_SYMBOL_VISIBILITY_UNKNOWN",FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2.EXPORT_ALL=1]="EXPORT_ALL",FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2.EXPORT_TOP_LEVEL=2]="EXPORT_TOP_LEVEL",FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2.LOCAL_ALL=3]="LOCAL_ALL",FeatureSet_VisibilityFeature_DefaultSymbolVisibility2[FeatureSet_VisibilityFeature_DefaultSymbolVisibility2.STRICT=4]="STRICT"})(FeatureSet_VisibilityFeature_DefaultSymbolVisibility||(FeatureSet_VisibilityFeature_DefaultSymbolVisibility={}));var FeatureSet_FieldPresence;(function(FeatureSet_FieldPresence2){FeatureSet_FieldPresence2[FeatureSet_FieldPresence2.FIELD_PRESENCE_UNKNOWN=0]="FIELD_PRESENCE_UNKNOWN",FeatureSet_FieldPresence2[FeatureSet_FieldPresence2.EXPLICIT=1]="EXPLICIT",FeatureSet_FieldPresence2[FeatureSet_FieldPresence2.IMPLICIT=2]="IMPLICIT",FeatureSet_FieldPresence2[FeatureSet_FieldPresence2.LEGACY_REQUIRED=3]="LEGACY_REQUIRED"})(FeatureSet_FieldPresence||(FeatureSet_FieldPresence={}));var FeatureSet_EnumType;(function(FeatureSet_EnumType2){FeatureSet_EnumType2[FeatureSet_EnumType2.ENUM_TYPE_UNKNOWN=0]="ENUM_TYPE_UNKNOWN",FeatureSet_EnumType2[FeatureSet_EnumType2.OPEN=1]="OPEN",FeatureSet_EnumType2[FeatureSet_EnumType2.CLOSED=2]="CLOSED"})(FeatureSet_EnumType||(FeatureSet_EnumType={}));var FeatureSet_RepeatedFieldEncoding;(function(FeatureSet_RepeatedFieldEncoding2){FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2.REPEATED_FIELD_ENCODING_UNKNOWN=0]="REPEATED_FIELD_ENCODING_UNKNOWN",FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2.PACKED=1]="PACKED",FeatureSet_RepeatedFieldEncoding2[FeatureSet_RepeatedFieldEncoding2.EXPANDED=2]="EXPANDED"})(FeatureSet_RepeatedFieldEncoding||(FeatureSet_RepeatedFieldEncoding={}));var FeatureSet_Utf8Validation;(function(FeatureSet_Utf8Validation2){FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2.UTF8_VALIDATION_UNKNOWN=0]="UTF8_VALIDATION_UNKNOWN",FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2.VERIFY=2]="VERIFY",FeatureSet_Utf8Validation2[FeatureSet_Utf8Validation2.NONE=3]="NONE"})(FeatureSet_Utf8Validation||(FeatureSet_Utf8Validation={}));var FeatureSet_MessageEncoding;(function(FeatureSet_MessageEncoding2){FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2.MESSAGE_ENCODING_UNKNOWN=0]="MESSAGE_ENCODING_UNKNOWN",FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2.LENGTH_PREFIXED=1]="LENGTH_PREFIXED",FeatureSet_MessageEncoding2[FeatureSet_MessageEncoding2.DELIMITED=2]="DELIMITED"})(FeatureSet_MessageEncoding||(FeatureSet_MessageEncoding={}));var FeatureSet_JsonFormat;(function(FeatureSet_JsonFormat2){FeatureSet_JsonFormat2[FeatureSet_JsonFormat2.JSON_FORMAT_UNKNOWN=0]="JSON_FORMAT_UNKNOWN",FeatureSet_JsonFormat2[FeatureSet_JsonFormat2.ALLOW=1]="ALLOW",FeatureSet_JsonFormat2[FeatureSet_JsonFormat2.LEGACY_BEST_EFFORT=2]="LEGACY_BEST_EFFORT"})(FeatureSet_JsonFormat||(FeatureSet_JsonFormat={}));var FeatureSet_EnforceNamingStyle;(function(FeatureSet_EnforceNamingStyle2){FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2.ENFORCE_NAMING_STYLE_UNKNOWN=0]="ENFORCE_NAMING_STYLE_UNKNOWN",FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2.STYLE2024=1]="STYLE2024",FeatureSet_EnforceNamingStyle2[FeatureSet_EnforceNamingStyle2.STYLE_LEGACY=2]="STYLE_LEGACY"})(FeatureSet_EnforceNamingStyle||(FeatureSet_EnforceNamingStyle={}));var GeneratedCodeInfo_Annotation_Semantic;(function(GeneratedCodeInfo_Annotation_Semantic2){GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2.NONE=0]="NONE",GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2.SET=1]="SET",GeneratedCodeInfo_Annotation_Semantic2[GeneratedCodeInfo_Annotation_Semantic2.ALIAS=2]="ALIAS"})(GeneratedCodeInfo_Annotation_Semantic||(GeneratedCodeInfo_Annotation_Semantic={}));var Edition;(function(Edition2){Edition2[Edition2.EDITION_UNKNOWN=0]="EDITION_UNKNOWN",Edition2[Edition2.EDITION_LEGACY=900]="EDITION_LEGACY",Edition2[Edition2.EDITION_PROTO2=998]="EDITION_PROTO2",Edition2[Edition2.EDITION_PROTO3=999]="EDITION_PROTO3",Edition2[Edition2.EDITION_2023=1e3]="EDITION_2023",Edition2[Edition2.EDITION_2024=1001]="EDITION_2024",Edition2[Edition2.EDITION_UNSTABLE=9999]="EDITION_UNSTABLE",Edition2[Edition2.EDITION_1_TEST_ONLY=1]="EDITION_1_TEST_ONLY",Edition2[Edition2.EDITION_2_TEST_ONLY=2]="EDITION_2_TEST_ONLY",Edition2[Edition2.EDITION_99997_TEST_ONLY=99997]="EDITION_99997_TEST_ONLY",Edition2[Edition2.EDITION_99998_TEST_ONLY=99998]="EDITION_99998_TEST_ONLY",Edition2[Edition2.EDITION_99999_TEST_ONLY=99999]="EDITION_99999_TEST_ONLY",Edition2[Edition2.EDITION_MAX=2147483647]="EDITION_MAX"})(Edition||(Edition={}));var SymbolVisibility;(function(SymbolVisibility2){SymbolVisibility2[SymbolVisibility2.VISIBILITY_UNSET=0]="VISIBILITY_UNSET",SymbolVisibility2[SymbolVisibility2.VISIBILITY_LOCAL=1]="VISIBILITY_LOCAL",SymbolVisibility2[SymbolVisibility2.VISIBILITY_EXPORT=2]="VISIBILITY_EXPORT"})(SymbolVisibility||(SymbolVisibility={}));function makeReadContext(options){return Object.assign(Object.assign({readUnknownFields:!0,recursionLimit:100},options),{depth:0})}function fromBinary(schema,bytes,options){let message=create(schema);return compiledReader(schema).read(message,new BinaryReader(bytes),makeReadContext(options),bytes.byteLength),message}var compiledReaders=new WeakMap;function compiledReader(desc){let compiled=compiledReaders.get(desc);return compiled===void 0&&(compiled=compileMessage(desc)),compiled}function compileMessage(desc){let descString=String(desc),fieldReaders=new Map,compiled={read:compileMessageReader(descString,fieldReaders),readGroup:compileGroupReader(descString,fieldReaders)};compiledReaders.set(desc,compiled);for(let field of desc.fields)fieldReaders.set(field.number,compileFieldReader(field));return compiled}function compileMessageReader(descString,fieldReaders){return(message,reader,ctx,length)=>{var _a;if(++ctx.depth>ctx.recursionLimit)throw new Error(`cannot decode ${descString} from binary: maximum recursion depth of ${ctx.recursionLimit} reached`);let end=reader.pos+length,unknownFields=(_a=message.$unknown)!==null&&_a!==void 0?_a:[];for(;reader.pos<end;){let[fieldNo,wireType]=reader.tag(),fieldReader=fieldReaders.get(fieldNo);if(fieldReader===void 0){let data=reader.skip(wireType,fieldNo,ctx.recursionLimit-ctx.depth);ctx.readUnknownFields&&unknownFields.push({no:fieldNo,wireType,data});continue}fieldReader(message,reader,ctx,wireType)}unknownFields.length>0&&(message.$unknown=unknownFields),ctx.depth--}}function compileGroupReader(descString,fieldReaders){return(message,reader,ctx,fieldNo)=>{var _a;if(++ctx.depth>ctx.recursionLimit)throw new Error(`cannot decode ${descString} from binary: maximum recursion depth of ${ctx.recursionLimit} reached`);let recordFieldNo,wireType,unknownFields=(_a=message.$unknown)!==null&&_a!==void 0?_a:[];for(;reader.pos<reader.len&&([recordFieldNo,wireType]=reader.tag(),wireType!=WireType.EndGroup);){let fieldReader=fieldReaders.get(recordFieldNo);if(fieldReader===void 0){let data=reader.skip(wireType,recordFieldNo,ctx.recursionLimit-ctx.depth);ctx.readUnknownFields&&unknownFields.push({no:recordFieldNo,wireType,data});continue}fieldReader(message,reader,ctx,wireType)}if(wireType!=WireType.EndGroup||recordFieldNo!==fieldNo)throw new Error("invalid end group tag");unknownFields.length>0&&(message.$unknown=unknownFields),ctx.depth--}}function readField(message,reader,field,wireType,ctx){compileFieldReader(field)(message[unsafeLocal],reader,ctx,wireType)}function compileFieldReader(field){switch(field.fieldKind){case"scalar":return compileScalarFieldReader(field);case"enum":return compileEnumFieldReader(field);case"message":return compileMessageFieldReader(field);case"list":return compileListFieldReader(field);case"map":return compileMapFieldReader(field)}}function compileScalarFieldReader(field){let readScalar=compileScalarReader(field.scalar,field.utf8Validation,field.longAsString),localName=field.localName;if(field.oneof){let oneofLocalName=field.oneof.localName;return(message,reader)=>{message[oneofLocalName]={case:localName,value:readScalar(reader)}}}return(message,reader)=>{message[localName]=readScalar(reader)}}function compileEnumFieldReader(field){var _a;let localName=field.localName,oneofLocalName=(_a=field.oneof)===null||_a===void 0?void 0:_a.localName;if(field.enum.open)return oneofLocalName!==void 0?(message,reader)=>{message[oneofLocalName]={case:localName,value:reader.int32()}}:(message,reader)=>{message[localName]=reader.int32()};let values=field.enum.values,fieldNo=field.number;return(message,reader,ctx,wireType)=>{var _a2;let val=reader.int32();if(values.some(v=>v.number===val))oneofLocalName!==void 0?message[oneofLocalName]={case:localName,value:val}:message[localName]=val;else if(ctx.readUnknownFields){let bytes=[];varint32write(val,bytes);let unknownFields=(_a2=message.$unknown)!==null&&_a2!==void 0?_a2:[];unknownFields.push({no:fieldNo,wireType,data:new Uint8Array(bytes)}),message.$unknown=unknownFields}}}function compileMessageFieldReader(field){let localName=field.localName,{toMessage,toLocal}=localMessageMapper(field),readChild=compileChildReader(field);if(field.oneof){let oneofLocalName=field.oneof.localName;return(message,reader,ctx)=>{let oneof=message[oneofLocalName],child=toMessage(oneof.case===localName?oneof.value:void 0);readChild(child,reader,ctx),message[oneofLocalName]={case:localName,value:toLocal(child)}}}return(message,reader,ctx)=>{let child=toMessage(message[localName]);readChild(child,reader,ctx),message[localName]=toLocal(child)}}function compileChildReader(field){let compiledChild=compiledReader(field.message);if(field.delimitedEncoding){let fieldNo=field.number;return(child,reader,ctx)=>compiledChild.readGroup(child,reader,ctx,fieldNo)}return(child,reader,ctx)=>compiledChild.read(child,reader,ctx,reader.uint32())}function compileListFieldReader(field){let localName=field.localName;if(field.listKind=="message"){let{toMessage,toLocal}=localMessageMapper(field),readChild=compileChildReader(field);return(message,reader,ctx)=>{let child=toMessage(void 0);readChild(child,reader,ctx),message[localName].push(toLocal(child))}}let scalarType=field.listKind=="enum"?ScalarType.INT32:field.scalar,longAsString=field.listKind=="scalar"?field.longAsString:!1,readScalar=compileScalarReader(scalarType,field.utf8Validation,longAsString),packedPossible=scalarType!=ScalarType.STRING&&scalarType!=ScalarType.BYTES;return(message,reader,ctx,wireType)=>{let items=message[localName];if(wireType==WireType.LengthDelimited&&packedPossible){let end=reader.uint32()+reader.pos;for(;reader.pos<end;)items.push(readScalar(reader))}else items.push(readScalar(reader))}}function compileMapFieldReader(field){let localName=field.localName,readKey=compileScalarReader(field.mapKey,field.utf8Validation,!1),keyZero=scalarZeroValue(field.mapKey,!1),readValue,valueDefault;switch(field.mapKind){case"scalar":{let scalar=field.scalar,readScalar=compileScalarReader(scalar,field.utf8Validation,!1);if(readValue=reader=>readScalar(reader),scalar==ScalarType.BYTES)valueDefault=()=>new Uint8Array(0);else{let zero=scalarZeroValue(scalar,!1);valueDefault=()=>zero}break}case"enum":{let zero=field.enum.values[0].number;readValue=reader=>reader.int32(),valueDefault=()=>zero;break}case"message":{let{toMessage,toLocal}=localMessageMapper(field),readChild=compiledReader(field.message).read;readValue=(reader,ctx)=>{let child=toMessage(void 0);return readChild(child,reader,ctx,reader.uint32()),toLocal(child)},valueDefault=()=>toLocal(toMessage(void 0));break}}return(message,reader,ctx)=>{let record=message[localName],key,val,len=reader.uint32(),end=reader.pos+len;for(;reader.pos<end;){let[fieldNo]=reader.tag();switch(fieldNo){case 1:key=readKey(reader);break;case 2:val=readValue(reader,ctx);break}}key===void 0&&(key=keyZero),val===void 0&&(val=valueDefault()),record[key]=val}}function compileScalarReader(type,utf8Validation,longAsString){switch(type){case ScalarType.STRING:return reader=>reader.string(utf8Validation);case ScalarType.BOOL:return reader=>reader.bool();case ScalarType.DOUBLE:return reader=>reader.double();case ScalarType.FLOAT:return reader=>reader.float();case ScalarType.INT32:return reader=>reader.int32();case ScalarType.INT64:return longAsString?reader=>String(reader.int64()):reader=>reader.int64();case ScalarType.UINT64:return longAsString?reader=>String(reader.uint64()):reader=>reader.uint64();case ScalarType.FIXED64:return longAsString?reader=>String(reader.fixed64()):reader=>reader.fixed64();case ScalarType.BYTES:return reader=>reader.bytes();case ScalarType.FIXED32:return reader=>reader.fixed32();case ScalarType.SFIXED32:return reader=>reader.sfixed32();case ScalarType.SFIXED64:return longAsString?reader=>String(reader.sfixed64()):reader=>reader.sfixed64();case ScalarType.SINT64:return longAsString?reader=>String(reader.sint64()):reader=>reader.sint64();case ScalarType.UINT32:return reader=>reader.uint32();case ScalarType.SINT32:return reader=>reader.sint32()}}function fileDesc(b64,imports){var _a;let root=fromBinary(FileDescriptorProtoSchema,base64Decode(b64));return root.messageType.forEach(restoreJsonNames),root.dependency=(_a=imports?.map(f=>f.proto.name))!==null&&_a!==void 0?_a:[],createFileRegistry(root,protoFileName=>imports?.find(f=>f.proto.name===protoFileName)).getFile(root.name)}var file_google_protobuf_any=fileDesc("Chlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvEg9nb29nbGUucHJvdG9idWYiJgoDQW55EhAKCHR5cGVfdXJsGAEgASgJEg0KBXZhbHVlGAIgASgMQnYKE2NvbS5nb29nbGUucHJvdG9idWZCCEFueVByb3RvUAFaLGdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL2FueXBiogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM"),AnySchema=messageDesc(file_google_protobuf_any,0);var IMPLICIT4=2,LEGACY_REQUIRED2=3,writeDefaults={writeUnknownFields:!0};function makeWriteOptions(options){return options?Object.assign(Object.assign({},writeDefaults),options):writeDefaults}function toBinary(schema,message,options){let writer=new BinaryWriter;return compiledWriter(schema)(writer,makeWriteOptions(options),message),writer.finish()}var compiledWriters=new WeakMap;function compiledWriter(desc){let compiled=compiledWriters.get(desc);return compiled===void 0&&(compiled=compileMessage2(desc)),compiled}function compileMessage2(desc){let typeName=desc.typeName,sortedFields=desc.fields.concat().sort((a,b)=>a.number-b.number),foreignField=sortedFields[0],fieldWriters=[],compiled=(writer,opts,message)=>{if(message.$typeName!==typeName&&foreignField!==void 0)throw new FieldError(foreignField,`cannot use ${foreignField} with message ${message.$typeName}`,"ForeignFieldError");for(let i=0;i<fieldWriters.length;i++)fieldWriters[i](writer,opts,message);let unknown=message.$unknown;if(unknown!==void 0&&opts.writeUnknownFields)for(let i=0;i<unknown.length;i++){let{no,wireType,data}=unknown[i];writer.tag(no,wireType).raw(data)}};compiledWriters.set(desc,compiled);for(let field of sortedFields)fieldWriters.push(compileField(field));return compiled}function compileField(field){switch(field.fieldKind){case"message":case"scalar":case"enum":return compileSingularField(field);case"list":return compileListField(field);case"map":return compileMapField(field)}}function compileSingularField(field){let writeValue=compileSingularValue(field),localName=field.localName;if(field.oneof){let oneofLocalName=field.oneof.localName;return(writer,opts,message)=>{let oneof=message[oneofLocalName];oneof.case===localName&&writeValue(writer,opts,oneof.value)}}if(field.presence!=IMPLICIT4){let requiredError=field.presence==LEGACY_REQUIRED2?`cannot encode ${field} to binary: required field not set`:void 0;return(writer,opts,message)=>{let value=message[localName];if(value!==void 0&&Object.prototype.hasOwnProperty.call(message,localName))writeValue(writer,opts,value);else if(requiredError!==void 0)throw new Error(requiredError)}}if(field.fieldKind=="enum"){let zero=field.enum.values[0].number;return(writer,opts,message)=>{let value=message[localName];value!==zero&&writeValue(writer,opts,value)}}switch(field.scalar){case ScalarType.BOOL:return(writer,opts,message)=>{let value=message[localName];value!==!1&&writeValue(writer,opts,value)};case ScalarType.STRING:return(writer,opts,message)=>{let value=message[localName];value!==""&&writeValue(writer,opts,value)};case ScalarType.BYTES:return(writer,opts,message)=>{let value=message[localName];(!(value instanceof Uint8Array)||value.byteLength>0)&&writeValue(writer,opts,value)};case ScalarType.DOUBLE:case ScalarType.FLOAT:return(writer,opts,message)=>{let value=message[localName];Object.is(value,0)||writeValue(writer,opts,value)};default:return(writer,opts,message)=>{let value=message[localName];value!=0&&writeValue(writer,opts,value)}}}function compileSingularValue(field){switch(field.fieldKind){case"message":{let{toMessage}=localMessageMapper(field),writeChild=compileChildWriter(field);return(writer,opts,value)=>{writeChild(writer,opts,toMessage(value))}}case"scalar":case"enum":{let scalarType=field.fieldKind=="enum"?ScalarType.INT32:field.scalar,fieldNo=field.number,wireType=writeTypeOfScalar(scalarType),writeScalar=compileScalarValue(scalarType,field.parent.typeName,field.name);return(writer,opts,value)=>{writer.tag(fieldNo,wireType),writeScalar(writer,value)}}}}function compileListField(field){let localName=field.localName,fieldNo=field.number;switch(field.listKind){case"message":{let{toMessage}=localMessageMapper(field),writeChild=compileChildWriter(field);return(writer,opts,message)=>{let items=message[localName];for(let i=0;i<items.length;i++)writeChild(writer,opts,toMessage(items[i]))}}case"scalar":case"enum":{let scalarType=field.listKind=="enum"?ScalarType.INT32:field.scalar,writeScalar=compileScalarValue(scalarType,field.parent.typeName,field.name);if(field.packed)return(writer,opts,message)=>{let items=message[localName];if(items.length!=0){writer.tag(fieldNo,WireType.LengthDelimited).fork();for(let i=0;i<items.length;i++)writeScalar(writer,items[i]);writer.join()}};let wireType=writeTypeOfScalar(scalarType);return(writer,opts,message)=>{let items=message[localName];for(let i=0;i<items.length;i++)writer.tag(fieldNo,wireType),writeScalar(writer,items[i])}}}}function compileMapField(field){let localName=field.localName,fieldNo=field.number,writeKey=compileMapKey(field);if(field.mapKind=="message"){let{toMessage}=localMessageMapper(field),writeMessage=compiledWriter(field.message);return(writer,opts,message)=>{let record=message[localName],keys=Object.keys(record);for(let i=0;i<keys.length;i++){let key=keys[i];writer.tag(fieldNo,WireType.LengthDelimited).fork(),writeKey(writer,key),writer.tag(2,WireType.LengthDelimited).fork(),writeMessage(writer,opts,toMessage(record[key])),writer.join(),writer.join()}}}let scalarType=field.mapKind=="enum"?ScalarType.INT32:field.scalar,valueWireType=writeTypeOfScalar(scalarType),writeScalar=compileScalarValue(scalarType,field.parent.typeName,field.name);return(writer,opts,message)=>{let record=message[localName],keys=Object.keys(record);for(let i=0;i<keys.length;i++){let key=keys[i];writer.tag(fieldNo,WireType.LengthDelimited).fork(),writeKey(writer,key),writer.tag(2,valueWireType),writeScalar(writer,record[key]),writer.join()}}}function compileMapKey(field){let wireType=writeTypeOfScalar(field.mapKey),writeScalar=compileScalarValue(field.mapKey,field.parent.typeName,field.name),convertKey=compileMapKeyConverter(field.mapKey);return(writer,key)=>{writer.tag(1,wireType),writeScalar(writer,convertKey(key))}}function compileMapKeyConverter(type){switch(type){case ScalarType.STRING:return key=>key;case ScalarType.BOOL:return key=>key==="true"?!0:key==="false"?!1:key;case ScalarType.UINT64:case ScalarType.FIXED64:return key=>{try{return protoInt64.uParse(key)}catch{return key}};case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:return key=>{try{return protoInt64.parse(key)}catch{return key}};default:return key=>{let n=Number.parseInt(key);return Number.isFinite(n)?n:key}}}function compileScalarValue(type,messageName,fieldName){let writeScalar=compileScalarWrite(type);return(writer,value)=>{try{writeScalar(writer,value)}catch(e){throw e instanceof Error?new Error(`cannot encode field ${messageName}.${fieldName} to binary: ${e.message}`):e}}}function compileScalarWrite(type){switch(type){case ScalarType.STRING:return(writer,value)=>writer.string(value);case ScalarType.BOOL:return(writer,value)=>writer.bool(value);case ScalarType.DOUBLE:return(writer,value)=>writer.double(value);case ScalarType.FLOAT:return(writer,value)=>writer.float(value);case ScalarType.INT32:return(writer,value)=>writer.int32(value);case ScalarType.INT64:return(writer,value)=>writer.int64(value);case ScalarType.UINT64:return(writer,value)=>writer.uint64(value);case ScalarType.FIXED64:return(writer,value)=>writer.fixed64(value);case ScalarType.BYTES:return(writer,value)=>writer.bytes(value);case ScalarType.FIXED32:return(writer,value)=>writer.fixed32(value);case ScalarType.SFIXED32:return(writer,value)=>writer.sfixed32(value);case ScalarType.SFIXED64:return(writer,value)=>writer.sfixed64(value);case ScalarType.SINT64:return(writer,value)=>writer.sint64(value);case ScalarType.UINT32:return(writer,value)=>writer.uint32(value);case ScalarType.SINT32:return(writer,value)=>writer.sint32(value)}}function writeField(writer,opts,msg,field){compileField(field)(writer,opts,msg[unsafeLocal])}function compileChildWriter(field){let fieldNo=field.number,writeMessage=compiledWriter(field.message);return field.delimitedEncoding?(writer,opts,child)=>{writer.tag(fieldNo,WireType.StartGroup),writeMessage(writer,opts,child),writer.tag(fieldNo,WireType.EndGroup)}:(writer,opts,child)=>{writer.tag(fieldNo,WireType.LengthDelimited).fork(),writeMessage(writer,opts,child),writer.join()}}function writeTypeOfScalar(type){switch(type){case ScalarType.BYTES:case ScalarType.STRING:return WireType.LengthDelimited;case ScalarType.DOUBLE:case ScalarType.FIXED64:case ScalarType.SFIXED64:return WireType.Bit64;case ScalarType.FIXED32:case ScalarType.SFIXED32:case ScalarType.FLOAT:return WireType.Bit32;default:return WireType.Varint}}function anyPack(schema,message,into){let ret=!1;return into||(into=create(AnySchema),ret=!0),into.value=toBinary(schema,message),into.typeUrl=typeNameToUrl(message.$typeName),ret?into:void 0}function anyIs(any,descOrTypeName){if(any.typeUrl==="")return!1;let want=typeof descOrTypeName=="string"?descOrTypeName:descOrTypeName.typeName,got=typeUrlToName(any.typeUrl);return want===got}function anyUnpack(any,registryOrMessageDesc){if(any.typeUrl==="")return;let desc=registryOrMessageDesc.kind=="message"?registryOrMessageDesc:registryOrMessageDesc.getMessage(typeUrlToName(any.typeUrl));if(!(!desc||!anyIs(any,desc)))return fromBinary(desc,any.value)}function typeNameToUrl(name){return`type.googleapis.com/${name}`}function typeUrlToName(url){let slash=url.lastIndexOf("/"),name=slash>=0?url.substring(slash+1):url;if(!name.length)throw new Error(`invalid type url: ${url}`);return name}var file_google_protobuf_struct=fileDesc("Chxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvEg9nb29nbGUucHJvdG9idWYihAEKBlN0cnVjdBIzCgZmaWVsZHMYASADKAsyIy5nb29nbGUucHJvdG9idWYuU3RydWN0LkZpZWxkc0VudHJ5GkUKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi6gEKBVZhbHVlEjAKCm51bGxfdmFsdWUYASABKA4yGi5nb29nbGUucHJvdG9idWYuTnVsbFZhbHVlSAASFgoMbnVtYmVyX3ZhbHVlGAIgASgBSAASFgoMc3RyaW5nX3ZhbHVlGAMgASgJSAASFAoKYm9vbF92YWx1ZRgEIAEoCEgAEi8KDHN0cnVjdF92YWx1ZRgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIABIwCgpsaXN0X3ZhbHVlGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZUgAQgYKBGtpbmQiMwoJTGlzdFZhbHVlEiYKBnZhbHVlcxgBIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSobCglOdWxsVmFsdWUSDgoKTlVMTF9WQUxVRRAAQn8KE2NvbS5nb29nbGUucHJvdG9idWZCC1N0cnVjdFByb3RvUAFaL2dvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3R5cGVzL2tub3duL3N0cnVjdHBi+AEBogIDR1BCqgIeR29vZ2xlLlByb3RvYnVmLldlbGxLbm93blR5cGVzYgZwcm90bzM"),StructSchema=messageDesc(file_google_protobuf_struct,0),ValueSchema=messageDesc(file_google_protobuf_struct,1),ListValueSchema=messageDesc(file_google_protobuf_struct,2),NullValue;(function(NullValue2){NullValue2[NullValue2.NULL_VALUE=0]="NULL_VALUE"})(NullValue||(NullValue={}));function getExtension(message,extension,options){assertExtendee(extension,message);let ufs=filterUnknownFields(message.$unknown,extension),[container,field,get]=createExtensionContainer(extension),ctx=makeReadContext(options);for(let uf of ufs)readField(container,new BinaryReader(uf.data),field,uf.wireType,ctx);return get()}function setExtension(message,extension,value){var _a;assertExtendee(extension,message);let ufs=((_a=message.$unknown)!==null&&_a!==void 0?_a:[]).filter(uf=>uf.no!==extension.number),[container,field]=createExtensionContainer(extension,value),writer=new BinaryWriter;writeField(writer,{writeUnknownFields:!0},container,field);let reader=new BinaryReader(writer.finish());for(;reader.pos<reader.len;){let[no,wireType]=reader.tag(),data=reader.skip(wireType,no);ufs.push({no,wireType,data})}message.$unknown=ufs}function filterUnknownFields(unknownFields,extension){if(unknownFields===void 0)return[];if(extension.fieldKind==="enum"||extension.fieldKind==="scalar"){for(let i=unknownFields.length-1;i>=0;--i)if(unknownFields[i].no==extension.number)return[unknownFields[i]];return[]}return unknownFields.filter(uf=>uf.no===extension.number)}function createExtensionContainer(extension,value){let localName=extension.typeName,field=Object.assign(Object.assign({},extension),{kind:"field",parent:extension.extendee,localName}),desc=Object.assign(Object.assign({},extension.extendee),{fields:[field],members:[field],oneofs:[]}),container=create(desc,value!==void 0?{[localName]:value}:void 0);return[reflect(desc,container),field,()=>{let value2=container[localName];if(value2===void 0){let desc2=extension.message;return isWrapperDesc(desc2)?scalarZeroValue(desc2.fields[0].scalar,desc2.fields[0].longAsString):create(desc2)}return value2}]}function assertExtendee(extension,message){if(extension.extendee.typeName!=message.$typeName)throw new Error(`extension ${extension.typeName} can only be applied to message ${extension.extendee.typeName}`)}var timestampMsMin=Date.parse("0001-01-01T00:00:00Z"),timestampMsMax=Date.parse("9999-12-31T23:59:59Z"),durationSecondsMin=-315576e6,durationSecondsMax=315576e6;var LEGACY_REQUIRED3=3,IMPLICIT5=2,jsonWriteDefaults={alwaysEmitImplicit:!1,enumAsInteger:!1,useProtoFieldName:!1};function makeWriteOptions2(options){return options?Object.assign(Object.assign({},jsonWriteDefaults),options):jsonWriteDefaults}function toJson(schema,message,options){return compiledWriter2(schema)(makeWriteOptions2(options),message)}var compiledWriters2=new WeakMap;function compiledWriter2(desc){let compiled=compiledWriters2.get(desc);return compiled===void 0&&(compiled=compileMessage3(desc)),compiled}function compileMessage3(desc){let typeName=desc.typeName,writeWkt=compileWkt(desc);if(writeWkt!==void 0){let foreignField2=desc.fields[0],compiledWriter4=(opts,message)=>{if(message.$typeName!==typeName&&foreignField2!==void 0)throw new FieldError(foreignField2,`cannot use ${foreignField2} with message ${message.$typeName}`,"ForeignFieldError");return writeWkt(opts,message)};return compiledWriters2.set(desc,compiledWriter4),compiledWriter4}let sortedFields=desc.fields.concat().sort((a,b)=>a.number-b.number),foreignField=sortedFields[0],fieldWriters=[],compiledWriter3=(opts,message)=>{if(message.$typeName!==typeName&&foreignField!==void 0)throw new FieldError(foreignField,`cannot use ${foreignField} with message ${message.$typeName}`,"ForeignFieldError");let json={};for(let i=0;i<fieldWriters.length;i++)fieldWriters[i](opts,message,json);return opts.registry&&writeExtensions(json,opts,opts.registry,message,desc),json};compiledWriters2.set(desc,compiledWriter3);for(let field of sortedFields)fieldWriters.push(compileField2(field));return compiledWriter3}function compileWkt(desc){if(desc.typeName.startsWith("google.protobuf."))switch(desc.typeName){case"google.protobuf.Any":return(opts,message)=>anyToJson(message,opts);case"google.protobuf.Timestamp":return(opts,message)=>timestampToJson(message);case"google.protobuf.Duration":return(opts,message)=>durationToJson(message);case"google.protobuf.FieldMask":return(opts,message)=>fieldMaskToJson(message);case"google.protobuf.Struct":return(opts,message)=>structToJson(message);case"google.protobuf.Value":return(opts,message)=>valueToJson(message);case"google.protobuf.ListValue":return(opts,message)=>listValueToJson(message);default:if(isWrapperDesc(desc)){let valueField=desc.fields[0],localName=valueField.localName,zero=scalarZeroValue(valueField.scalar,!1),writeScalar=compileScalarValue2(valueField);return(opts,message)=>{let value=message[localName];return writeScalar(opts,value===void 0?zero:value)}}return}}function compileField2(field){switch(field.fieldKind){case"scalar":case"enum":case"message":return compileSingularField2(field);case"list":case"map":{let writeValue=field.fieldKind=="list"?compileListValue(field):compileMapValue(field),protoName=field.name,jsonKey=field.jsonName,localName=field.localName;return(opts,message,json)=>{let value=writeValue(opts,message[localName]);value!==void 0&&(json[opts.useProtoFieldName?protoName:jsonKey]=value)}}}}function compileSingularField2(field){let writeValue=compileSingularValue2(field),protoName=field.name,jsonKey=field.jsonName,localName=field.localName;if(field.oneof){let oneofLocalName=field.oneof.localName;return(opts,message,json)=>{let oneof=message[oneofLocalName];oneof.case===localName&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,oneof.value))}}if(field.presence!=IMPLICIT5){let requiredError=field.presence==LEGACY_REQUIRED3?`cannot encode ${field} to JSON: required field not set`:void 0;return(opts,message,json)=>{let value=message[localName];if(value!==void 0&&Object.prototype.hasOwnProperty.call(message,localName))json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value);else if(requiredError!==void 0)throw new Error(requiredError)}}if(field.fieldKind=="enum"){let zero=field.enum.values[0].number;return(opts,message,json)=>{let value=message[localName];(value!==zero||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))}}switch(field.scalar){case ScalarType.BOOL:return(opts,message,json)=>{let value=message[localName];(value!==!1||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))};case ScalarType.STRING:return(opts,message,json)=>{let value=message[localName];(value!==""||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))};case ScalarType.BYTES:return(opts,message,json)=>{let value=message[localName];(!(value instanceof Uint8Array)||value.byteLength>0||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))};case ScalarType.DOUBLE:case ScalarType.FLOAT:return(opts,message,json)=>{let value=message[localName];(!Object.is(value,0)||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))};default:return(opts,message,json)=>{let value=message[localName];(value!=0||opts.alwaysEmitImplicit)&&(json[opts.useProtoFieldName?protoName:jsonKey]=writeValue(opts,value))}}}function compileFieldValue(field){switch(field.fieldKind){case"scalar":case"enum":case"message":return compileSingularValue2(field);case"list":return compileListValue(field);case"map":return compileMapValue(field)}}function compileSingularValue2(field){switch(field.fieldKind){case"scalar":return compileScalarValue2(field);case"enum":return compileEnumValue(field);case"message":return compileMessageValue(field)}}function compileMessageValue(field){let{toMessage}=localMessageMapper(field),writeMessage=compiledWriter2(field.message);return(opts,value)=>writeMessage(opts,toMessage(value))}function compileListValue(field){let writeItem=compileListItemValue(field);return(opts,value)=>{let items=value;if(items.length==0&&!opts.alwaysEmitImplicit)return;let jsonArray=[];for(let i=0;i<items.length;i++)jsonArray.push(writeItem(opts,items[i]));return jsonArray}}function compileListItemValue(field){switch(field.listKind){case"scalar":return compileScalarValue2(field);case"enum":return compileEnumValue(field);case"message":return compileMessageValue(field)}}function compileMapValue(field){let writeMapValue=compileMapEntryValue(field);return(opts,value)=>{let record=value,keys=Object.keys(record);if(keys.length==0&&!opts.alwaysEmitImplicit)return;let jsonObject={};for(let i=0;i<keys.length;i++){let key=keys[i];jsonObject[key]=writeMapValue(opts,record[key])}return jsonObject}}function compileMapEntryValue(field){switch(field.mapKind){case"scalar":return compileScalarValue2(field);case"enum":return compileEnumValue(field);case"message":return compileMessageValue(field)}}function compileEnumValue(field){let desc=field.enum;return desc.typeName=="google.protobuf.NullValue"?(opts,value)=>{if(typeof value!="number")throw errorEnumValue(desc,value);return null}:(opts,value)=>{var _a,_b;if(typeof value!="number")throw errorEnumValue(desc,value);return opts.enumAsInteger?value:(_b=(_a=desc.value[value])===null||_a===void 0?void 0:_a.name)!==null&&_b!==void 0?_b:value}}function errorEnumValue(desc,value){return new Error(`cannot encode ${desc} to JSON: expected number, got ${formatVal(value)}`)}function compileScalarValue2(field){switch(field.scalar){case ScalarType.INT32:case ScalarType.SFIXED32:case ScalarType.SINT32:case ScalarType.FIXED32:case ScalarType.UINT32:return(opts,value)=>{if(typeof value!="number")throw errorScalarValue(field,value);return value};case ScalarType.FLOAT:case ScalarType.DOUBLE:return(opts,value)=>{if(typeof value!="number")throw errorScalarValue(field,value);return Number.isNaN(value)?"NaN":value===Number.POSITIVE_INFINITY?"Infinity":value===Number.NEGATIVE_INFINITY?"-Infinity":value};case ScalarType.STRING:return(opts,value)=>{if(typeof value!="string")throw errorScalarValue(field,value);return value};case ScalarType.BOOL:return(opts,value)=>{if(typeof value!="boolean")throw errorScalarValue(field,value);return value};case ScalarType.UINT64:case ScalarType.FIXED64:case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:return(opts,value)=>{if(typeof value=="bigint"||typeof value=="string"||typeof value=="number"&&Number.isInteger(value))return value.toString();throw errorScalarValue(field,value)};case ScalarType.BYTES:return(opts,value)=>{if(value instanceof Uint8Array)return base64Encode(value);throw errorScalarValue(field,value)}}}function errorScalarValue(field,value){var _a;return new Error(`cannot encode ${field} to JSON: ${(_a=checkField(field,value))===null||_a===void 0?void 0:_a.message}`)}function writeExtensions(json,opts,registry,message,desc){let unknown=message.$unknown;if(unknown===void 0)return;let tagSeen=new Set;for(let i=0;i<unknown.length;i++){let{no}=unknown[i];if(!tagSeen.has(no)){tagSeen.add(no);let extension=registry.getExtensionFor(desc,no);if(!extension)continue;let value=getExtension(message,extension),[container,field]=createExtensionContainer(extension,value),local=container[unsafeLocal],jsonValue=compileFieldValue(field)(opts,local[field.localName]);jsonValue!==void 0&&(json[extension.jsonName]=jsonValue)}}}function anyToJson(val,opts){if(val.typeUrl==="")return{};let{registry}=opts,message,desc;if(registry&&(message=anyUnpack(val,registry),message&&(desc=registry.getMessage(message.$typeName))),!desc||!message)throw new Error(`cannot encode message ${val.$typeName} to JSON: "${val.typeUrl}" is not in the type registry`);let json=hasCustomJsonRepresentation(desc)?{value:compiledWriter2(desc)(opts,message)}:compiledWriter2(desc)(opts,message);return json["@type"]=val.typeUrl,json}function durationToJson(val){let seconds=Number(val.seconds),nanos=val.nanos;if(seconds>durationSecondsMax||seconds<durationSecondsMin)throw new Error(`cannot encode message ${val.$typeName} to JSON: value out of range`);if(seconds>0&&nanos<0||seconds<0&&nanos>0)throw new Error(`cannot encode message ${val.$typeName} to JSON: nanos sign must match seconds sign`);let text=val.seconds.toString();if(nanos!==0){let nanosStr=Math.abs(nanos).toString();nanosStr="0".repeat(9-nanosStr.length)+nanosStr,nanosStr.substring(3)==="000000"?nanosStr=nanosStr.substring(0,3):nanosStr.substring(6)==="000"&&(nanosStr=nanosStr.substring(0,6)),text+="."+nanosStr,nanos<0&&seconds==0&&(text="-"+text)}return text+"s"}function fieldMaskToJson(val){return val.paths.map(p=>{if(protoSnakeCase(protoCamelCase(p))!==p)throw new Error(`cannot encode message ${val.$typeName} to JSON: lowerCamelCase of path name "${p}" is irreversible`);return protoCamelCase(p)}).join(",")}function structToJson(val){let json={},keys=Object.keys(val.fields);for(let i=0;i<keys.length;i++){let key=keys[i];json[key]=valueToJson(val.fields[key])}return json}function valueToJson(val){switch(val.kind.case){case"nullValue":return null;case"numberValue":if(!Number.isFinite(val.kind.value))throw new Error(`${val.$typeName} cannot be NaN or Infinity`);return val.kind.value;case"boolValue":return val.kind.value;case"stringValue":return val.kind.value;case"structValue":return structToJson(val.kind.value);case"listValue":return listValueToJson(val.kind.value);default:throw new Error(`${val.$typeName} must have a value`)}}function listValueToJson(val){return val.values.map(valueToJson)}function timestampToJson(val){let ms=Number(val.seconds)*1e3;if(ms<timestampMsMin||ms>timestampMsMax)throw new Error(`cannot encode message ${val.$typeName} to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive`);if(val.nanos<0)throw new Error(`cannot encode message ${val.$typeName} to JSON: nanos must not be negative`);if(val.nanos>999999999)throw new Error(`cannot encode message ${val.$typeName} to JSON: nanos must not be greater than 99999999`);let z="Z";if(val.nanos>0){let nanosStr=(val.nanos+1e9).toString().substring(1);nanosStr.substring(3)==="000000"?z="."+nanosStr.substring(0,3)+"Z":nanosStr.substring(6)==="000"?z="."+nanosStr.substring(0,6)+"Z":z="."+nanosStr+"Z"}return new Date(ms).toISOString().replace(".000Z",z)}var IMPLICIT6=2;function makeReadContext2(options){return Object.assign(Object.assign({ignoreUnknownFields:!1,recursionLimit:100},options),{depth:0})}function fromJson(schema,json,options){let message=create(schema);return readMessage(schema,message,json,options),message}function readMessage(schema,message,json,options){try{compiledReader2(schema)(message,json,makeReadContext2(options))}catch(e){throw isFieldError(e)?new Error(`cannot decode ${e.field()} from JSON: ${e.message}`,{cause:e}):e}}var compiledReaders2=new WeakMap;function compiledReader2(desc){let compiled=compiledReaders2.get(desc);return compiled===void 0&&(compiled=compileMessage4(desc)),compiled}function compileMessage4(desc){let descString=String(desc),readWkt=compileWkt2(desc);if(readWkt!==void 0){let compiled2=(message,json,ctx)=>{if(++ctx.depth>ctx.recursionLimit)throw new Error(`cannot decode ${descString} from JSON: maximum recursion depth of ${ctx.recursionLimit} reached`);readWkt(message,json,ctx),ctx.depth--};return compiledReaders2.set(desc,compiled2),compiled2}let typeName=desc.typeName,fieldsByJsonKey=new Map,compiled=(message,json,ctx)=>{var _a;if(++ctx.depth>ctx.recursionLimit)throw new Error(`cannot decode ${descString} from JSON: maximum recursion depth of ${ctx.recursionLimit} reached`);if(json==null||Array.isArray(json)||typeof json!="object")throw new Error(`cannot decode ${descString} from JSON: ${formatVal(json)}`);let oneofSeen=new Map,fieldSeen=new Set,jsonKeys=Object.keys(json);for(let i=0;i<jsonKeys.length;i++){let jsonKey=jsonKeys[i],jsonValue=json[jsonKey],entry=fieldsByJsonKey.get(jsonKey);if(entry!==void 0){let field=entry.field;if(fieldSeen.has(field))throw new FieldError(field,"set multiple times");if(fieldSeen.add(field),entry.oneofScalarNullSkip&&jsonValue===null)continue;if(entry.oneof){let seen=oneofSeen.get(entry.oneof);if(seen!==void 0)throw new FieldError(entry.oneof,`oneof set multiple times by ${seen.name} and ${field.name}`);oneofSeen.set(entry.oneof,field)}entry.read(message,jsonValue,ctx)}else{let extension=jsonKey.startsWith("[")&&jsonKey.endsWith("]")?(_a=ctx.registry)===null||_a===void 0?void 0:_a.getExtension(jsonKey.substring(1,jsonKey.length-1)):void 0;if(extension?.extendee.typeName==typeName){let[container,field,get]=createExtensionContainer(extension);compileFieldReader2(field)(container[unsafeLocal],jsonValue,ctx),setExtension(message,extension,get())}if(extension===void 0&&!ctx.ignoreUnknownFields)throw new Error(`cannot decode ${descString} from JSON: key "${jsonKey}" is unknown`)}}ctx.depth--};compiledReaders2.set(desc,compiled);for(let field of desc.fields){let entry={read:compileFieldReader2(field),field,oneof:field.oneof,oneofScalarNullSkip:field.oneof!==void 0&&field.fieldKind=="scalar"};fieldsByJsonKey.set(field.name,entry).set(field.jsonName,entry)}return compiled}function compileWkt2(desc){if(desc.typeName.startsWith("google.protobuf."))switch(desc.typeName){case"google.protobuf.Any":return(message,json,ctx)=>anyFromJson(message,json,ctx);case"google.protobuf.Timestamp":return(message,json)=>timestampFromJson(message,json);case"google.protobuf.Duration":return(message,json)=>durationFromJson(message,json);case"google.protobuf.FieldMask":return(message,json)=>fieldMaskFromJson(message,json);case"google.protobuf.Struct":return(message,json,ctx)=>structFromJson(message,json,ctx);case"google.protobuf.Value":return(message,json,ctx)=>valueFromJson(message,json,ctx);case"google.protobuf.ListValue":return(message,json,ctx)=>listValueFromJson(message,json,ctx);default:if(isWrapperDesc(desc)){let valueField=desc.fields[0],localName=valueField.localName,scalar=valueField.scalar,longAsString=valueField.longAsString,readScalar=compileScalarConverter(valueField);return(message,json)=>{json===null?message[localName]=scalarZeroValue(scalar,longAsString):message[localName]=readScalar(json)}}return}}function compileFieldReader2(field){switch(field.fieldKind){case"scalar":return compileScalarFieldReader2(field);case"enum":return compileEnumFieldReader2(field);case"message":return compileMessageFieldReader2(field);case"list":return compileListFieldReader2(field);case"map":return compileMapFieldReader2(field)}}function compileScalarFieldReader2(field){let readScalar=compileScalarConverter(field),localName=field.localName;if(field.oneof){let oneofLocalName=field.oneof.localName;return(message,json)=>{message[oneofLocalName]={case:localName,value:readScalar(json)}}}let clear=compileClear(field);return(message,json)=>{json===null?clear(message):message[localName]=readScalar(json)}}function compileClear(field){let localName=field.localName;if(field.presence!=IMPLICIT6)return message=>{delete message[localName]};if(field.fieldKind=="enum"){let zero=field.enum.values[0].number;return message=>{message[localName]=zero}}let scalar=field.scalar,longAsString=field.longAsString;return message=>{message[localName]=scalarZeroValue(scalar,longAsString)}}function compileEnumFieldReader2(field){let readEnumValue=compileEnumConverter(field.enum),checkEnum=compileEnumCheck(field.enum),localName=field.localName,nullResets=field.enum.typeName!="google.protobuf.NullValue";if(field.oneof){let oneofLocalName=field.oneof.localName;return(message,json,ctx)=>{if(json===null&&nullResets){message[oneofLocalName].case===localName&&(message[oneofLocalName]={case:void 0});return}let value=readEnumValue(json,ctx.ignoreUnknownFields);if(value===tokenIgnoredUnknownEnum)return;let check=checkEnum(value);if(check!==!0)throw new FieldError(field,reasonSingular(field,value,check));message[oneofLocalName]={case:localName,value}}}let clear=compileClear(field);return(message,json,ctx)=>{if(json===null&&nullResets){clear(message);return}let value=readEnumValue(json,ctx.ignoreUnknownFields);if(value===tokenIgnoredUnknownEnum)return;let check=checkEnum(value);if(check!==!0)throw new FieldError(field,reasonSingular(field,value,check));message[localName]=value}}function compileMessageFieldReader2(field){let localName=field.localName,{toMessage,toLocal}=localMessageMapper(field),readChild=compiledReader2(field.message),nullResets=field.message.typeName!="google.protobuf.Value";if(field.oneof){let oneofLocalName=field.oneof.localName;return(message,json,ctx)=>{let oneof=message[oneofLocalName];if(json===null&&nullResets){oneof.case===localName&&(message[oneofLocalName]={case:void 0});return}let child=toMessage(oneof.case===localName?oneof.value:void 0);readChild(child,json,ctx),message[oneofLocalName]={case:localName,value:toLocal(child)}}}return(message,json,ctx)=>{if(json===null&&nullResets){delete message[localName];return}let child=toMessage(message[localName]);readChild(child,json,ctx),message[localName]=toLocal(child)}}function compileListFieldReader2(field){let localName=field.localName,readItem=compileListItemReader(field);return(message,json,ctx)=>{if(json===null)return;if(!Array.isArray(json))throw new FieldError(field,"expected Array, got "+formatVal(json));let items=message[localName];for(let i=0;i<json.length;i++){let value=readItem(json[i],ctx,items.length);value!==tokenIgnoredUnknownEnum&&items.push(value)}}}function compileListItemReader(field){switch(field.listKind){case"scalar":{let parseScalar=compileScalarParse(field),checkValue=checkScalarValue(field.scalar),toLocal=compileScalarToLocal(field);return(json,ctx,index)=>{if(json===null)throw new FieldError(field,"list item must not be null");let value=parseScalar(json),check=checkValue(value);if(check!==!0)throw new FieldError(field,`list item #${index+1}: ${reasonSingular(field,value,check)}`);return toLocal(value)}}case"enum":{let readEnumValue=compileEnumConverter(field.enum),checkEnum=compileEnumCheck(field.enum),nullResets=field.enum.typeName!="google.protobuf.NullValue";return(json,ctx,index)=>{if(json===null&&nullResets)throw new FieldError(field,"list item must not be null");let value=readEnumValue(json,ctx.ignoreUnknownFields);if(value===tokenIgnoredUnknownEnum)return value;let check=checkEnum(value);if(check!==!0)throw new FieldError(field,`list item #${index+1}: ${reasonSingular(field,value,check)}`);return value}}case"message":{let{toMessage,toLocal}=localMessageMapper(field),readChild=compiledReader2(field.message),nullResets=field.message.typeName!="google.protobuf.Value";return(json,ctx)=>{if(json===null&&nullResets)throw new FieldError(field,"list item must not be null");let child=toMessage(void 0);return readChild(child,json,ctx),toLocal(child)}}}}function compileMapFieldReader2(field){let localName=field.localName,mapKey=field.mapKey,parseMapKey=compileMapKeyParse(mapKey),checkMapKey=checkScalarValue(mapKey),parseValue,checkValue,toLocalValue=value=>value,nullResets=!0;switch(field.mapKind){case"scalar":{parseValue=compileScalarParse(field),checkValue=checkScalarValue(field.scalar),toLocalValue=compileScalarToLocal(field);break}case"enum":{let readEnumValue=compileEnumConverter(field.enum);parseValue=(json,ctx)=>readEnumValue(json,ctx.ignoreUnknownFields),checkValue=compileEnumCheck(field.enum),nullResets=field.enum.typeName!="google.protobuf.NullValue";break}case"message":{let{toMessage,toLocal}=localMessageMapper(field),readChild=compiledReader2(field.message);nullResets=field.message.typeName!="google.protobuf.Value",parseValue=(json,ctx)=>{let child=toMessage(void 0);return readChild(child,json,ctx),toLocal(child)};break}}return(message,json,ctx)=>{if(json===null)return;if(typeof json!="object"||Array.isArray(json))throw new FieldError(field,"expected object, got "+formatVal(json));let record=message[localName],seen=new Set,jsonMapKeys=Object.keys(json);for(let i=0;i<jsonMapKeys.length;i++){let jsonMapKey=jsonMapKeys[i],jsonMapValue=json[jsonMapKey],key=parseMapKey(jsonMapKey);if(seen.has(key))throw new FieldError(field,`duplicate map key "${jsonMapKey}"`);if(seen.add(key),jsonMapValue===null&&nullResets)throw new FieldError(field,"map value must not be null");let value=parseValue(jsonMapValue,ctx);if(value===tokenIgnoredUnknownEnum)continue;let checkKey=checkMapKey(key);if(checkKey!==!0)throw new FieldError(field,`invalid map key: ${reasonSingular({scalar:mapKey},key,checkKey)}`);if(checkValue!==void 0){let check=checkValue(value);if(check!==!0)throw new FieldError(field,`map entry ${formatVal(key)}: ${reasonSingular(field,value,check)}`)}record[key]=toLocalValue(value)}}}var tokenIgnoredUnknownEnum=Symbol();function compileEnumConverter(desc){let zero=desc.values[0].number,values=desc.values;return(json,ignoreUnknownFields)=>{if(json===null)return zero;switch(typeof json){case"number":if(Number.isInteger(json))return json;break;case"string":{let value=values.find(ev=>ev.name===json);if(value!==void 0)return value.number;if(ignoreUnknownFields)return tokenIgnoredUnknownEnum;break}}throw new Error(`cannot decode ${desc} from JSON: ${formatVal(json)}`)}}function compileEnumCheck(desc){if(desc.open)return checkScalarValue(ScalarType.INT32);let values=desc.values;return value=>values.some(v=>v.number===value)}function compileScalarConverter(field){let parseScalar=compileScalarParse(field),checkValue=checkScalarValue(field.scalar),toLocal=compileScalarToLocal(field);return json=>{let value=parseScalar(json),check=checkValue(value);if(check!==!0)throw new FieldError(field,reasonSingular(field,value,check));return toLocal(value)}}function compileScalarParse(field){switch(field.scalar){case ScalarType.DOUBLE:case ScalarType.FLOAT:return json=>{if(json==="NaN")return NaN;if(json==="Infinity")return Number.POSITIVE_INFINITY;if(json==="-Infinity")return Number.NEGATIVE_INFINITY;if(typeof json=="number"){if(Number.isNaN(json))throw new FieldError(field,"unexpected NaN number");if(!Number.isFinite(json))throw new FieldError(field,"unexpected infinite number");return json}if(typeof json=="string"){if(json===""||json.trim().length!==json.length)return json;let float=Number(json);return Number.isFinite(float)?float:json}return json};case ScalarType.INT32:case ScalarType.FIXED32:case ScalarType.SFIXED32:case ScalarType.SINT32:case ScalarType.UINT32:return int32FromJson;case ScalarType.BYTES:return json=>{if(typeof json=="string"){if(json==="")return new Uint8Array(0);try{return base64Decode(json)}catch(e){let message=e instanceof Error?e.message:String(e);throw new FieldError(field,message)}}return json};default:return json=>json}}function compileScalarToLocal(field){let longAsString=field.fieldKind!=="map"&&field.longAsString;switch(field.scalar){case ScalarType.INT64:case ScalarType.SFIXED64:case ScalarType.SINT64:return longAsString?value=>String(value):value=>typeof value=="string"||typeof value=="number"?protoInt64.parse(value):value;case ScalarType.FIXED64:case ScalarType.UINT64:return longAsString?value=>String(value):value=>typeof value=="string"||typeof value=="number"?protoInt64.uParse(value):value;default:return value=>value}}function compileMapKeyParse(type){switch(type){case ScalarType.BOOL:return jsonString=>{switch(jsonString){case"true":return!0;case"false":return!1}return jsonString};case ScalarType.INT32:case ScalarType.FIXED32:case ScalarType.UINT32:case ScalarType.SFIXED32:case ScalarType.SINT32:return int32FromJson;case ScalarType.INT64:case ScalarType.SINT64:case ScalarType.SFIXED64:case ScalarType.UINT64:case ScalarType.FIXED64:return jsonString=>/^-?0+$/.test(jsonString)?"0":jsonString.replace(/^(-?)0+(?=\d)/,"$1");default:return jsonString=>jsonString}}function int32FromJson(json){if(typeof json=="string"){if(json===""||json.trim().length!==json.length)return json;let num=Number(json);return Number.isNaN(num)?json:num}return json}function anyFromJson(any,json,ctx){var _a;if(json===null||Array.isArray(json)||typeof json!="object")throw new Error(`cannot decode message ${any.$typeName} from JSON: expected object but got ${formatVal(json)}`);if(Object.keys(json).length==0)return;let typeUrl=json["@type"];if(typeof typeUrl!="string"||typeUrl=="")throw new Error(`cannot decode message ${any.$typeName} from JSON: "@type" is empty`);let typeName=typeUrl.includes("/")?typeUrl.substring(typeUrl.lastIndexOf("/")+1):typeUrl;if(!typeName.length)throw new Error(`cannot decode message ${any.$typeName} from JSON: "@type" is invalid`);let desc=(_a=ctx.registry)===null||_a===void 0?void 0:_a.getMessage(typeName);if(!desc)throw new Error(`cannot decode message ${any.$typeName} from JSON: ${typeUrl} is not in the type registry`);let message=create(desc);if(hasCustomJsonRepresentation(desc)&&Object.prototype.hasOwnProperty.call(json,"value"))compiledReader2(desc)(message,json.value,ctx);else{let copy=Object.assign({},json);delete copy["@type"],compiledReader2(desc)(message,copy,ctx)}anyPack(desc,message,any)}function timestampFromJson(timestamp,json){if(typeof json!="string")throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: ${formatVal(json)}`);let matches=json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\.([0-9]{1,9}))?(?:Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!matches)throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: invalid RFC 3339 string`);let ms=Date.parse(matches[1]+"-"+matches[2]+"-"+matches[3]+"T"+matches[4]+":"+matches[5]+":"+matches[6]+(matches[8]?matches[8]:"Z"));if(Number.isNaN(ms))throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: invalid RFC 3339 string`);if(ms<timestampMsMin||ms>timestampMsMax)throw new Error(`cannot decode message ${timestamp.$typeName} from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive`);timestamp.seconds=protoInt64.parse(ms/1e3),timestamp.nanos=0,matches[7]&&(timestamp.nanos=parseInt("1"+matches[7]+"0".repeat(9-matches[7].length))-1e9)}function durationFromJson(duration,json){if(typeof json!="string")throw new Error(`cannot decode message ${duration.$typeName} from JSON: ${formatVal(json)}`);let match=json.match(/^(-?[0-9]+)(?:\.([0-9]+))?s/);if(match===null)throw new Error(`cannot decode message ${duration.$typeName} from JSON: ${formatVal(json)}`);let longSeconds=Number(match[1]);if(longSeconds>durationSecondsMax||longSeconds<durationSecondsMin)throw new Error(`cannot decode message ${duration.$typeName} from JSON: ${formatVal(json)}`);if(duration.seconds=protoInt64.parse(longSeconds),typeof match[2]!="string")return;let nanosStr=match[2]+"0".repeat(9-match[2].length);duration.nanos=parseInt(nanosStr),(longSeconds<0||Object.is(longSeconds,-0))&&(duration.nanos=-duration.nanos)}function fieldMaskFromJson(fieldMask,json){if(typeof json!="string")throw new Error(`cannot decode message ${fieldMask.$typeName} from JSON: ${formatVal(json)}`);json!==""&&(fieldMask.paths=json.split(",").map(path=>{if(path.includes("_"))throw new Error(`cannot decode message ${fieldMask.$typeName} from JSON: path names must be lowerCamelCase`);return protoSnakeCase(path)}))}function structFromJson(struct,json,ctx){if(typeof json!="object"||json==null||Array.isArray(json))throw new Error(`cannot decode message ${struct.$typeName} from JSON ${formatVal(json)}`);let keys=Object.keys(json);for(let i=0;i<keys.length;i++){let key=keys[i],parsedValue=create(ValueSchema);valueFromJson(parsedValue,json[key],ctx),struct.fields[key]=parsedValue}}function valueFromJson(value,json,ctx){if(++ctx.depth>ctx.recursionLimit)throw new Error(`cannot decode ${value.$typeName} from JSON: maximum recursion depth of ${ctx.recursionLimit} reached`);switch(typeof json){case"number":value.kind={case:"numberValue",value:json};break;case"string":value.kind={case:"stringValue",value:json};break;case"boolean":value.kind={case:"boolValue",value:json};break;case"object":if(json===null)value.kind={case:"nullValue",value:NullValue.NULL_VALUE};else if(Array.isArray(json)){let listValue=create(ListValueSchema);listValueFromJson(listValue,json,ctx),value.kind={case:"listValue",value:listValue}}else{let struct=create(StructSchema);structFromJson(struct,json,ctx),value.kind={case:"structValue",value:struct}}break;default:throw new Error(`cannot decode message ${value.$typeName} from JSON ${formatVal(json)}`)}return ctx.depth--,value}function listValueFromJson(listValue,json,ctx){if(!Array.isArray(json))throw new Error(`cannot decode message ${listValue.$typeName} from JSON ${formatVal(json)}`);for(let i=0;i<json.length;i++){let value=create(ValueSchema);valueFromJson(value,json[i],ctx),listValue.values.push(value)}}var CURSOR_COMPOSER_PROMPT=`You are running in this client, not in Cursor. Your tools on this surface are read, ls, grep, write, delete, diagnostics, and shell. Tool names from other harnesses are unavailable here.
5
+
6
+ Reach for repository files through the native tools: read for file contents, ls for directory entries, grep for content and filename search, write to create or modify, delete to remove, diagnostics for a file's current errors. These carry line anchors and result metadata that shell output does not.
7
+
8
+ Keep shell for terminal work: tests, builds, package scripts, git, and process control. Put only the command in the command string.
9
+
10
+ Tool arguments are the schema object the tool declares. Keep explanation and markdown in your message text, where it belongs.
11
+
12
+ Read a file before you edit it, and read it again after any write before relying on its contents. Copy line anchors from the most recent tool output rather than computing or adjusting them; when an anchor is rejected, re-read and use the anchors that come back.
13
+
14
+ Run independent searches and reads together in one batch. Keep dependent steps in sequence, and let a step that needs the previous result wait for it.
15
+
16
+ A task is finished when the requested behavior is in place and you have watched it work: the relevant test, build, or command run, and its output read. Until you have that, keep going. If something remains unproven or broken, say which part and why.
17
+
18
+ When asked a question, answer it from the code and stop there. Edit when a change was requested or when a fix is confirmed.`,COMPOSER_MODEL_ID_PATTERN=/(?:^|[/:._-])composer(?:[/:._-]|\d|$)/i;function isCursorComposerModel(modelId){return COMPOSER_MODEL_ID_PATTERN.test(modelId)}var FifoQueue=class{constructor(){this.incoming=[],this.outgoing=[]}get length(){return this.incoming.length+this.outgoing.length}enqueue(value){this.incoming.push(value)}dequeue(){if(this.outgoing.length===0)for(;this.incoming.length>0;)this.outgoing.push(this.incoming.pop());return this.outgoing.pop()}},EventStream=class{#queue;#queueHead;#failed;#error;#localWorkDepth;constructor(isComplete,extractResult){this.#queue=[],this.#queueHead=0,this.waiting=new FifoQueue,this.done=!1,this.#failed=!1,this.#localWorkDepth=0,this.isComplete=isComplete,this.extractResult=extractResult,this.finalResultPromise=new Promise((resolve,reject)=>{this.resolveFinalResult=resolve,this.rejectFinalResult=reject}),this.finalResultPromise.catch(()=>{})}get queue(){return this.#queue.slice(this.#queueHead)}#enqueue(event){this.#queue.push(event)}#dequeue(){let event=this.#queue[this.#queueHead];if(event===void 0)throw new Error("EventStream queue underflow");return this.#queueHead++,this.#queueHead>1024&&this.#queueHead*2>=this.#queue.length&&(this.#queue=this.#queue.slice(this.#queueHead),this.#queueHead=0),event}push(event){if(this.done)return;this.isComplete(event)&&(this.done=!0,this.resolveFinalResult(this.extractResult(event)));let waiter=this.waiting.dequeue();waiter?waiter.resolve({value:event,done:!1}):this.#enqueue(event)}end(result){for(this.done=!0,result!==void 0&&this.resolveFinalResult(result);this.waiting.length>0;){let waiter=this.waiting.dequeue();waiter&&waiter.resolve({value:void 0,done:!0})}}fail(error){if(!this.done)for(this.done=!0,this.#failed=!0,this.#error=error,this.rejectFinalResult(error);this.waiting.length>0;){let waiter=this.waiting.dequeue();waiter&&waiter.reject(error)}}[Symbol.asyncIterator](){return{next:()=>this.#queueHead<this.#queue.length?Promise.resolve({value:this.#dequeue(),done:!1}):this.#failed?Promise.reject(this.#error):this.done?Promise.resolve({value:void 0,done:!0}):new Promise((resolve,reject)=>this.waiting.enqueue({resolve,reject}))}}result(){return this.finalResultPromise}async trackLocalWork(work){this.#localWorkDepth++;try{return await work}finally{this.#localWorkDepth--}}hasPendingLocalWork(){return this.#localWorkDepth>0}},AssistantMessageEventStream=class extends EventStream{constructor(){super(event=>event.type==="done"||event.type==="error",event=>{if(event.type==="done")return event.message;if(event.type==="error")return event.error;throw new Error("Unexpected event type for final result")})}};function calculateCost(model,usage){let inputTokens=usage.input+usage.cacheRead+usage.cacheWrite,rates=model.cost,matchedThreshold=-1;for(let tier of model.cost.tiers??[])inputTokens>tier.inputTokensAbove&&tier.inputTokensAbove>matchedThreshold&&(rates=tier,matchedThreshold=tier.inputTokensAbove);let longWrite=usage.cacheWrite1h??0,shortWrite=usage.cacheWrite-longWrite;return usage.cost.input=rates.input/1e6*usage.input,usage.cost.output=rates.output/1e6*usage.output,usage.cost.cacheRead=rates.cacheRead/1e6*usage.cacheRead,usage.cost.cacheWrite=(rates.cacheWrite*shortWrite+rates.input*2*longWrite)/1e6,usage.cost.total=usage.cost.input+usage.cost.output+usage.cost.cacheRead+usage.cost.cacheWrite,usage.cost}var sessionResourceCleanups=new Set;function registerSessionResourceCleanup(cleanup){return sessionResourceCleanups.add(cleanup),()=>{sessionResourceCleanups.delete(cleanup)}}var kStreamingPartialJson=Symbol("provider.block.partialJson");function clearStreamingPartialJson(block){Object.hasOwn(block,kStreamingPartialJson)&&(block[kStreamingPartialJson]=void 0)}var kStreamingBlockIndex=Symbol("provider.block.index"),kStreamingLastParseLen=Symbol("provider.block.lastParseLen"),kStreamingEnvelopeId=Symbol("provider.block.envelopeId"),kStreamingBlockKind=Symbol("provider.block.kind"),kCursorExecResolved=Symbol("provider.block.cursorExecResolved");import{mkdirSync,readFileSync,renameSync,writeFileSync}from"node:fs";import{dirname}from"node:path";var observedLimits=new Map,persistence,hydrated=!1;function installCursorContextLimitPersistence(port){persistence!==port&&(persistence=port,hydrated=!1)}function hydrate(){if(!hydrated&&(hydrated=!0,!!persistence))for(let[modelId,maxTokens]of persistence.load())observedLimits.has(modelId)||observedLimits.set(modelId,maxTokens)}function recordCursorContextLimit(modelId,maxTokens){maxTokens===void 0||!Number.isFinite(maxTokens)||maxTokens<=0||(hydrate(),observedLimits.get(modelId)!==maxTokens&&(observedLimits.set(modelId,maxTokens),persistence?.save(observedLimits)))}function resolveCursorContextLimitStorePath(env=process.env){return env.CURSOR_CONTEXT_LIMIT_STORE?env.CURSOR_CONTEXT_LIMIT_STORE:`${(env.SENPI_CODING_AGENT_DIR??env.CODING_AGENT_DIR??`${(env.HOME??".").replace(/\/$/,"")}/.senpi/agent`).replace(/\/$/,"")}/cursor-context-limits.json`}var savingEnabled=!0,filePersistence={load:()=>{let limits=new Map,parsed;try{parsed=JSON.parse(readFileSync(resolveCursorContextLimitStorePath(),"utf8"))}catch(error){if(error instanceof Error)return limits;throw error}if(!parsed||typeof parsed!="object"||Array.isArray(parsed))return limits;for(let[modelId,maxTokens]of Object.entries(parsed))typeof maxTokens=="number"&&Number.isFinite(maxTokens)&&maxTokens>0&&limits.set(modelId,maxTokens);return limits},save:limits=>{if(!savingEnabled)return;let path=resolveCursorContextLimitStorePath(),record={};for(let[modelId,maxTokens]of limits)record[modelId]=maxTokens;try{mkdirSync(dirname(path),{recursive:!0});let temporaryPath=`${path}.${process.pid}.tmp`;writeFileSync(temporaryPath,`${JSON.stringify(record,null,2)}
19
+ `),renameSync(temporaryPath,path)}catch(error){if(!(error instanceof Error))throw error;savingEnabled=!1}}};function ensurePersistenceInstalled(){installCursorContextLimitPersistence(filePersistence)}function recordCursorContextLimit2(modelId,maxTokens){ensurePersistenceInstalled(),recordCursorContextLimit(modelId,maxTokens)}function providerHeadersToRecord(headers){if(!headers)return;let result={};for(let[key,value]of Object.entries(headers))value!==null&&(result[key]=value);return Object.keys(result).length>0?result:void 0}var import_partial_json=__toESM(require_dist(),1),VALID_JSON_ESCAPES=new Set(['"',"\\","/","b","f","n","r","t","u"]);function isControlCharacter(char){let codePoint=char.codePointAt(0);return codePoint!==void 0&&codePoint>=0&&codePoint<=31}function escapeControlCharacter(char){switch(char){case"\b":return"\\b";case"\f":return"\\f";case`
20
+ `:return"\\n";case"\r":return"\\r";case" ":return"\\t";default:return`\\u${char.codePointAt(0)?.toString(16).padStart(4,"0")??"0000"}`}}function repairJson(json){let repaired="",inString=!1;for(let index=0;index<json.length;index++){let char=json[index];if(!inString){repaired+=char,char==='"'&&(inString=!0);continue}if(char==='"'){repaired+=char,inString=!1;continue}if(char==="\\"){let nextChar=json[index+1];if(nextChar===void 0){repaired+="\\\\";continue}if(nextChar==="u"){let unicodeDigits=json.slice(index+2,index+6);if(/^[0-9a-fA-F]{4}$/.test(unicodeDigits)){repaired+=`\\u${unicodeDigits}`,index+=5;continue}}if(VALID_JSON_ESCAPES.has(nextChar)){repaired+=`\\${nextChar}`,index+=1;continue}repaired+="\\\\";continue}repaired+=isControlCharacter(char)?escapeControlCharacter(char):char}return repaired}function parseJsonWithRepair(json){try{return JSON.parse(json)}catch(error){let repairedJson=repairJson(json);if(repairedJson!==json)return JSON.parse(repairedJson);throw error}}function parseStreamingJson(partialJson){if(!partialJson||partialJson.trim()==="")return{};try{return parseJsonWithRepair(partialJson)}catch{try{return(0,import_partial_json.parse)(partialJson)??{}}catch{try{return(0,import_partial_json.parse)(repairJson(partialJson))??{}}catch{return{}}}}}function sanitizeSurrogates(text){return text.replace(/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g,"")}import{createHash}from"node:crypto";function deterministicUuid(seed){let hex=createHash("sha256").update(seed).digest("hex");return`${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20,32)}`}function armExecHeartbeat(options){let active=!0,timer,schedule=()=>{!active||options.isClosed()||(timer=setTimeout(()=>{timer=void 0,!(!active||options.isClosed())&&options.writeHeartbeat(error=>{error||!active||options.isClosed()||schedule()})},options.intervalMs))};return schedule(),()=>{active=!1,timer!==void 0&&(clearTimeout(timer),timer=void 0)}}var file_agent=fileDesc("CgthZ2VudC5wcm90bxIIYWdlbnQudjEicgoOR2xvYlRvb2xSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLkdsb2JUb29sU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuR2xvYlRvb2xFcnJvckgAQggKBnJlc3VsdCIeCg1HbG9iVG9vbEVycm9yEg0KBWVycm9yGAEgASgJIokBCg9HbG9iVG9vbFN1Y2Nlc3MSDwoHcGF0dGVybhgBIAEoCRIMCgRwYXRoGAIgASgJEg0KBWZpbGVzGAMgAygJEhMKC3RvdGFsX2ZpbGVzGAQgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYBSABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBiABKAgiRgoMR2xvYlRvb2xDYWxsEgwKBGFyZ3MYASABKAwSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuR2xvYlRvb2xSZXN1bHQibQoRUmVhZExpbnRzVG9vbENhbGwSKQoEYXJncxgBIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xBcmdzEi0KBnJlc3VsdBgCIAEoCzIdLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xSZXN1bHQiIgoRUmVhZExpbnRzVG9vbEFyZ3MSDQoFcGF0aHMYASADKAkigQEKE1JlYWRMaW50c1Rvb2xSZXN1bHQSMQoHc3VjY2VzcxgBIAEoCzIeLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xTdWNjZXNzSAASLQoFZXJyb3IYAiABKAsyHC5hZ2VudC52MS5SZWFkTGludHNUb29sRXJyb3JIAEIICgZyZXN1bHQiewoUUmVhZExpbnRzVG9vbFN1Y2Nlc3MSMwoQZmlsZV9kaWFnbm9zdGljcxgBIAMoCzIZLmFnZW50LnYxLkZpbGVEaWFnbm9zdGljcxITCgt0b3RhbF9maWxlcxgCIAEoBRIZChF0b3RhbF9kaWFnbm9zdGljcxgDIAEoBSJpCg9GaWxlRGlhZ25vc3RpY3MSDAoEcGF0aBgBIAEoCRItCgtkaWFnbm9zdGljcxgCIAMoCzIYLmFnZW50LnYxLkRpYWdub3N0aWNJdGVtEhkKEWRpYWdub3N0aWNzX2NvdW50GAMgASgFIqsBCg5EaWFnbm9zdGljSXRlbRIuCghzZXZlcml0eRgBIAEoDjIcLmFnZW50LnYxLkRpYWdub3N0aWNTZXZlcml0eRIoCgVyYW5nZRgCIAEoCzIZLmFnZW50LnYxLkRpYWdub3N0aWNSYW5nZRIPCgdtZXNzYWdlGAMgASgJEg4KBnNvdXJjZRgEIAEoCRIMCgRjb2RlGAUgASgJEhAKCGlzX3N0YWxlGAYgASgIIlUKD0RpYWdub3N0aWNSYW5nZRIhCgVzdGFydBgBIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uEh8KA2VuZBgCIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uIisKElJlYWRMaW50c1Rvb2xFcnJvchIVCg1lcnJvcl9tZXNzYWdlGAEgASgJIj0KDE1jcFRvb2xFcnJvchINCgVlcnJvchgBIAEoCRIeChZyZWFkX3Rvb2xfZGVmX3JlbWluZGVyGAIgASgJItIBCg1NY3BUb29sUmVzdWx0EicKB3N1Y2Nlc3MYASABKAsyFC5hZ2VudC52MS5NY3BTdWNjZXNzSAASJwoFZXJyb3IYAiABKAsyFi5hZ2VudC52MS5NY3BUb29sRXJyb3JIABIpCghyZWplY3RlZBgDIAEoCzIVLmFnZW50LnYxLk1jcFJlamVjdGVkSAASOgoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyHS5hZ2VudC52MS5NY3BQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0IoEBCgtNY3BUb29sQ2FsbBIfCgRhcmdzGAEgASgLMhEuYWdlbnQudjEuTWNwQXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5NY3BUb29sUmVzdWx0EhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQFCDgoMX2Rlc2NyaXB0aW9uIm0KEVNlbVNlYXJjaFRvb2xDYWxsEikKBGFyZ3MYASABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQXJncxItCgZyZXN1bHQYAiABKAsyHS5hZ2VudC52MS5TZW1TZWFyY2hUb29sUmVzdWx0IlMKEVNlbVNlYXJjaFRvb2xBcmdzEg0KBXF1ZXJ5GAEgASgJEhoKEnRhcmdldF9kaXJlY3RvcmllcxgCIAMoCRITCgtleHBsYW5hdGlvbhgDIAEoCSKBAQoTU2VtU2VhcmNoVG9vbFJlc3VsdBIxCgdzdWNjZXNzGAEgASgLMh4uYWdlbnQudjEuU2VtU2VhcmNoVG9vbFN1Y2Nlc3NIABItCgVlcnJvchgCIAEoCzIcLmFnZW50LnYxLlNlbVNlYXJjaFRvb2xFcnJvckgAQggKBnJlc3VsdCI9ChRTZW1TZWFyY2hUb29sU3VjY2VzcxIPCgdyZXN1bHRzGAEgASgJEhQKDGNvZGVfcmVzdWx0cxgCIAMoDCIrChJTZW1TZWFyY2hUb29sRXJyb3ISFQoNZXJyb3JfbWVzc2FnZRgBIAEoCSKCAQoYTGlzdE1jcFJlc291cmNlc1Rvb2xDYWxsEjAKBGFyZ3MYASABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY0FyZ3MSNAoGcmVzdWx0GAIgASgLMiQuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHQifwoXUmVhZE1jcFJlc291cmNlVG9vbENhbGwSLwoEYXJncxgBIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNBcmdzEjMKBnJlc3VsdBgCIAEoCzIjLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNSZXN1bHQiWQoNRmV0Y2hUb29sQ2FsbBIhCgRhcmdzGAEgASgLMhMuYWdlbnQudjEuRmV0Y2hBcmdzEiUKBnJlc3VsdBgCIAEoCzIVLmFnZW50LnYxLkZldGNoUmVzdWx0Im4KFFJlY29yZFNjcmVlblRvb2xDYWxsEigKBGFyZ3MYASABKAsyGi5hZ2VudC52MS5SZWNvcmRTY3JlZW5BcmdzEiwKBnJlc3VsdBgCIAEoCzIcLmFnZW50LnYxLlJlY29yZFNjcmVlblJlc3VsdCJ3ChdXcml0ZVNoZWxsU3RkaW5Ub29sQ2FsbBIrCgRhcmdzGAEgASgLMh0uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluQXJncxIvCgZyZXN1bHQYAiABKAsyHy5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5SZXN1bHQisQEKC1JlZmxlY3RBcmdzEiIKGnVuZXhwZWN0ZWRfYWN0aW9uX291dGNvbWVzGAEgASgJEh0KFXJlbGV2YW50X2luc3RydWN0aW9ucxgCIAEoCRIZChFzY2VuYXJpb19hbmFseXNpcxgDIAEoCRIaChJjcml0aWNhbF9zeW50aGVzaXMYBCABKAkSEgoKbmV4dF9zdGVwcxgFIAEoCRIUCgx0b29sX2NhbGxfaWQYBiABKAkibwoNUmVmbGVjdFJlc3VsdBIrCgdzdWNjZXNzGAEgASgLMhguYWdlbnQudjEuUmVmbGVjdFN1Y2Nlc3NIABInCgVlcnJvchgCIAEoCzIWLmFnZW50LnYxLlJlZmxlY3RFcnJvckgAQggKBnJlc3VsdCIQCg5SZWZsZWN0U3VjY2VzcyIdCgxSZWZsZWN0RXJyb3ISDQoFZXJyb3IYASABKAkiXwoPUmVmbGVjdFRvb2xDYWxsEiMKBGFyZ3MYASABKAsyFS5hZ2VudC52MS5SZWZsZWN0QXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5SZWZsZWN0UmVzdWx0IlkKF1N0YXJ0R3JpbmRFeGVjdXRpb25BcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKTAQoZU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdBI3CgdzdWNjZXNzGAEgASgLMiQuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblN1Y2Nlc3NIABIzCgVlcnJvchgCIAEoCzIiLmFnZW50LnYxLlN0YXJ0R3JpbmRFeGVjdXRpb25FcnJvckgAQggKBnJlc3VsdCIcChpTdGFydEdyaW5kRXhlY3V0aW9uU3VjY2VzcyIpChhTdGFydEdyaW5kRXhlY3V0aW9uRXJyb3ISDQoFZXJyb3IYASABKAkigwEKG1N0YXJ0R3JpbmRFeGVjdXRpb25Ub29sQ2FsbBIvCgRhcmdzGAEgASgLMiEuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvbkFyZ3MSMwoGcmVzdWx0GAIgASgLMiMuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdCJYChZTdGFydEdyaW5kUGxhbm5pbmdBcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKQAQoYU3RhcnRHcmluZFBsYW5uaW5nUmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzSAASMgoFZXJyb3IYAiABKAsyIS5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdFcnJvckgAQggKBnJlc3VsdCIbChlTdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzIigKF1N0YXJ0R3JpbmRQbGFubmluZ0Vycm9yEg0KBWVycm9yGAEgASgJIoABChpTdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbBIuCgRhcmdzGAEgASgLMiAuYWdlbnQudjEuU3RhcnRHcmluZFBsYW5uaW5nQXJncxIyCgZyZXN1bHQYAiABKAsyIi5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdSZXN1bHQinAEKCFRhc2tBcmdzEhMKC2Rlc2NyaXB0aW9uGAEgASgJEg4KBnByb21wdBgCIAEoCRItCg1zdWJhZ2VudF90eXBlGAMgASgLMhYuYWdlbnQudjEuU3ViYWdlbnRUeXBlEhIKBW1vZGVsGAQgASgJSACIAQESEwoGcmVzdW1lGAUgASgJSAGIAQFCCAoGX21vZGVsQgkKB19yZXN1bWUiqgEKC1Rhc2tTdWNjZXNzEjYKEmNvbnZlcnNhdGlvbl9zdGVwcxgBIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0ZXASFQoIYWdlbnRfaWQYAiABKAlIAIgBARIVCg1pc19iYWNrZ3JvdW5kGAMgASgIEhgKC2R1cmF0aW9uX21zGAQgASgESAGIAQFCCwoJX2FnZW50X2lkQg4KDF9kdXJhdGlvbl9tcyIaCglUYXNrRXJyb3ISDQoFZXJyb3IYASABKAkiZgoKVGFza1Jlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuVGFza1N1Y2Nlc3NIABIkCgVlcnJvchgCIAEoCzITLmFnZW50LnYxLlRhc2tFcnJvckgAQggKBnJlc3VsdCJWCgxUYXNrVG9vbENhbGwSIAoEYXJncxgBIAEoCzISLmFnZW50LnYxLlRhc2tBcmdzEiQKBnJlc3VsdBgCIAEoCzIULmFnZW50LnYxLlRhc2tSZXN1bHQiTAoRVGFza1Rvb2xDYWxsRGVsdGESNwoSaW50ZXJhY3Rpb25fdXBkYXRlGAEgASgLMhsuYWdlbnQudjEuSW50ZXJhY3Rpb25VcGRhdGUihhQKCFRvb2xDYWxsEjIKD3NoZWxsX3Rvb2xfY2FsbBgBIAEoCzIXLmFnZW50LnYxLlNoZWxsVG9vbENhbGxIABI0ChBkZWxldGVfdG9vbF9jYWxsGAMgASgLMhguYWdlbnQudjEuRGVsZXRlVG9vbENhbGxIABIwCg5nbG9iX3Rvb2xfY2FsbBgEIAEoCzIWLmFnZW50LnYxLkdsb2JUb29sQ2FsbEgAEjAKDmdyZXBfdG9vbF9jYWxsGAUgASgLMhYuYWdlbnQudjEuR3JlcFRvb2xDYWxsSAASMAoOcmVhZF90b29sX2NhbGwYCCABKAsyFi5hZ2VudC52MS5SZWFkVG9vbENhbGxIABI/ChZ1cGRhdGVfdG9kb3NfdG9vbF9jYWxsGAkgASgLMh0uYWdlbnQudjEuVXBkYXRlVG9kb3NUb29sQ2FsbEgAEjsKFHJlYWRfdG9kb3NfdG9vbF9jYWxsGAogASgLMhsuYWdlbnQudjEuUmVhZFRvZG9zVG9vbENhbGxIABIwCg5lZGl0X3Rvb2xfY2FsbBgMIAEoCzIWLmFnZW50LnYxLkVkaXRUb29sQ2FsbEgAEiwKDGxzX3Rvb2xfY2FsbBgNIAEoCzIULmFnZW50LnYxLkxzVG9vbENhbGxIABI7ChRyZWFkX2xpbnRzX3Rvb2xfY2FsbBgOIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xDYWxsSAASLgoNbWNwX3Rvb2xfY2FsbBgPIAEoCzIVLmFnZW50LnYxLk1jcFRvb2xDYWxsSAASOwoUc2VtX3NlYXJjaF90b29sX2NhbGwYECABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQ2FsbEgAEj0KFWNyZWF0ZV9wbGFuX3Rvb2xfY2FsbBgRIAEoCzIcLmFnZW50LnYxLkNyZWF0ZVBsYW5Ub29sQ2FsbEgAEjsKFHdlYl9zZWFyY2hfdG9vbF9jYWxsGBIgASgLMhsuYWdlbnQudjEuV2ViU2VhcmNoVG9vbENhbGxIABIwCg50YXNrX3Rvb2xfY2FsbBgTIAEoCzIWLmFnZW50LnYxLlRhc2tUb29sQ2FsbEgAEkoKHGxpc3RfbWNwX3Jlc291cmNlc190b29sX2NhbGwYFCABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzVG9vbENhbGxIABJIChtyZWFkX21jcF9yZXNvdXJjZV90b29sX2NhbGwYFSABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VUb29sQ2FsbEgAEkYKGmFwcGx5X2FnZW50X2RpZmZfdG9vbF9jYWxsGBYgASgLMiAuYWdlbnQudjEuQXBwbHlBZ2VudERpZmZUb29sQ2FsbEgAEj8KFmFza19xdWVzdGlvbl90b29sX2NhbGwYFyABKAsyHS5hZ2VudC52MS5Bc2tRdWVzdGlvblRvb2xDYWxsSAASMgoPZmV0Y2hfdG9vbF9jYWxsGBggASgLMhcuYWdlbnQudjEuRmV0Y2hUb29sQ2FsbEgAEj0KFXN3aXRjaF9tb2RlX3Rvb2xfY2FsbBgZIAEoCzIcLmFnZW50LnYxLlN3aXRjaE1vZGVUb29sQ2FsbEgAEjsKFGV4YV9zZWFyY2hfdG9vbF9jYWxsGBogASgLMhsuYWdlbnQudjEuRXhhU2VhcmNoVG9vbENhbGxIABI5ChNleGFfZmV0Y2hfdG9vbF9jYWxsGBsgASgLMhouYWdlbnQudjEuRXhhRmV0Y2hUb29sQ2FsbEgAEkMKGGdlbmVyYXRlX2ltYWdlX3Rvb2xfY2FsbBgcIAEoCzIfLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VUb29sQ2FsbEgAEkEKF3JlY29yZF9zY3JlZW5fdG9vbF9jYWxsGB0gASgLMh4uYWdlbnQudjEuUmVjb3JkU2NyZWVuVG9vbENhbGxIABI/ChZjb21wdXRlcl91c2VfdG9vbF9jYWxsGB4gASgLMh0uYWdlbnQudjEuQ29tcHV0ZXJVc2VUb29sQ2FsbEgAEkgKG3dyaXRlX3NoZWxsX3N0ZGluX3Rvb2xfY2FsbBgfIAEoCzIhLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpblRvb2xDYWxsSAASNgoRcmVmbGVjdF90b29sX2NhbGwYICABKAsyGS5hZ2VudC52MS5SZWZsZWN0VG9vbENhbGxIABJOCh5zZXR1cF92bV9lbnZpcm9ubWVudF90b29sX2NhbGwYISABKAsyJC5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRUb29sQ2FsbEgAEjoKE3RydW5jYXRlZF90b29sX2NhbGwYIiABKAsyGy5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEgAElAKH3N0YXJ0X2dyaW5kX2V4ZWN1dGlvbl90b29sX2NhbGwYIyABKAsyJS5hZ2VudC52MS5TdGFydEdyaW5kRXhlY3V0aW9uVG9vbENhbGxIABJOCh5zdGFydF9ncmluZF9wbGFubmluZ190b29sX2NhbGwYJCABKAsyJC5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbEgAEjUKEXBpX3JlYWRfdG9vbF9jYWxsGD0gASgLMhguYWdlbnQudjEuUGlSZWFkVG9vbENhbGxIABI1ChFwaV9iYXNoX3Rvb2xfY2FsbBg+IAEoCzIYLmFnZW50LnYxLlBpQmFzaFRvb2xDYWxsSAASNQoRcGlfZWRpdF90b29sX2NhbGwYPyABKAsyGC5hZ2VudC52MS5QaUVkaXRUb29sQ2FsbEgAEjcKEnBpX3dyaXRlX3Rvb2xfY2FsbBhAIAEoCzIZLmFnZW50LnYxLlBpV3JpdGVUb29sQ2FsbEgAEjUKEXBpX2dyZXBfdG9vbF9jYWxsGEEgASgLMhguYWdlbnQudjEuUGlHcmVwVG9vbENhbGxIABI1ChFwaV9maW5kX3Rvb2xfY2FsbBhCIAEoCzIYLmFnZW50LnYxLlBpRmluZFRvb2xDYWxsSAASMQoPcGlfbHNfdG9vbF9jYWxsGEMgASgLMhYuYWdlbnQudjEuUGlMc1Rvb2xDYWxsSAASPQoVY29ubmVjdF9zY21fdG9vbF9jYWxsGEQgASgLMhwuYWdlbnQudjEuQ29ubmVjdFNjbVRvb2xDYWxsSAASTwoec2VhcmNoX2NvbnZlcnNhdGlvbnNfdG9vbF9jYWxsGEUgASgLMiUuYWdlbnQudjEuU2VhcmNoQ29udmVyc2F0aW9uc1Rvb2xDYWxsSAASGQoMdG9vbF9jYWxsX2lkGDkgASgJSAGIAQFCBgoEdG9vbEIPCg1fdG9vbF9jYWxsX2lkIhcKFVRydW5jYXRlZFRvb2xDYWxsQXJncyIaChhUcnVuY2F0ZWRUb29sQ2FsbFN1Y2Nlc3MiJwoWVHJ1bmNhdGVkVG9vbENhbGxFcnJvchINCgVlcnJvchgBIAEoCSKNAQoXVHJ1bmNhdGVkVG9vbENhbGxSZXN1bHQSNQoHc3VjY2VzcxgBIAEoCzIiLmFnZW50LnYxLlRydW5jYXRlZFRvb2xDYWxsU3VjY2Vzc0gAEjEKBWVycm9yGAIgASgLMiAuYWdlbnQudjEuVHJ1bmNhdGVkVG9vbENhbGxFcnJvckgAQggKBnJlc3VsdCKUAQoRVHJ1bmNhdGVkVG9vbENhbGwSHQoVb3JpZ2luYWxfc3RlcF9ibG9iX2lkGAEgASgMEi0KBGFyZ3MYAiABKAsyHy5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEFyZ3MSMQoGcmVzdWx0GAMgASgLMiEuYWdlbnQudjEuVHJ1bmNhdGVkVG9vbENhbGxSZXN1bHQi0QEKDVRvb2xDYWxsRGVsdGESPQoVc2hlbGxfdG9vbF9jYWxsX2RlbHRhGAEgASgLMhwuYWdlbnQudjEuU2hlbGxUb29sQ2FsbERlbHRhSAASOwoUdGFza190b29sX2NhbGxfZGVsdGEYAiABKAsyGy5hZ2VudC52MS5UYXNrVG9vbENhbGxEZWx0YUgAEjsKFGVkaXRfdG9vbF9jYWxsX2RlbHRhGAMgASgLMhsuYWdlbnQudjEuRWRpdFRvb2xDYWxsRGVsdGFIAEIHCgVkZWx0YSK2AQoQQ29udmVyc2F0aW9uU3RlcBI3ChFhc3Npc3RhbnRfbWVzc2FnZRgBIAEoCzIaLmFnZW50LnYxLkFzc2lzdGFudE1lc3NhZ2VIABInCgl0b29sX2NhbGwYAiABKAsyEi5hZ2VudC52MS5Ub29sQ2FsbEgAEjUKEHRoaW5raW5nX21lc3NhZ2UYAyABKAsyGS5hZ2VudC52MS5UaGlua2luZ01lc3NhZ2VIAEIJCgdtZXNzYWdlIoEEChJDb252ZXJzYXRpb25BY3Rpb24SOgoTdXNlcl9tZXNzYWdlX2FjdGlvbhgBIAEoCzIbLmFnZW50LnYxLlVzZXJNZXNzYWdlQWN0aW9uSAASLwoNcmVzdW1lX2FjdGlvbhgCIAEoCzIWLmFnZW50LnYxLlJlc3VtZUFjdGlvbkgAEi8KDWNhbmNlbF9hY3Rpb24YAyABKAsyFi5hZ2VudC52MS5DYW5jZWxBY3Rpb25IABI1ChBzdW1tYXJpemVfYWN0aW9uGAQgASgLMhkuYWdlbnQudjEuU3VtbWFyaXplQWN0aW9uSAASPAoUc2hlbGxfY29tbWFuZF9hY3Rpb24YBSABKAsyHC5hZ2VudC52MS5TaGVsbENvbW1hbmRBY3Rpb25IABI2ChFzdGFydF9wbGFuX2FjdGlvbhgGIAEoCzIZLmFnZW50LnYxLlN0YXJ0UGxhbkFjdGlvbkgAEjoKE2V4ZWN1dGVfcGxhbl9hY3Rpb24YByABKAsyGy5hZ2VudC52MS5FeGVjdXRlUGxhbkFjdGlvbkgAEloKJGFzeW5jX2Fza19xdWVzdGlvbl9jb21wbGV0aW9uX2FjdGlvbhgIIAEoCzIqLmFnZW50LnYxLkFzeW5jQXNrUXVlc3Rpb25Db21wbGV0aW9uQWN0aW9uSABCCAoGYWN0aW9uIr8BChFVc2VyTWVzc2FnZUFjdGlvbhIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZRIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBIpChxzZW5kX3RvX2ludGVyYWN0aW9uX2xpc3RlbmVyGAMgASgISACIAQFCHwodX3NlbmRfdG9faW50ZXJhY3Rpb25fbGlzdGVuZXIiDgoMQ2FuY2VsQWN0aW9uIkEKDFJlc3VtZUFjdGlvbhIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dCKgAQogQXN5bmNBc2tRdWVzdGlvbkNvbXBsZXRpb25BY3Rpb24SHQoVb3JpZ2luYWxfdG9vbF9jYWxsX2lkGAEgASgJEjAKDW9yaWdpbmFsX2FyZ3MYAiABKAsyGS5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3MSKwoGcmVzdWx0GAMgASgLMhsuYWdlbnQudjEuQXNrUXVlc3Rpb25SZXN1bHQiEQoPU3VtbWFyaXplQWN0aW9uIlQKElNoZWxsQ29tbWFuZEFjdGlvbhItCg1zaGVsbF9jb21tYW5kGAEgASgLMhYuYWdlbnQudjEuU2hlbGxDb21tYW5kEg8KB2V4ZWNfaWQYAiABKAkiggEKD1N0YXJ0UGxhbkFjdGlvbhIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZRIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBIPCgdpc19zcGVjGAMgASgIIuIBChFFeGVjdXRlUGxhbkFjdGlvbhIxCg9yZXF1ZXN0X2NvbnRleHQYASABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBItCgRwbGFuGAIgASgLMhouYWdlbnQudjEuQ29udmVyc2F0aW9uUGxhbkgAiAEBEhoKDXBsYW5fZmlsZV91cmkYAyABKAlIAYgBARIeChFwbGFuX2ZpbGVfY29udGVudBgEIAEoCUgCiAEBQgcKBV9wbGFuQhAKDl9wbGFuX2ZpbGVfdXJpQhQKEl9wbGFuX2ZpbGVfY29udGVudCLoAgoLVXNlck1lc3NhZ2USDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJEjgKEHNlbGVjdGVkX2NvbnRleHQYAyABKAsyGS5hZ2VudC52MS5TZWxlY3RlZENvbnRleHRIAIgBARIMCgRtb2RlGAQgASgFEh0KEGlzX3NpbXVsYXRlZF9tc2cYBSABKAhIAYgBARIfChJiZXN0X29mX25fZ3JvdXBfaWQYBiABKAlIAogBARIoCht0cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb24YByABKAhIA4gBARIWCglyaWNoX3RleHQYCCABKAlIBIgBAUITChFfc2VsZWN0ZWRfY29udGV4dEITChFfaXNfc2ltdWxhdGVkX21zZ0IVChNfYmVzdF9vZl9uX2dyb3VwX2lkQh4KHF90cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb25CDAoKX3JpY2hfdGV4dCIgChBBc3Npc3RhbnRNZXNzYWdlEgwKBHRleHQYASABKAkiNAoPVGhpbmtpbmdNZXNzYWdlEgwKBHRleHQYASABKAkSEwoLZHVyYXRpb25fbXMYAiABKA0iHwoMU2hlbGxDb21tYW5kEg8KB2NvbW1hbmQYASABKAkiQAoLU2hlbGxPdXRwdXQSDgoGc3Rkb3V0GAEgASgJEg4KBnN0ZGVychgCIAEoCRIRCglleGl0X2NvZGUYAyABKAUiogEKEENvbnZlcnNhdGlvblR1cm4SQgoXYWdlbnRfY29udmVyc2F0aW9uX3R1cm4YASABKAsyHy5hZ2VudC52MS5BZ2VudENvbnZlcnNhdGlvblR1cm5IABJCChdzaGVsbF9jb252ZXJzYXRpb25fdHVybhgCIAEoCzIfLmFnZW50LnYxLlNoZWxsQ29udmVyc2F0aW9uVHVybkgAQgYKBHR1cm4iIAoQQ29udmVyc2F0aW9uUGxhbhIMCgRwbGFuGAEgASgJIr0BChlDb252ZXJzYXRpb25UdXJuU3RydWN0dXJlEksKF2FnZW50X2NvbnZlcnNhdGlvbl90dXJuGAEgASgLMiguYWdlbnQudjEuQWdlbnRDb252ZXJzYXRpb25UdXJuU3RydWN0dXJlSAASSwoXc2hlbGxfY29udmVyc2F0aW9uX3R1cm4YAiABKAsyKC5hZ2VudC52MS5TaGVsbENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmVIAEIGCgR0dXJuIpcBChVBZ2VudENvbnZlcnNhdGlvblR1cm4SKwoMdXNlcl9tZXNzYWdlGAEgASgLMhUuYWdlbnQudjEuVXNlck1lc3NhZ2USKQoFc3RlcHMYAiADKAsyGi5hZ2VudC52MS5Db252ZXJzYXRpb25TdGVwEhcKCnJlcXVlc3RfaWQYAyABKAlIAIgBAUINCgtfcmVxdWVzdF9pZCJtCh5BZ2VudENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmUSFAoMdXNlcl9tZXNzYWdlGAEgASgMEg0KBXN0ZXBzGAIgAygMEhcKCnJlcXVlc3RfaWQYAyABKAlIAIgBAUINCgtfcmVxdWVzdF9pZCJzChVTaGVsbENvbnZlcnNhdGlvblR1cm4SLQoNc2hlbGxfY29tbWFuZBgBIAEoCzIWLmFnZW50LnYxLlNoZWxsQ29tbWFuZBIrCgxzaGVsbF9vdXRwdXQYAiABKAsyFS5hZ2VudC52MS5TaGVsbE91dHB1dCJNCh5TaGVsbENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmUSFQoNc2hlbGxfY29tbWFuZBgBIAEoDBIUCgxzaGVsbF9vdXRwdXQYAiABKAwiJgoTQ29udmVyc2F0aW9uU3VtbWFyeRIPCgdzdW1tYXJ5GAEgASgJIngKGkNvbnZlcnNhdGlvblN1bW1hcnlBcmNoaXZlEhsKE3N1bW1hcml6ZWRfbWVzc2FnZXMYASADKAwSDwoHc3VtbWFyeRgCIAEoCRITCgt3aW5kb3dfdGFpbBgDIAEoDRIXCg9zdW1tYXJ5X21lc3NhZ2UYBCABKAwiQwoYQ29udmVyc2F0aW9uVG9rZW5EZXRhaWxzEhMKC3VzZWRfdG9rZW5zGAEgASgNEhIKCm1heF90b2tlbnMYAiABKA0iXwoJRmlsZVN0YXRlEhQKB2NvbnRlbnQYASABKAlIAIgBARIcCg9pbml0aWFsX2NvbnRlbnQYAiABKAlIAYgBAUIKCghfY29udGVudEISChBfaW5pdGlhbF9jb250ZW50ImgKEkZpbGVTdGF0ZVN0cnVjdHVyZRIUCgdjb250ZW50GAEgASgMSACIAQESHAoPaW5pdGlhbF9jb250ZW50GAIgASgMSAGIAQFCCgoIX2NvbnRlbnRCEgoQX2luaXRpYWxfY29udGVudCI3CgpTdGVwVGltaW5nEhMKC2R1cmF0aW9uX21zGAEgASgEEhQKDHRpbWVzdGFtcF9tcxgCIAEoBCL2BAoRQ29udmVyc2F0aW9uU3RhdGUSIQoZcm9vdF9wcm9tcHRfbWVzc2FnZXNfanNvbhgBIAMoCRIpCgV0dXJucxgIIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblR1cm4SIQoFdG9kb3MYAyADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRIaChJwZW5kaW5nX3Rvb2xfY2FsbHMYBCADKAkSOQoNdG9rZW5fZGV0YWlscxgFIAEoCzIiLmFnZW50LnYxLkNvbnZlcnNhdGlvblRva2VuRGV0YWlscxIzCgdzdW1tYXJ5GAYgASgLMh0uYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUgAiAEBEi0KBHBsYW4YByABKAsyGi5hZ2VudC52MS5Db252ZXJzYXRpb25QbGFuSAGIAQESQgoPc3VtbWFyeV9hcmNoaXZlGAkgASgLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUFyY2hpdmVIAogBARJACgtmaWxlX3N0YXRlcxgKIAMoCzIrLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlLkZpbGVTdGF0ZXNFbnRyeRI+ChBzdW1tYXJ5X2FyY2hpdmVzGAsgAygLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUFyY2hpdmUaRgoPRmlsZVN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLmFnZW50LnYxLkZpbGVTdGF0ZToCOAFCCgoIX3N1bW1hcnlCBwoFX3BsYW5CEgoQX3N1bW1hcnlfYXJjaGl2ZSLHAQoWU3ViYWdlbnRQZXJzaXN0ZWRTdGF0ZRJAChJjb252ZXJzYXRpb25fc3RhdGUYASABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZRIcChRjcmVhdGVkX3RpbWVzdGFtcF9tcxgCIAEoBBIeChZsYXN0X3VzZWRfdGltZXN0YW1wX21zGAMgASgEEi0KDXN1YmFnZW50X3R5cGUYBCABKAsyFi5hZ2VudC52MS5TdWJhZ2VudFR5cGUitwcKGkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlEhEKCXR1cm5zX29sZBgCIAMoDBIhChlyb290X3Byb21wdF9tZXNzYWdlc19qc29uGAEgAygMEg0KBXR1cm5zGAggAygMEg0KBXRvZG9zGAMgAygMEhoKEnBlbmRpbmdfdG9vbF9jYWxscxgEIAMoCRI5Cg10b2tlbl9kZXRhaWxzGAUgASgLMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uVG9rZW5EZXRhaWxzEhQKB3N1bW1hcnkYBiABKAxIAIgBARIRCgRwbGFuGAcgASgMSAGIAQESHwoXcHJldmlvdXNfd29ya3NwYWNlX3VyaXMYCSADKAkSEQoEbW9kZRgKIAEoBUgCiAEBEhwKD3N1bW1hcnlfYXJjaGl2ZRgLIAEoDEgDiAEBEkkKC2ZpbGVfc3RhdGVzGAwgAygLMjQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUuRmlsZVN0YXRlc0VudHJ5Ek4KDmZpbGVfc3RhdGVzX3YyGA8gAygLMjYuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUuRmlsZVN0YXRlc1YyRW50cnkSGAoQc3VtbWFyeV9hcmNoaXZlcxgNIAMoDBIqCgx0dXJuX3RpbWluZ3MYDiADKAsyFC5hZ2VudC52MS5TdGVwVGltaW5nElEKD3N1YmFnZW50X3N0YXRlcxgQIAMoCzI4LmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlLlN1YmFnZW50U3RhdGVzRW50cnkSGgoSc2VsZl9zdW1tYXJ5X2NvdW50GBEgASgNEhIKCnJlYWRfcGF0aHMYEiADKAkaMQoPRmlsZVN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAEaUQoRRmlsZVN0YXRlc1YyRW50cnkSCwoDa2V5GAEgASgJEisKBXZhbHVlGAIgASgLMhwuYWdlbnQudjEuRmlsZVN0YXRlU3RydWN0dXJlOgI4ARpXChNTdWJhZ2VudFN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRIvCgV2YWx1ZRgCIAEoCzIgLmFnZW50LnYxLlN1YmFnZW50UGVyc2lzdGVkU3RhdGU6AjgBQgoKCF9zdW1tYXJ5QgcKBV9wbGFuQgcKBV9tb2RlQhIKEF9zdW1tYXJ5X2FyY2hpdmUiEQoPVGhpbmtpbmdEZXRhaWxzIkgKEUFwaUtleUNyZWRlbnRpYWxzEg8KB2FwaV9rZXkYASABKAkSFQoIYmFzZV91cmwYAiABKAlIAIgBAUILCglfYmFzZV91cmwiSQoQQXp1cmVDcmVkZW50aWFscxIPCgdhcGlfa2V5GAEgASgJEhAKCGJhc2VfdXJsGAIgASgJEhIKCmRlcGxveW1lbnQYAyABKAkiegoSQmVkcm9ja0NyZWRlbnRpYWxzEhIKCmFjY2Vzc19rZXkYASABKAkSEgoKc2VjcmV0X2tleRgCIAEoCRIOCgZyZWdpb24YAyABKAkSGgoNc2Vzc2lvbl90b2tlbhgEIAEoCUgAiAEBQhAKDl9zZXNzaW9uX3Rva2VuIrEDCgxNb2RlbERldGFpbHMSEAoIbW9kZWxfaWQYASABKAkSGAoQZGlzcGxheV9tb2RlbF9pZBgDIAEoCRIUCgxkaXNwbGF5X25hbWUYBCABKAkSGgoSZGlzcGxheV9uYW1lX3Nob3J0GAUgASgJEg8KB2FsaWFzZXMYBiADKAkSOAoQdGhpbmtpbmdfZGV0YWlscxgCIAEoCzIZLmFnZW50LnYxLlRoaW5raW5nRGV0YWlsc0gBiAEBEhUKCG1heF9tb2RlGAcgASgISAKIAQESOgoTYXBpX2tleV9jcmVkZW50aWFscxgIIAEoCzIbLmFnZW50LnYxLkFwaUtleUNyZWRlbnRpYWxzSAASNwoRYXp1cmVfY3JlZGVudGlhbHMYCSABKAsyGi5hZ2VudC52MS5BenVyZUNyZWRlbnRpYWxzSAASOwoTYmVkcm9ja19jcmVkZW50aWFscxgKIAEoCzIcLmFnZW50LnYxLkJlZHJvY2tDcmVkZW50aWFsc0gAQg0KC2NyZWRlbnRpYWxzQhMKEV90aGlua2luZ19kZXRhaWxzQgsKCV9tYXhfbW9kZSK3AgoOUmVxdWVzdGVkTW9kZWwSEAoIbW9kZWxfaWQYASABKAkSEAoIbWF4X21vZGUYAiABKAgSQAoKcGFyYW1ldGVycxgDIAMoCzIsLmFnZW50LnYxLlJlcXVlc3RlZE1vZGVsX01vZGVsUGFyYW1ldGVyYnl0ZXMSOgoTYXBpX2tleV9jcmVkZW50aWFscxgEIAEoCzIbLmFnZW50LnYxLkFwaUtleUNyZWRlbnRpYWxzSAASNwoRYXp1cmVfY3JlZGVudGlhbHMYBSABKAsyGi5hZ2VudC52MS5BenVyZUNyZWRlbnRpYWxzSAASOwoTYmVkcm9ja19jcmVkZW50aWFscxgGIAEoCzIcLmFnZW50LnYxLkJlZHJvY2tDcmVkZW50aWFsc0gAQg0KC2NyZWRlbnRpYWxzIj8KIlJlcXVlc3RlZE1vZGVsX01vZGVsUGFyYW1ldGVyYnl0ZXMSCgoCaWQYASABKAkSDQoFdmFsdWUYAiABKAkiuQQKD0FnZW50UnVuUmVxdWVzdBJAChJjb252ZXJzYXRpb25fc3RhdGUYASABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZRIsCgZhY3Rpb24YAiABKAsyHC5hZ2VudC52MS5Db252ZXJzYXRpb25BY3Rpb24SLQoNbW9kZWxfZGV0YWlscxgDIAEoCzIWLmFnZW50LnYxLk1vZGVsRGV0YWlscxI2Cg9yZXF1ZXN0ZWRfbW9kZWwYCSABKAsyGC5hZ2VudC52MS5SZXF1ZXN0ZWRNb2RlbEgAiAEBEiUKCW1jcF90b29scxgEIAEoCzISLmFnZW50LnYxLk1jcFRvb2xzEhwKD2NvbnZlcnNhdGlvbl9pZBgFIAEoCUgBiAEBEkQKF21jcF9maWxlX3N5c3RlbV9vcHRpb25zGAYgASgLMh4uYWdlbnQudjEuTWNwRmlsZVN5c3RlbU9wdGlvbnNIAogBARIyCg1za2lsbF9vcHRpb25zGAcgASgLMhYuYWdlbnQudjEuU2tpbGxPcHRpb25zSAOIAQESIQoUY3VzdG9tX3N5c3RlbV9wcm9tcHQYCCABKAlIBIgBAUISChBfcmVxdWVzdGVkX21vZGVsQhIKEF9jb252ZXJzYXRpb25faWRCGgoYX21jcF9maWxlX3N5c3RlbV9vcHRpb25zQhAKDl9za2lsbF9vcHRpb25zQhcKFV9jdXN0b21fc3lzdGVtX3Byb21wdCIfCg9UZXh0RGVsdGFVcGRhdGUSDAoEdGV4dBgBIAEoCSJmChVUb29sQ2FsbFN0YXJ0ZWRVcGRhdGUSDwoHY2FsbF9pZBgBIAEoCRIlCgl0b29sX2NhbGwYAiABKAsyEi5hZ2VudC52MS5Ub29sQ2FsbBIVCg1tb2RlbF9jYWxsX2lkGAMgASgJImgKF1Rvb2xDYWxsQ29tcGxldGVkVXBkYXRlEg8KB2NhbGxfaWQYASABKAkSJQoJdG9vbF9jYWxsGAIgASgLMhIuYWdlbnQudjEuVG9vbENhbGwSFQoNbW9kZWxfY2FsbF9pZBgDIAEoCSJvChNUb29sQ2FsbERlbHRhVXBkYXRlEg8KB2NhbGxfaWQYASABKAkSMAoPdG9vbF9jYWxsX2RlbHRhGAIgASgLMhcuYWdlbnQudjEuVG9vbENhbGxEZWx0YRIVCg1tb2RlbF9jYWxsX2lkGAMgASgJIn8KFVBhcnRpYWxUb29sQ2FsbFVwZGF0ZRIPCgdjYWxsX2lkGAEgASgJEiUKCXRvb2xfY2FsbBgCIAEoCzISLmFnZW50LnYxLlRvb2xDYWxsEhcKD2FyZ3NfdGV4dF9kZWx0YRgDIAEoCRIVCg1tb2RlbF9jYWxsX2lkGAQgASgJIiMKE1RoaW5raW5nRGVsdGFVcGRhdGUSDAoEdGV4dBgBIAEoCSI3ChdUaGlua2luZ0NvbXBsZXRlZFVwZGF0ZRIcChR0aGlua2luZ19kdXJhdGlvbl9tcxgBIAEoBSIiChBUb2tlbkRlbHRhVXBkYXRlEg4KBnRva2VucxgBIAEoBSIgCg1TdW1tYXJ5VXBkYXRlEg8KB3N1bW1hcnkYASABKAkiFgoUU3VtbWFyeVN0YXJ0ZWRVcGRhdGUiEQoPSGVhcnRiZWF0VXBkYXRlIhgKFlN1bW1hcnlDb21wbGV0ZWRVcGRhdGUi1wEKFlNoZWxsT3V0cHV0RGVsdGFVcGRhdGUSLQoGc3Rkb3V0GAEgASgLMhsuYWdlbnQudjEuU2hlbGxTdHJlYW1TdGRvdXRIABItCgZzdGRlcnIYAiABKAsyGy5hZ2VudC52MS5TaGVsbFN0cmVhbVN0ZGVyckgAEikKBGV4aXQYAyABKAsyGS5hZ2VudC52MS5TaGVsbFN0cmVhbUV4aXRIABIrCgVzdGFydBgEIAEoCzIaLmFnZW50LnYxLlNoZWxsU3RyZWFtU3RhcnRIAEIHCgVldmVudCKNAgoPVHVybkVuZGVkVXBkYXRlEhkKDGlucHV0X3Rva2VucxgBIAEoA0gAiAEBEhoKDW91dHB1dF90b2tlbnMYAiABKANIAYgBARIeChFjYWNoZV9yZWFkX3Rva2VucxgDIAEoA0gCiAEBEh8KEmNhY2hlX3dyaXRlX3Rva2VucxgEIAEoA0gDiAEBEh0KEHJlYXNvbmluZ190b2tlbnMYBSABKANIBIgBAUIPCg1faW5wdXRfdG9rZW5zQhAKDl9vdXRwdXRfdG9rZW5zQhQKEl9jYWNoZV9yZWFkX3Rva2Vuc0IVChNfY2FjaGVfd3JpdGVfdG9rZW5zQhMKEV9yZWFzb25pbmdfdG9rZW5zIkgKGVVzZXJNZXNzYWdlQXBwZW5kZWRVcGRhdGUSKwoMdXNlcl9tZXNzYWdlGAEgASgLMhUuYWdlbnQudjEuVXNlck1lc3NhZ2UiJAoRU3RlcFN0YXJ0ZWRVcGRhdGUSDwoHc3RlcF9pZBgBIAEoBCJAChNTdGVwQ29tcGxldGVkVXBkYXRlEg8KB3N0ZXBfaWQYASABKAQSGAoQc3RlcF9kdXJhdGlvbl9tcxgCIAEoAyLvBwoRSW50ZXJhY3Rpb25VcGRhdGUSLwoKdGV4dF9kZWx0YRgBIAEoCzIZLmFnZW50LnYxLlRleHREZWx0YVVwZGF0ZUgAEjwKEXBhcnRpYWxfdG9vbF9jYWxsGAcgASgLMh8uYWdlbnQudjEuUGFydGlhbFRvb2xDYWxsVXBkYXRlSAASOAoPdG9vbF9jYWxsX2RlbHRhGA8gASgLMh0uYWdlbnQudjEuVG9vbENhbGxEZWx0YVVwZGF0ZUgAEjwKEXRvb2xfY2FsbF9zdGFydGVkGAIgASgLMh8uYWdlbnQudjEuVG9vbENhbGxTdGFydGVkVXBkYXRlSAASQAoTdG9vbF9jYWxsX2NvbXBsZXRlZBgDIAEoCzIhLmFnZW50LnYxLlRvb2xDYWxsQ29tcGxldGVkVXBkYXRlSAASNwoOdGhpbmtpbmdfZGVsdGEYBCABKAsyHS5hZ2VudC52MS5UaGlua2luZ0RlbHRhVXBkYXRlSAASPwoSdGhpbmtpbmdfY29tcGxldGVkGAUgASgLMiEuYWdlbnQudjEuVGhpbmtpbmdDb21wbGV0ZWRVcGRhdGVIABJEChV1c2VyX21lc3NhZ2VfYXBwZW5kZWQYBiABKAsyIy5hZ2VudC52MS5Vc2VyTWVzc2FnZUFwcGVuZGVkVXBkYXRlSAASMQoLdG9rZW5fZGVsdGEYCCABKAsyGi5hZ2VudC52MS5Ub2tlbkRlbHRhVXBkYXRlSAASKgoHc3VtbWFyeRgJIAEoCzIXLmFnZW50LnYxLlN1bW1hcnlVcGRhdGVIABI5Cg9zdW1tYXJ5X3N0YXJ0ZWQYCiABKAsyHi5hZ2VudC52MS5TdW1tYXJ5U3RhcnRlZFVwZGF0ZUgAEj0KEXN1bW1hcnlfY29tcGxldGVkGAsgASgLMiAuYWdlbnQudjEuU3VtbWFyeUNvbXBsZXRlZFVwZGF0ZUgAEj4KEnNoZWxsX291dHB1dF9kZWx0YRgMIAEoCzIgLmFnZW50LnYxLlNoZWxsT3V0cHV0RGVsdGFVcGRhdGVIABIuCgloZWFydGJlYXQYDSABKAsyGS5hZ2VudC52MS5IZWFydGJlYXRVcGRhdGVIABIvCgp0dXJuX2VuZGVkGA4gASgLMhkuYWdlbnQudjEuVHVybkVuZGVkVXBkYXRlSAASMwoMc3RlcF9zdGFydGVkGBAgASgLMhsuYWdlbnQudjEuU3RlcFN0YXJ0ZWRVcGRhdGVIABI3Cg5zdGVwX2NvbXBsZXRlZBgRIAEoCzIdLmFnZW50LnYxLlN0ZXBDb21wbGV0ZWRVcGRhdGVIAEIJCgdtZXNzYWdlIpoEChBJbnRlcmFjdGlvblF1ZXJ5EgoKAmlkGAEgASgNEkMKGHdlYl9zZWFyY2hfcmVxdWVzdF9xdWVyeRgCIAEoCzIfLmFnZW50LnYxLldlYlNlYXJjaFJlcXVlc3RRdWVyeUgAEk8KHmFza19xdWVzdGlvbl9pbnRlcmFjdGlvbl9xdWVyeRgDIAEoCzIlLmFnZW50LnYxLkFza1F1ZXN0aW9uSW50ZXJhY3Rpb25RdWVyeUgAEkUKGXN3aXRjaF9tb2RlX3JlcXVlc3RfcXVlcnkYBCABKAsyIC5hZ2VudC52MS5Td2l0Y2hNb2RlUmVxdWVzdFF1ZXJ5SAASQwoYZXhhX3NlYXJjaF9yZXF1ZXN0X3F1ZXJ5GAUgASgLMh8uYWdlbnQudjEuRXhhU2VhcmNoUmVxdWVzdFF1ZXJ5SAASQQoXZXhhX2ZldGNoX3JlcXVlc3RfcXVlcnkYBiABKAsyHi5hZ2VudC52MS5FeGFGZXRjaFJlcXVlc3RRdWVyeUgAEkUKGWNyZWF0ZV9wbGFuX3JlcXVlc3RfcXVlcnkYByABKAsyIC5hZ2VudC52MS5DcmVhdGVQbGFuUmVxdWVzdFF1ZXJ5SAASRQoZc2V0dXBfdm1fZW52aXJvbm1lbnRfYXJncxgIIAEoCzIgLmFnZW50LnYxLlNldHVwVm1FbnZpcm9ubWVudEFyZ3NIAEIHCgVxdWVyeSLGBAoTSW50ZXJhY3Rpb25SZXNwb25zZRIKCgJpZBgBIAEoDRJJCht3ZWJfc2VhcmNoX3JlcXVlc3RfcmVzcG9uc2UYAiABKAsyIi5hZ2VudC52MS5XZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2VIABJVCiFhc2tfcXVlc3Rpb25faW50ZXJhY3Rpb25fcmVzcG9uc2UYAyABKAsyKC5hZ2VudC52MS5Bc2tRdWVzdGlvbkludGVyYWN0aW9uUmVzcG9uc2VIABJLChxzd2l0Y2hfbW9kZV9yZXF1ZXN0X3Jlc3BvbnNlGAQgASgLMiMuYWdlbnQudjEuU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZUgAEkkKG2V4YV9zZWFyY2hfcmVxdWVzdF9yZXNwb25zZRgFIAEoCzIiLmFnZW50LnYxLkV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZUgAEkcKGmV4YV9mZXRjaF9yZXF1ZXN0X3Jlc3BvbnNlGAYgASgLMiEuYWdlbnQudjEuRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2VIABJLChxjcmVhdGVfcGxhbl9yZXF1ZXN0X3Jlc3BvbnNlGAcgASgLMiMuYWdlbnQudjEuQ3JlYXRlUGxhblJlcXVlc3RSZXNwb25zZUgAEkkKG3NldHVwX3ZtX2Vudmlyb25tZW50X3Jlc3VsdBgIIAEoCzIiLmFnZW50LnYxLlNldHVwVm1FbnZpcm9ubWVudFJlc3VsdEgAQggKBnJlc3VsdCJcChtBc2tRdWVzdGlvbkludGVyYWN0aW9uUXVlcnkSJwoEYXJncxgBIAEoCzIZLmFnZW50LnYxLkFza1F1ZXN0aW9uQXJncxIUCgx0b29sX2NhbGxfaWQYAiABKAkiTQoeQXNrUXVlc3Rpb25JbnRlcmFjdGlvblJlc3BvbnNlEisKBnJlc3VsdBgBIAEoCzIbLmFnZW50LnYxLkFza1F1ZXN0aW9uUmVzdWx0IhEKD0NsaWVudEhlYXJ0YmVhdCLGBAoOUHJld2FybVJlcXVlc3QSLQoNbW9kZWxfZGV0YWlscxgBIAEoCzIWLmFnZW50LnYxLk1vZGVsRGV0YWlscxI2Cg9yZXF1ZXN0ZWRfbW9kZWwYCSABKAsyGC5hZ2VudC52MS5SZXF1ZXN0ZWRNb2RlbEgAiAEBEhwKD2NvbnZlcnNhdGlvbl9pZBgCIAEoCUgBiAEBEkAKEmNvbnZlcnNhdGlvbl9zdGF0ZRgDIAEoCzIkLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlEiUKCW1jcF90b29scxgEIAEoCzISLmFnZW50LnYxLk1jcFRvb2xzEkQKF21jcF9maWxlX3N5c3RlbV9vcHRpb25zGAUgASgLMh4uYWdlbnQudjEuTWNwRmlsZVN5c3RlbU9wdGlvbnNIAogBARIfChJiZXN0X29mX25fZ3JvdXBfaWQYBiABKAlIA4gBARIoCht0cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb24YByABKAhIBIgBARIhChRjdXN0b21fc3lzdGVtX3Byb21wdBgIIAEoCUgFiAEBQhIKEF9yZXF1ZXN0ZWRfbW9kZWxCEgoQX2NvbnZlcnNhdGlvbl9pZEIaChhfbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnNCFQoTX2Jlc3Rfb2Zfbl9ncm91cF9pZEIeChxfdHJ5X3VzZV9iZXN0X29mX25fcHJvbW90aW9uQhcKFV9jdXN0b21fc3lzdGVtX3Byb21wdCIdCg9FeGVjU2VydmVyQWJvcnQSCgoCaWQYASABKA0iUQoYRXhlY1NlcnZlckNvbnRyb2xNZXNzYWdlEioKBWFib3J0GAEgASgLMhkuYWdlbnQudjEuRXhlY1NlcnZlckFib3J0SABCCQoHbWVzc2FnZSL4AwoSQWdlbnRDbGllbnRNZXNzYWdlEjAKC3J1bl9yZXF1ZXN0GAEgASgLMhkuYWdlbnQudjEuQWdlbnRSdW5SZXF1ZXN0SAASOgoTZXhlY19jbGllbnRfbWVzc2FnZRgCIAEoCzIbLmFnZW50LnYxLkV4ZWNDbGllbnRNZXNzYWdlSAASSQobZXhlY19jbGllbnRfY29udHJvbF9tZXNzYWdlGAUgASgLMiIuYWdlbnQudjEuRXhlY0NsaWVudENvbnRyb2xNZXNzYWdlSAASNgoRa3ZfY2xpZW50X21lc3NhZ2UYAyABKAsyGS5hZ2VudC52MS5LdkNsaWVudE1lc3NhZ2VIABI7ChNjb252ZXJzYXRpb25fYWN0aW9uGAQgASgLMhwuYWdlbnQudjEuQ29udmVyc2F0aW9uQWN0aW9uSAASPQoUaW50ZXJhY3Rpb25fcmVzcG9uc2UYBiABKAsyHS5hZ2VudC52MS5JbnRlcmFjdGlvblJlc3BvbnNlSAASNQoQY2xpZW50X2hlYXJ0YmVhdBgHIAEoCzIZLmFnZW50LnYxLkNsaWVudEhlYXJ0YmVhdEgAEjMKD3ByZXdhcm1fcmVxdWVzdBgIIAEoCzIYLmFnZW50LnYxLlByZXdhcm1SZXF1ZXN0SABCCQoHbWVzc2FnZSKiAwoSQWdlbnRTZXJ2ZXJNZXNzYWdlEjkKEmludGVyYWN0aW9uX3VwZGF0ZRgBIAEoCzIbLmFnZW50LnYxLkludGVyYWN0aW9uVXBkYXRlSAASOgoTZXhlY19zZXJ2ZXJfbWVzc2FnZRgCIAEoCzIbLmFnZW50LnYxLkV4ZWNTZXJ2ZXJNZXNzYWdlSAASSQobZXhlY19zZXJ2ZXJfY29udHJvbF9tZXNzYWdlGAUgASgLMiIuYWdlbnQudjEuRXhlY1NlcnZlckNvbnRyb2xNZXNzYWdlSAASTgoeY29udmVyc2F0aW9uX2NoZWNrcG9pbnRfdXBkYXRlGAMgASgLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmVIABI2ChFrdl9zZXJ2ZXJfbWVzc2FnZRgEIAEoCzIZLmFnZW50LnYxLkt2U2VydmVyTWVzc2FnZUgAEjcKEWludGVyYWN0aW9uX3F1ZXJ5GAcgASgLMhouYWdlbnQudjEuSW50ZXJhY3Rpb25RdWVyeUgAQgkKB21lc3NhZ2UiKAoQTmFtZUFnZW50UmVxdWVzdBIUCgx1c2VyX21lc3NhZ2UYASABKAkiIQoRTmFtZUFnZW50UmVzcG9uc2USDAoEbmFtZRgBIAEoCSIyChZHZXRVc2FibGVNb2RlbHNSZXF1ZXN0EhgKEGN1c3RvbV9tb2RlbF9pZHMYASADKAkiQQoXR2V0VXNhYmxlTW9kZWxzUmVzcG9uc2USJgoGbW9kZWxzGAEgAygLMhYuYWdlbnQudjEuTW9kZWxEZXRhaWxzIh4KHEdldERlZmF1bHRNb2RlbEZvckNsaVJlcXVlc3QiRgodR2V0RGVmYXVsdE1vZGVsRm9yQ2xpUmVzcG9uc2USJQoFbW9kZWwYASABKAsyFi5hZ2VudC52MS5Nb2RlbERldGFpbHMiHwodR2V0QWxsb3dlZE1vZGVsSW50ZW50c1JlcXVlc3QiNwoeR2V0QWxsb3dlZE1vZGVsSW50ZW50c1Jlc3BvbnNlEhUKDW1vZGVsX2ludGVudHMYASADKAkilwIKE0lkZUVkaXRvcnNTdGF0ZUZpbGUSFQoNcmVsYXRpdmVfcGF0aBgBIAEoCRIVCg1hYnNvbHV0ZV9wYXRoGAIgASgJEiEKFGlzX2N1cnJlbnRseV9mb2N1c2VkGAMgASgISACIAQESIAoTY3VycmVudF9saW5lX251bWJlchgEIAEoBUgBiAEBEh4KEWN1cnJlbnRfbGluZV90ZXh0GAUgASgJSAKIAQESFwoKbGluZV9jb3VudBgGIAEoBUgDiAEBQhcKFV9pc19jdXJyZW50bHlfZm9jdXNlZEIWChRfY3VycmVudF9saW5lX251bWJlckIUChJfY3VycmVudF9saW5lX3RleHRCDQoLX2xpbmVfY291bnQiUwoTSWRlRWRpdG9yc1N0YXRlTGl0ZRI8ChVyZWNlbnRseV92aWV3ZWRfZmlsZXMYASADKAsyHS5hZ2VudC52MS5JZGVFZGl0b3JzU3RhdGVGaWxlInQKFkFwcGx5QWdlbnREaWZmVG9vbENhbGwSKgoEYXJncxgBIAEoCzIcLmFnZW50LnYxLkFwcGx5QWdlbnREaWZmQXJncxIuCgZyZXN1bHQYAiABKAsyHi5hZ2VudC52MS5BcHBseUFnZW50RGlmZlJlc3VsdCImChJBcHBseUFnZW50RGlmZkFyZ3MSEAoIYWdlbnRfaWQYASABKAkihAEKFEFwcGx5QWdlbnREaWZmUmVzdWx0EjIKB3N1Y2Nlc3MYASABKAsyHy5hZ2VudC52MS5BcHBseUFnZW50RGlmZlN1Y2Nlc3NIABIuCgVlcnJvchgCIAEoCzIdLmFnZW50LnYxLkFwcGx5QWdlbnREaWZmRXJyb3JIAEIICgZyZXN1bHQiTgoVQXBwbHlBZ2VudERpZmZTdWNjZXNzEjUKD2FwcGxpZWRfY2hhbmdlcxgBIAMoCzIcLmFnZW50LnYxLkFwcGxpZWRBZ2VudENoYW5nZSLpAQoSQXBwbGllZEFnZW50Q2hhbmdlEgwKBHBhdGgYASABKAkSEwoLY2hhbmdlX3R5cGUYAiABKAUSGwoOYmVmb3JlX2NvbnRlbnQYAyABKAlIAIgBARIaCg1hZnRlcl9jb250ZW50GAQgASgJSAGIAQESEgoFZXJyb3IYBSABKAlIAogBARIeChFtZXNzYWdlX2Zvcl9tb2RlbBgGIAEoCUgDiAEBQhEKD19iZWZvcmVfY29udGVudEIQCg5fYWZ0ZXJfY29udGVudEIICgZfZXJyb3JCFAoSX21lc3NhZ2VfZm9yX21vZGVsIlsKE0FwcGx5QWdlbnREaWZmRXJyb3ISDQoFZXJyb3IYASABKAkSNQoPYXBwbGllZF9jaGFuZ2VzGAIgAygLMhwuYWdlbnQudjEuQXBwbGllZEFnZW50Q2hhbmdlImsKE0Fza1F1ZXN0aW9uVG9vbENhbGwSJwoEYXJncxgBIAEoCzIZLmFnZW50LnYxLkFza1F1ZXN0aW9uQXJncxIrCgZyZXN1bHQYAiABKAsyGy5hZ2VudC52MS5Bc2tRdWVzdGlvblJlc3VsdCKPAQoPQXNrUXVlc3Rpb25BcmdzEg0KBXRpdGxlGAEgASgJEjUKCXF1ZXN0aW9ucxgCIAMoCzIiLmFnZW50LnYxLkFza1F1ZXN0aW9uQXJnc19RdWVzdGlvbhIRCglydW5fYXN5bmMYBSABKAgSIwobYXN5bmNfb3JpZ2luYWxfdG9vbF9jYWxsX2lkGAYgASgJIoEBChhBc2tRdWVzdGlvbkFyZ3NfUXVlc3Rpb24SCgoCaWQYASABKAkSDgoGcHJvbXB0GAIgASgJEjEKB29wdGlvbnMYAyADKAsyIC5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3NfT3B0aW9uEhYKDmFsbG93X211bHRpcGxlGAQgASgIIjMKFkFza1F1ZXN0aW9uQXJnc19PcHRpb24SCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkiEgoQQXNrUXVlc3Rpb25Bc3luYyLbAQoRQXNrUXVlc3Rpb25SZXN1bHQSLwoHc3VjY2VzcxgBIAEoCzIcLmFnZW50LnYxLkFza1F1ZXN0aW9uU3VjY2Vzc0gAEisKBWVycm9yGAIgASgLMhouYWdlbnQudjEuQXNrUXVlc3Rpb25FcnJvckgAEjEKCHJlamVjdGVkGAMgASgLMh0uYWdlbnQudjEuQXNrUXVlc3Rpb25SZWplY3RlZEgAEisKBWFzeW5jGAQgASgLMhouYWdlbnQudjEuQXNrUXVlc3Rpb25Bc3luY0gAQggKBnJlc3VsdCJKChJBc2tRdWVzdGlvblN1Y2Nlc3MSNAoHYW5zd2VycxgBIAMoCzIjLmFnZW50LnYxLkFza1F1ZXN0aW9uU3VjY2Vzc19BbnN3ZXIiTQoZQXNrUXVlc3Rpb25TdWNjZXNzX0Fuc3dlchITCgtxdWVzdGlvbl9pZBgBIAEoCRIbChNzZWxlY3RlZF9vcHRpb25faWRzGAIgAygJIikKEEFza1F1ZXN0aW9uRXJyb3ISFQoNZXJyb3JfbWVzc2FnZRgBIAEoCSIlChNBc2tRdWVzdGlvblJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSL9BQoYQmFja2dyb3VuZFNoZWxsU3Bhd25BcmdzEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSFAoMdG9vbF9jYWxsX2lkGAMgASgJEjsKDnBhcnNpbmdfcmVzdWx0GAQgASgLMiMuYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdBI0Cg5zYW5kYm94X3BvbGljeRgFIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIAIgBARIlCh1lbmFibGVfd3JpdGVfc2hlbGxfc3RkaW5fdG9vbBgGIAEoCBIYCgtkZXNjcmlwdGlvbhgHIAEoCUgBiAEBEkEKEWNsYXNzaWZpZXJfcmVzdWx0GAggASgLMiEuYWdlbnQudjEuQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRIAogBARJJChNvdXRwdXRfbm90aWZpY2F0aW9uGAkgASgLMicuYWdlbnQudjEuU2hlbGxPdXRwdXROb3RpZmljYXRpb25Db25maWdIA4gBARI9ChNzbWFydF9tb2RlX2FwcHJvdmFsGAogASgLMhsuYWdlbnQudjEuU21hcnRNb2RlQXBwcm92YWxIBIgBARJOChlob29rX2FwcHJvdmFsX3JlcXVpcmVtZW50GAsgASgLMiYuYWdlbnQudjEuU2hlbGxIb29rQXBwcm92YWxSZXF1aXJlbWVudEgFiAEBEhUKDXNraXBfYXBwcm92YWwYDCABKAgSHAoPY29udmVyc2F0aW9uX2lkGA0gASgJSAaIAQFCEQoPX3NhbmRib3hfcG9saWN5Qg4KDF9kZXNjcmlwdGlvbkIUChJfY2xhc3NpZmllcl9yZXN1bHRCFgoUX291dHB1dF9ub3RpZmljYXRpb25CFgoUX3NtYXJ0X21vZGVfYXBwcm92YWxCHAoaX2hvb2tfYXBwcm92YWxfcmVxdWlyZW1lbnRCEgoQX2NvbnZlcnNhdGlvbl9pZCKBAgoaQmFja2dyb3VuZFNoZWxsU3Bhd25SZXN1bHQSOAoHc3VjY2VzcxgBIAEoCzIlLmFnZW50LnYxLkJhY2tncm91bmRTaGVsbFNwYXduU3VjY2Vzc0gAEjQKBWVycm9yGAIgASgLMiMuYWdlbnQudjEuQmFja2dyb3VuZFNoZWxsU3Bhd25FcnJvckgAEisKCHJlamVjdGVkGAMgASgLMhcuYWdlbnQudjEuU2hlbGxSZWplY3RlZEgAEjwKEXBlcm1pc3Npb25fZGVuaWVkGAQgASgLMh8uYWdlbnQudjEuU2hlbGxQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0InUKG0JhY2tncm91bmRTaGVsbFNwYXduU3VjY2VzcxIQCghzaGVsbF9pZBgBIAEoDRIPCgdjb21tYW5kGAIgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAMgASgJEhAKA3BpZBgEIAEoDUgAiAEBQgYKBF9waWQiVgoZQmFja2dyb3VuZFNoZWxsU3Bhd25FcnJvchIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEg0KBWVycm9yGAMgASgJIjYKE1dyaXRlU2hlbGxTdGRpbkFyZ3MSEAoIc2hlbGxfaWQYASABKA0SDQoFY2hhcnMYAiABKAkihwEKFVdyaXRlU2hlbGxTdGRpblJlc3VsdBIzCgdzdWNjZXNzGAEgASgLMiAuYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluU3VjY2Vzc0gAEi8KBWVycm9yGAIgASgLMh4uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluRXJyb3JIAEIICgZyZXN1bHQiXQoWV3JpdGVTaGVsbFN0ZGluU3VjY2VzcxIQCghzaGVsbF9pZBgBIAEoDRIxCil0ZXJtaW5hbF9maWxlX2xlbmd0aF9iZWZvcmVfaW5wdXRfd3JpdHRlbhgCIAEoDSIlChRXcml0ZVNoZWxsU3RkaW5FcnJvchINCgVlcnJvchgBIAEoCSIiCgpDb29yZGluYXRlEgkKAXgYASABKAUSCQoBeRgCIAEoBSJVCg9Db21wdXRlclVzZUFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJEiwKB2FjdGlvbnMYAiADKAsyGy5hZ2VudC52MS5Db21wdXRlclVzZUFjdGlvbiKBBAoRQ29tcHV0ZXJVc2VBY3Rpb24SLwoKbW91c2VfbW92ZRgBIAEoCzIZLmFnZW50LnYxLk1vdXNlTW92ZUFjdGlvbkgAEiYKBWNsaWNrGAIgASgLMhUuYWdlbnQudjEuQ2xpY2tBY3Rpb25IABIvCgptb3VzZV9kb3duGAMgASgLMhkuYWdlbnQudjEuTW91c2VEb3duQWN0aW9uSAASKwoIbW91c2VfdXAYBCABKAsyFy5hZ2VudC52MS5Nb3VzZVVwQWN0aW9uSAASJAoEZHJhZxgFIAEoCzIULmFnZW50LnYxLkRyYWdBY3Rpb25IABIoCgZzY3JvbGwYBiABKAsyFi5hZ2VudC52MS5TY3JvbGxBY3Rpb25IABIkCgR0eXBlGAcgASgLMhQuYWdlbnQudjEuVHlwZUFjdGlvbkgAEiIKA2tleRgIIAEoCzITLmFnZW50LnYxLktleUFjdGlvbkgAEiQKBHdhaXQYCSABKAsyFC5hZ2VudC52MS5XYWl0QWN0aW9uSAASMAoKc2NyZWVuc2hvdBgKIAEoCzIaLmFnZW50LnYxLlNjcmVlbnNob3RBY3Rpb25IABI5Cg9jdXJzb3JfcG9zaXRpb24YCyABKAsyHi5hZ2VudC52MS5DdXJzb3JQb3NpdGlvbkFjdGlvbkgAQggKBmFjdGlvbiI7Cg9Nb3VzZU1vdmVBY3Rpb24SKAoKY29vcmRpbmF0ZRgBIAEoCzIULmFnZW50LnYxLkNvb3JkaW5hdGUimAEKC0NsaWNrQWN0aW9uEi0KCmNvb3JkaW5hdGUYASABKAsyFC5hZ2VudC52MS5Db29yZGluYXRlSACIAQESDgoGYnV0dG9uGAIgASgFEg0KBWNvdW50GAMgASgFEhoKDW1vZGlmaWVyX2tleXMYBCABKAlIAYgBAUINCgtfY29vcmRpbmF0ZUIQCg5fbW9kaWZpZXJfa2V5cyIhCg9Nb3VzZURvd25BY3Rpb24SDgoGYnV0dG9uGAEgASgFIh8KDU1vdXNlVXBBY3Rpb24SDgoGYnV0dG9uGAEgASgFIkAKCkRyYWdBY3Rpb24SIgoEcGF0aBgBIAMoCzIULmFnZW50LnYxLkNvb3JkaW5hdGUSDgoGYnV0dG9uGAIgASgFIp0BCgxTY3JvbGxBY3Rpb24SLQoKY29vcmRpbmF0ZRgBIAEoCzIULmFnZW50LnYxLkNvb3JkaW5hdGVIAIgBARIRCglkaXJlY3Rpb24YAiABKAUSDgoGYW1vdW50GAMgASgFEhoKDW1vZGlmaWVyX2tleXMYBCABKAlIAYgBAUINCgtfY29vcmRpbmF0ZUIQCg5fbW9kaWZpZXJfa2V5cyIaCgpUeXBlQWN0aW9uEgwKBHRleHQYASABKAkiTAoJS2V5QWN0aW9uEgsKA2tleRgBIAEoCRIdChBob2xkX2R1cmF0aW9uX21zGAIgASgFSACIAQFCEwoRX2hvbGRfZHVyYXRpb25fbXMiIQoKV2FpdEFjdGlvbhITCgtkdXJhdGlvbl9tcxgBIAEoBSISChBTY3JlZW5zaG90QWN0aW9uIhYKFEN1cnNvclBvc2l0aW9uQWN0aW9uInsKEUNvbXB1dGVyVXNlUmVzdWx0Ei8KB3N1Y2Nlc3MYASABKAsyHC5hZ2VudC52MS5Db21wdXRlclVzZVN1Y2Nlc3NIABIrCgVlcnJvchgCIAEoCzIaLmFnZW50LnYxLkNvbXB1dGVyVXNlRXJyb3JIAEIICgZyZXN1bHQi+wEKEkNvbXB1dGVyVXNlU3VjY2VzcxIUCgxhY3Rpb25fY291bnQYASABKAUSEwoLZHVyYXRpb25fbXMYAiABKAUSFwoKc2NyZWVuc2hvdBgDIAEoCUgAiAEBEhAKA2xvZxgEIAEoCUgBiAEBEhwKD3NjcmVlbnNob3RfcGF0aBgFIAEoCUgCiAEBEjIKD2N1cnNvcl9wb3NpdGlvbhgGIAEoCzIULmFnZW50LnYxLkNvb3JkaW5hdGVIA4gBAUINCgtfc2NyZWVuc2hvdEIGCgRfbG9nQhIKEF9zY3JlZW5zaG90X3BhdGhCEgoQX2N1cnNvcl9wb3NpdGlvbiLAAQoQQ29tcHV0ZXJVc2VFcnJvchINCgVlcnJvchgBIAEoCRIUCgxhY3Rpb25fY291bnQYAiABKAUSEwoLZHVyYXRpb25fbXMYAyABKAUSEAoDbG9nGAQgASgJSACIAQESFwoKc2NyZWVuc2hvdBgFIAEoCUgBiAEBEhwKD3NjcmVlbnNob3RfcGF0aBgGIAEoCUgCiAEBQgYKBF9sb2dCDQoLX3NjcmVlbnNob3RCEgoQX3NjcmVlbnNob3RfcGF0aCJrChNDb21wdXRlclVzZVRvb2xDYWxsEicKBGFyZ3MYASABKAsyGS5hZ2VudC52MS5Db21wdXRlclVzZUFyZ3MSKwoGcmVzdWx0GAIgASgLMhsuYWdlbnQudjEuQ29tcHV0ZXJVc2VSZXN1bHQiaAoSQ3JlYXRlUGxhblRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5DcmVhdGVQbGFuQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5DcmVhdGVQbGFuUmVzdWx0IjgKBVBoYXNlEgwKBG5hbWUYASABKAkSIQoFdG9kb3MYAiADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbSKWAQoOQ3JlYXRlUGxhbkFyZ3MSDAoEcGxhbhgBIAEoCRIhCgV0b2RvcxgCIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtEhAKCG92ZXJ2aWV3GAMgASgJEgwKBG5hbWUYBCABKAkSEgoKaXNfcHJvamVjdBgFIAEoCBIfCgZwaGFzZXMYBiADKAsyDy5hZ2VudC52MS5QaGFzZSKKAQoQQ3JlYXRlUGxhblJlc3VsdBIQCghwbGFuX3VyaRgDIAEoCRIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuQ3JlYXRlUGxhblN1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLkNyZWF0ZVBsYW5FcnJvckgAQggKBnJlc3VsdCITChFDcmVhdGVQbGFuU3VjY2VzcyIgCg9DcmVhdGVQbGFuRXJyb3ISDQoFZXJyb3IYASABKAkiVgoWQ3JlYXRlUGxhblJlcXVlc3RRdWVyeRImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuQ3JlYXRlUGxhbkFyZ3MSFAoMdG9vbF9jYWxsX2lkGAIgASgJIkcKGUNyZWF0ZVBsYW5SZXF1ZXN0UmVzcG9uc2USKgoGcmVzdWx0GAEgASgLMhouYWdlbnQudjEuQ3JlYXRlUGxhblJlc3VsdCIWChRDdXJzb3JSdWxlVHlwZUdsb2JhbCIoChdDdXJzb3JSdWxlVHlwZUZpbGVHbG9icxINCgVnbG9icxgBIAMoCSIxChpDdXJzb3JSdWxlVHlwZUFnZW50RmV0Y2hlZBITCgtkZXNjcmlwdGlvbhgBIAEoCSIgCh5DdXJzb3JSdWxlVHlwZU1hbnVhbGx5QXR0YWNoZWQiiwIKDkN1cnNvclJ1bGVUeXBlEjAKBmdsb2JhbBgBIAEoCzIeLmFnZW50LnYxLkN1cnNvclJ1bGVUeXBlR2xvYmFsSAASOQoMZmlsZV9nbG9iYmVkGAIgASgLMiEuYWdlbnQudjEuQ3Vyc29yUnVsZVR5cGVGaWxlR2xvYnNIABI9Cg1hZ2VudF9mZXRjaGVkGAMgASgLMiQuYWdlbnQudjEuQ3Vyc29yUnVsZVR5cGVBZ2VudEZldGNoZWRIABJFChFtYW51YWxseV9hdHRhY2hlZBgEIAEoCzIoLmFnZW50LnYxLkN1cnNvclJ1bGVUeXBlTWFudWFsbHlBdHRhY2hlZEgAQgYKBHR5cGUiyAEKCkN1cnNvclJ1bGUSEQoJZnVsbF9wYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSJgoEdHlwZRgDIAEoCzIYLmFnZW50LnYxLkN1cnNvclJ1bGVUeXBlEg4KBnNvdXJjZRgEIAEoBRIeChFnaXRfcmVtb3RlX29yaWdpbhgFIAEoCUgAiAEBEhgKC3BhcnNlX2Vycm9yGAYgASgJSAGIAQFCFAoSX2dpdF9yZW1vdGVfb3JpZ2luQg4KDF9wYXJzZV9lcnJvciIwCgpEZWxldGVBcmdzEgwKBHBhdGgYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJIu0CCgxEZWxldGVSZXN1bHQSKgoHc3VjY2VzcxgBIAEoCzIXLmFnZW50LnYxLkRlbGV0ZVN1Y2Nlc3NIABI2Cg5maWxlX25vdF9mb3VuZBgCIAEoCzIcLmFnZW50LnYxLkRlbGV0ZUZpbGVOb3RGb3VuZEgAEisKCG5vdF9maWxlGAMgASgLMhcuYWdlbnQudjEuRGVsZXRlTm90RmlsZUgAEj0KEXBlcm1pc3Npb25fZGVuaWVkGAQgASgLMiAuYWdlbnQudjEuRGVsZXRlUGVybWlzc2lvbkRlbmllZEgAEi0KCWZpbGVfYnVzeRgFIAEoCzIYLmFnZW50LnYxLkRlbGV0ZUZpbGVCdXN5SAASLAoIcmVqZWN0ZWQYBiABKAsyGC5hZ2VudC52MS5EZWxldGVSZWplY3RlZEgAEiYKBWVycm9yGAcgASgLMhUuYWdlbnQudjEuRGVsZXRlRXJyb3JIAEIICgZyZXN1bHQiXAoNRGVsZXRlU3VjY2VzcxIMCgRwYXRoGAEgASgJEhQKDGRlbGV0ZWRfZmlsZRgCIAEoCRIRCglmaWxlX3NpemUYAyABKAMSFAoMcHJldl9jb250ZW50GAQgASgJIiIKEkRlbGV0ZUZpbGVOb3RGb3VuZBIMCgRwYXRoGAEgASgJIjIKDURlbGV0ZU5vdEZpbGUSDAoEcGF0aBgBIAEoCRITCgthY3R1YWxfdHlwZRgCIAEoCSJZChZEZWxldGVQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkSHAoUY2xpZW50X3Zpc2libGVfZXJyb3IYAiABKAkSEwoLaXNfcmVhZG9ubHkYAyABKAgiHgoORGVsZXRlRmlsZUJ1c3kSDAoEcGF0aBgBIAEoCSIuCg5EZWxldGVSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSIqCgtEZWxldGVFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIlwKDkRlbGV0ZVRvb2xDYWxsEiIKBGFyZ3MYASABKAsyFC5hZ2VudC52MS5EZWxldGVBcmdzEiYKBnJlc3VsdBgCIAEoCzIWLmFnZW50LnYxLkRlbGV0ZVJlc3VsdCI1Cg9EaWFnbm9zdGljc0FyZ3MSDAoEcGF0aBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkirwIKEURpYWdub3N0aWNzUmVzdWx0Ei8KB3N1Y2Nlc3MYASABKAsyHC5hZ2VudC52MS5EaWFnbm9zdGljc1N1Y2Nlc3NIABIrCgVlcnJvchgCIAEoCzIaLmFnZW50LnYxLkRpYWdub3N0aWNzRXJyb3JIABIxCghyZWplY3RlZBgDIAEoCzIdLmFnZW50LnYxLkRpYWdub3N0aWNzUmVqZWN0ZWRIABI7Cg5maWxlX25vdF9mb3VuZBgEIAEoCzIhLmFnZW50LnYxLkRpYWdub3N0aWNzRmlsZU5vdEZvdW5kSAASQgoRcGVybWlzc2lvbl9kZW5pZWQYBSABKAsyJS5hZ2VudC52MS5EaWFnbm9zdGljc1Blcm1pc3Npb25EZW5pZWRIAEIICgZyZXN1bHQiaAoSRGlhZ25vc3RpY3NTdWNjZXNzEgwKBHBhdGgYASABKAkSKQoLZGlhZ25vc3RpY3MYAiADKAsyFC5hZ2VudC52MS5EaWFnbm9zdGljEhkKEXRvdGFsX2RpYWdub3N0aWNzGAMgASgFIn8KCkRpYWdub3N0aWMSEAoIc2V2ZXJpdHkYASABKAUSHgoFcmFuZ2UYAiABKAsyDy5hZ2VudC52MS5SYW5nZRIPCgdtZXNzYWdlGAMgASgJEg4KBnNvdXJjZRgEIAEoCRIMCgRjb2RlGAUgASgJEhAKCGlzX3N0YWxlGAYgASgIIi8KEERpYWdub3N0aWNzRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSIzChNEaWFnbm9zdGljc1JlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIicKF0RpYWdub3N0aWNzRmlsZU5vdEZvdW5kEgwKBHBhdGgYASABKAkiKwobRGlhZ25vc3RpY3NQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkiSAoIRWRpdEFyZ3MSDAoEcGF0aBgBIAEoCRIbCg5zdHJlYW1fY29udGVudBgGIAEoCUgAiAEBQhEKD19zdHJlYW1fY29udGVudCLWAgoKRWRpdFJlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuRWRpdFN1Y2Nlc3NIABI0Cg5maWxlX25vdF9mb3VuZBgCIAEoCzIaLmFnZW50LnYxLkVkaXRGaWxlTm90Rm91bmRIABJEChZyZWFkX3Blcm1pc3Npb25fZGVuaWVkGAMgASgLMiIuYWdlbnQudjEuRWRpdFJlYWRQZXJtaXNzaW9uRGVuaWVkSAASRgoXd3JpdGVfcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyIy5hZ2VudC52MS5FZGl0V3JpdGVQZXJtaXNzaW9uRGVuaWVkSAASKgoIcmVqZWN0ZWQYBiABKAsyFi5hZ2VudC52MS5FZGl0UmVqZWN0ZWRIABIkCgVlcnJvchgHIAEoCzITLmFnZW50LnYxLkVkaXRFcnJvckgAQggKBnJlc3VsdCKkAgoLRWRpdFN1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIYCgtsaW5lc19hZGRlZBgDIAEoBUgAiAEBEhoKDWxpbmVzX3JlbW92ZWQYBCABKAVIAYgBARIYCgtkaWZmX3N0cmluZxgFIAEoCUgCiAEBEiUKGGJlZm9yZV9mdWxsX2ZpbGVfY29udGVudBgGIAEoCUgDiAEBEh8KF2FmdGVyX2Z1bGxfZmlsZV9jb250ZW50GAcgASgJEhQKB21lc3NhZ2UYCCABKAlIBIgBAUIOCgxfbGluZXNfYWRkZWRCEAoOX2xpbmVzX3JlbW92ZWRCDgoMX2RpZmZfc3RyaW5nQhsKGV9iZWZvcmVfZnVsbF9maWxlX2NvbnRlbnRCCgoIX21lc3NhZ2UiIAoQRWRpdEZpbGVOb3RGb3VuZBIMCgRwYXRoGAEgASgJIigKGEVkaXRSZWFkUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJIk0KGUVkaXRXcml0ZVBlcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCRITCgtpc19yZWFkb25seRgDIAEoCCIsCgxFZGl0UmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiYgoJRWRpdEVycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkSIAoTbW9kZWxfdmlzaWJsZV9lcnJvchgFIAEoCUgAiAEBQhYKFF9tb2RlbF92aXNpYmxlX2Vycm9yIlYKDEVkaXRUb29sQ2FsbBIgCgRhcmdzGAEgASgLMhIuYWdlbnQudjEuRWRpdEFyZ3MSJAoGcmVzdWx0GAIgASgLMhQuYWdlbnQudjEuRWRpdFJlc3VsdCIxChFFZGl0VG9vbENhbGxEZWx0YRIcChRzdHJlYW1fY29udGVudF9kZWx0YRgBIAEoCSIxCgxFeGFGZXRjaEFyZ3MSCwoDaWRzGAEgAygJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSKiAQoORXhhRmV0Y2hSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLkV4YUZldGNoU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuRXhhRmV0Y2hFcnJvckgAEi4KCHJlamVjdGVkGAMgASgLMhouYWdlbnQudjEuRXhhRmV0Y2hSZWplY3RlZEgAQggKBnJlc3VsdCI+Cg9FeGFGZXRjaFN1Y2Nlc3MSKwoIY29udGVudHMYASADKAsyGS5hZ2VudC52MS5FeGFGZXRjaENvbnRlbnQiHgoNRXhhRmV0Y2hFcnJvchINCgVlcnJvchgBIAEoCSIiChBFeGFGZXRjaFJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSJTCg9FeGFGZXRjaENvbnRlbnQSDQoFdGl0bGUYASABKAkSCwoDdXJsGAIgASgJEgwKBHRleHQYAyABKAkSFgoOcHVibGlzaGVkX2RhdGUYBCABKAkiYgoQRXhhRmV0Y2hUb29sQ2FsbBIkCgRhcmdzGAEgASgLMhYuYWdlbnQudjEuRXhhRmV0Y2hBcmdzEigKBnJlc3VsdBgCIAEoCzIYLmFnZW50LnYxLkV4YUZldGNoUmVzdWx0IjwKFEV4YUZldGNoUmVxdWVzdFF1ZXJ5EiQKBGFyZ3MYASABKAsyFi5hZ2VudC52MS5FeGFGZXRjaEFyZ3MiowEKF0V4YUZldGNoUmVxdWVzdFJlc3BvbnNlEj4KCGFwcHJvdmVkGAEgASgLMiouYWdlbnQudjEuRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWRIABI+CghyZWplY3RlZBgCIAEoCzIqLmFnZW50LnYxLkV4YUZldGNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkSABCCAoGcmVzdWx0IiIKIEV4YUZldGNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkIjIKIEV4YUZldGNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSJXCg1FeGFTZWFyY2hBcmdzEg0KBXF1ZXJ5GAEgASgJEgwKBHR5cGUYAiABKAkSEwoLbnVtX3Jlc3VsdHMYAyABKAUSFAoMdG9vbF9jYWxsX2lkGAQgASgJIqYBCg9FeGFTZWFyY2hSZXN1bHQSLQoHc3VjY2VzcxgBIAEoCzIaLmFnZW50LnYxLkV4YVNlYXJjaFN1Y2Nlc3NIABIpCgVlcnJvchgCIAEoCzIYLmFnZW50LnYxLkV4YVNlYXJjaEVycm9ySAASLwoIcmVqZWN0ZWQYAyABKAsyGy5hZ2VudC52MS5FeGFTZWFyY2hSZWplY3RlZEgAQggKBnJlc3VsdCJEChBFeGFTZWFyY2hTdWNjZXNzEjAKCnJlZmVyZW5jZXMYASADKAsyHC5hZ2VudC52MS5FeGFTZWFyY2hSZWZlcmVuY2UiHwoORXhhU2VhcmNoRXJyb3ISDQoFZXJyb3IYASABKAkiIwoRRXhhU2VhcmNoUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlYKEkV4YVNlYXJjaFJlZmVyZW5jZRINCgV0aXRsZRgBIAEoCRILCgN1cmwYAiABKAkSDAoEdGV4dBgDIAEoCRIWCg5wdWJsaXNoZWRfZGF0ZRgEIAEoCSJlChFFeGFTZWFyY2hUb29sQ2FsbBIlCgRhcmdzGAEgASgLMhcuYWdlbnQudjEuRXhhU2VhcmNoQXJncxIpCgZyZXN1bHQYAiABKAsyGS5hZ2VudC52MS5FeGFTZWFyY2hSZXN1bHQiPgoVRXhhU2VhcmNoUmVxdWVzdFF1ZXJ5EiUKBGFyZ3MYASABKAsyFy5hZ2VudC52MS5FeGFTZWFyY2hBcmdzIqYBChhFeGFTZWFyY2hSZXF1ZXN0UmVzcG9uc2USPwoIYXBwcm92ZWQYASABKAsyKy5hZ2VudC52MS5FeGFTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWRIABI/CghyZWplY3RlZBgCIAEoCzIrLmFnZW50LnYxLkV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZEgAQggKBnJlc3VsdCIjCiFFeGFTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWQiMwohRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSIjChVFeGVjQ2xpZW50U3RyZWFtQ2xvc2USCgoCaWQYASABKA0ifgoPRXhlY0NsaWVudFRocm93EgoKAmlkGAEgASgNEg0KBWVycm9yGAIgASgJEhgKC3N0YWNrX3RyYWNlGAMgASgJSACIAQESFwoKZXJyb3JfY29kZRgEIAEoCUgBiAEBQg4KDF9zdGFja190cmFjZUINCgtfZXJyb3JfY29kZSIhChNFeGVjQ2xpZW50SGVhcnRiZWF0EgoKAmlkGAEgASgNIr4BChhFeGVjQ2xpZW50Q29udHJvbE1lc3NhZ2USNwoMc3RyZWFtX2Nsb3NlGAEgASgLMh8uYWdlbnQudjEuRXhlY0NsaWVudFN0cmVhbUNsb3NlSAASKgoFdGhyb3cYAiABKAsyGS5hZ2VudC52MS5FeGVjQ2xpZW50VGhyb3dIABIyCgloZWFydGJlYXQYAyABKAsyHS5hZ2VudC52MS5FeGVjQ2xpZW50SGVhcnRiZWF0SABCCQoHbWVzc2FnZSKEAQoLU3BhbkNvbnRleHQSEAoIdHJhY2VfaWQYASABKAkSDwoHc3Bhbl9pZBgCIAEoCRIYCgt0cmFjZV9mbGFncxgDIAEoDUgAiAEBEhgKC3RyYWNlX3N0YXRlGAQgASgJSAGIAQFCDgoMX3RyYWNlX2ZsYWdzQg4KDF90cmFjZV9zdGF0ZSILCglBYm9ydEFyZ3MiDQoLQWJvcnRSZXN1bHQi2hMKEUV4ZWNTZXJ2ZXJNZXNzYWdlEgoKAmlkGAEgASgNEg8KB2V4ZWNfaWQYDyABKAkSMAoMc3Bhbl9jb250ZXh0GBMgASgLMhUuYWdlbnQudjEuU3BhbkNvbnRleHRIAYgBARIpCgpzaGVsbF9hcmdzGAIgASgLMhMuYWdlbnQudjEuU2hlbGxBcmdzSAASKQoKd3JpdGVfYXJncxgDIAEoCzITLmFnZW50LnYxLldyaXRlQXJnc0gAEisKC2RlbGV0ZV9hcmdzGAQgASgLMhQuYWdlbnQudjEuRGVsZXRlQXJnc0gAEicKCWdyZXBfYXJncxgFIAEoCzISLmFnZW50LnYxLkdyZXBBcmdzSAASJwoJcmVhZF9hcmdzGAcgASgLMhIuYWdlbnQudjEuUmVhZEFyZ3NIABIjCgdsc19hcmdzGAggASgLMhAuYWdlbnQudjEuTHNBcmdzSAASNQoQZGlhZ25vc3RpY3NfYXJncxgJIAEoCzIZLmFnZW50LnYxLkRpYWdub3N0aWNzQXJnc0gAEjwKFHJlcXVlc3RfY29udGV4dF9hcmdzGAogASgLMhwuYWdlbnQudjEuUmVxdWVzdENvbnRleHRBcmdzSAASJQoIbWNwX2FyZ3MYCyABKAsyES5hZ2VudC52MS5NY3BBcmdzSAASMAoRc2hlbGxfc3RyZWFtX2FyZ3MYDiABKAsyEy5hZ2VudC52MS5TaGVsbEFyZ3NIABJJChtiYWNrZ3JvdW5kX3NoZWxsX3NwYXduX2FyZ3MYECABKAsyIi5hZ2VudC52MS5CYWNrZ3JvdW5kU2hlbGxTcGF3bkFyZ3NIABJKChxsaXN0X21jcF9yZXNvdXJjZXNfZXhlY19hcmdzGBEgASgLMiIuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNBcmdzSAASSAobcmVhZF9tY3BfcmVzb3VyY2VfZXhlY19hcmdzGBIgASgLMiEuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlRXhlY0FyZ3NIABIpCgpmZXRjaF9hcmdzGBQgASgLMhMuYWdlbnQudjEuRmV0Y2hBcmdzSAASOAoScmVjb3JkX3NjcmVlbl9hcmdzGBUgASgLMhouYWdlbnQudjEuUmVjb3JkU2NyZWVuQXJnc0gAEjYKEWNvbXB1dGVyX3VzZV9hcmdzGBYgASgLMhkuYWdlbnQudjEuQ29tcHV0ZXJVc2VBcmdzSAASPwoWd3JpdGVfc2hlbGxfc3RkaW5fYXJncxgXIAEoCzIdLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpbkFyZ3NIABIwChJyZWRhY3RlZF9yZWFkX2FyZ3MYHSABKAsyEi5hZ2VudC52MS5SZWFkQXJnc0gAEjkKE21jcF9zdGF0ZV9leGVjX2FyZ3MYJCABKAsyGi5hZ2VudC52MS5NY3BTdGF0ZUV4ZWNBcmdzSAASNgoRZXhlY3V0ZV9ob29rX2FyZ3MYGyABKAsyGS5hZ2VudC52MS5FeGVjdXRlSG9va0FyZ3NIABIvCg1zdWJhZ2VudF9hcmdzGBwgASgLMhYuYWdlbnQudjEuU3ViYWdlbnRBcmdzSAASSQobZm9yY2VfYmFja2dyb3VuZF9zaGVsbF9hcmdzGB4gASgLMiIuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU2hlbGxBcmdzSAASTwoeZm9yY2VfYmFja2dyb3VuZF9zdWJhZ2VudF9hcmdzGB8gASgLMiUuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRBcmdzSAASOgoTc3ViYWdlbnRfYXdhaXRfYXJncxglIAEoCzIbLmFnZW50LnYxLlN1YmFnZW50QXdhaXRBcmdzSAASRwoac21hcnRfbW9kZV9jbGFzc2lmaWVyX2FyZ3MYJiABKAsyIS5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyQXJnc0gAEkIKF2NhbnZhc19kaWFnbm9zdGljc19hcmdzGCggASgLMh8uYWdlbnQudjEuQ2FudmFzRGlhZ25vc3RpY3NBcmdzSAASTQodc2hlbGxfYWxsb3dsaXN0X3ByZWNoZWNrX2FyZ3MYKSABKAsyJC5hZ2VudC52MS5TaGVsbEFsbG93bGlzdFByZWNoZWNrQXJnc0gAEkkKG21jcF9hbGxvd2xpc3RfcHJlY2hlY2tfYXJncxgqIAEoCzIiLmFnZW50LnYxLk1jcEFsbG93bGlzdFByZWNoZWNrQXJnc0gAElQKIXdlYl9mZXRjaF9hbGxvd2xpc3RfcHJlY2hlY2tfYXJncxgrIAEoCzInLmFnZW50LnYxLldlYkZldGNoQWxsb3dsaXN0UHJlY2hlY2tBcmdzSAASNAoQZ2l0X2RpZmZfcmVxdWVzdBgsIAEoCzIYLmFnZW50LnYxLkdldERpZmZSZXF1ZXN0SAASMAoMcGlfcmVhZF9hcmdzGC0gASgLMhguYWdlbnQudjEuUGlSZWFkRXhlY0FyZ3NIABIwCgxwaV9iYXNoX2FyZ3MYLiABKAsyGC5hZ2VudC52MS5QaUJhc2hFeGVjQXJnc0gAEjAKDHBpX2VkaXRfYXJncxgvIAEoCzIYLmFnZW50LnYxLlBpRWRpdEV4ZWNBcmdzSAASMgoNcGlfd3JpdGVfYXJncxgwIAEoCzIZLmFnZW50LnYxLlBpV3JpdGVFeGVjQXJnc0gAEjAKDHBpX2dyZXBfYXJncxgxIAEoCzIYLmFnZW50LnYxLlBpR3JlcEV4ZWNBcmdzSAASMAoMcGlfZmluZF9hcmdzGDIgASgLMhguYWdlbnQudjEuUGlGaW5kRXhlY0FyZ3NIABIsCgpwaV9sc19hcmdzGDMgASgLMhYuYWdlbnQudjEuUGlMc0V4ZWNBcmdzSAASNwoYbWluaV9zd2VfYWdlbnRfYmFzaF9hcmdzGDQgASgLMhMuYWdlbnQudjEuU2hlbGxBcmdzSAASRAoYY29udmVyc2F0aW9uX3NlYXJjaF9hcmdzGDUgASgLMiAuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoQXJnc0gAEkUKGWFnZW50X3N0b3JlX2NvbmZsaWN0X2FyZ3MYNiABKAsyIC5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RBcmdzSAASLAofYWNjZXB0X2hvb2tfYWRkaXRpb25hbF9jb250ZXh0cxg3IAEoCEgCiAEBQgkKB21lc3NhZ2VCDwoNX3NwYW5fY29udGV4dEIiCiBfYWNjZXB0X2hvb2tfYWRkaXRpb25hbF9jb250ZXh0cyLhFAoRRXhlY0NsaWVudE1lc3NhZ2USCgoCaWQYASABKA0SDwoHZXhlY19pZBgPIAEoCRItCgxzaGVsbF9yZXN1bHQYAiABKAsyFS5hZ2VudC52MS5TaGVsbFJlc3VsdEgAEi0KDHdyaXRlX3Jlc3VsdBgDIAEoCzIVLmFnZW50LnYxLldyaXRlUmVzdWx0SAASLwoNZGVsZXRlX3Jlc3VsdBgEIAEoCzIWLmFnZW50LnYxLkRlbGV0ZVJlc3VsdEgAEisKC2dyZXBfcmVzdWx0GAUgASgLMhQuYWdlbnQudjEuR3JlcFJlc3VsdEgAEisKC3JlYWRfcmVzdWx0GAcgASgLMhQuYWdlbnQudjEuUmVhZFJlc3VsdEgAEicKCWxzX3Jlc3VsdBgIIAEoCzISLmFnZW50LnYxLkxzUmVzdWx0SAASOQoSZGlhZ25vc3RpY3NfcmVzdWx0GAkgASgLMhsuYWdlbnQudjEuRGlhZ25vc3RpY3NSZXN1bHRIABJAChZyZXF1ZXN0X2NvbnRleHRfcmVzdWx0GAogASgLMh4uYWdlbnQudjEuUmVxdWVzdENvbnRleHRSZXN1bHRIABIpCgptY3BfcmVzdWx0GAsgASgLMhMuYWdlbnQudjEuTWNwUmVzdWx0SAASLQoMc2hlbGxfc3RyZWFtGA4gASgLMhUuYWdlbnQudjEuU2hlbGxTdHJlYW1IABJNCh1iYWNrZ3JvdW5kX3NoZWxsX3NwYXduX3Jlc3VsdBgQIAEoCzIkLmFnZW50LnYxLkJhY2tncm91bmRTaGVsbFNwYXduUmVzdWx0SAASTgoebGlzdF9tY3BfcmVzb3VyY2VzX2V4ZWNfcmVzdWx0GBEgASgLMiQuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHRIABJMCh1yZWFkX21jcF9yZXNvdXJjZV9leGVjX3Jlc3VsdBgSIAEoCzIjLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNSZXN1bHRIABItCgxmZXRjaF9yZXN1bHQYFCABKAsyFS5hZ2VudC52MS5GZXRjaFJlc3VsdEgAEjwKFHJlY29yZF9zY3JlZW5fcmVzdWx0GBUgASgLMhwuYWdlbnQudjEuUmVjb3JkU2NyZWVuUmVzdWx0SAASOgoTY29tcHV0ZXJfdXNlX3Jlc3VsdBgWIAEoCzIbLmFnZW50LnYxLkNvbXB1dGVyVXNlUmVzdWx0SAASQwoYd3JpdGVfc2hlbGxfc3RkaW5fcmVzdWx0GBcgASgLMh8uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluUmVzdWx0SAASNAoUcmVkYWN0ZWRfcmVhZF9yZXN1bHQYHSABKAsyFC5hZ2VudC52MS5SZWFkUmVzdWx0SAASPQoVbWNwX3N0YXRlX2V4ZWNfcmVzdWx0GCQgASgLMhwuYWdlbnQudjEuTWNwU3RhdGVFeGVjUmVzdWx0SAASOgoTZXhlY3V0ZV9ob29rX3Jlc3VsdBgbIAEoCzIbLmFnZW50LnYxLkV4ZWN1dGVIb29rUmVzdWx0SAASMwoPc3ViYWdlbnRfcmVzdWx0GBwgASgLMhguYWdlbnQudjEuU3ViYWdlbnRSZXN1bHRIABJNCh1mb3JjZV9iYWNrZ3JvdW5kX3NoZWxsX3Jlc3VsdBgeIAEoCzIkLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFNoZWxsUmVzdWx0SAASUwogZm9yY2VfYmFja2dyb3VuZF9zdWJhZ2VudF9yZXN1bHQYHyABKAsyJy5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTdWJhZ2VudFJlc3VsdEgAEj4KFXN1YmFnZW50X2F3YWl0X3Jlc3VsdBglIAEoCzIdLmFnZW50LnYxLlN1YmFnZW50QXdhaXRSZXN1bHRIABJLChxzbWFydF9tb2RlX2NsYXNzaWZpZXJfcmVzdWx0GCYgASgLMiMuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllclJlc3VsdEgAEkYKGWNhbnZhc19kaWFnbm9zdGljc19yZXN1bHQYKCABKAsyIS5hZ2VudC52MS5DYW52YXNEaWFnbm9zdGljc1Jlc3VsdEgAElEKH3NoZWxsX2FsbG93bGlzdF9wcmVjaGVja19yZXN1bHQYKSABKAsyJi5hZ2VudC52MS5TaGVsbEFsbG93bGlzdFByZWNoZWNrUmVzdWx0SAASTQodbWNwX2FsbG93bGlzdF9wcmVjaGVja19yZXN1bHQYKiABKAsyJC5hZ2VudC52MS5NY3BBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdEgAElgKI3dlYl9mZXRjaF9hbGxvd2xpc3RfcHJlY2hlY2tfcmVzdWx0GCsgASgLMikuYWdlbnQudjEuV2ViRmV0Y2hBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdEgAEjYKEWdpdF9kaWZmX3Jlc3BvbnNlGCwgASgLMhkuYWdlbnQudjEuR2V0RGlmZlJlc3BvbnNlSAASNAoOcGlfcmVhZF9yZXN1bHQYLiABKAsyGi5hZ2VudC52MS5QaVJlYWRFeGVjUmVzdWx0SAASNAoOcGlfYmFzaF9yZXN1bHQYLyABKAsyGi5hZ2VudC52MS5QaUJhc2hFeGVjUmVzdWx0SAASNAoOcGlfZWRpdF9yZXN1bHQYMCABKAsyGi5hZ2VudC52MS5QaUVkaXRFeGVjUmVzdWx0SAASNgoPcGlfd3JpdGVfcmVzdWx0GDEgASgLMhsuYWdlbnQudjEuUGlXcml0ZUV4ZWNSZXN1bHRIABI0Cg5waV9ncmVwX3Jlc3VsdBgyIAEoCzIaLmFnZW50LnYxLlBpR3JlcEV4ZWNSZXN1bHRIABI0Cg5waV9maW5kX3Jlc3VsdBgzIAEoCzIaLmFnZW50LnYxLlBpRmluZEV4ZWNSZXN1bHRIABIwCgxwaV9sc19yZXN1bHQYNCABKAsyGC5hZ2VudC52MS5QaUxzRXhlY1Jlc3VsdEgAEkgKGmNvbnZlcnNhdGlvbl9zZWFyY2hfcmVzdWx0GDUgASgLMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoUmVzdWx0SAASSQobYWdlbnRfc3RvcmVfY29uZmxpY3RfcmVzdWx0GDYgASgLMiIuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0UmVzdWx0SAASOwoabWluaV9zd2VfYWdlbnRfYmFzaF9yZXN1bHQYNyABKAsyFS5hZ2VudC52MS5TaGVsbFJlc3VsdEgAEiQKF2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zGCcgASgFSAGIAQESQQoYaG9va19hZGRpdGlvbmFsX2NvbnRleHRzGC0gAygLMh8uYWdlbnQudjEuSG9va0FkZGl0aW9uYWxDb250ZXh0QgkKB21lc3NhZ2VCGgoYX2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zIi4KCUZldGNoQXJncxILCgN1cmwYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJImkKC0ZldGNoUmVzdWx0EikKB3N1Y2Nlc3MYASABKAsyFi5hZ2VudC52MS5GZXRjaFN1Y2Nlc3NIABIlCgVlcnJvchgCIAEoCzIULmFnZW50LnYxLkZldGNoRXJyb3JIAEIICgZyZXN1bHQiVwoMRmV0Y2hTdWNjZXNzEgsKA3VybBgBIAEoCRIPCgdjb250ZW50GAIgASgJEhMKC3N0YXR1c19jb2RlGAMgASgFEhQKDGNvbnRlbnRfdHlwZRgEIAEoCSIoCgpGZXRjaEVycm9yEgsKA3VybBgBIAEoCRINCgVlcnJvchgCIAEoCSJtChFHZW5lcmF0ZUltYWdlQXJncxITCgtkZXNjcmlwdGlvbhgBIAEoCRIWCglmaWxlX3BhdGgYAiABKAlIAIgBARIdChVyZWZlcmVuY2VfaW1hZ2VfcGF0aHMYBSADKAlCDAoKX2ZpbGVfcGF0aCKBAQoTR2VuZXJhdGVJbWFnZVJlc3VsdBIxCgdzdWNjZXNzGAEgASgLMh4uYWdlbnQudjEuR2VuZXJhdGVJbWFnZVN1Y2Nlc3NIABItCgVlcnJvchgCIAEoCzIcLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VFcnJvckgAQggKBnJlc3VsdCI9ChRHZW5lcmF0ZUltYWdlU3VjY2VzcxIRCglmaWxlX3BhdGgYASABKAkSEgoKaW1hZ2VfZGF0YRgCIAEoCSIjChJHZW5lcmF0ZUltYWdlRXJyb3ISDQoFZXJyb3IYASABKAkicQoVR2VuZXJhdGVJbWFnZVRvb2xDYWxsEikKBGFyZ3MYASABKAsyGy5hZ2VudC52MS5HZW5lcmF0ZUltYWdlQXJncxItCgZyZXN1bHQYAiABKAsyHS5hZ2VudC52MS5HZW5lcmF0ZUltYWdlUmVzdWx0IuYECghHcmVwQXJncxIPCgdwYXR0ZXJuGAEgASgJEhEKBHBhdGgYAiABKAlIAIgBARIRCgRnbG9iGAMgASgJSAGIAQESGAoLb3V0cHV0X21vZGUYBCABKAlIAogBARIbCg5jb250ZXh0X2JlZm9yZRgFIAEoBUgDiAEBEhoKDWNvbnRleHRfYWZ0ZXIYBiABKAVIBIgBARIUCgdjb250ZXh0GAcgASgFSAWIAQESHQoQY2FzZV9pbnNlbnNpdGl2ZRgIIAEoCEgGiAEBEhEKBHR5cGUYCSABKAlIB4gBARIXCgpoZWFkX2xpbWl0GAogASgFSAiIAQESFgoJbXVsdGlsaW5lGAsgASgISAmIAQESEQoEc29ydBgMIAEoCUgKiAEBEhsKDnNvcnRfYXNjZW5kaW5nGA0gASgISAuIAQESFAoMdG9vbF9jYWxsX2lkGA4gASgJEjQKDnNhbmRib3hfcG9saWN5GA8gASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgMiAEBEhMKBm9mZnNldBgQIAEoBUgNiAEBQgcKBV9wYXRoQgcKBV9nbG9iQg4KDF9vdXRwdXRfbW9kZUIRCg9fY29udGV4dF9iZWZvcmVCEAoOX2NvbnRleHRfYWZ0ZXJCCgoIX2NvbnRleHRCEwoRX2Nhc2VfaW5zZW5zaXRpdmVCBwoFX3R5cGVCDQoLX2hlYWRfbGltaXRCDAoKX211bHRpbGluZUIHCgVfc29ydEIRCg9fc29ydF9hc2NlbmRpbmdCEQoPX3NhbmRib3hfcG9saWN5QgkKB19vZmZzZXQiZgoKR3JlcFJlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuR3JlcFN1Y2Nlc3NIABIkCgVlcnJvchgCIAEoCzITLmFnZW50LnYxLkdyZXBFcnJvckgAQggKBnJlc3VsdCIaCglHcmVwRXJyb3ISDQoFZXJyb3IYASABKAkitAIKC0dyZXBTdWNjZXNzEg8KB3BhdHRlcm4YASABKAkSDAoEcGF0aBgCIAEoCRITCgtvdXRwdXRfbW9kZRgDIAEoCRJGChF3b3Jrc3BhY2VfcmVzdWx0cxgEIAMoCzIrLmFnZW50LnYxLkdyZXBTdWNjZXNzLldvcmtzcGFjZVJlc3VsdHNFbnRyeRI8ChRhY3RpdmVfZWRpdG9yX3Jlc3VsdBgFIAEoCzIZLmFnZW50LnYxLkdyZXBVbmlvblJlc3VsdEgAiAEBGlIKFVdvcmtzcGFjZVJlc3VsdHNFbnRyeRILCgNrZXkYASABKAkSKAoFdmFsdWUYAiABKAsyGS5hZ2VudC52MS5HcmVwVW5pb25SZXN1bHQ6AjgBQhcKFV9hY3RpdmVfZWRpdG9yX3Jlc3VsdCKjAQoPR3JlcFVuaW9uUmVzdWx0EioKBWNvdW50GAEgASgLMhkuYWdlbnQudjEuR3JlcENvdW50UmVzdWx0SAASKgoFZmlsZXMYAiABKAsyGS5hZ2VudC52MS5HcmVwRmlsZXNSZXN1bHRIABIuCgdjb250ZW50GAMgASgLMhsuYWdlbnQudjEuR3JlcENvbnRlbnRSZXN1bHRIAEIICgZyZXN1bHQigwIKD0dyZXBDb3VudFJlc3VsdBInCgZjb3VudHMYASADKAsyFy5hZ2VudC52MS5HcmVwRmlsZUNvdW50EhMKC3RvdGFsX2ZpbGVzGAIgASgFEhUKDXRvdGFsX21hdGNoZXMYAyABKAUSGAoQY2xpZW50X3RydW5jYXRlZBgEIAEoCBIZChFyaXBncmVwX3RydW5jYXRlZBgFIAEoCBIfChJoZWFkX2xpbWl0X2FwcGxpZWQYBiABKAVIAIgBARIbCg5vZmZzZXRfYXBwbGllZBgHIAEoBUgBiAEBQhUKE19oZWFkX2xpbWl0X2FwcGxpZWRCEQoPX29mZnNldF9hcHBsaWVkIiwKDUdyZXBGaWxlQ291bnQSDAoEZmlsZRgBIAEoCRINCgVjb3VudBgCIAEoBSLSAQoPR3JlcEZpbGVzUmVzdWx0Eg0KBWZpbGVzGAEgAygJEhMKC3RvdGFsX2ZpbGVzGAIgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYAyABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBCABKAgSHwoSaGVhZF9saW1pdF9hcHBsaWVkGAUgASgFSACIAQESGwoOb2Zmc2V0X2FwcGxpZWQYBiABKAVIAYgBAUIVChNfaGVhZF9saW1pdF9hcHBsaWVkQhEKD19vZmZzZXRfYXBwbGllZCKMAgoRR3JlcENvbnRlbnRSZXN1bHQSKAoHbWF0Y2hlcxgBIAMoCzIXLmFnZW50LnYxLkdyZXBGaWxlTWF0Y2gSEwoLdG90YWxfbGluZXMYAiABKAUSGwoTdG90YWxfbWF0Y2hlZF9saW5lcxgDIAEoBRIYChBjbGllbnRfdHJ1bmNhdGVkGAQgASgIEhkKEXJpcGdyZXBfdHJ1bmNhdGVkGAUgASgIEh8KEmhlYWRfbGltaXRfYXBwbGllZBgGIAEoBUgAiAEBEhsKDm9mZnNldF9hcHBsaWVkGAcgASgFSAGIAQFCFQoTX2hlYWRfbGltaXRfYXBwbGllZEIRCg9fb2Zmc2V0X2FwcGxpZWQiSgoNR3JlcEZpbGVNYXRjaBIMCgRmaWxlGAEgASgJEisKB21hdGNoZXMYAiADKAsyGi5hZ2VudC52MS5HcmVwQ29udGVudE1hdGNoImwKEEdyZXBDb250ZW50TWF0Y2gSEwoLbGluZV9udW1iZXIYASABKAUSDwoHY29udGVudBgCIAEoCRIZChFjb250ZW50X3RydW5jYXRlZBgDIAEoCBIXCg9pc19jb250ZXh0X2xpbmUYBCABKAgiHQoKR3JlcFN0cmVhbRIPCgdwYXR0ZXJuGAEgASgJIlYKDEdyZXBUb29sQ2FsbBIgCgRhcmdzGAEgASgLMhIuYWdlbnQudjEuR3JlcEFyZ3MSJAoGcmVzdWx0GAIgASgLMhQuYWdlbnQudjEuR3JlcFJlc3VsdCIeCgtHZXRCbG9iQXJncxIPCgdibG9iX2lkGAEgASgMIjUKDUdldEJsb2JSZXN1bHQSFgoJYmxvYl9kYXRhGAEgASgMSACIAQFCDAoKX2Jsb2JfZGF0YSIxCgtTZXRCbG9iQXJncxIPCgdibG9iX2lkGAEgASgMEhEKCWJsb2JfZGF0YRgCIAEoDCI+Cg1TZXRCbG9iUmVzdWx0EiMKBWVycm9yGAEgASgLMg8uYWdlbnQudjEuRXJyb3JIAIgBAUIICgZfZXJyb3IiywEKD0t2U2VydmVyTWVzc2FnZRIKCgJpZBgBIAEoDRIwCgxzcGFuX2NvbnRleHQYBCABKAsyFS5hZ2VudC52MS5TcGFuQ29udGV4dEgBiAEBEi4KDWdldF9ibG9iX2FyZ3MYAiABKAsyFS5hZ2VudC52MS5HZXRCbG9iQXJnc0gAEi4KDXNldF9ibG9iX2FyZ3MYAyABKAsyFS5hZ2VudC52MS5TZXRCbG9iQXJnc0gAQgkKB21lc3NhZ2VCDwoNX3NwYW5fY29udGV4dCKQAQoPS3ZDbGllbnRNZXNzYWdlEgoKAmlkGAEgASgNEjIKD2dldF9ibG9iX3Jlc3VsdBgCIAEoCzIXLmFnZW50LnYxLkdldEJsb2JSZXN1bHRIABIyCg9zZXRfYmxvYl9yZXN1bHQYAyABKAsyFy5hZ2VudC52MS5TZXRCbG9iUmVzdWx0SABCCQoHbWVzc2FnZSKtAQoGTHNBcmdzEgwKBHBhdGgYASABKAkSDgoGaWdub3JlGAIgAygJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRI0Cg5zYW5kYm94X3BvbGljeRgEIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIAIgBARIXCgp0aW1lb3V0X21zGAUgASgNSAGIAQFCEQoPX3NhbmRib3hfcG9saWN5Qg0KC190aW1lb3V0X21zIrIBCghMc1Jlc3VsdBImCgdzdWNjZXNzGAEgASgLMhMuYWdlbnQudjEuTHNTdWNjZXNzSAASIgoFZXJyb3IYAiABKAsyES5hZ2VudC52MS5Mc0Vycm9ySAASKAoIcmVqZWN0ZWQYAyABKAsyFC5hZ2VudC52MS5Mc1JlamVjdGVkSAASJgoHdGltZW91dBgEIAEoCzITLmFnZW50LnYxLkxzVGltZW91dEgAQggKBnJlc3VsdCJHCglMc1N1Y2Nlc3MSOgoTZGlyZWN0b3J5X3RyZWVfcm9vdBgBIAEoCzIdLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGUi9gIKE0xzRGlyZWN0b3J5VHJlZU5vZGUSEAoIYWJzX3BhdGgYASABKAkSNAoNY2hpbGRyZW5fZGlycxgCIAMoCzIdLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGUSOgoOY2hpbGRyZW5fZmlsZXMYAyADKAsyIi5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlX0ZpbGUSHwoXY2hpbGRyZW5fd2VyZV9wcm9jZXNzZWQYBCABKAgSZAodZnVsbF9zdWJ0cmVlX2V4dGVuc2lvbl9jb3VudHMYBSADKAsyPS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlLkZ1bGxTdWJ0cmVlRXh0ZW5zaW9uQ291bnRzRW50cnkSEQoJbnVtX2ZpbGVzGAYgASgFGkEKH0Z1bGxTdWJ0cmVlRXh0ZW5zaW9uQ291bnRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4ASJ6ChhMc0RpcmVjdG9yeVRyZWVOb2RlX0ZpbGUSDAoEbmFtZRgBIAEoCRI6ChF0ZXJtaW5hbF9tZXRhZGF0YRgCIAEoCzIaLmFnZW50LnYxLlRlcm1pbmFsTWV0YWRhdGFIAIgBAUIUChJfdGVybWluYWxfbWV0YWRhdGEiJgoHTHNFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIioKCkxzUmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiRwoJTHNUaW1lb3V0EjoKE2RpcmVjdG9yeV90cmVlX3Jvb3QYASABKAsyHS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlIvEBChBUZXJtaW5hbE1ldGFkYXRhEhAKA2N3ZBgBIAEoCUgAiAEBEjkKDWxhc3RfY29tbWFuZHMYAiADKAsyIi5hZ2VudC52MS5UZXJtaW5hbE1ldGFkYXRhX0NvbW1hbmQSHQoQbGFzdF9tb2RpZmllZF9tcxgDIAEoA0gBiAEBEkAKD2N1cnJlbnRfY29tbWFuZBgEIAEoCzIiLmFnZW50LnYxLlRlcm1pbmFsTWV0YWRhdGFfQ29tbWFuZEgCiAEBQgYKBF9jd2RCEwoRX2xhc3RfbW9kaWZpZWRfbXNCEgoQX2N1cnJlbnRfY29tbWFuZCKnAQoYVGVybWluYWxNZXRhZGF0YV9Db21tYW5kEg8KB2NvbW1hbmQYASABKAkSFgoJZXhpdF9jb2RlGAIgASgFSACIAQESGQoMdGltZXN0YW1wX21zGAMgASgDSAGIAQESGAoLZHVyYXRpb25fbXMYBCABKANIAogBAUIMCgpfZXhpdF9jb2RlQg8KDV90aW1lc3RhbXBfbXNCDgoMX2R1cmF0aW9uX21zIlAKCkxzVG9vbENhbGwSHgoEYXJncxgBIAEoCzIQLmFnZW50LnYxLkxzQXJncxIiCgZyZXN1bHQYAiABKAsyEi5hZ2VudC52MS5Mc1Jlc3VsdCLgAgoHTWNwQXJncxIMCgRuYW1lGAEgASgJEikKBGFyZ3MYAiADKAsyGy5hZ2VudC52MS5NY3BBcmdzLkFyZ3NFbnRyeRIUCgx0b29sX2NhbGxfaWQYAyABKAkSGwoTcHJvdmlkZXJfaWRlbnRpZmllchgEIAEoCRIRCgl0b29sX25hbWUYBSABKAkSPQoTc21hcnRfbW9kZV9hcHByb3ZhbBgGIAEoCzIbLmFnZW50LnYxLlNtYXJ0TW9kZUFwcHJvdmFsSACIAQESIAoYc21hcnRfbW9kZV9hcHByb3ZhbF9vbmx5GAcgASgIEhUKDXNraXBfYXBwcm92YWwYCCABKAgSGQoRc2VydmVyX2lkZW50aWZpZXIYCSABKAkaKwoJQXJnc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAFCFgoUX3NtYXJ0X21vZGVfYXBwcm92YWwi4wIKCU1jcFJlc3VsdBInCgdzdWNjZXNzGAEgASgLMhQuYWdlbnQudjEuTWNwU3VjY2Vzc0gAEiMKBWVycm9yGAIgASgLMhIuYWdlbnQudjEuTWNwRXJyb3JIABIpCghyZWplY3RlZBgDIAEoCzIVLmFnZW50LnYxLk1jcFJlamVjdGVkSAASOgoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyHS5hZ2VudC52MS5NY3BQZXJtaXNzaW9uRGVuaWVkSAASMwoOdG9vbF9ub3RfZm91bmQYBSABKAsyGS5hZ2VudC52MS5NY3BUb29sTm90Rm91bmRIABI3ChBzZXJ2ZXJfbm90X2ZvdW5kGAYgASgLMhsuYWdlbnQudjEuTWNwU2VydmVyTm90Rm91bmRIABIpCghhcHByb3ZlZBgHIAEoCzIVLmFnZW50LnYxLk1jcEFwcHJvdmVkSABCCAoGcmVzdWx0IjgKD01jcFRvb2xOb3RGb3VuZBIMCgRuYW1lGAEgASgJEhcKD2F2YWlsYWJsZV90b29scxgCIAMoCSJqCg5NY3BUZXh0Q29udGVudBIMCgR0ZXh0GAEgASgJEjYKD291dHB1dF9sb2NhdGlvbhgCIAEoCzIYLmFnZW50LnYxLk91dHB1dExvY2F0aW9uSACIAQFCEgoQX291dHB1dF9sb2NhdGlvbiIyCg9NY3BJbWFnZUNvbnRlbnQSDAoEZGF0YRgBIAEoDBIRCgltaW1lX3R5cGUYAiABKAkiewoYTWNwVG9vbFJlc3VsdENvbnRlbnRJdGVtEigKBHRleHQYASABKAsyGC5hZ2VudC52MS5NY3BUZXh0Q29udGVudEgAEioKBWltYWdlGAIgASgLMhkuYWdlbnQudjEuTWNwSW1hZ2VDb250ZW50SABCCQoHY29udGVudCJTCgpNY3BTdWNjZXNzEjMKB2NvbnRlbnQYASADKAsyIi5hZ2VudC52MS5NY3BUb29sUmVzdWx0Q29udGVudEl0ZW0SEAoIaXNfZXJyb3IYAiABKAgiGQoITWNwRXJyb3ISDQoFZXJyb3IYASABKAkiMgoLTWNwUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJEhMKC2lzX3JlYWRvbmx5GAIgASgIIjkKE01jcFBlcm1pc3Npb25EZW5pZWQSDQoFZXJyb3IYASABKAkSEwoLaXNfcmVhZG9ubHkYAiABKAgiOgoYTGlzdE1jcFJlc291cmNlc0V4ZWNBcmdzEhMKBnNlcnZlchgBIAEoCUgAiAEBQgkKB19zZXJ2ZXIixgEKGkxpc3RNY3BSZXNvdXJjZXNFeGVjUmVzdWx0EjQKB3N1Y2Nlc3MYASABKAsyIS5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzU3VjY2Vzc0gAEjAKBWVycm9yGAIgASgLMh8uYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0Vycm9ySAASNgoIcmVqZWN0ZWQYAyABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzUmVqZWN0ZWRIAEIICgZyZXN1bHQivQIKJkxpc3RNY3BSZXNvdXJjZXNFeGVjUmVzdWx0X01jcFJlc291cmNlEgsKA3VyaRgBIAEoCRIRCgRuYW1lGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARIWCgltaW1lX3R5cGUYBCABKAlIAogBARIOCgZzZXJ2ZXIYBSABKAkSVgoLYW5ub3RhdGlvbnMYBiADKAsyQS5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY1Jlc3VsdF9NY3BSZXNvdXJjZS5Bbm5vdGF0aW9uc0VudHJ5GjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX21pbWVfdHlwZSJeChdMaXN0TWNwUmVzb3VyY2VzU3VjY2VzcxJDCglyZXNvdXJjZXMYASADKAsyMC5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY1Jlc3VsdF9NY3BSZXNvdXJjZSImChVMaXN0TWNwUmVzb3VyY2VzRXJyb3ISDQoFZXJyb3IYASABKAkiKgoYTGlzdE1jcFJlc291cmNlc1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSLRAQoXUmVhZE1jcFJlc291cmNlRXhlY0FyZ3MSDgoGc2VydmVyGAEgASgJEgsKA3VyaRgCIAEoCRIaCg1kb3dubG9hZF9wYXRoGAMgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAQgASgJEj0KE3NtYXJ0X21vZGVfYXBwcm92YWwYBSABKAsyGy5hZ2VudC52MS5TbWFydE1vZGVBcHByb3ZhbEgBiAEBQhAKDl9kb3dubG9hZF9wYXRoQhYKFF9zbWFydF9tb2RlX2FwcHJvdmFsIvoBChlSZWFkTWNwUmVzb3VyY2VFeGVjUmVzdWx0EjMKB3N1Y2Nlc3MYASABKAsyIC5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VTdWNjZXNzSAASLwoFZXJyb3IYAiABKAsyHi5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VFcnJvckgAEjUKCHJlamVjdGVkGAMgASgLMiEuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlUmVqZWN0ZWRIABI2Cglub3RfZm91bmQYBCABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VOb3RGb3VuZEgAQggKBnJlc3VsdCKyAwoWUmVhZE1jcFJlc291cmNlU3VjY2VzcxILCgN1cmkYASABKAkSEQoEbmFtZRgCIAEoCUgBiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAKIAQESFgoJbWltZV90eXBlGAQgASgJSAOIAQESRgoLYW5ub3RhdGlvbnMYByADKAsyMS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VTdWNjZXNzLkFubm90YXRpb25zRW50cnkSGgoNZG93bmxvYWRfcGF0aBgIIAEoCUgEiAEBEg4KBHRleHQYBSABKAlIABIOCgRibG9iGAYgASgMSAASNgoPb3V0cHV0X2xvY2F0aW9uGAkgASgLMhguYWdlbnQudjEuT3V0cHV0TG9jYXRpb25IBYgBARoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCQoHY29udGVudEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX21pbWVfdHlwZUIQCg5fZG93bmxvYWRfcGF0aEISChBfb3V0cHV0X2xvY2F0aW9uIjIKFFJlYWRNY3BSZXNvdXJjZUVycm9yEgsKA3VyaRgBIAEoCRINCgVlcnJvchgCIAEoCSI2ChdSZWFkTWNwUmVzb3VyY2VSZWplY3RlZBILCgN1cmkYASABKAkSDgoGcmVhc29uGAIgASgJIiYKF1JlYWRNY3BSZXNvdXJjZU5vdEZvdW5kEgsKA3VyaRgBIAEoCSKyAQoRTWNwVG9vbERlZmluaXRpb24SDAoEbmFtZRgBIAEoCRIbChNwcm92aWRlcl9pZGVudGlmaWVyGAQgASgJEhEKCXRvb2xfbmFtZRgFIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIUCgxpbnB1dF9zY2hlbWEYAyABKAwSHgoRaW5wdXRfc2NoZW1hX2pzb24YBiABKAlIAIgBAUIUChJfaW5wdXRfc2NoZW1hX2pzb24iOgoITWNwVG9vbHMSLgoJbWNwX3Rvb2xzGAEgAygLMhsuYWdlbnQudjEuTWNwVG9vbERlZmluaXRpb24iVwoPTWNwSW5zdHJ1Y3Rpb25zEhMKC3NlcnZlcl9uYW1lGAEgASgJEhQKDGluc3RydWN0aW9ucxgCIAEoCRIZChFzZXJ2ZXJfaWRlbnRpZmllchgDIAEoCSL9AgoNTWNwRGVzY3JpcHRvchITCgtzZXJ2ZXJfbmFtZRgBIAEoCRIZChFzZXJ2ZXJfaWRlbnRpZmllchgCIAEoCRIYCgtmb2xkZXJfcGF0aBgDIAEoCUgAiAEBEiQKF3NlcnZlcl91c2VfaW5zdHJ1Y3Rpb25zGAQgASgJSAGIAQESKgoFdG9vbHMYBSADKAsyGy5hZ2VudC52MS5NY3BUb29sRGVzY3JpcHRvchITCgZwbHVnaW4YByABKAlIAogBARIYCgttYXJrZXRwbGFjZRgIIAEoCUgDiAEBEhkKDHBsdWdpbl9kYl9pZBgJIAEoCUgEiAEBEhsKDm1hcmtldHBsYWNlX2lkGAogASgJSAWIAQFCDgoMX2ZvbGRlcl9wYXRoQhoKGF9zZXJ2ZXJfdXNlX2luc3RydWN0aW9uc0IJCgdfcGx1Z2luQg4KDF9tYXJrZXRwbGFjZUIPCg1fcGx1Z2luX2RiX2lkQhEKD19tYXJrZXRwbGFjZV9pZCK4AQoRTWNwVG9vbERlc2NyaXB0b3ISEQoJdG9vbF9uYW1lGAEgASgJEhwKD2RlZmluaXRpb25fcGF0aBgCIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAGIAQESHgoRaW5wdXRfc2NoZW1hX2pzb24YBSABKAlIAogBAUISChBfZGVmaW5pdGlvbl9wYXRoQg4KDF9kZXNjcmlwdGlvbkIUChJfaW5wdXRfc2NoZW1hX2pzb24ieAoUTWNwRmlsZVN5c3RlbU9wdGlvbnMSDwoHZW5hYmxlZBgBIAEoCBIdChV3b3Jrc3BhY2VfcHJvamVjdF9kaXIYAiABKAkSMAoPbWNwX2Rlc2NyaXB0b3JzGAMgAygLMhcuYWdlbnQudjEuTWNwRGVzY3JpcHRvciKaAQoIUmVhZEFyZ3MSDAoEcGF0aBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkSEwoGb2Zmc2V0GAQgASgFSACIAQESEgoFbGltaXQYBSABKA1IAYgBARIaCg1lbmNvZGluZ19oaW50GAYgASgJSAKIAQFCCQoHX29mZnNldEIICgZfbGltaXRCEAoOX2VuY29kaW5nX2hpbnQiuAIKClJlYWRSZXN1bHQSKAoHc3VjY2VzcxgBIAEoCzIVLmFnZW50LnYxLlJlYWRTdWNjZXNzSAASJAoFZXJyb3IYAiABKAsyEy5hZ2VudC52MS5SZWFkRXJyb3JIABIqCghyZWplY3RlZBgDIAEoCzIWLmFnZW50LnYxLlJlYWRSZWplY3RlZEgAEjQKDmZpbGVfbm90X2ZvdW5kGAQgASgLMhouYWdlbnQudjEuUmVhZEZpbGVOb3RGb3VuZEgAEjsKEXBlcm1pc3Npb25fZGVuaWVkGAUgASgLMh4uYWdlbnQudjEuUmVhZFBlcm1pc3Npb25EZW5pZWRIABIxCgxpbnZhbGlkX2ZpbGUYBiABKAsyGS5hZ2VudC52MS5SZWFkSW52YWxpZEZpbGVIAEIICgZyZXN1bHQiygEKC1JlYWRTdWNjZXNzEgwKBHBhdGgYASABKAkSEwoLdG90YWxfbGluZXMYAyABKAUSEQoJZmlsZV9zaXplGAQgASgDEhEKCXRydW5jYXRlZBgGIAEoCBIbCg5vdXRwdXRfYmxvYl9pZBgHIAEoDEgBiAEBEhEKB2NvbnRlbnQYAiABKAlIABIOCgRkYXRhGAUgASgMSAASFQoNcmFuZ2VfYXBwbGllZBgIIAEoCEIICgZvdXRwdXRCEQoPX291dHB1dF9ibG9iX2lkIigKCVJlYWRFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIiwKDFJlYWRSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSIgChBSZWFkRmlsZU5vdEZvdW5kEgwKBHBhdGgYASABKAkiJAoUUmVhZFBlcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCSIvCg9SZWFkSW52YWxpZEZpbGUSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiXgoMUmVhZFRvb2xDYWxsEiQKBGFyZ3MYASABKAsyFi5hZ2VudC52MS5SZWFkVG9vbEFyZ3MSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuUmVhZFRvb2xSZXN1bHQiWgoMUmVhZFRvb2xBcmdzEgwKBHBhdGgYASABKAkSEwoGb2Zmc2V0GAIgASgFSACIAQESEgoFbGltaXQYAyABKAVIAYgBAUIJCgdfb2Zmc2V0QggKBl9saW1pdCJyCg5SZWFkVG9vbFJlc3VsdBIsCgdzdWNjZXNzGAEgASgLMhkuYWdlbnQudjEuUmVhZFRvb2xTdWNjZXNzSAASKAoFZXJyb3IYAiABKAsyFy5hZ2VudC52MS5SZWFkVG9vbEVycm9ySABCCAoGcmVzdWx0IjEKCVJlYWRSYW5nZRISCgpzdGFydF9saW5lGAEgASgNEhAKCGVuZF9saW5lGAIgASgNIo4CCg9SZWFkVG9vbFN1Y2Nlc3MSEAoIaXNfZW1wdHkYAiABKAgSFgoOZXhjZWVkZWRfbGltaXQYAyABKAgSEwoLdG90YWxfbGluZXMYBCABKA0SEQoJZmlsZV9zaXplGAUgASgNEgwKBHBhdGgYByABKAkSLAoKcmVhZF9yYW5nZRgIIAEoCzITLmFnZW50LnYxLlJlYWRSYW5nZUgBiAEBEhEKB2NvbnRlbnQYASABKAlIABIOCgRkYXRhGAYgASgMSAASFgoMZGF0YV9ibG9iX2lkGAkgASgMSAASGQoPY29udGVudF9ibG9iX2lkGAogASgMSABCCAoGb3V0cHV0Qg0KC19yZWFkX3JhbmdlIiYKDVJlYWRUb29sRXJyb3ISFQoNZXJyb3JfbWVzc2FnZRgBIAEoCSJqChBSZWNvcmRTY3JlZW5BcmdzEgwKBG1vZGUYASABKAUSFAoMdG9vbF9jYWxsX2lkGAIgASgJEh0KEHNhdmVfYXNfZmlsZW5hbWUYAyABKAlIAIgBAUITChFfc2F2ZV9hc19maWxlbmFtZSKJAgoSUmVjb3JkU2NyZWVuUmVzdWx0EjsKDXN0YXJ0X3N1Y2Nlc3MYASABKAsyIi5hZ2VudC52MS5SZWNvcmRTY3JlZW5TdGFydFN1Y2Nlc3NIABI5CgxzYXZlX3N1Y2Nlc3MYAiABKAsyIS5hZ2VudC52MS5SZWNvcmRTY3JlZW5TYXZlU3VjY2Vzc0gAEj8KD2Rpc2NhcmRfc3VjY2VzcxgDIAEoCzIkLmFnZW50LnYxLlJlY29yZFNjcmVlbkRpc2NhcmRTdWNjZXNzSAASMAoHZmFpbHVyZRgEIAEoCzIdLmFnZW50LnYxLlJlY29yZFNjcmVlbkZhaWx1cmVIAEIICgZyZXN1bHQiZwoYUmVjb3JkU2NyZWVuU3RhcnRTdWNjZXNzEiUKHXdhc19wcmlvcl9yZWNvcmRpbmdfY2FuY2VsbGVkGAEgASgIEiQKHHdhc19zYXZlX2FzX2ZpbGVuYW1lX2lnbm9yZWQYAiABKAgioAEKF1JlY29yZFNjcmVlblNhdmVTdWNjZXNzEgwKBHBhdGgYASABKAkSHQoVcmVjb3JkaW5nX2R1cmF0aW9uX21zGAIgASgDEjAKI3JlcXVlc3RlZF9maWxlX3BhdGhfcmVqZWN0ZWRfcmVhc29uGAMgASgFSACIAQFCJgokX3JlcXVlc3RlZF9maWxlX3BhdGhfcmVqZWN0ZWRfcmVhc29uIhwKGlJlY29yZFNjcmVlbkRpc2NhcmRTdWNjZXNzIiQKE1JlY29yZFNjcmVlbkZhaWx1cmUSDQoFZXJyb3IYASABKAkiNgoTQ3Vyc29yUGFja2FnZVByb21wdBIMCgRuYW1lGAEgASgJEhEKCWZpbGVfcGF0aBgCIAEoCSLiAQoNQ3Vyc29yUGFja2FnZRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2ZvbGRlcl9wYXRoGAMgASgJEg8KB2VuYWJsZWQYBCABKAgSGAoLcGFyc2VfZXJyb3IYBSABKAlIAIgBARIuCgdwcm9tcHRzGAYgAygLMh0uYWdlbnQudjEuQ3Vyc29yUGFja2FnZVByb21wdBIYChByZWFkbWVfZmlsZV9wYXRoGAcgASgJEhQKDHBhY2thZ2VfdHlwZRgIIAEoBUIOCgxfcGFyc2VfZXJyb3IiqwIKFlJlcG9zaXRvcnlJbmRleGluZ0luZm8SHwoXcmVsYXRpdmVfd29ya3NwYWNlX3BhdGgYASABKAkSEwoLcmVtb3RlX3VybHMYAiADKAkSFAoMcmVtb3RlX25hbWVzGAMgAygJEhEKCXJlcG9fbmFtZRgEIAEoCRISCgpyZXBvX293bmVyGAUgASgJEhIKCmlzX3RyYWNrZWQYBiABKAgSEAoIaXNfbG9jYWwYByABKAgSJgoZb3J0aG9nb25hbF90cmFuc2Zvcm1fc2VlZBgIIAEoAUgAiAEBEhUKDXdvcmtzcGFjZV91cmkYCSABKAkSGwoTcGF0aF9lbmNyeXB0aW9uX2tleRgKIAEoCUIcChpfb3J0aG9nb25hbF90cmFuc2Zvcm1fc2VlZCKsAgoSUmVxdWVzdENvbnRleHRBcmdzEh0KEG5vdGVzX3Nlc3Npb25faWQYAiABKAlIAIgBARIZCgx3b3Jrc3BhY2VfaWQYAyABKAlIAYgBARImChlyZWFkX29ubHlfcGlubmVkX3RyZWVfc2hhGAQgASgJSAKIAQESKAobcmVhZF9vbmx5X3BsdWdpbl9jYWNoZV9yb290GAUgASgJSAOIAQESFwoKdXNlX2NhY2hlZBgHIAEoCEgEiAEBQhMKEV9ub3Rlc19zZXNzaW9uX2lkQg8KDV93b3Jrc3BhY2VfaWRCHAoaX3JlYWRfb25seV9waW5uZWRfdHJlZV9zaGFCHgocX3JlYWRfb25seV9wbHVnaW5fY2FjaGVfcm9vdEINCgtfdXNlX2NhY2hlZCK6AQoUUmVxdWVzdENvbnRleHRSZXN1bHQSMgoHc3VjY2VzcxgBIAEoCzIfLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0U3VjY2Vzc0gAEi4KBWVycm9yGAIgASgLMh0uYWdlbnQudjEuUmVxdWVzdENvbnRleHRFcnJvckgAEjQKCHJlamVjdGVkGAMgASgLMiAuYWdlbnQudjEuUmVxdWVzdENvbnRleHRSZWplY3RlZEgAQggKBnJlc3VsdCKKAQoVUmVxdWVzdENvbnRleHRTdWNjZXNzEjEKD3JlcXVlc3RfY29udGV4dBgBIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0EiMKFnNlcnZlZF9mcm9tX2Rpc2tfY2FjaGUYAiABKAhIAIgBAUIZChdfc2VydmVkX2Zyb21fZGlza19jYWNoZSIkChNSZXF1ZXN0Q29udGV4dEVycm9yEg0KBWVycm9yGAEgASgJIigKFlJlcXVlc3RDb250ZXh0UmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIsIBCgpJbWFnZVByb3RvEgwKBGRhdGEYASABKAwSDAoEdXVpZBgCIAEoCRIMCgRwYXRoGAMgASgJEjEKCWRpbWVuc2lvbhgEIAEoCzIeLmFnZW50LnYxLkltYWdlUHJvdG9fRGltZW5zaW9uEiYKGXRhc2tfc3BlY2lmaWNfZGVzY3JpcHRpb24YBiABKAlIAIgBARIRCgltaW1lX3R5cGUYByABKAlCHAoaX3Rhc2tfc3BlY2lmaWNfZGVzY3JpcHRpb24iNQoUSW1hZ2VQcm90b19EaW1lbnNpb24SDQoFd2lkdGgYASABKAUSDgoGaGVpZ2h0GAIgASgFImgKC0dpdFJlcG9JbmZvEgwKBHBhdGgYASABKAkSDgoGc3RhdHVzGAIgASgJEhMKC2JyYW5jaF9uYW1lGAMgASgJEhcKCnJlbW90ZV91cmwYBCABKAlIAIgBAUINCgtfcmVtb3RlX3VybCKbAgoRUmVxdWVzdENvbnRleHRFbnYSEgoKb3NfdmVyc2lvbhgBIAEoCRIXCg93b3Jrc3BhY2VfcGF0aHMYAiADKAkSDQoFc2hlbGwYAyABKAkSFwoPc2FuZGJveF9lbmFibGVkGAUgASgIEhgKEHRlcm1pbmFsc19mb2xkZXIYByABKAkSIQoZYWdlbnRfc2hhcmVkX25vdGVzX2ZvbGRlchgIIAEoCRInCh9hZ2VudF9jb252ZXJzYXRpb25fbm90ZXNfZm9sZGVyGAkgASgJEhEKCXRpbWVfem9uZRgKIAEoCRIWCg5wcm9qZWN0X2ZvbGRlchgLIAEoCRIgChhhZ2VudF90cmFuc2NyaXB0c19mb2xkZXIYDCABKAkiPAoPRGVidWdNb2RlQ29uZmlnEhAKCGxvZ19wYXRoGAEgASgJEhcKD3NlcnZlcl9lbmRwb2ludBgCIAEoCSK0AQoPU2tpbGxEZXNjcmlwdG9yEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSEwoLZm9sZGVyX3BhdGgYAyABKAkSDwoHZW5hYmxlZBgEIAEoCBIYCgtwYXJzZV9lcnJvchgFIAEoCUgAiAEBEhgKEHJlYWRtZV9maWxlX3BhdGgYBiABKAkSFAoMcGFja2FnZV90eXBlGAcgASgFQg4KDF9wYXJzZV9lcnJvciJECgxTa2lsbE9wdGlvbnMSNAoRc2tpbGxfZGVzY3JpcHRvcnMYASADKAsyGS5hZ2VudC52MS5Ta2lsbERlc2NyaXB0b3Ii9ggKDlJlcXVlc3RDb250ZXh0EiMKBXJ1bGVzGAIgAygLMhQuYWdlbnQudjEuQ3Vyc29yUnVsZRIoCgNlbnYYBCABKAsyGy5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dEVudhI5Cg9yZXBvc2l0b3J5X2luZm8YBiADKAsyIC5hZ2VudC52MS5SZXBvc2l0b3J5SW5kZXhpbmdJbmZvEioKBXRvb2xzGAcgAygLMhsuYWdlbnQudjEuTWNwVG9vbERlZmluaXRpb24SJwoaY29udmVyc2F0aW9uX25vdGVzX2xpc3RpbmcYCCABKAlIAIgBARIhChRzaGFyZWRfbm90ZXNfbGlzdGluZxgJIAEoCUgBiAEBEigKCWdpdF9yZXBvcxgLIAMoCzIVLmFnZW50LnYxLkdpdFJlcG9JbmZvEjYKD3Byb2plY3RfbGF5b3V0cxgNIAMoCzIdLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGUSMwoQbWNwX2luc3RydWN0aW9ucxgOIAMoCzIZLmFnZW50LnYxLk1jcEluc3RydWN0aW9ucxI5ChFkZWJ1Z19tb2RlX2NvbmZpZxgPIAEoCzIZLmFnZW50LnYxLkRlYnVnTW9kZUNvbmZpZ0gCiAEBEhcKCmNsb3VkX3J1bGUYECABKAlIA4gBARIfChJ3ZWJfc2VhcmNoX2VuYWJsZWQYESABKAhIBIgBARIyCg1za2lsbF9vcHRpb25zGBIgASgLMhYuYWdlbnQudjEuU2tpbGxPcHRpb25zSAWIAQESLgohcmVwb3NpdG9yeV9pbmZvX3Nob3VsZF9xdWVyeV9wcm9kGBMgASgISAaIAQESQQoNZmlsZV9jb250ZW50cxgUIAMoCzIqLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0LkZpbGVDb250ZW50c0VudHJ5EiAKE3VzZXJfaW50ZW50X3N1bW1hcnkYFSABKAlIB4gBARIyChBjdXN0b21fc3ViYWdlbnRzGBYgAygLMhguYWdlbnQudjEuQ3VzdG9tU3ViYWdlbnQSRAoXbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnMYFyABKAsyHi5hZ2VudC52MS5NY3BGaWxlU3lzdGVtT3B0aW9uc0gIiAEBGjMKEUZpbGVDb250ZW50c0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCHQobX2NvbnZlcnNhdGlvbl9ub3Rlc19saXN0aW5nQhcKFV9zaGFyZWRfbm90ZXNfbGlzdGluZ0IUChJfZGVidWdfbW9kZV9jb25maWdCDQoLX2Nsb3VkX3J1bGVCFQoTX3dlYl9zZWFyY2hfZW5hYmxlZEIQCg5fc2tpbGxfb3B0aW9uc0IkCiJfcmVwb3NpdG9yeV9pbmZvX3Nob3VsZF9xdWVyeV9wcm9kQhYKFF91c2VyX2ludGVudF9zdW1tYXJ5QhoKGF9tY3BfZmlsZV9zeXN0ZW1fb3B0aW9ucyKyAgoNU2FuZGJveFBvbGljeRIMCgR0eXBlGAEgASgFEhsKDm5ldHdvcmtfYWNjZXNzGAIgASgISACIAQESIgoaYWRkaXRpb25hbF9yZWFkd3JpdGVfcGF0aHMYAyADKAkSIQoZYWRkaXRpb25hbF9yZWFkb25seV9wYXRocxgEIAMoCRIdChBkZWJ1Z19vdXRwdXRfZGlyGAUgASgJSAGIAQESHQoQYmxvY2tfZ2l0X3dyaXRlcxgGIAEoCEgCiAEBEh4KEWRpc2FibGVfdG1wX3dyaXRlGAcgASgISAOIAQFCEQoPX25ldHdvcmtfYWNjZXNzQhMKEV9kZWJ1Z19vdXRwdXRfZGlyQhMKEV9ibG9ja19naXRfd3JpdGVzQhQKEl9kaXNhYmxlX3RtcF93cml0ZSLvAQoNU2VsZWN0ZWRJbWFnZRIMCgR1dWlkGAIgASgJEgwKBHBhdGgYAyABKAkSNAoJZGltZW5zaW9uGAQgASgLMiEuYWdlbnQudjEuU2VsZWN0ZWRJbWFnZV9EaW1lbnNpb24SEQoJbWltZV90eXBlGAcgASgJEhEKB2Jsb2JfaWQYASABKAxIABIOCgRkYXRhGAggASgMSAASQwoRYmxvYl9pZF93aXRoX2RhdGEYCSABKAsyJi5hZ2VudC52MS5TZWxlY3RlZEltYWdlX0Jsb2JJZFdpdGhEYXRhSABCEQoPZGF0YV9vcl9ibG9iX2lkIj0KHFNlbGVjdGVkSW1hZ2VfQmxvYklkV2l0aERhdGESDwoHYmxvYl9pZBgBIAEoDBIMCgRkYXRhGAIgASgMIjgKF1NlbGVjdGVkSW1hZ2VfRGltZW5zaW9uEg0KBXdpZHRoGAEgASgFEg4KBmhlaWdodBgCIAEoBSJJChFFeHRyYUNvbnRleHRFbnRyeRIOCgRkYXRhGAEgASgJSAASEQoHYmxvYl9pZBgCIAEoDEgAQhEKD2RhdGFfb3JfYmxvYl9pZCJbCgxTZWxlY3RlZEZpbGUSDwoHY29udGVudBgBIAEoCRIMCgRwYXRoGAIgASgJEhoKDXJlbGF0aXZlX3BhdGgYAyABKAlIAIgBAUIQCg5fcmVsYXRpdmVfcGF0aCKEAQoVU2VsZWN0ZWRDb2RlU2VsZWN0aW9uEg8KB2NvbnRlbnQYASABKAkSDAoEcGF0aBgCIAEoCRIaCg1yZWxhdGl2ZV9wYXRoGAMgASgJSACIAQESHgoFcmFuZ2UYBCABKAsyDy5hZ2VudC52MS5SYW5nZUIQCg5fcmVsYXRpdmVfcGF0aCJdChBTZWxlY3RlZFRlcm1pbmFsEg8KB2NvbnRlbnQYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIRCgRwYXRoGAMgASgJSAGIAQFCCAoGX3RpdGxlQgcKBV9wYXRoIoYBChlTZWxlY3RlZFRlcm1pbmFsU2VsZWN0aW9uEg8KB2NvbnRlbnQYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIRCgRwYXRoGAMgASgJSAGIAQESHgoFcmFuZ2UYBCABKAsyDy5hZ2VudC52MS5SYW5nZUIICgZfdGl0bGVCBwoFX3BhdGgigwEKDlNlbGVjdGVkRm9sZGVyEgwKBHBhdGgYASABKAkSGgoNcmVsYXRpdmVfcGF0aBgCIAEoCUgAiAEBEjUKDmRpcmVjdG9yeV90cmVlGAMgASgLMh0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZUIQCg5fcmVsYXRpdmVfcGF0aCKfAQoUU2VsZWN0ZWRFeHRlcm5hbExpbmsSCwoDdXJsGAEgASgJEgwKBHV1aWQYAiABKAkSGAoLcGRmX2NvbnRlbnQYAyABKAlIAIgBARITCgZpc19wZGYYBCABKAhIAYgBARIVCghmaWxlbmFtZRgFIAEoCUgCiAEBQg4KDF9wZGZfY29udGVudEIJCgdfaXNfcGRmQgsKCV9maWxlbmFtZSI4ChJTZWxlY3RlZEN1cnNvclJ1bGUSIgoEcnVsZRgBIAEoCzIULmFnZW50LnYxLkN1cnNvclJ1bGUiIgoPU2VsZWN0ZWRHaXREaWZmEg8KB2NvbnRlbnQYASABKAkiMgofU2VsZWN0ZWRHaXREaWZmRnJvbUJyYW5jaFRvTWFpbhIPCgdjb250ZW50GAEgASgJImkKEVNlbGVjdGVkR2l0Q29tbWl0EgsKA3NoYRgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESDAoEZGlmZhgEIAEoCUIOCgxfZGVzY3JpcHRpb24i3QEKE1NlbGVjdGVkUHVsbFJlcXVlc3QSDgoGbnVtYmVyGAEgASgFEgsKA3VybBgCIAEoCRISCgV0aXRsZRgDIAEoCUgAiAEBEhMKC2ZvbGRlcl9wYXRoGAQgASgJEhkKDHN1bW1hcnlfanNvbhgFIAEoCUgBiAEBEhgKC2Rlc2NyaXB0aW9uGAYgASgJSAKIAQESFAoHYmxvYl9pZBgHIAEoDEgDiAEBQggKBl90aXRsZUIPCg1fc3VtbWFyeV9qc29uQg4KDF9kZXNjcmlwdGlvbkIKCghfYmxvYl9pZCKzAQoaU2VsZWN0ZWRHaXRQUkRpZmZTZWxlY3Rpb24SDgoGcHJfdXJsGAEgASgJEhEKCWZpbGVfcGF0aBgCIAEoCRISCgpzdGFydF9saW5lGAMgASgFEhAKCGVuZF9saW5lGAQgASgFEhkKDGRpZmZfY29udGVudBgFIAEoCUgAiAEBEhQKB2Jsb2JfaWQYBiABKAxIAYgBAUIPCg1fZGlmZl9jb250ZW50QgoKCF9ibG9iX2lkIjYKFVNlbGVjdGVkQ3Vyc29yQ29tbWFuZBIMCgRuYW1lGAEgASgJEg8KB2NvbnRlbnQYAiABKAkiNQoVU2VsZWN0ZWREb2N1bWVudGF0aW9uEg4KBmRvY19pZBgBIAEoCRIMCgRuYW1lGAIgASgJIjIKEFNlbGVjdGVkUGFzdENoYXQSEAoIYWdlbnRfaWQYASABKAkSDAoEbmFtZRgCIAEoCSKrAQoJQ2FsbEZyYW1lEhoKDWZ1bmN0aW9uX25hbWUYASABKAlIAIgBARIQCgN1cmwYAiABKAlIAYgBARIYCgtsaW5lX251bWJlchgDIAEoBUgCiAEBEhoKDWNvbHVtbl9udW1iZXIYBCABKAVIA4gBAUIQCg5fZnVuY3Rpb25fbmFtZUIGCgRfdXJsQg4KDF9saW5lX251bWJlckIQCg5fY29sdW1uX251bWJlciJoCgpTdGFja1RyYWNlEigKC2NhbGxfZnJhbWVzGAEgAygLMhMuYWdlbnQudjEuQ2FsbEZyYW1lEhwKD3Jhd19zdGFja190cmFjZRgCIAEoCUgAiAEBQhIKEF9yYXdfc3RhY2tfdHJhY2Ui5AEKElNlbGVjdGVkQ29uc29sZUxvZxIPCgdtZXNzYWdlGAEgASgJEhEKCXRpbWVzdGFtcBgCIAEoARINCgVsZXZlbBgDIAEoCRITCgtjbGllbnRfbmFtZRgEIAEoCRISCgpzZXNzaW9uX2lkGAUgASgJEi4KC3N0YWNrX3RyYWNlGAYgASgLMhQuYWdlbnQudjEuU3RhY2tUcmFjZUgAiAEBEh0KEG9iamVjdF9kYXRhX2pzb24YByABKAlIAYgBAUIOCgxfc3RhY2tfdHJhY2VCEwoRX29iamVjdF9kYXRhX2pzb24iugEKEVNlbGVjdGVkVUlFbGVtZW50Eg8KB2VsZW1lbnQYASABKAkSDQoFeHBhdGgYAiABKAkSFAoMdGV4dF9jb250ZW50GAMgASgJEg0KBWV4dHJhGAQgASgJEhYKCWNvbXBvbmVudBgFIAEoCUgAiAEBEiEKFGNvbXBvbmVudF9wcm9wc19qc29uGAYgASgJSAGIAQFCDAoKX2NvbXBvbmVudEIXChVfY29tcG9uZW50X3Byb3BzX2pzb24iIAoQU2VsZWN0ZWRTdWJhZ2VudBIMCgRuYW1lGAEgASgJIoIKCg9TZWxlY3RlZENvbnRleHQSMAoPc2VsZWN0ZWRfaW1hZ2VzGAEgAygLMhcuYWdlbnQudjEuU2VsZWN0ZWRJbWFnZRI8ChJpbnZvY2F0aW9uX2NvbnRleHQYAiABKAsyGy5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dEgAiAEBEhUKDWV4dHJhX2NvbnRleHQYAyADKAkSOgoVZXh0cmFfY29udGV4dF9lbnRyaWVzGBAgAygLMhsuYWdlbnQudjEuRXh0cmFDb250ZXh0RW50cnkSJQoFZmlsZXMYBCADKAsyFi5hZ2VudC52MS5TZWxlY3RlZEZpbGUSOAoPY29kZV9zZWxlY3Rpb25zGAUgAygLMh8uYWdlbnQudjEuU2VsZWN0ZWRDb2RlU2VsZWN0aW9uEi0KCXRlcm1pbmFscxgGIAMoCzIaLmFnZW50LnYxLlNlbGVjdGVkVGVybWluYWwSQAoTdGVybWluYWxfc2VsZWN0aW9ucxgHIAMoCzIjLmFnZW50LnYxLlNlbGVjdGVkVGVybWluYWxTZWxlY3Rpb24SKQoHZm9sZGVycxgIIAMoCzIYLmFnZW50LnYxLlNlbGVjdGVkRm9sZGVyEjYKDmV4dGVybmFsX2xpbmtzGAkgAygLMh4uYWdlbnQudjEuU2VsZWN0ZWRFeHRlcm5hbExpbmsSMgoMY3Vyc29yX3J1bGVzGAogAygLMhwuYWdlbnQudjEuU2VsZWN0ZWRDdXJzb3JSdWxlEjAKCGdpdF9kaWZmGBIgASgLMhkuYWdlbnQudjEuU2VsZWN0ZWRHaXREaWZmSAGIAQESVAocZ2l0X2RpZmZfZnJvbV9icmFuY2hfdG9fbWFpbhgLIAEoCzIpLmFnZW50LnYxLlNlbGVjdGVkR2l0RGlmZkZyb21CcmFuY2hUb01haW5IAogBARI4Cg9jdXJzb3JfY29tbWFuZHMYDCADKAsyHy5hZ2VudC52MS5TZWxlY3RlZEN1cnNvckNvbW1hbmQSNwoOZG9jdW1lbnRhdGlvbnMYDSADKAsyHy5hZ2VudC52MS5TZWxlY3RlZERvY3VtZW50YXRpb24SMAoLdWlfZWxlbWVudHMYDiADKAsyGy5hZ2VudC52MS5TZWxlY3RlZFVJRWxlbWVudBIyCgxjb25zb2xlX2xvZ3MYDyADKAsyHC5hZ2VudC52MS5TZWxlY3RlZENvbnNvbGVMb2cSMAoLZ2l0X2NvbW1pdHMYESADKAsyGy5hZ2VudC52MS5TZWxlY3RlZEdpdENvbW1pdBIuCgpwYXN0X2NoYXRzGBMgAygLMhouYWdlbnQudjEuU2VsZWN0ZWRQYXN0Q2hhdBJEChZnaXRfcHJfZGlmZl9zZWxlY3Rpb25zGBQgAygLMiQuYWdlbnQudjEuU2VsZWN0ZWRHaXRQUkRpZmZTZWxlY3Rpb24SPQoWc2VsZWN0ZWRfcHVsbF9yZXF1ZXN0cxgVIAMoCzIdLmFnZW50LnYxLlNlbGVjdGVkUHVsbFJlcXVlc3QSNgoSc2VsZWN0ZWRfc3ViYWdlbnRzGBYgAygLMhouYWdlbnQudjEuU2VsZWN0ZWRTdWJhZ2VudEIVChNfaW52b2NhdGlvbl9jb250ZXh0QgsKCV9naXRfZGlmZkIfCh1fZ2l0X2RpZmZfZnJvbV9icmFuY2hfdG9fbWFpbiLlAQoRSW52b2NhdGlvbkNvbnRleHQSPwoMc2xhY2tfdGhyZWFkGAEgASgLMicuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfU2xhY2tUaHJlYWRIABI5CglnaXRodWJfcHIYAiABKAsyJC5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9HaXRodWJQUkgAEjkKCWlkZV9zdGF0ZRgDIAEoCzIkLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlSAASEQoHYmxvYl9pZBgKIAEoDEgAQgYKBGRhdGEiuwEKHUludm9jYXRpb25Db250ZXh0X1NsYWNrVGhyZWFkEg4KBnRocmVhZBgBIAEoCRIZCgxjaGFubmVsX25hbWUYAiABKAlIAIgBARIcCg9jaGFubmVsX3B1cnBvc2UYAyABKAlIAYgBARIaCg1jaGFubmVsX3RvcGljGAQgASgJSAKIAQFCDwoNX2NoYW5uZWxfbmFtZUISChBfY2hhbm5lbF9wdXJwb3NlQhAKDl9jaGFubmVsX3RvcGljInwKGkludm9jYXRpb25Db250ZXh0X0dpdGh1YlBSEg0KBXRpdGxlGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhAKCGNvbW1lbnRzGAMgASgJEhgKC2NpX2ZhaWx1cmVzGAQgASgJSACIAQFCDgoMX2NpX2ZhaWx1cmVzIv4BChpJbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZRJACg12aXNpYmxlX2ZpbGVzGAEgAygLMikuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfRmlsZRJIChVyZWNlbnRseV92aWV3ZWRfZmlsZXMYAiADKAsyKS5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9GaWxlElQKFGN1cnJlbnRseV92aWV3ZWRfcHJzGAMgAygLMjYuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfVmlld2VkUHVsbFJlcXVlc3QijgIKH0ludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX0ZpbGUSDAoEcGF0aBgBIAEoCRIaCg1yZWxhdGl2ZV9wYXRoGAIgASgJSACIAQESVgoPY3Vyc29yX3Bvc2l0aW9uGAMgASgLMjguYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfRmlsZV9DdXJzb3JQb3NpdGlvbkgBiAEBEhMKC3RvdGFsX2xpbmVzGAQgASgFEhsKDmFjdGl2ZV9jb21tYW5kGAUgASgJSAKIAQFCEAoOX3JlbGF0aXZlX3BhdGhCEgoQX2N1cnNvcl9wb3NpdGlvbkIRCg9fYWN0aXZlX2NvbW1hbmQiTAouSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfRmlsZV9DdXJzb3JQb3NpdGlvbhIMCgRsaW5lGAEgASgFEgwKBHRleHQYAiABKAki6QEKLEludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX1ZpZXdlZFB1bGxSZXF1ZXN0Eg4KBm51bWJlchgBIAEoBRILCgN1cmwYAiABKAkSEgoFdGl0bGUYAyABKAlIAIgBARIYCgtmb2xkZXJfcGF0aBgEIAEoCUgBiAEBEhkKDHN1bW1hcnlfanNvbhgFIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAYgASgJSAOIAQFCCAoGX3RpdGxlQg4KDF9mb2xkZXJfcGF0aEIPCg1fc3VtbWFyeV9qc29uQg4KDF9kZXNjcmlwdGlvbiJIChZTZXR1cFZtRW52aXJvbm1lbnRBcmdzEhcKD2luc3RhbGxfY29tbWFuZBgCIAEoCRIVCg1zdGFydF9jb21tYW5kGAMgASgJIlwKGFNldHVwVm1FbnZpcm9ubWVudFJlc3VsdBI2CgdzdWNjZXNzGAEgASgLMiMuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50U3VjY2Vzc0gAQggKBnJlc3VsdCIbChlTZXR1cFZtRW52aXJvbm1lbnRTdWNjZXNzIoABChpTZXR1cFZtRW52aXJvbm1lbnRUb29sQ2FsbBIuCgRhcmdzGAEgASgLMiAuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50QXJncxIyCgZyZXN1bHQYAiABKAsyIi5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRSZXN1bHQiyQIKGVNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHQSFgoOcGFyc2luZ19mYWlsZWQYASABKAgSUgoTZXhlY3V0YWJsZV9jb21tYW5kcxgCIAMoCzI1LmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfRXhlY3V0YWJsZUNvbW1hbmQSFQoNaGFzX3JlZGlyZWN0cxgDIAEoCBIgChhoYXNfY29tbWFuZF9zdWJzdGl0dXRpb24YBCABKAgSJwoaYWxsX3JlZGlyZWN0c19hcmVfZGV2X251bGwYBSABKAhIAIgBARI/CglyZWRpcmVjdHMYBiADKAsyLC5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X1JlZGlyZWN0Qh0KG19hbGxfcmVkaXJlY3RzX2FyZV9kZXZfbnVsbCJNCi5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X0V4ZWN1dGFibGVDb21tYW5kQXJnEgwKBHR5cGUYASABKAkSDQoFdmFsdWUYAiABKAkilgEKK1NoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfRXhlY3V0YWJsZUNvbW1hbmQSDAoEbmFtZRgBIAEoCRJGCgRhcmdzGAIgAygLMjguYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9FeGVjdXRhYmxlQ29tbWFuZEFyZxIRCglmdWxsX3RleHQYAyABKAki+gcKCVNoZWxsQXJncxIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEg8KB3RpbWVvdXQYAyABKAUSFAoMdG9vbF9jYWxsX2lkGAQgASgJEhcKD3NpbXBsZV9jb21tYW5kcxgFIAMoCRIaChJoYXNfaW5wdXRfcmVkaXJlY3QYBiABKAgSGwoTaGFzX291dHB1dF9yZWRpcmVjdBgHIAEoCBI7Cg5wYXJzaW5nX3Jlc3VsdBgIIAEoCzIjLmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHQSPgoYcmVxdWVzdGVkX3NhbmRib3hfcG9saWN5GAkgASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgAiAEBEigKG2ZpbGVfb3V0cHV0X3RocmVzaG9sZF9ieXRlcxgKIAEoBEgBiAEBEhUKDWlzX2JhY2tncm91bmQYCyABKAgSFQoNc2tpcF9hcHByb3ZhbBgMIAEoCBIYChB0aW1lb3V0X2JlaGF2aW9yGA0gASgFEhkKDGhhcmRfdGltZW91dBgOIAEoBUgCiAEBEhgKC2Rlc2NyaXB0aW9uGA8gASgJSAOIAQESQQoRY2xhc3NpZmllcl9yZXN1bHQYECABKAsyIS5hZ2VudC52MS5Db21tYW5kQ2xhc3NpZmllclJlc3VsdEgEiAEBEhMKC2Nsb3NlX3N0ZGluGBEgASgIEkkKE291dHB1dF9ub3RpZmljYXRpb24YEiABKAsyJy5hZ2VudC52MS5TaGVsbE91dHB1dE5vdGlmaWNhdGlvbkNvbmZpZ0gFiAEBEj0KE3NtYXJ0X21vZGVfYXBwcm92YWwYEyABKAsyGy5hZ2VudC52MS5TbWFydE1vZGVBcHByb3ZhbEgGiAEBEk4KGWhvb2tfYXBwcm92YWxfcmVxdWlyZW1lbnQYFCABKAsyJi5hZ2VudC52MS5TaGVsbEhvb2tBcHByb3ZhbFJlcXVpcmVtZW50SAeIAQESHAoPY29udmVyc2F0aW9uX2lkGBUgASgJSAiIAQFCGwoZX3JlcXVlc3RlZF9zYW5kYm94X3BvbGljeUIeChxfZmlsZV9vdXRwdXRfdGhyZXNob2xkX2J5dGVzQg8KDV9oYXJkX3RpbWVvdXRCDgoMX2Rlc2NyaXB0aW9uQhQKEl9jbGFzc2lmaWVyX3Jlc3VsdEIWChRfb3V0cHV0X25vdGlmaWNhdGlvbkIWChRfc21hcnRfbW9kZV9hcHByb3ZhbEIcChpfaG9va19hcHByb3ZhbF9yZXF1aXJlbWVudEISChBfY29udmVyc2F0aW9uX2lkIvoDCgtTaGVsbFJlc3VsdBI0Cg5zYW5kYm94X3BvbGljeRhlIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIAYgBARIaCg1pc19iYWNrZ3JvdW5kGGYgASgISAKIAQESHQoQdGVybWluYWxzX2ZvbGRlchhnIAEoCUgDiAEBEhAKA3BpZBhoIAEoDUgEiAEBEikKB3N1Y2Nlc3MYASABKAsyFi5hZ2VudC52MS5TaGVsbFN1Y2Nlc3NIABIpCgdmYWlsdXJlGAIgASgLMhYuYWdlbnQudjEuU2hlbGxGYWlsdXJlSAASKQoHdGltZW91dBgDIAEoCzIWLmFnZW50LnYxLlNoZWxsVGltZW91dEgAEisKCHJlamVjdGVkGAQgASgLMhcuYWdlbnQudjEuU2hlbGxSZWplY3RlZEgAEjAKC3NwYXduX2Vycm9yGAUgASgLMhkuYWdlbnQudjEuU2hlbGxTcGF3bkVycm9ySAASPAoRcGVybWlzc2lvbl9kZW5pZWQYByABKAsyHy5hZ2VudC52MS5TaGVsbFBlcm1pc3Npb25EZW5pZWRIAEIICgZyZXN1bHRCEQoPX3NhbmRib3hfcG9saWN5QhAKDl9pc19iYWNrZ3JvdW5kQhMKEV90ZXJtaW5hbHNfZm9sZGVyQgYKBF9waWQiIQoRU2hlbGxTdHJlYW1TdGRvdXQSDAoEZGF0YRgBIAEoCSIhChFTaGVsbFN0cmVhbVN0ZGVychIMCgRkYXRhGAEgASgJIvcBCg9TaGVsbFN0cmVhbUV4aXQSDAoEY29kZRgBIAEoDRILCgNjd2QYAiABKAkSNgoPb3V0cHV0X2xvY2F0aW9uGAMgASgLMhguYWdlbnQudjEuT3V0cHV0TG9jYXRpb25IAIgBARIPCgdhYm9ydGVkGAQgASgIEhkKDGFib3J0X3JlYXNvbhgFIAEoBUgBiAEBEiQKF2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zGAYgASgFSAKIAQFCEgoQX291dHB1dF9sb2NhdGlvbkIPCg1fYWJvcnRfcmVhc29uQhoKGF9sb2NhbF9leGVjdXRpb25fdGltZV9tcyJbChBTaGVsbFN0cmVhbVN0YXJ0EjQKDnNhbmRib3hfcG9saWN5GAEgASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgAiAEBQhEKD19zYW5kYm94X3BvbGljeSLaAQoXU2hlbGxTdHJlYW1CYWNrZ3JvdW5kZWQSEAoIc2hlbGxfaWQYASABKA0SDwoHY29tbWFuZBgCIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgDIAEoCRIQCgNwaWQYBCABKA1IAIgBARIXCgptc190b193YWl0GAUgASgFSAGIAQESNAoGcmVhc29uGAYgASgOMh8uYWdlbnQudjEuU2hlbGxCYWNrZ3JvdW5kUmVhc29uSAKIAQFCBgoEX3BpZEINCgtfbXNfdG9fd2FpdEIJCgdfcmVhc29uIqwDCgtTaGVsbFN0cmVhbRItCgZzdGRvdXQYASABKAsyGy5hZ2VudC52MS5TaGVsbFN0cmVhbVN0ZG91dEgAEi0KBnN0ZGVychgCIAEoCzIbLmFnZW50LnYxLlNoZWxsU3RyZWFtU3RkZXJySAASKQoEZXhpdBgDIAEoCzIZLmFnZW50LnYxLlNoZWxsU3RyZWFtRXhpdEgAEisKBXN0YXJ0GAQgASgLMhouYWdlbnQudjEuU2hlbGxTdHJlYW1TdGFydEgAEisKCHJlamVjdGVkGAUgASgLMhcuYWdlbnQudjEuU2hlbGxSZWplY3RlZEgAEjwKEXBlcm1pc3Npb25fZGVuaWVkGAYgASgLMh8uYWdlbnQudjEuU2hlbGxQZXJtaXNzaW9uRGVuaWVkSAASOQoMYmFja2dyb3VuZGVkGAcgASgLMiEuYWdlbnQudjEuU2hlbGxTdHJlYW1CYWNrZ3JvdW5kZWRIABI4Cgxob29rX2NvbnRleHQYCCABKAsyIC5hZ2VudC52MS5TaGVsbFN0cmVhbUhvb2tDb250ZXh0SABCBwoFZXZlbnQiSwoOT3V0cHV0TG9jYXRpb24SEQoJZmlsZV9wYXRoGAEgASgJEhIKCnNpemVfYnl0ZXMYAiABKAMSEgoKbGluZV9jb3VudBgDIAEoAyKYBQoMU2hlbGxTdWNjZXNzEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSEQoJZXhpdF9jb2RlGAMgASgFEg4KBnNpZ25hbBgEIAEoCRIOCgZzdGRvdXQYBSABKAkSDgoGc3RkZXJyGAYgASgJEhYKDmV4ZWN1dGlvbl90aW1lGAcgASgFEjYKD291dHB1dF9sb2NhdGlvbhgIIAEoCzIYLmFnZW50LnYxLk91dHB1dExvY2F0aW9uSACIAQESFQoIc2hlbGxfaWQYCSABKA1IAYgBARIfChJpbnRlcmxlYXZlZF9vdXRwdXQYCiABKAlIAogBARIQCgNwaWQYCyABKA1IA4gBARIXCgptc190b193YWl0GAwgASgFSASIAQESJAoXbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMYDSABKAVIBYgBARI/ChFiYWNrZ3JvdW5kX3JlYXNvbhgOIAEoDjIfLmFnZW50LnYxLlNoZWxsQmFja2dyb3VuZFJlYXNvbkgGiAEBEhgKC291dHB1dF9oZWFkGA8gASgJSAeIAQESGAoLb3V0cHV0X3RhaWwYECABKAlICIgBARIZCgxlbGlkZWRfY2hhcnMYESABKA1ICYgBAUISChBfb3V0cHV0X2xvY2F0aW9uQgsKCV9zaGVsbF9pZEIVChNfaW50ZXJsZWF2ZWRfb3V0cHV0QgYKBF9waWRCDQoLX21zX3RvX3dhaXRCGgoYX2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zQhQKEl9iYWNrZ3JvdW5kX3JlYXNvbkIOCgxfb3V0cHV0X2hlYWRCDgoMX291dHB1dF90YWlsQg8KDV9lbGlkZWRfY2hhcnMimAQKDFNoZWxsRmFpbHVyZRIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEhEKCWV4aXRfY29kZRgDIAEoBRIOCgZzaWduYWwYBCABKAkSDgoGc3Rkb3V0GAUgASgJEg4KBnN0ZGVychgGIAEoCRIWCg5leGVjdXRpb25fdGltZRgHIAEoBRI2Cg9vdXRwdXRfbG9jYXRpb24YCCABKAsyGC5hZ2VudC52MS5PdXRwdXRMb2NhdGlvbkgAiAEBEh8KEmludGVybGVhdmVkX291dHB1dBgJIAEoCUgBiAEBEhkKDGFib3J0X3JlYXNvbhgKIAEoBUgCiAEBEg8KB2Fib3J0ZWQYCyABKAgSJAoXbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMYDCABKAVIA4gBARIYCgtvdXRwdXRfaGVhZBgNIAEoCUgEiAEBEhgKC291dHB1dF90YWlsGA4gASgJSAWIAQESGQoMZWxpZGVkX2NoYXJzGA8gASgNSAaIAQFCEgoQX291dHB1dF9sb2NhdGlvbkIVChNfaW50ZXJsZWF2ZWRfb3V0cHV0Qg8KDV9hYm9ydF9yZWFzb25CGgoYX2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zQg4KDF9vdXRwdXRfaGVhZEIOCgxfb3V0cHV0X3RhaWxCDwoNX2VsaWRlZF9jaGFycyJOCgxTaGVsbFRpbWVvdXQSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRISCgp0aW1lb3V0X21zGAMgASgFImAKDVNoZWxsUmVqZWN0ZWQSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRIOCgZyZWFzb24YAyABKAkSEwoLaXNfcmVhZG9ubHkYBCABKAgiZwoVU2hlbGxQZXJtaXNzaW9uRGVuaWVkEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSDQoFZXJyb3IYAyABKAkSEwoLaXNfcmVhZG9ubHkYBCABKAgiTAoPU2hlbGxTcGF3bkVycm9yEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSDQoFZXJyb3IYAyABKAkiQAoSU2hlbGxQYXJ0aWFsUmVzdWx0EhQKDHN0ZG91dF9kZWx0YRgBIAEoCRIUCgxzdGRlcnJfZGVsdGEYAiABKAkiWQoNU2hlbGxUb29sQ2FsbBIhCgRhcmdzGAEgASgLMhMuYWdlbnQudjEuU2hlbGxBcmdzEiUKBnJlc3VsdBgCIAEoCzIVLmFnZW50LnYxLlNoZWxsUmVzdWx0IisKGFNoZWxsVG9vbENhbGxTdGRvdXREZWx0YRIPCgdjb250ZW50GAEgASgJIisKGFNoZWxsVG9vbENhbGxTdGRlcnJEZWx0YRIPCgdjb250ZW50GAEgASgJIokBChJTaGVsbFRvb2xDYWxsRGVsdGESNAoGc3Rkb3V0GAEgASgLMiIuYWdlbnQudjEuU2hlbGxUb29sQ2FsbFN0ZG91dERlbHRhSAASNAoGc3RkZXJyGAIgASgLMiIuYWdlbnQudjEuU2hlbGxUb29sQ2FsbFN0ZGVyckRlbHRhSABCBwoFZGVsdGEi7QEKDFN1YmFnZW50VHlwZRI4Cgt1bnNwZWNpZmllZBgBIAEoCzIhLmFnZW50LnYxLlN1YmFnZW50VHlwZVVuc3BlY2lmaWVkSAASOQoMY29tcHV0ZXJfdXNlGAIgASgLMiEuYWdlbnQudjEuU3ViYWdlbnRUeXBlQ29tcHV0ZXJVc2VIABIuCgZjdXN0b20YAyABKAsyHC5hZ2VudC52MS5TdWJhZ2VudFR5cGVDdXN0b21IABIwCgdleHBsb3JlGAQgASgLMh0uYWdlbnQudjEuU3ViYWdlbnRUeXBlRXhwbG9yZUgAQgYKBHR5cGUiGQoXU3ViYWdlbnRUeXBlVW5zcGVjaWZpZWQiGQoXU3ViYWdlbnRUeXBlQ29tcHV0ZXJVc2UiFQoTU3ViYWdlbnRUeXBlRXhwbG9yZSIiChJTdWJhZ2VudFR5cGVDdXN0b20SDAoEbmFtZRgBIAEoCSKNAQoOQ3VzdG9tU3ViYWdlbnQSEQoJZnVsbF9wYXRoGAEgASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDQoFdG9vbHMYBCADKAkSDQoFbW9kZWwYBSABKAkSDgoGcHJvbXB0GAYgASgJEhcKD3Blcm1pc3Npb25fbW9kZRgHIAEoBSJoCg5Td2l0Y2hNb2RlQXJncxIWCg50YXJnZXRfbW9kZV9pZBgBIAEoCRIYCgtleHBsYW5hdGlvbhgCIAEoCUgAiAEBEhQKDHRvb2xfY2FsbF9pZBgDIAEoCUIOCgxfZXhwbGFuYXRpb24iqgEKEFN3aXRjaE1vZGVSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlN3aXRjaE1vZGVTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5Td2l0Y2hNb2RlRXJyb3JIABIwCghyZWplY3RlZBgDIAEoCzIcLmFnZW50LnYxLlN3aXRjaE1vZGVSZWplY3RlZEgAQggKBnJlc3VsdCI9ChFTd2l0Y2hNb2RlU3VjY2VzcxIUCgxmcm9tX21vZGVfaWQYASABKAkSEgoKdG9fbW9kZV9pZBgCIAEoCSIgCg9Td2l0Y2hNb2RlRXJyb3ISDQoFZXJyb3IYASABKAkiJAoSU3dpdGNoTW9kZVJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSJoChJTd2l0Y2hNb2RlVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlN3aXRjaE1vZGVBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlN3aXRjaE1vZGVSZXN1bHQiQAoWU3dpdGNoTW9kZVJlcXVlc3RRdWVyeRImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuU3dpdGNoTW9kZUFyZ3MiqQEKGVN3aXRjaE1vZGVSZXF1ZXN0UmVzcG9uc2USQAoIYXBwcm92ZWQYASABKAsyLC5hZ2VudC52MS5Td2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkSAASQAoIcmVqZWN0ZWQYAiABKAsyLC5hZ2VudC52MS5Td2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkSABCCAoGcmVzdWx0IiQKIlN3aXRjaE1vZGVSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWQiNAoiU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZV9SZWplY3RlZBIOCgZyZWFzb24YASABKAkidQoIVG9kb0l0ZW0SCgoCaWQYASABKAkSDwoHY29udGVudBgCIAEoCRIOCgZzdGF0dXMYAyABKAUSEgoKY3JlYXRlZF9hdBgEIAEoAxISCgp1cGRhdGVkX2F0GAUgASgDEhQKDGRlcGVuZGVuY2llcxgGIAMoCSJrChNVcGRhdGVUb2Rvc1Rvb2xDYWxsEicKBGFyZ3MYASABKAsyGS5hZ2VudC52MS5VcGRhdGVUb2Rvc0FyZ3MSKwoGcmVzdWx0GAIgASgLMhsuYWdlbnQudjEuVXBkYXRlVG9kb3NSZXN1bHQiQwoPVXBkYXRlVG9kb3NBcmdzEiEKBXRvZG9zGAEgAygLMhIuYWdlbnQudjEuVG9kb0l0ZW0SDQoFbWVyZ2UYAiABKAgiewoRVXBkYXRlVG9kb3NSZXN1bHQSLwoHc3VjY2VzcxgBIAEoCzIcLmFnZW50LnYxLlVwZGF0ZVRvZG9zU3VjY2Vzc0gAEisKBWVycm9yGAIgASgLMhouYWdlbnQudjEuVXBkYXRlVG9kb3NFcnJvckgAQggKBnJlc3VsdCJfChJVcGRhdGVUb2Rvc1N1Y2Nlc3MSIQoFdG9kb3MYASADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRITCgt0b3RhbF9jb3VudBgCIAEoBRIRCgl3YXNfbWVyZ2UYAyABKAgiIQoQVXBkYXRlVG9kb3NFcnJvchINCgVlcnJvchgBIAEoCSJlChFSZWFkVG9kb3NUb29sQ2FsbBIlCgRhcmdzGAEgASgLMhcuYWdlbnQudjEuUmVhZFRvZG9zQXJncxIpCgZyZXN1bHQYAiABKAsyGS5hZ2VudC52MS5SZWFkVG9kb3NSZXN1bHQiOQoNUmVhZFRvZG9zQXJncxIVCg1zdGF0dXNfZmlsdGVyGAEgAygFEhEKCWlkX2ZpbHRlchgCIAMoCSJ1Cg9SZWFkVG9kb3NSZXN1bHQSLQoHc3VjY2VzcxgBIAEoCzIaLmFnZW50LnYxLlJlYWRUb2Rvc1N1Y2Nlc3NIABIpCgVlcnJvchgCIAEoCzIYLmFnZW50LnYxLlJlYWRUb2Rvc0Vycm9ySABCCAoGcmVzdWx0IkoKEFJlYWRUb2Rvc1N1Y2Nlc3MSIQoFdG9kb3MYASADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRITCgt0b3RhbF9jb3VudBgCIAEoBSIfCg5SZWFkVG9kb3NFcnJvchINCgVlcnJvchgBIAEoCSJLCgVSYW5nZRIhCgVzdGFydBgBIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uEh8KA2VuZBgCIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uIigKCFBvc2l0aW9uEgwKBGxpbmUYASABKA0SDgoGY29sdW1uGAIgASgNIhgKBUVycm9yEg8KB21lc3NhZ2UYASABKAkiOgoNV2ViU2VhcmNoQXJncxITCgtzZWFyY2hfdGVybRgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkipgEKD1dlYlNlYXJjaFJlc3VsdBItCgdzdWNjZXNzGAEgASgLMhouYWdlbnQudjEuV2ViU2VhcmNoU3VjY2Vzc0gAEikKBWVycm9yGAIgASgLMhguYWdlbnQudjEuV2ViU2VhcmNoRXJyb3JIABIvCghyZWplY3RlZBgDIAEoCzIbLmFnZW50LnYxLldlYlNlYXJjaFJlamVjdGVkSABCCAoGcmVzdWx0IkQKEFdlYlNlYXJjaFN1Y2Nlc3MSMAoKcmVmZXJlbmNlcxgBIAMoCzIcLmFnZW50LnYxLldlYlNlYXJjaFJlZmVyZW5jZSIfCg5XZWJTZWFyY2hFcnJvchINCgVlcnJvchgBIAEoCSIjChFXZWJTZWFyY2hSZWplY3RlZBIOCgZyZWFzb24YASABKAkiPwoSV2ViU2VhcmNoUmVmZXJlbmNlEg0KBXRpdGxlGAEgASgJEgsKA3VybBgCIAEoCRINCgVjaHVuaxgDIAEoCSJlChFXZWJTZWFyY2hUb29sQ2FsbBIlCgRhcmdzGAEgASgLMhcuYWdlbnQudjEuV2ViU2VhcmNoQXJncxIpCgZyZXN1bHQYAiABKAsyGS5hZ2VudC52MS5XZWJTZWFyY2hSZXN1bHQiPgoVV2ViU2VhcmNoUmVxdWVzdFF1ZXJ5EiUKBGFyZ3MYASABKAsyFy5hZ2VudC52MS5XZWJTZWFyY2hBcmdzIqYBChhXZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2USPwoIYXBwcm92ZWQYASABKAsyKy5hZ2VudC52MS5XZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWRIABI/CghyZWplY3RlZBgCIAEoCzIrLmFnZW50LnYxLldlYlNlYXJjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZEgAQggKBnJlc3VsdCIjCiFXZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWQiMwohV2ViU2VhcmNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSKtAQoJV3JpdGVBcmdzEgwKBHBhdGgYASABKAkSEQoJZmlsZV90ZXh0GAIgASgJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRInCh9yZXR1cm5fZmlsZV9jb250ZW50X2FmdGVyX3dyaXRlGAQgASgIEhIKCmZpbGVfYnl0ZXMYBSABKAwSGgoNZW5jb2RpbmdfaGludBgGIAEoCUgAiAEBQhAKDl9lbmNvZGluZ19oaW50IoACCgtXcml0ZVJlc3VsdBIpCgdzdWNjZXNzGAEgASgLMhYuYWdlbnQudjEuV3JpdGVTdWNjZXNzSAASPAoRcGVybWlzc2lvbl9kZW5pZWQYAyABKAsyHy5hZ2VudC52MS5Xcml0ZVBlcm1pc3Npb25EZW5pZWRIABIqCghub19zcGFjZRgEIAEoCzIWLmFnZW50LnYxLldyaXRlTm9TcGFjZUgAEiUKBWVycm9yGAUgASgLMhQuYWdlbnQudjEuV3JpdGVFcnJvckgAEisKCHJlamVjdGVkGAYgASgLMhcuYWdlbnQudjEuV3JpdGVSZWplY3RlZEgAQggKBnJlc3VsdCKKAQoMV3JpdGVTdWNjZXNzEgwKBHBhdGgYASABKAkSFQoNbGluZXNfY3JlYXRlZBgCIAEoBRIRCglmaWxlX3NpemUYAyABKAUSJQoYZmlsZV9jb250ZW50X2FmdGVyX3dyaXRlGAQgASgJSACIAQFCGwoZX2ZpbGVfY29udGVudF9hZnRlcl93cml0ZSJvChVXcml0ZVBlcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCRIRCglkaXJlY3RvcnkYAiABKAkSEQoJb3BlcmF0aW9uGAMgASgJEg0KBWVycm9yGAQgASgJEhMKC2lzX3JlYWRvbmx5GAUgASgIIhwKDFdyaXRlTm9TcGFjZRIMCgRwYXRoGAEgASgJIikKCldyaXRlRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSItCg1Xcml0ZVJlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIoMBChdCb290c3RyYXBTdGF0c2lnUmVxdWVzdBIeChFpZ25vcmVfZGV2X3N0YXR1cxgBIAEoCEgAiAEBEh0KEG9wZXJhdGluZ19zeXN0ZW0YAiABKAVIAYgBAUIUChJfaWdub3JlX2Rldl9zdGF0dXNCEwoRX29wZXJhdGluZ19zeXN0ZW0iDgoMUGluZ1Jlc3BvbnNlIrcBCgtFeGVjUmVxdWVzdBIPCgdjb21tYW5kGAEgASgJEhAKA2N3ZBgCIAEoCUgAiAEBEgwKBGFyZ3MYAyADKAkSOwoLZW52aXJvbm1lbnQYBCADKAsyJi5hZ2VudC52MS5FeGVjUmVxdWVzdC5FbnZpcm9ubWVudEVudHJ5GjIKEEVudmlyb25tZW50RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIGCgRfY3dkIqABCgxFeGVjUmVzcG9uc2USLQoMc3Rkb3V0X2V2ZW50GAEgASgLMhUuYWdlbnQudjEuU3Rkb3V0RXZlbnRIABItCgxzdGRlcnJfZXZlbnQYAiABKAsyFS5hZ2VudC52MS5TdGRlcnJFdmVudEgAEikKCmV4aXRfZXZlbnQYAyABKAsyEy5hZ2VudC52MS5FeGl0RXZlbnRIAEIHCgVldmVudCIbCgtTdGRvdXRFdmVudBIMCgRkYXRhGAEgASgJIhsKC1N0ZGVyckV2ZW50EgwKBGRhdGEYASABKAkiHgoJRXhpdEV2ZW50EhEKCWV4aXRfY29kZRgBIAEoBSIjChNSZWFkVGV4dEZpbGVSZXF1ZXN0EgwKBHBhdGgYASABKAkiJwoUUmVhZFRleHRGaWxlUmVzcG9uc2USDwoHY29udGVudBgBIAEoCSI1ChRXcml0ZVRleHRGaWxlUmVxdWVzdBIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAkiFwoVV3JpdGVUZXh0RmlsZVJlc3BvbnNlIiUKFVJlYWRCaW5hcnlGaWxlUmVxdWVzdBIMCgRwYXRoGAEgASgJIikKFlJlYWRCaW5hcnlGaWxlUmVzcG9uc2USDwoHY29udGVudBgBIAEoDCI3ChZXcml0ZUJpbmFyeUZpbGVSZXF1ZXN0EgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoDCIZChdXcml0ZUJpbmFyeUZpbGVSZXNwb25zZSJFCh5HZXRXb3Jrc3BhY2VDaGFuZ2VzSGFzaFJlcXVlc3QSEQoJcm9vdF9wYXRoGAEgASgJEhAKCGJhc2VfcmVmGAIgASgJIi8KH0dldFdvcmtzcGFjZUNoYW5nZXNIYXNoUmVzcG9uc2USDAoEaGFzaBgBIAEoCSJQCh9SZWZyZXNoR2l0aHViQWNjZXNzVG9rZW5SZXF1ZXN0EhsKE2dpdGh1Yl9hY2Nlc3NfdG9rZW4YASABKAkSEAoIaG9zdG5hbWUYAiABKAkiIgogUmVmcmVzaEdpdGh1YkFjY2Vzc1Rva2VuUmVzcG9uc2UiVwodV2FybVJlbW90ZUFjY2Vzc1NlcnZlclJlcXVlc3QSDgoGY29tbWl0GAEgASgJEgwKBHBvcnQYAiABKAUSGAoQY29ubmVjdGlvbl90b2tlbhgDIAEoCSIgCh5XYXJtUmVtb3RlQWNjZXNzU2VydmVyUmVzcG9uc2UiFgoUTGlzdEFydGlmYWN0c1JlcXVlc3QiigIKFkFydGlmYWN0VXBsb2FkTWV0YWRhdGESFQoNYWJzb2x1dGVfcGF0aBgBIAEoCRISCgpzaXplX2J5dGVzGAIgASgEEhoKEnVwZGF0ZWRfYXRfdW5peF9tcxgDIAEoAxIOCgZzdGF0dXMYBCABKAUSFgoOYnl0ZXNfdXBsb2FkZWQYBSABKAQSEgoKbGFzdF9lcnJvchgGIAEoCRIXCg91cGxvYWRfYXR0ZW1wdHMYByABKA0SHwoXbGFzdF9zdGFydGVkX2F0X3VuaXhfbXMYCCABKAMSIAoYbGFzdF9maW5pc2hlZF9hdF91bml4X21zGAkgASgDEhEKCXVwbG9hZF9pZBgKIAEoCSJMChVMaXN0QXJ0aWZhY3RzUmVzcG9uc2USMwoJYXJ0aWZhY3RzGAEgAygLMiAuYWdlbnQudjEuQXJ0aWZhY3RVcGxvYWRNZXRhZGF0YSJOChZVcGxvYWRBcnRpZmFjdHNSZXF1ZXN0EjQKB3VwbG9hZHMYASADKAsyIy5hZ2VudC52MS5BcnRpZmFjdFVwbG9hZEluc3RydWN0aW9uItcCChlBcnRpZmFjdFVwbG9hZEluc3RydWN0aW9uEhUKDWFic29sdXRlX3BhdGgYASABKAkSEgoKdXBsb2FkX3VybBgCIAEoCRIOCgZtZXRob2QYAyABKAkSQQoHaGVhZGVycxgEIAMoCzIwLmFnZW50LnYxLkFydGlmYWN0VXBsb2FkSW5zdHJ1Y3Rpb24uSGVhZGVyc0VudHJ5EhkKDGNvbnRlbnRfdHlwZRgFIAEoCUgAiAEBEh0KEHNsYWNrX3VwbG9hZF91cmwYBiABKAlIAYgBARIaCg1zbGFja19maWxlX2lkGAcgASgJSAKIAQEaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCDwoNX2NvbnRlbnRfdHlwZUITChFfc2xhY2tfdXBsb2FkX3VybEIQCg5fc2xhY2tfZmlsZV9pZCKEAQocQXJ0aWZhY3RVcGxvYWREaXNwYXRjaFJlc3VsdBIVCg1hYnNvbHV0ZV9wYXRoGAEgASgJEg4KBnN0YXR1cxgCIAEoBRIPCgdtZXNzYWdlGAMgASgJEhoKDXNsYWNrX2ZpbGVfaWQYBCABKAlIAIgBAUIQCg5fc2xhY2tfZmlsZV9pZCJSChdVcGxvYWRBcnRpZmFjdHNSZXNwb25zZRI3CgdyZXN1bHRzGAEgAygLMiYuYWdlbnQudjEuQXJ0aWZhY3RVcGxvYWREaXNwYXRjaFJlc3VsdCIcChpHZXRNY3BSZWZyZXNoVG9rZW5zUmVxdWVzdCKlAQobR2V0TWNwUmVmcmVzaFRva2Vuc1Jlc3BvbnNlElAKDnJlZnJlc2hfdG9rZW5zGAEgAygLMjguYWdlbnQudjEuR2V0TWNwUmVmcmVzaFRva2Vuc1Jlc3BvbnNlLlJlZnJlc2hUb2tlbnNFbnRyeRo0ChJSZWZyZXNoVG9rZW5zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASKjAQohVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNSZXF1ZXN0EkEKA2VudhgBIAMoCzI0LmFnZW50LnYxLlVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzUmVxdWVzdC5FbnZFbnRyeRIPCgdyZXBsYWNlGAIgASgIGioKCEVudkVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiRgoiVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNSZXNwb25zZRIPCgdhcHBsaWVkGAEgASgNEg8KB3JlbW92ZWQYAiABKA0igwEKEk1jcE9BdXRoU3RvcmVkRGF0YRIVCg1yZWZyZXNoX3Rva2VuGAEgASgJEhEKCWNsaWVudF9pZBgCIAEoCRIaCg1jbGllbnRfc2VjcmV0GAMgASgJSACIAQESFQoNcmVkaXJlY3RfdXJpcxgEIAMoCUIQCg5fY2xpZW50X3NlY3JldCJOCgVGcmFtZRIKCgJpZBgBIAEoCRIOCgZtZXRob2QYAiABKAkSDAoEZGF0YRgDIAEoDBIMCgRraW5kGAQgASgFEg0KBWVycm9yGAUgASgJIgcKBUVtcHR5IiMKDUJpZGlSZXF1ZXN0SWQSEgoKcmVxdWVzdF9pZBgBIAEoCSKBAgoMUGlUcnVuY2F0aW9uEhEKCXRydW5jYXRlZBgBIAEoCBIUCgx0cnVuY2F0ZWRfYnkYAiABKAkSEwoLdG90YWxfbGluZXMYAyABKA0SFAoMb3V0cHV0X2xpbmVzGAQgASgNEhQKDG91dHB1dF9ieXRlcxgFIAEoDRIWCgltYXhfbGluZXMYBiABKA1IAIgBARIWCgltYXhfYnl0ZXMYByABKA1IAYgBARIgChhmaXJzdF9saW5lX2V4Y2VlZHNfbGltaXQYCCABKAgSGQoRbGFzdF9saW5lX3BhcnRpYWwYCSABKAhCDAoKX21heF9saW5lc0IMCgpfbWF4X2J5dGVzIjcKEVBpRWRpdFJlcGxhY2VtZW50EhAKCG9sZF90ZXh0GAEgASgJEhAKCG5ld190ZXh0GAIgASgJIlwKDlBpUmVhZEV4ZWNBcmdzEgwKBHBhdGgYASABKAkSEwoGb2Zmc2V0GAIgASgFSACIAQESEgoFbGltaXQYAyABKAVIAYgBAUIJCgdfb2Zmc2V0QggKBl9saW1pdCJjChFQaVJlYWRFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBQg0KC190cnVuY2F0aW9uIiAKD1BpUmVhZEV4ZWNFcnJvchINCgVlcnJvchgBIAEoCSJ4ChBQaVJlYWRFeGVjUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5QaVJlYWRFeGVjU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuUGlSZWFkRXhlY0Vycm9ySABCCAoGcmVzdWx0IkMKDlBpQmFzaEV4ZWNBcmdzEg8KB2NvbW1hbmQYASABKAkSFAoHdGltZW91dBgCIAEoAUgAiAEBQgoKCF90aW1lb3V0IpcBChFQaUJhc2hFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBEh0KEGZ1bGxfb3V0cHV0X3BhdGgYAyABKAlIAYgBAUINCgtfdHJ1bmNhdGlvbkITChFfZnVsbF9vdXRwdXRfcGF0aCKUAQoPUGlCYXNoRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBARIdChBmdWxsX291dHB1dF9wYXRoGAMgASgJSAGIAQFCDQoLX3RydW5jYXRpb25CEwoRX2Z1bGxfb3V0cHV0X3BhdGgieAoQUGlCYXNoRXhlY1Jlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuUGlCYXNoRXhlY1N1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlBpQmFzaEV4ZWNFcnJvckgAQggKBnJlc3VsdCJKCg5QaUVkaXRFeGVjQXJncxIMCgRwYXRoGAEgASgJEioKBWVkaXRzGAIgAygLMhsuYWdlbnQudjEuUGlFZGl0UmVwbGFjZW1lbnQieAoRUGlFZGl0RXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEgwKBGRpZmYYAiABKAkSDQoFcGF0Y2gYAyABKAkSHwoSZmlyc3RfY2hhbmdlZF9saW5lGAQgASgNSACIAQFCFQoTX2ZpcnN0X2NoYW5nZWRfbGluZSIgCg9QaUVkaXRFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkiJAoSUGlFZGl0RXhlY1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSKqAQoQUGlFZGl0RXhlY1Jlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuUGlFZGl0RXhlY1N1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlBpRWRpdEV4ZWNFcnJvckgAEjAKCHJlamVjdGVkGAMgASgLMhwuYWdlbnQudjEuUGlFZGl0RXhlY1JlamVjdGVkSABCCAoGcmVzdWx0IjAKD1BpV3JpdGVFeGVjQXJncxIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAkiJAoSUGlXcml0ZUV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCSIhChBQaVdyaXRlRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJIiUKE1BpV3JpdGVFeGVjUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIq4BChFQaVdyaXRlRXhlY1Jlc3VsdBIvCgdzdWNjZXNzGAEgASgLMhwuYWdlbnQudjEuUGlXcml0ZUV4ZWNTdWNjZXNzSAASKwoFZXJyb3IYAiABKAsyGi5hZ2VudC52MS5QaVdyaXRlRXhlY0Vycm9ySAASMQoIcmVqZWN0ZWQYAyABKAsyHS5hZ2VudC52MS5QaVdyaXRlRXhlY1JlamVjdGVkSABCCAoGcmVzdWx0IuUBCg5QaUdyZXBFeGVjQXJncxIPCgdwYXR0ZXJuGAEgASgJEhEKBHBhdGgYAiABKAlIAIgBARIRCgRnbG9iGAMgASgJSAGIAQESGAoLaWdub3JlX2Nhc2UYBCABKAhIAogBARIUCgdsaXRlcmFsGAUgASgISAOIAQESFAoHY29udGV4dBgGIAEoBUgEiAEBEhIKBWxpbWl0GAcgASgFSAWIAQFCBwoFX3BhdGhCBwoFX2dsb2JCDgoMX2lnbm9yZV9jYXNlQgoKCF9saXRlcmFsQgoKCF9jb250ZXh0QggKBl9saW1pdCK2AQoRUGlHcmVwRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBARIgChNtYXRjaF9saW1pdF9yZWFjaGVkGAMgASgNSAGIAQESFwoPbGluZXNfdHJ1bmNhdGVkGAQgASgIQg0KC190cnVuY2F0aW9uQhYKFF9tYXRjaF9saW1pdF9yZWFjaGVkIiAKD1BpR3JlcEV4ZWNFcnJvchINCgVlcnJvchgBIAEoCSJ4ChBQaUdyZXBFeGVjUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5QaUdyZXBFeGVjU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuUGlHcmVwRXhlY0Vycm9ySABCCAoGcmVzdWx0IlsKDlBpRmluZEV4ZWNBcmdzEg8KB3BhdHRlcm4YASABKAkSEQoEcGF0aBgCIAEoCUgAiAEBEhIKBWxpbWl0GAMgASgFSAGIAQFCBwoFX3BhdGhCCAoGX2xpbWl0Ip8BChFQaUZpbmRFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBEiEKFHJlc3VsdF9saW1pdF9yZWFjaGVkGAMgASgNSAGIAQFCDQoLX3RydW5jYXRpb25CFwoVX3Jlc3VsdF9saW1pdF9yZWFjaGVkIiAKD1BpRmluZEV4ZWNFcnJvchINCgVlcnJvchgBIAEoCSJ4ChBQaUZpbmRFeGVjUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5QaUZpbmRFeGVjU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuUGlGaW5kRXhlY0Vycm9ySABCCAoGcmVzdWx0IkgKDFBpTHNFeGVjQXJncxIRCgRwYXRoGAEgASgJSACIAQESEgoFbGltaXQYAiABKAVIAYgBAUIHCgVfcGF0aEIICgZfbGltaXQimwEKD1BpTHNFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBEiAKE2VudHJ5X2xpbWl0X3JlYWNoZWQYAyABKA1IAYgBAUINCgtfdHJ1bmNhdGlvbkIWChRfZW50cnlfbGltaXRfcmVhY2hlZCIeCg1QaUxzRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJInIKDlBpTHNFeGVjUmVzdWx0EiwKB3N1Y2Nlc3MYASABKAsyGS5hZ2VudC52MS5QaUxzRXhlY1N1Y2Nlc3NIABIoCgVlcnJvchgCIAEoCzIXLmFnZW50LnYxLlBpTHNFeGVjRXJyb3JIAEIICgZyZXN1bHQiPAoRTWNwU2VydmVyTm90Rm91bmQSDAoEbmFtZRgBIAEoCRIZChFhdmFpbGFibGVfc2VydmVycxgCIAMoCSINCgtNY3BBcHByb3ZlZCJBChBNY3BTdGF0ZUV4ZWNBcmdzEhoKEnNlcnZlcl9pZGVudGlmaWVycxgBIAMoCRIRCglraWNrX29ubHkYAiABKAgihwIKDk1jcFN0YXRlU2VydmVyEhMKC3NlcnZlcl9uYW1lGAEgASgJEhkKEXNlcnZlcl9pZGVudGlmaWVyGAIgASgJEhMKBnBsdWdpbhgDIAEoCUgAiAEBEhgKC21hcmtldHBsYWNlGAQgASgJSAGIAQESKgoFdG9vbHMYBSADKAsyGy5hZ2VudC52MS5NY3BUb29sRGVmaW5pdGlvbhIvCgxpbnN0cnVjdGlvbnMYBiADKAsyGS5hZ2VudC52MS5NY3BJbnN0cnVjdGlvbnMSEwoGc3RhdHVzGAcgASgJSAKIAQFCCQoHX3BsdWdpbkIOCgxfbWFya2V0cGxhY2VCCQoHX3N0YXR1cyI8Cg9NY3BTdGF0ZVN1Y2Nlc3MSKQoHc2VydmVycxgBIAMoCzIYLmFnZW50LnYxLk1jcFN0YXRlU2VydmVyIh4KDU1jcFN0YXRlRXJyb3ISDQoFZXJyb3IYASABKAkiIgoQTWNwU3RhdGVSZWplY3RlZBIOCgZyZWFzb24YASABKAkipgEKEk1jcFN0YXRlRXhlY1Jlc3VsdBIsCgdzdWNjZXNzGAEgASgLMhkuYWdlbnQudjEuTWNwU3RhdGVTdWNjZXNzSAASKAoFZXJyb3IYAiABKAsyFy5hZ2VudC52MS5NY3BTdGF0ZUVycm9ySAASLgoIcmVqZWN0ZWQYAyABKAsyGi5hZ2VudC52MS5NY3BTdGF0ZVJlamVjdGVkSABCCAoGcmVzdWx0Iq0BCilDb21tYW5kQ2xhc3NpZmllclJlc3VsdF9DbGFzc2lmaWVkQ29tbWFuZBIMCgRuYW1lGAEgASgJEhEKCWFyZ3VtZW50cxgCIAMoCRImChlzdWdnZXN0ZWRfYWxsb3dsaXN0X2VudHJ5GAMgASgJSACIAQESGQoRc3ViY29tbWFuZF90b2tlbnMYBCADKAlCHAoaX3N1Z2dlc3RlZF9hbGxvd2xpc3RfZW50cnki1wEKF0NvbW1hbmRDbGFzc2lmaWVyUmVzdWx0EkUKCGNvbW1hbmRzGAEgAygLMjMuYWdlbnQudjEuQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRfQ2xhc3NpZmllZENvbW1hbmQSVgoWc3VnZ2VzdGVkX3NhbmRib3hfbW9kZRgCIAEoDjI2LmFnZW50LnYxLkNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0X1N1Z2dlc3RlZFNhbmRib3hNb2RlEh0KFWNsYXNzaWZpY2F0aW9uX2ZhaWxlZBgDIAEoCCKTAQoiU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9SZWRpcmVjdBIQCghvcGVyYXRvchgBIAEoCRIXCg9kZXN0aW5hdGlvbl9mZHMYAiADKA0SGAoQdGFyZ2V0X25vZGVfdHlwZRgDIAEoCRIYCgt0YXJnZXRfdGV4dBgEIAEoCUgAiAEBQg4KDF90YXJnZXRfdGV4dCKKAgoaU2hlbGxBbGxvd2xpc3RQcmVjaGVja0FyZ3MSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRI7Cg5wYXJzaW5nX3Jlc3VsdBgDIAEoCzIjLmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHQSQQoRY2xhc3NpZmllcl9yZXN1bHQYBCABKAsyIS5hZ2VudC52MS5Db21tYW5kQ2xhc3NpZmllclJlc3VsdEgAiAEBEhkKDHRvb2xfY2FsbF9pZBgFIAEoCUgBiAEBQhQKEl9jbGFzc2lmaWVyX3Jlc3VsdEIPCg1fdG9vbF9jYWxsX2lkIjMKHFNoZWxsQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHQSEwoLYWxsb3dsaXN0ZWQYASABKAgidgoYTWNwQWxsb3dsaXN0UHJlY2hlY2tBcmdzEhsKE3Byb3ZpZGVyX2lkZW50aWZpZXIYASABKAkSEQoJdG9vbF9uYW1lGAIgASgJEhkKDHRvb2xfY2FsbF9pZBgDIAEoCUgAiAEBQg8KDV90b29sX2NhbGxfaWQiMQoaTWNwQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHQSEwoLYWxsb3dsaXN0ZWQYASABKAgiWAodV2ViRmV0Y2hBbGxvd2xpc3RQcmVjaGVja0FyZ3MSCwoDdXJsGAEgASgJEhkKDHRvb2xfY2FsbF9pZBgCIAEoCUgAiAEBQg8KDV90b29sX2NhbGxfaWQiNgofV2ViRmV0Y2hBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdBITCgthbGxvd2xpc3RlZBgBIAEoCCI3ChFTbWFydE1vZGVBcHByb3ZhbBISCgpyZXF1ZXN0X2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCSKcAQodU2hlbGxPdXRwdXROb3RpZmljYXRpb25Db25maWcSDwoHcGF0dGVybhgBIAEoCRIOCgZyZWFzb24YAiABKAkSFQoIZGVib3VuY2UYAyABKAFIAIgBARIfChJub3RpZmljYXRpb25fbGltaXQYBCABKAVIAYgBAUILCglfZGVib3VuY2VCFQoTX25vdGlmaWNhdGlvbl9saW1pdCJ5ChxTaGVsbEhvb2tBcHByb3ZhbFJlcXVpcmVtZW50EjkKBGtpbmQYASABKA4yKy5hZ2VudC52MS5TaGVsbEhvb2tBcHByb3ZhbFJlcXVpcmVtZW50X0tpbmQSEwoGcmVhc29uGAIgASgJSACIAQFCCQoHX3JlYXNvbiIwChhGb3JjZUJhY2tncm91bmRTaGVsbEFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJIpUBChpGb3JjZUJhY2tncm91bmRTaGVsbFJlc3VsdBI0CgZzdGF0dXMYASABKA4yJC5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTaGVsbFN0YXR1cxIwCgxzaGVsbF9yZXN1bHQYAiABKAsyFS5hZ2VudC52MS5TaGVsbFJlc3VsdEgAiAEBQg8KDV9zaGVsbF9yZXN1bHQiQQoVSG9va0FkZGl0aW9uYWxDb250ZXh0EhcKD2hvb2tfZXZlbnRfbmFtZRgBIAEoCRIPCgdjb250ZW50GAIgASgJIlsKFlNoZWxsU3RyZWFtSG9va0NvbnRleHQSQQoYaG9va19hZGRpdGlvbmFsX2NvbnRleHRzGAEgAygLMh8uYWdlbnQudjEuSG9va0FkZGl0aW9uYWxDb250ZXh0IksKDFN1YmFnZW50QXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkSFQoNc3ViYWdlbnRfdHlwZRgCIAEoCRIOCgZwcm9tcHQYBCABKAki2wEKD1N1YmFnZW50U3VjY2VzcxIQCghhZ2VudF9pZBgBIAEoCRIaCg1maW5hbF9tZXNzYWdlGAIgASgJSACIAQESFwoPdG9vbF9jYWxsX2NvdW50GAMgASgFEj0KEWJhY2tncm91bmRfcmVhc29uGAQgASgOMiIuYWdlbnQudjEuU3ViYWdlbnRCYWNrZ3JvdW5kUmVhc29uEhwKD3RyYW5zY3JpcHRfcGF0aBgFIAEoCUgBiAEBQhAKDl9maW5hbF9tZXNzYWdlQhIKEF90cmFuc2NyaXB0X3BhdGgiQgoNU3ViYWdlbnRFcnJvchIVCghhZ2VudF9pZBgBIAEoCUgAiAEBEg0KBWVycm9yGAIgASgJQgsKCV9hZ2VudF9pZCJyCg5TdWJhZ2VudFJlc3VsdBIsCgdzdWNjZXNzGAEgASgLMhkuYWdlbnQudjEuU3ViYWdlbnRTdWNjZXNzSAASKAoFZXJyb3IYAiABKAsyFy5hZ2VudC52MS5TdWJhZ2VudEVycm9ySABCCAoGcmVzdWx0IjkKEVN1YmFnZW50QXdhaXRBcmdzEhAKCGFnZW50X2lkGAEgASgJEhIKCnRpbWVvdXRfbXMYAiABKA0iogEKFVN1YmFnZW50QXdhaXRDb21wbGV0ZRIQCghhZ2VudF9pZBgBIAEoCRIcCg90cmFuc2NyaXB0X3BhdGgYAiABKAlIAIgBARIXCg90b29sX2NhbGxfY291bnQYAyABKAUSGgoNZmluYWxfbWVzc2FnZRgEIAEoCUgBiAEBQhIKEF90cmFuc2NyaXB0X3BhdGhCEAoOX2ZpbmFsX21lc3NhZ2UiXwoZU3ViYWdlbnRBd2FpdFN0aWxsUnVubmluZxIQCghhZ2VudF9pZBgBIAEoCRIcCg90cmFuc2NyaXB0X3BhdGgYAiABKAlIAIgBAUISChBfdHJhbnNjcmlwdF9wYXRoIikKFVN1YmFnZW50QXdhaXROb3RGb3VuZBIQCghhZ2VudF9pZBgBIAEoCSJHChJTdWJhZ2VudEF3YWl0RXJyb3ISFQoIYWdlbnRfaWQYASABKAlIAIgBARINCgVlcnJvchgCIAEoCUILCglfYWdlbnRfaWQi9wEKE1N1YmFnZW50QXdhaXRSZXN1bHQSMwoIY29tcGxldGUYASABKAsyHy5hZ2VudC52MS5TdWJhZ2VudEF3YWl0Q29tcGxldGVIABI8Cg1zdGlsbF9ydW5uaW5nGAIgASgLMiMuYWdlbnQudjEuU3ViYWdlbnRBd2FpdFN0aWxsUnVubmluZ0gAEjQKCW5vdF9mb3VuZBgDIAEoCzIfLmFnZW50LnYxLlN1YmFnZW50QXdhaXROb3RGb3VuZEgAEi0KBWVycm9yGAQgASgLMhwuYWdlbnQudjEuU3ViYWdlbnRBd2FpdEVycm9ySABCCAoGcmVzdWx0IjMKG0ZvcmNlQmFja2dyb3VuZFN1YmFnZW50QXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkiWAodRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRSZXN1bHQSNwoGc3RhdHVzGAEgASgOMicuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRTdGF0dXMiGAoWUHJlQ29tcGFjdFJlcXVlc3RRdWVyeSIbChlTdWJhZ2VudFN0YXJ0UmVxdWVzdFF1ZXJ5IhoKGFN1YmFnZW50U3RvcFJlcXVlc3RRdWVyeSIYChZQcmVUb29sVXNlUmVxdWVzdFF1ZXJ5IhkKF1Bvc3RUb29sVXNlUmVxdWVzdFF1ZXJ5IiAKHlBvc3RUb29sVXNlRmFpbHVyZVJlcXVlc3RRdWVyeSIgCh5CZWZvcmVTdWJtaXRQcm9tcHRSZXF1ZXN0UXVlcnkiIAoeQWZ0ZXJBZ2VudFJlc3BvbnNlUmVxdWVzdFF1ZXJ5Ih8KHUFmdGVyQWdlbnRUaG91Z2h0UmVxdWVzdFF1ZXJ5IhIKEFN0b3BSZXF1ZXN0UXVlcnkiRwoZUHJlQ29tcGFjdFJlcXVlc3RSZXNwb25zZRIZCgx1c2VyX21lc3NhZ2UYASABKAlIAIgBAUIPCg1fdXNlcl9tZXNzYWdlIqoBChxTdWJhZ2VudFN0YXJ0UmVxdWVzdFJlc3BvbnNlEhcKCnBlcm1pc3Npb24YASABKAlIAIgBARIZCgx1c2VyX21lc3NhZ2UYAiABKAlIAYgBARIfChJhZGRpdGlvbmFsX2NvbnRleHQYAyABKAlIAogBAUINCgtfcGVybWlzc2lvbkIPCg1fdXNlcl9tZXNzYWdlQhUKE19hZGRpdGlvbmFsX2NvbnRleHQiiQEKG1N1YmFnZW50U3RvcFJlcXVlc3RSZXNwb25zZRIdChBmb2xsb3d1cF9tZXNzYWdlGAEgASgJSACIAQESHwoSYWRkaXRpb25hbF9jb250ZXh0GAIgASgJSAGIAQFCEwoRX2ZvbGxvd3VwX21lc3NhZ2VCFQoTX2FkZGl0aW9uYWxfY29udGV4dCKDAgoZUHJlVG9vbFVzZVJlcXVlc3RSZXNwb25zZRIXCgpwZXJtaXNzaW9uGAEgASgJSACIAQESGQoMdXNlcl9tZXNzYWdlGAIgASgJSAGIAQESGgoNYWdlbnRfbWVzc2FnZRgDIAEoCUgCiAEBEhoKDXVwZGF0ZWRfaW5wdXQYBCABKAlIA4gBARIfChJhZGRpdGlvbmFsX2NvbnRleHQYBSABKAlIBIgBAUINCgtfcGVybWlzc2lvbkIPCg1fdXNlcl9tZXNzYWdlQhAKDl9hZ2VudF9tZXNzYWdlQhAKDl91cGRhdGVkX2lucHV0QhUKE19hZGRpdGlvbmFsX2NvbnRleHQiVAoaUG9zdFRvb2xVc2VSZXF1ZXN0UmVzcG9uc2USHwoSYWRkaXRpb25hbF9jb250ZXh0GAEgASgJSACIAQFCFQoTX2FkZGl0aW9uYWxfY29udGV4dCJbCiFQb3N0VG9vbFVzZUZhaWx1cmVSZXF1ZXN0UmVzcG9uc2USHwoSYWRkaXRpb25hbF9jb250ZXh0GAEgASgJSACIAQFCFQoTX2FkZGl0aW9uYWxfY29udGV4dCKrAQohQmVmb3JlU3VibWl0UHJvbXB0UmVxdWVzdFJlc3BvbnNlEhUKCGNvbnRpbnVlGAEgASgISACIAQESGQoMdXNlcl9tZXNzYWdlGAIgASgJSAGIAQESHwoSYWRkaXRpb25hbF9jb250ZXh0GAMgASgJSAKIAQFCCwoJX2NvbnRpbnVlQg8KDV91c2VyX21lc3NhZ2VCFQoTX2FkZGl0aW9uYWxfY29udGV4dCIjCiFBZnRlckFnZW50UmVzcG9uc2VSZXF1ZXN0UmVzcG9uc2UiIgogQWZ0ZXJBZ2VudFRob3VnaHRSZXF1ZXN0UmVzcG9uc2UiSQoTU3RvcFJlcXVlc3RSZXNwb25zZRIdChBmb2xsb3d1cF9tZXNzYWdlGAEgASgJSACIAQFCEwoRX2ZvbGxvd3VwX21lc3NhZ2UinQUKEkV4ZWN1dGVIb29rUmVxdWVzdBI3CgtwcmVfY29tcGFjdBgBIAEoCzIgLmFnZW50LnYxLlByZUNvbXBhY3RSZXF1ZXN0UXVlcnlIABI9Cg5zdWJhZ2VudF9zdGFydBgCIAEoCzIjLmFnZW50LnYxLlN1YmFnZW50U3RhcnRSZXF1ZXN0UXVlcnlIABI7Cg1zdWJhZ2VudF9zdG9wGAMgASgLMiIuYWdlbnQudjEuU3ViYWdlbnRTdG9wUmVxdWVzdFF1ZXJ5SAASOAoMcHJlX3Rvb2xfdXNlGAQgASgLMiAuYWdlbnQudjEuUHJlVG9vbFVzZVJlcXVlc3RRdWVyeUgAEjoKDXBvc3RfdG9vbF91c2UYBSABKAsyIS5hZ2VudC52MS5Qb3N0VG9vbFVzZVJlcXVlc3RRdWVyeUgAEkkKFXBvc3RfdG9vbF91c2VfZmFpbHVyZRgGIAEoCzIoLmFnZW50LnYxLlBvc3RUb29sVXNlRmFpbHVyZVJlcXVlc3RRdWVyeUgAEkgKFGJlZm9yZV9zdWJtaXRfcHJvbXB0GAcgASgLMiguYWdlbnQudjEuQmVmb3JlU3VibWl0UHJvbXB0UmVxdWVzdFF1ZXJ5SAASSAoUYWZ0ZXJfYWdlbnRfcmVzcG9uc2UYCCABKAsyKC5hZ2VudC52MS5BZnRlckFnZW50UmVzcG9uc2VSZXF1ZXN0UXVlcnlIABJGChNhZnRlcl9hZ2VudF90aG91Z2h0GAkgASgLMicuYWdlbnQudjEuQWZ0ZXJBZ2VudFRob3VnaHRSZXF1ZXN0UXVlcnlIABIqCgRzdG9wGAsgASgLMhouYWdlbnQudjEuU3RvcFJlcXVlc3RRdWVyeUgAQgkKB3JlcXVlc3QivQUKE0V4ZWN1dGVIb29rUmVzcG9uc2USOgoLcHJlX2NvbXBhY3QYASABKAsyIy5hZ2VudC52MS5QcmVDb21wYWN0UmVxdWVzdFJlc3BvbnNlSAASQAoOc3ViYWdlbnRfc3RhcnQYAiABKAsyJi5hZ2VudC52MS5TdWJhZ2VudFN0YXJ0UmVxdWVzdFJlc3BvbnNlSAASPgoNc3ViYWdlbnRfc3RvcBgDIAEoCzIlLmFnZW50LnYxLlN1YmFnZW50U3RvcFJlcXVlc3RSZXNwb25zZUgAEjsKDHByZV90b29sX3VzZRgEIAEoCzIjLmFnZW50LnYxLlByZVRvb2xVc2VSZXF1ZXN0UmVzcG9uc2VIABI9Cg1wb3N0X3Rvb2xfdXNlGAUgASgLMiQuYWdlbnQudjEuUG9zdFRvb2xVc2VSZXF1ZXN0UmVzcG9uc2VIABJMChVwb3N0X3Rvb2xfdXNlX2ZhaWx1cmUYBiABKAsyKy5hZ2VudC52MS5Qb3N0VG9vbFVzZUZhaWx1cmVSZXF1ZXN0UmVzcG9uc2VIABJLChRiZWZvcmVfc3VibWl0X3Byb21wdBgHIAEoCzIrLmFnZW50LnYxLkJlZm9yZVN1Ym1pdFByb21wdFJlcXVlc3RSZXNwb25zZUgAEksKFGFmdGVyX2FnZW50X3Jlc3BvbnNlGAggASgLMisuYWdlbnQudjEuQWZ0ZXJBZ2VudFJlc3BvbnNlUmVxdWVzdFJlc3BvbnNlSAASSQoTYWZ0ZXJfYWdlbnRfdGhvdWdodBgJIAEoCzIqLmFnZW50LnYxLkFmdGVyQWdlbnRUaG91Z2h0UmVxdWVzdFJlc3BvbnNlSAASLQoEc3RvcBgLIAEoCzIdLmFnZW50LnYxLlN0b3BSZXF1ZXN0UmVzcG9uc2VIAEIKCghyZXNwb25zZSJACg9FeGVjdXRlSG9va0FyZ3MSLQoHcmVxdWVzdBgBIAEoCzIcLmFnZW50LnYxLkV4ZWN1dGVIb29rUmVxdWVzdCJEChFFeGVjdXRlSG9va1Jlc3VsdBIvCghyZXNwb25zZRgBIAEoCzIdLmFnZW50LnYxLkV4ZWN1dGVIb29rUmVzcG9uc2UiJQoTU21hcnRNb2RlUmlza1RhcmdldBIOCgZhY3Rpb24YASABKAkiRwomU21hcnRNb2RlQ2xhc3NpZmllckNvbnZlcnNhdGlvbk1lc3NhZ2USDAoEcm9sZRgBIAEoCRIPCgdjb250ZW50GAIgASgJIu4BChdTbWFydE1vZGVDbGFzc2lmaWVyQXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkSIwoWcGFyZW50X2NvbnZlcnNhdGlvbl9pZBgCIAEoCUgAiAEBEi0KBnRhcmdldBgDIAEoCzIdLmFnZW50LnYxLlNtYXJ0TW9kZVJpc2tUYXJnZXQSTgoUY29udmVyc2F0aW9uX2NvbnRleHQYBCADKAsyMC5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyQ29udmVyc2F0aW9uTWVzc2FnZUIZChdfcGFyZW50X2NvbnZlcnNhdGlvbl9pZCKBAQoaU21hcnRNb2RlQ2xhc3NpZmllclN1Y2Nlc3MSNwoIZGVjaXNpb24YASABKA4yJS5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyRGVjaXNpb24SGQoMYmxvY2tfcmVhc29uGAIgASgJSACIAQFCDwoNX2Jsb2NrX3JlYXNvbiIpChhTbWFydE1vZGVDbGFzc2lmaWVyRXJyb3ISDQoFZXJyb3IYASABKAkikwEKGVNtYXJ0TW9kZUNsYXNzaWZpZXJSZXN1bHQSNwoHc3VjY2VzcxgBIAEoCzIkLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJTdWNjZXNzSAASMwoFZXJyb3IYAiABKAsyIi5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyRXJyb3JIAEIICgZyZXN1bHQiOwoVQ2FudmFzRGlhZ25vc3RpY3NBcmdzEgwKBHBhdGgYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJIlMKGENhbnZhc0RpYWdub3N0aWNzU3VjY2VzcxIMCgRwYXRoGAEgASgJEikKC2RpYWdub3N0aWNzGAIgAygLMhQuYWdlbnQudjEuRGlhZ25vc3RpYyI1ChZDYW52YXNEaWFnbm9zdGljc0Vycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkijQEKF0NhbnZhc0RpYWdub3N0aWNzUmVzdWx0EjUKB3N1Y2Nlc3MYASABKAsyIi5hZ2VudC52MS5DYW52YXNEaWFnbm9zdGljc1N1Y2Nlc3NIABIxCgVlcnJvchgCIAEoCzIgLmFnZW50LnYxLkNhbnZhc0RpYWdub3N0aWNzRXJyb3JIAEIICgZyZXN1bHQirAEKFUNvbnZlcnNhdGlvblNlYXJjaEhpdBIXCg9jb252ZXJzYXRpb25faWQYASABKAkSDQoFdGl0bGUYAiABKAkSMgoGc291cmNlGAMgASgOMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoU291cmNlEhUKDXVwZGF0ZWRfYXRfbXMYBCABKAMSFAoHc25pcHBldBgFIAEoCUgAiAEBQgoKCF9zbmlwcGV0IoIBChlDb252ZXJzYXRpb25TZWFyY2hTdWNjZXNzEi0KBGhpdHMYASADKAsyHy5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hIaXQSEQoJdHJ1bmNhdGVkGAIgASgIEg8KB3BhcnRpYWwYAyABKAgSEgoKcmVidWlsZGluZxgEIAEoCCIoChdDb252ZXJzYXRpb25TZWFyY2hFcnJvchINCgVlcnJvchgBIAEoCSJbChZDb252ZXJzYXRpb25TZWFyY2hBcmdzEg0KBXF1ZXJ5GAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCRISCgVsaW1pdBgDIAEoBUgAiAEBQggKBl9saW1pdCKQAQoYQ29udmVyc2F0aW9uU2VhcmNoUmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hTdWNjZXNzSAASMgoFZXJyb3IYAiABKAsyIS5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hFcnJvckgAQggKBnJlc3VsdCJVChhBZ2VudFN0b3JlQ29uZmxpY3RDdXJzb3ISFQoNam91cm5hbF9lcG9jaBgBIAEoCRILCgNzZXEYAiABKAQSFQoNbGFzdF9ldmVudF9pZBgDIAEoCSKlAwoXQWdlbnRTdG9yZUNvbmZsaWN0RXZlbnQSCQoBdhgBIAEoDRIQCghldmVudF9pZBgCIAEoCRIVCg1qb3VybmFsX2Vwb2NoGAMgASgJEgsKA3NlcRgEIAEoBBINCgV0c19tcxgFIAEoBBIMCgRraW5kGAYgASgJEhUKCHN0b3JlX2lkGAcgASgJSACIAQESHgoRb3JpZ2luYWxfcmVsX3BhdGgYCCABKAlIAYgBARIeChFjb25mbGljdF9yZWxfcGF0aBgJIAEoCUgCiAEBEh4KEW9yaWdpbmFsX2Fic19wYXRoGAogASgJSAOIAQESHgoRY29uZmxpY3RfYWJzX3BhdGgYCyABKAlIBIgBARIcCg9wcmVzZXJ2ZWRfYnl0ZXMYDCABKARIBYgBAUILCglfc3RvcmVfaWRCFAoSX29yaWdpbmFsX3JlbF9wYXRoQhQKEl9jb25mbGljdF9yZWxfcGF0aEIUChJfb3JpZ2luYWxfYWJzX3BhdGhCFAoSX2NvbmZsaWN0X2Fic19wYXRoQhIKEF9wcmVzZXJ2ZWRfYnl0ZXMilAEKGUFnZW50U3RvcmVDb25mbGljdFN1Y2Nlc3MSMQoGZXZlbnRzGAEgAygLMiEuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0RXZlbnQSNwoLbmV4dF9jdXJzb3IYAiABKAsyIi5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RDdXJzb3ISCwoDZ2FwGAMgASgIIigKF0FnZW50U3RvcmVDb25mbGljdEVycm9yEg0KBWVycm9yGAEgASgJIn4KFkFnZW50U3RvcmVDb25mbGljdEFyZ3MSNwoGY3Vyc29yGAEgASgLMiIuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0Q3Vyc29ySACIAQESFAoHYWR2YW5jZRgCIAEoCEgBiAEBQgkKB19jdXJzb3JCCgoIX2FkdmFuY2UikAEKGEFnZW50U3RvcmVDb25mbGljdFJlc3VsdBI2CgdzdWNjZXNzGAEgASgLMiMuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0U3VjY2Vzc0gAEjIKBWVycm9yGAIgASgLMiEuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0RXJyb3JIAEIICgZyZXN1bHQifAoORmlsZURpZmZfQ2h1bmsSDwoHY29udGVudBgBIAEoCRINCgVsaW5lcxgCIAMoCRIRCglvbGRfc3RhcnQYAyABKAUSEQoJb2xkX2xpbmVzGAQgASgFEhEKCW5ld19zdGFydBgFIAEoBRIRCgluZXdfbGluZXMYBiABKAUikAIKCEZpbGVEaWZmEg0KBWFkZGVkGAQgASgFEg8KB3JlbW92ZWQYBSABKAUSDAoEZnJvbRgBIAEoCRIKCgJ0bxgCIAEoCRIoCgZjaHVua3MYAyADKAsyGC5hZ2VudC52MS5GaWxlRGlmZl9DaHVuaxIhChRiZWZvcmVfZmlsZV9jb250ZW50cxgGIAEoCUgAiAEBEiAKE2FmdGVyX2ZpbGVfY29udGVudHMYByABKAlIAYgBARIZCgxpc19nZW5lcmF0ZWQYCCABKAhIAogBAUIXChVfYmVmb3JlX2ZpbGVfY29udGVudHNCFgoUX2FmdGVyX2ZpbGVfY29udGVudHNCDwoNX2lzX2dlbmVyYXRlZCJbCgdHaXREaWZmEiEKBWRpZmZzGAEgAygLMhIuYWdlbnQudjEuRmlsZURpZmYSLQoJZGlmZl90eXBlGAIgASgOMhouYWdlbnQudjEuR2l0RGlmZl9EaWZmVHlwZSJoCh1HZXREaWZmUmVzcG9uc2VfU3VibW9kdWxlRGlmZhIVCg1yZWxhdGl2ZV9wYXRoGAEgASgJEh8KBGRpZmYYAiABKAsyES5hZ2VudC52MS5HaXREaWZmEg8KB2Vycm9yZWQYAyABKAgi8gMKDkdldERpZmZSZXF1ZXN0EgsKA2N3ZBgBIAEoCRILCgNyZWYYAiABKAkSEAoIYmFzZV9yZWYYAyABKAkSEgoKbWVyZ2VfYmFzZRgEIAEoCBIUCgx0YXJnZXRfcGF0aHMYBSADKAkSIgoVdW5pZmllZF9jb250ZXh0X2xpbmVzGAYgASgFSACIAQESGwoTbWF4X3VudHJhY2tlZF9maWxlcxgHIAEoBRIfChdzdWJtb2R1bGVfcmVjdXJzZV9kZXB0aBgJIAEoBRIdChVpbmNsdWRlX3NwYWNlX2NoYW5nZXMYCiABKAgSFgoOY29tbWl0dGVkX29ubHkYCyABKAgSGAoQY29tcHV0ZV9wYXRjaF9pZBgMIAEoCBIcCg9yZXR1cm5faGVhZF9zaGEYDSABKAhIAYgBARIfChJtYXhfcmVzcG9uc2VfYnl0ZXMYDiABKAVIAogBARJBCg1vdXRwdXRfZm9ybWF0GAggASgOMiUuYWdlbnQudjEuR2V0RGlmZlJlcXVlc3RfT3V0cHV0Rm9ybWF0SAOIAQFCGAoWX3VuaWZpZWRfY29udGV4dF9saW5lc0ISChBfcmV0dXJuX2hlYWRfc2hhQhUKE19tYXhfcmVzcG9uc2VfYnl0ZXNCEAoOX291dHB1dF9mb3JtYXQi/gEKD0dldERpZmZSZXNwb25zZRIfCgRkaWZmGAEgASgLMhEuYWdlbnQudjEuR2l0RGlmZhJACg9zdWJtb2R1bGVfZGlmZnMYAiADKAsyJy5hZ2VudC52MS5HZXREaWZmUmVzcG9uc2VfU3VibW9kdWxlRGlmZhIVCghwYXRjaF9pZBgDIAEoCUgAiAEBEhUKCGhlYWRfc2hhGAQgASgJSAGIAQESJAoXaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMYBSABKAhIAogBAUILCglfcGF0Y2hfaWRCCwoJX2hlYWRfc2hhQhoKGF9oYXNfdW5jb21taXR0ZWRfY2hhbmdlcyJkCg5QaVJlYWRUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuUGlSZWFkRXhlY0FyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuUGlSZWFkRXhlY1Jlc3VsdCJkCg5QaUJhc2hUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuUGlCYXNoRXhlY0FyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuUGlCYXNoRXhlY1Jlc3VsdCJkCg5QaUVkaXRUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuUGlFZGl0RXhlY0FyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuUGlFZGl0RXhlY1Jlc3VsdCJnCg9QaVdyaXRlVG9vbENhbGwSJwoEYXJncxgBIAEoCzIZLmFnZW50LnYxLlBpV3JpdGVFeGVjQXJncxIrCgZyZXN1bHQYAiABKAsyGy5hZ2VudC52MS5QaVdyaXRlRXhlY1Jlc3VsdCJkCg5QaUdyZXBUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuUGlHcmVwRXhlY0FyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuUGlHcmVwRXhlY1Jlc3VsdCJkCg5QaUZpbmRUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuUGlGaW5kRXhlY0FyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuUGlGaW5kRXhlY1Jlc3VsdCJeCgxQaUxzVG9vbENhbGwSJAoEYXJncxgBIAEoCzIWLmFnZW50LnYxLlBpTHNFeGVjQXJncxIoCgZyZXN1bHQYAiABKAsyGC5hZ2VudC52MS5QaUxzRXhlY1Jlc3VsdCKBAQobU2VhcmNoQ29udmVyc2F0aW9uc1Rvb2xDYWxsEi4KBGFyZ3MYASABKAsyIC5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hBcmdzEjIKBnJlc3VsdBgCIAEoCzIiLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaFJlc3VsdCI5ChpDb25uZWN0U2NtR2l0aHViUmVwb3NpdG9yeRINCgVvd25lchgBIAEoCRIMCgRyZXBvGAIgASgJIn4KEENvbm5lY3RTY21HaXRodWISOAoKcmVwb3NpdG9yeRgBIAEoCzIkLmFnZW50LnYxLkNvbm5lY3RTY21HaXRodWJSZXBvc2l0b3J5EhwKD2doZV9hcHBsaWNhdGlvbhgCIAEoCUgAiAEBQhIKEF9naGVfYXBwbGljYXRpb24iXgoOQ29ubmVjdFNjbUFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJEiwKBmdpdGh1YhgCIAEoCzIaLmFnZW50LnYxLkNvbm5lY3RTY21HaXRodWJIAEIICgZ0YXJnZXQiEwoRQ29ubmVjdFNjbVN1Y2Nlc3MiIAoPQ29ubmVjdFNjbUVycm9yEg0KBWVycm9yGAEgASgJIiQKEkNvbm5lY3RTY21SZWplY3RlZBIOCgZyZWFzb24YASABKAkiqgEKEENvbm5lY3RTY21SZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLkNvbm5lY3RTY21TdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5Db25uZWN0U2NtRXJyb3JIABIwCghyZWplY3RlZBgDIAEoCzIcLmFnZW50LnYxLkNvbm5lY3RTY21SZWplY3RlZEgAQggKBnJlc3VsdCJoChJDb25uZWN0U2NtVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLkNvbm5lY3RTY21BcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLkNvbm5lY3RTY21SZXN1bHQqiAEKHUFwcGxpZWRBZ2VudENoYW5nZV9DaGFuZ2VUeXBlEhsKF0NIQU5HRV9UWVBFX1VOU1BFQ0lGSUVEEAASFwoTQ0hBTkdFX1RZUEVfQ1JFQVRFRBABEhgKFENIQU5HRV9UWVBFX01PRElGSUVEEAISFwoTQ0hBTkdFX1RZUEVfREVMRVRFRBADKqQBCgtNb3VzZUJ1dHRvbhIcChhNT1VTRV9CVVRUT05fVU5TUEVDSUZJRUQQABIVChFNT1VTRV9CVVRUT05fTEVGVBABEhYKEk1PVVNFX0JVVFRPTl9SSUdIVBACEhcKE01PVVNFX0JVVFRPTl9NSURETEUQAxIVChFNT1VTRV9CVVRUT05fQkFDSxAEEhgKFE1PVVNFX0JVVFRPTl9GT1JXQVJEEAUqngEKD1Njcm9sbERpcmVjdGlvbhIgChxTQ1JPTExfRElSRUNUSU9OX1VOU1BFQ0lGSUVEEAASFwoTU0NST0xMX0RJUkVDVElPTl9VUBABEhkKFVNDUk9MTF9ESVJFQ1RJT05fRE9XThACEhkKFVNDUk9MTF9ESVJFQ1RJT05fTEVGVBADEhoKFlNDUk9MTF9ESVJFQ1RJT05fUklHSFQQBCpwChBDdXJzb3JSdWxlU291cmNlEiIKHkNVUlNPUl9SVUxFX1NPVVJDRV9VTlNQRUNJRklFRBAAEhsKF0NVUlNPUl9SVUxFX1NPVVJDRV9URUFNEAESGwoXQ1VSU09SX1JVTEVfU09VUkNFX1VTRVIQAiq8AQoSRGlhZ25vc3RpY1NldmVyaXR5EiMKH0RJQUdOT1NUSUNfU0VWRVJJVFlfVU5TUEVDSUZJRUQQABIdChlESUFHTk9TVElDX1NFVkVSSVRZX0VSUk9SEAESHwobRElBR05PU1RJQ19TRVZFUklUWV9XQVJOSU5HEAISIwofRElBR05PU1RJQ19TRVZFUklUWV9JTkZPUk1BVElPThADEhwKGERJQUdOT1NUSUNfU0VWRVJJVFlfSElOVBAEKpwBCg1SZWNvcmRpbmdNb2RlEh4KGlJFQ09SRElOR19NT0RFX1VOU1BFQ0lGSUVEEAASIgoeUkVDT1JESU5HX01PREVfU1RBUlRfUkVDT1JESU5HEAESIQodUkVDT1JESU5HX01PREVfU0FWRV9SRUNPUkRJTkcQAhIkCiBSRUNPUkRJTkdfTU9ERV9ESVNDQVJEX1JFQ09SRElORxADKpMBCh9SZXF1ZXN0ZWRGaWxlUGF0aFJlamVjdGVkUmVhc29uEjMKL1JFUVVFU1RFRF9GSUxFX1BBVEhfUkVKRUNURURfUkVBU09OX1VOU1BFQ0lGSUVEEAASOwo3UkVRVUVTVEVEX0ZJTEVfUEFUSF9SRUpFQ1RFRF9SRUFTT05fU0xBU0hFU19OT1RfQUxMT1dFRBABKq0BCgtQYWNrYWdlVHlwZRIcChhQQUNLQUdFX1RZUEVfVU5TUEVDSUZJRUQQABIfChtQQUNLQUdFX1RZUEVfQ1VSU09SX1BST0pFQ1QQARIgChxQQUNLQUdFX1RZUEVfQ1VSU09SX1BFUlNPTkFMEAISHQoZUEFDS0FHRV9UWVBFX0NMQVVERV9TS0lMTBADEh4KGlBBQ0tBR0VfVFlQRV9DTEFVREVfUExVR0lOEAQqfQoSU2FuZGJveFBvbGljeV9UeXBlEhQKEFRZUEVfVU5TUEVDSUZJRUQQABIWChJUWVBFX0lOU0VDVVJFX05PTkUQARIcChhUWVBFX1dPUktTUEFDRV9SRUFEV1JJVEUQAhIbChdUWVBFX1dPUktTUEFDRV9SRUFET05MWRADKnEKD1RpbWVvdXRCZWhhdmlvchIgChxUSU1FT1VUX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASGwoXVElNRU9VVF9CRUhBVklPUl9DQU5DRUwQARIfChtUSU1FT1VUX0JFSEFWSU9SX0JBQ0tHUk9VTkQQAip5ChBTaGVsbEFib3J0UmVhc29uEiIKHlNIRUxMX0FCT1JUX1JFQVNPTl9VTlNQRUNJRklFRBAAEiEKHVNIRUxMX0FCT1JUX1JFQVNPTl9VU0VSX0FCT1JUEAESHgoaU0hFTExfQUJPUlRfUkVBU09OX1RJTUVPVVQQAiqqAQocQ3VzdG9tU3ViYWdlbnRQZXJtaXNzaW9uTW9kZRIvCitDVVNUT01fU1VCQUdFTlRfUEVSTUlTU0lPTl9NT0RFX1VOU1BFQ0lGSUVEEAASKwonQ1VTVE9NX1NVQkFHRU5UX1BFUk1JU1NJT05fTU9ERV9ERUZBVUxUEAESLAooQ1VTVE9NX1NVQkFHRU5UX1BFUk1JU1NJT05fTU9ERV9SRUFET05MWRACKpUBCgpUb2RvU3RhdHVzEhsKF1RPRE9fU1RBVFVTX1VOU1BFQ0lGSUVEEAASFwoTVE9ET19TVEFUVVNfUEVORElORxABEhsKF1RPRE9fU1RBVFVTX0lOX1BST0dSRVNTEAISGQoVVE9ET19TVEFUVVNfQ09NUExFVEVEEAMSGQoVVE9ET19TVEFUVVNfQ0FOQ0VMTEVEEAQqZgoIQ2xpZW50T1MSGQoVQ0xJRU5UX09TX1VOU1BFQ0lGSUVEEAASFQoRQ0xJRU5UX09TX1dJTkRPV1MQARITCg9DTElFTlRfT1NfTUFDT1MQAhITCg9DTElFTlRfT1NfTElOVVgQAyrsAQocQXJ0aWZhY3RVcGxvYWREaXNwYXRjaFN0YXR1cxIvCitBUlRJRkFDVF9VUExPQURfRElTUEFUQ0hfU1RBVFVTX1VOU1BFQ0lGSUVEEAASLAooQVJUSUZBQ1RfVVBMT0FEX0RJU1BBVENIX1NUQVRVU19BQ0NFUFRFRBABEiwKKEFSVElGQUNUX1VQTE9BRF9ESVNQQVRDSF9TVEFUVVNfUkVKRUNURUQQAhI/CjtBUlRJRkFDVF9VUExPQURfRElTUEFUQ0hfU1RBVFVTX1NLSVBQRURfQUxSRUFEWV9JTl9QUk9HUkVTUxADKlcKCkZyYW1lX0tpbmQSFAoQS0lORF9VTlNQRUNJRklFRBAAEhAKDEtJTkRfUkVRVUVTVBABEhEKDUtJTkRfUkVTUE9OU0UQAhIOCgpLSU5EX0VSUk9SEAMqsAIKF0J1Z2JvdERlZXBsaW5rRXZlbnRLaW5kEioKJkJVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASJgoiQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfQ0xJQ0tFRBABEjMKL0JVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX0hBTkRMRURfRElBTE9HX1NIT1dOEAISMwovQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfSEFORExFRF9DSEFUX0NSRUFURUQQAxIkCiBCVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9FUlJPUhAEEjEKLUJVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX0hBTkRMRURfRklYX0lOX1dFQhAFKsoBCixDb21tYW5kQ2xhc3NpZmllclJlc3VsdF9TdWdnZXN0ZWRTYW5kYm94TW9kZRImCiJTVUdHRVNURURfU0FOREJPWF9NT0RFX1VOU1BFQ0lGSUVEEAASIgoeU1VHR0VTVEVEX1NBTkRCT1hfTU9ERV9TQU5EQk9YEAESJQohU1VHR0VTVEVEX1NBTkRCT1hfTU9ERV9OT19TQU5EQk9YEAISJwojU1VHR0VTVEVEX1NBTkRCT1hfTU9ERV9VTkRFVEVSTUlORUQQAyqQAQohU2hlbGxIb29rQXBwcm92YWxSZXF1aXJlbWVudF9LaW5kEjQKMFNIRUxMX0hPT0tfQVBQUk9WQUxfUkVRVUlSRU1FTlRfS0lORF9VTlNQRUNJRklFRBAAEjUKMVNIRUxMX0hPT0tfQVBQUk9WQUxfUkVRVUlSRU1FTlRfS0lORF9GT1JDRV9QUk9NUFQQASqPAQoVU2hlbGxCYWNrZ3JvdW5kUmVhc29uEicKI1NIRUxMX0JBQ0tHUk9VTkRfUkVBU09OX1VOU1BFQ0lGSUVEEAASIwofU0hFTExfQkFDS0dST1VORF9SRUFTT05fVElNRU9VVBABEigKJFNIRUxMX0JBQ0tHUk9VTkRfUkVBU09OX1VTRVJfUkVRVUVTVBACKqQBChpGb3JjZUJhY2tncm91bmRTaGVsbFN0YXR1cxItCilGT1JDRV9CQUNLR1JPVU5EX1NIRUxMX1NUQVRVU19VTlNQRUNJRklFRBAAEioKJkZPUkNFX0JBQ0tHUk9VTkRfU0hFTExfU1RBVFVTX0FDQ0VQVEVEEAESKwonRk9SQ0VfQkFDS0dST1VORF9TSEVMTF9TVEFUVVNfTk9UX0ZPVU5EEAIq0gEKGFN1YmFnZW50QmFja2dyb3VuZFJlYXNvbhIqCiZTVUJBR0VOVF9CQUNLR1JPVU5EX1JFQVNPTl9VTlNQRUNJRklFRBAAEiwKKFNVQkFHRU5UX0JBQ0tHUk9VTkRfUkVBU09OX0FHRU5UX1JFUVVFU1QQARIrCidTVUJBR0VOVF9CQUNLR1JPVU5EX1JFQVNPTl9VU0VSX1JFUVVFU1QQAhIvCitTVUJBR0VOVF9CQUNLR1JPVU5EX1JFQVNPTl9RVUVVRURfRk9MTE9XX1VQEAMqsAEKHUZvcmNlQmFja2dyb3VuZFN1YmFnZW50U3RhdHVzEjAKLEZPUkNFX0JBQ0tHUk9VTkRfU1VCQUdFTlRfU1RBVFVTX1VOU1BFQ0lGSUVEEAASLQopRk9SQ0VfQkFDS0dST1VORF9TVUJBR0VOVF9TVEFUVVNfQUNDRVBURUQQARIuCipGT1JDRV9CQUNLR1JPVU5EX1NVQkFHRU5UX1NUQVRVU19OT1RfRk9VTkQQAiqhAQobU21hcnRNb2RlQ2xhc3NpZmllckRlY2lzaW9uEi4KKlNNQVJUX01PREVfQ0xBU1NJRklFUl9ERUNJU0lPTl9VTlNQRUNJRklFRBAAEigKJFNNQVJUX01PREVfQ0xBU1NJRklFUl9ERUNJU0lPTl9BTExPVxABEigKJFNNQVJUX01PREVfQ0xBU1NJRklFUl9ERUNJU0lPTl9CTE9DSxACKpgBChhDb252ZXJzYXRpb25TZWFyY2hTb3VyY2USKgomQ09OVkVSU0FUSU9OX1NFQVJDSF9TT1VSQ0VfVU5TUEVDSUZJRUQQABIkCiBDT05WRVJTQVRJT05fU0VBUkNIX1NPVVJDRV9MT0NBTBABEioKJkNPTlZFUlNBVElPTl9TRUFSQ0hfU09VUkNFX0NMT1VEX0NBQ0hFEAIq0wEKG0dldERpZmZSZXF1ZXN0X091dHB1dEZvcm1hdBIdChlPVVRQVVRfRk9STUFUX1VOU1BFQ0lGSUVEEAASHQoZT1VUUFVUX0ZPUk1BVF9OQU1FX1NUQVRVUxABEikKJU9VVFBVVF9GT1JNQVRfTkFNRV9TVEFUVVNfQU5EX05VTVNUQVQQAhIcChhPVVRQVVRfRk9STUFUX0ZJTEVfRElGRlMQAxItCilPVVRQVVRfRk9STUFUX0RJRkZTX1dJVEhfQkVGT1JFX0FORF9BRlRFUhAEKnEKEEdpdERpZmZfRGlmZlR5cGUSGQoVRElGRl9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWRElGRl9UWVBFX0RJRkZfVE9fSEVBRBABEiYKIkRJRkZfVFlQRV9ESUZGX0ZST01fQlJBTkNIX1RPX01BSU4QAjKHBAoMQWdlbnRTZXJ2aWNlEkEKA1J1bhIcLmFnZW50LnYxLkFnZW50Q2xpZW50TWVzc2FnZRocLmFnZW50LnYxLkFnZW50U2VydmVyTWVzc2FnZRI/CgZSdW5TU0USFy5hZ2VudC52MS5CaWRpUmVxdWVzdElkGhwuYWdlbnQudjEuQWdlbnRTZXJ2ZXJNZXNzYWdlEkQKCU5hbWVBZ2VudBIaLmFnZW50LnYxLk5hbWVBZ2VudFJlcXVlc3QaGy5hZ2VudC52MS5OYW1lQWdlbnRSZXNwb25zZRJWCg9HZXRVc2FibGVNb2RlbHMSIC5hZ2VudC52MS5HZXRVc2FibGVNb2RlbHNSZXF1ZXN0GiEuYWdlbnQudjEuR2V0VXNhYmxlTW9kZWxzUmVzcG9uc2USaAoVR2V0RGVmYXVsdE1vZGVsRm9yQ2xpEiYuYWdlbnQudjEuR2V0RGVmYXVsdE1vZGVsRm9yQ2xpUmVxdWVzdBonLmFnZW50LnYxLkdldERlZmF1bHRNb2RlbEZvckNsaVJlc3BvbnNlEmsKFkdldEFsbG93ZWRNb2RlbEludGVudHMSJy5hZ2VudC52MS5HZXRBbGxvd2VkTW9kZWxJbnRlbnRzUmVxdWVzdBooLmFnZW50LnYxLkdldEFsbG93ZWRNb2RlbEludGVudHNSZXNwb25zZTK1CAoOQ29udHJvbFNlcnZpY2USTQoMUmVhZFRleHRGaWxlEh0uYWdlbnQudjEuUmVhZFRleHRGaWxlUmVxdWVzdBoeLmFnZW50LnYxLlJlYWRUZXh0RmlsZVJlc3BvbnNlElAKDVdyaXRlVGV4dEZpbGUSHi5hZ2VudC52MS5Xcml0ZVRleHRGaWxlUmVxdWVzdBofLmFnZW50LnYxLldyaXRlVGV4dEZpbGVSZXNwb25zZRJTCg5SZWFkQmluYXJ5RmlsZRIfLmFnZW50LnYxLlJlYWRCaW5hcnlGaWxlUmVxdWVzdBogLmFnZW50LnYxLlJlYWRCaW5hcnlGaWxlUmVzcG9uc2USVgoPV3JpdGVCaW5hcnlGaWxlEiAuYWdlbnQudjEuV3JpdGVCaW5hcnlGaWxlUmVxdWVzdBohLmFnZW50LnYxLldyaXRlQmluYXJ5RmlsZVJlc3BvbnNlEm4KF0dldFdvcmtzcGFjZUNoYW5nZXNIYXNoEiguYWdlbnQudjEuR2V0V29ya3NwYWNlQ2hhbmdlc0hhc2hSZXF1ZXN0GikuYWdlbnQudjEuR2V0V29ya3NwYWNlQ2hhbmdlc0hhc2hSZXNwb25zZRJxChhSZWZyZXNoR2l0aHViQWNjZXNzVG9rZW4SKS5hZ2VudC52MS5SZWZyZXNoR2l0aHViQWNjZXNzVG9rZW5SZXF1ZXN0GiouYWdlbnQudjEuUmVmcmVzaEdpdGh1YkFjY2Vzc1Rva2VuUmVzcG9uc2USawoWV2FybVJlbW90ZUFjY2Vzc1NlcnZlchInLmFnZW50LnYxLldhcm1SZW1vdGVBY2Nlc3NTZXJ2ZXJSZXF1ZXN0GiguYWdlbnQudjEuV2FybVJlbW90ZUFjY2Vzc1NlcnZlclJlc3BvbnNlElAKDUxpc3RBcnRpZmFjdHMSHi5hZ2VudC52MS5MaXN0QXJ0aWZhY3RzUmVxdWVzdBofLmFnZW50LnYxLkxpc3RBcnRpZmFjdHNSZXNwb25zZRJWCg9VcGxvYWRBcnRpZmFjdHMSIC5hZ2VudC52MS5VcGxvYWRBcnRpZmFjdHNSZXF1ZXN0GiEuYWdlbnQudjEuVXBsb2FkQXJ0aWZhY3RzUmVzcG9uc2USYgoTR2V0TWNwUmVmcmVzaFRva2VucxIkLmFnZW50LnYxLkdldE1jcFJlZnJlc2hUb2tlbnNSZXF1ZXN0GiUuYWdlbnQudjEuR2V0TWNwUmVmcmVzaFRva2Vuc1Jlc3BvbnNlEncKGlVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzEisuYWdlbnQudjEuVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNSZXF1ZXN0GiwuYWdlbnQudjEuVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNSZXNwb25zZTINCgtFeGVjU2VydmljZTJRCiJQcml2YXRlV29ya2VyQnJpZGdlRXh0ZXJuYWxTZXJ2aWNlEisKB0Nvbm5lY3QSDy5hZ2VudC52MS5GcmFtZRoPLmFnZW50LnYxLkZyYW1lMngKEExpZmVjeWNsZVNlcnZpY2USMQoNUmVzZXRJbnN0YW5jZRIPLmFnZW50LnYxLkVtcHR5Gg8uYWdlbnQudjEuRW1wdHkSMQoNUmVuZXdJbnN0YW5jZRIPLmFnZW50LnYxLkVtcHR5Gg8uYWdlbnQudjEuRW1wdHliBnByb3RvMw");var McpToolErrorSchema=messageDesc(file_agent,12),McpToolResultSchema=messageDesc(file_agent,13),McpToolCallSchema=messageDesc(file_agent,14);var ToolCallSchema=messageDesc(file_agent,46);var ConversationStepSchema=messageDesc(file_agent,53),ConversationActionSchema=messageDesc(file_agent,54),UserMessageActionSchema=messageDesc(file_agent,55);var ResumeActionSchema=messageDesc(file_agent,57);var UserMessageSchema=messageDesc(file_agent,63),AssistantMessageSchema=messageDesc(file_agent,64);var ConversationTurnStructureSchema=messageDesc(file_agent,70);var AgentConversationTurnStructureSchema=messageDesc(file_agent,72);var ConversationStateStructureSchema=messageDesc(file_agent,83);var ModelDetailsSchema=messageDesc(file_agent,88),RequestedModelSchema=messageDesc(file_agent,89),RequestedModel_ModelParameterbytesSchema=messageDesc(file_agent,90),AgentRunRequestSchema=messageDesc(file_agent,91);var ClientHeartbeatSchema=messageDesc(file_agent,114);var AgentClientMessageSchema=messageDesc(file_agent,118),AgentServerMessageSchema=messageDesc(file_agent,119);var GetUsableModelsRequestSchema=messageDesc(file_agent,122),GetUsableModelsResponseSchema=messageDesc(file_agent,123);var BackgroundShellSpawnResultSchema=messageDesc(file_agent,147);var WriteShellStdinResultSchema=messageDesc(file_agent,151);var WriteShellStdinErrorSchema=messageDesc(file_agent,153);var ComputerUseResultSchema=messageDesc(file_agent,168);var ComputerUseErrorSchema=messageDesc(file_agent,170);var DeleteResultSchema=messageDesc(file_agent,187),DeleteSuccessSchema=messageDesc(file_agent,188);var DeleteRejectedSchema=messageDesc(file_agent,193),DeleteErrorSchema=messageDesc(file_agent,194);var DiagnosticsResultSchema=messageDesc(file_agent,197),DiagnosticsSuccessSchema=messageDesc(file_agent,198);var DiagnosticsErrorSchema=messageDesc(file_agent,200),DiagnosticsRejectedSchema=messageDesc(file_agent,201);var ExecClientStreamCloseSchema=messageDesc(file_agent,236),ExecClientThrowSchema=messageDesc(file_agent,237),ExecClientHeartbeatSchema=messageDesc(file_agent,238),ExecClientControlMessageSchema=messageDesc(file_agent,239);var ExecClientMessageSchema=messageDesc(file_agent,244);var FetchResultSchema=messageDesc(file_agent,246);var FetchErrorSchema=messageDesc(file_agent,248);var GrepResultSchema=messageDesc(file_agent,255),GrepErrorSchema=messageDesc(file_agent,256),GrepSuccessSchema=messageDesc(file_agent,257),GrepUnionResultSchema=messageDesc(file_agent,258),GrepCountResultSchema=messageDesc(file_agent,259),GrepFileCountSchema=messageDesc(file_agent,260),GrepFilesResultSchema=messageDesc(file_agent,261),GrepContentResultSchema=messageDesc(file_agent,262),GrepFileMatchSchema=messageDesc(file_agent,263),GrepContentMatchSchema=messageDesc(file_agent,264);var GetBlobResultSchema=messageDesc(file_agent,268);var SetBlobResultSchema=messageDesc(file_agent,270);var KvClientMessageSchema=messageDesc(file_agent,272);var LsResultSchema=messageDesc(file_agent,274),LsSuccessSchema=messageDesc(file_agent,275),LsDirectoryTreeNodeSchema=messageDesc(file_agent,276),LsDirectoryTreeNode_FileSchema=messageDesc(file_agent,277),LsErrorSchema=messageDesc(file_agent,278),LsRejectedSchema=messageDesc(file_agent,279);var McpArgsSchema=messageDesc(file_agent,284),McpResultSchema=messageDesc(file_agent,285),McpToolNotFoundSchema=messageDesc(file_agent,286),McpTextContentSchema=messageDesc(file_agent,287),McpImageContentSchema=messageDesc(file_agent,288),McpToolResultContentItemSchema=messageDesc(file_agent,289),McpSuccessSchema=messageDesc(file_agent,290),McpErrorSchema=messageDesc(file_agent,291),McpRejectedSchema=messageDesc(file_agent,292);var ListMcpResourcesExecResultSchema=messageDesc(file_agent,295);var ListMcpResourcesSuccessSchema=messageDesc(file_agent,297);var ReadMcpResourceExecResultSchema=messageDesc(file_agent,301);var ReadMcpResourceNotFoundSchema=messageDesc(file_agent,305),McpToolDefinitionSchema=messageDesc(file_agent,306);var ReadResultSchema=messageDesc(file_agent,313),ReadSuccessSchema=messageDesc(file_agent,314),ReadErrorSchema=messageDesc(file_agent,315),ReadRejectedSchema=messageDesc(file_agent,316);var RecordScreenResultSchema=messageDesc(file_agent,327);var RecordScreenFailureSchema=messageDesc(file_agent,331);var RequestContextResultSchema=messageDesc(file_agent,336),RequestContextSuccessSchema=messageDesc(file_agent,337);var RequestContextSchema=messageDesc(file_agent,347);var SelectedImageSchema=messageDesc(file_agent,349);var SelectedContextSchema=messageDesc(file_agent,373);var ShellResultSchema=messageDesc(file_agent,389),ShellStreamStdoutSchema=messageDesc(file_agent,390),ShellStreamStderrSchema=messageDesc(file_agent,391),ShellStreamExitSchema=messageDesc(file_agent,392),ShellStreamStartSchema=messageDesc(file_agent,393);var ShellStreamSchema=messageDesc(file_agent,395);var ShellSuccessSchema=messageDesc(file_agent,397),ShellFailureSchema=messageDesc(file_agent,398);var ShellRejectedSchema=messageDesc(file_agent,400);var WriteResultSchema=messageDesc(file_agent,450),WriteSuccessSchema=messageDesc(file_agent,451);var WriteErrorSchema=messageDesc(file_agent,454),WriteRejectedSchema=messageDesc(file_agent,455);var PiTruncationSchema=messageDesc(file_agent,492);var PiReadExecSuccessSchema=messageDesc(file_agent,495),PiReadExecErrorSchema=messageDesc(file_agent,496),PiReadExecResultSchema=messageDesc(file_agent,497);var PiBashExecSuccessSchema=messageDesc(file_agent,499),PiBashExecErrorSchema=messageDesc(file_agent,500),PiBashExecResultSchema=messageDesc(file_agent,501);var PiEditExecSuccessSchema=messageDesc(file_agent,503),PiEditExecErrorSchema=messageDesc(file_agent,504),PiEditExecRejectedSchema=messageDesc(file_agent,505),PiEditExecResultSchema=messageDesc(file_agent,506);var PiWriteExecSuccessSchema=messageDesc(file_agent,508),PiWriteExecErrorSchema=messageDesc(file_agent,509),PiWriteExecRejectedSchema=messageDesc(file_agent,510),PiWriteExecResultSchema=messageDesc(file_agent,511);var PiGrepExecSuccessSchema=messageDesc(file_agent,513),PiGrepExecErrorSchema=messageDesc(file_agent,514),PiGrepExecResultSchema=messageDesc(file_agent,515);var PiFindExecSuccessSchema=messageDesc(file_agent,517),PiFindExecErrorSchema=messageDesc(file_agent,518),PiFindExecResultSchema=messageDesc(file_agent,519);var PiLsExecSuccessSchema=messageDesc(file_agent,521),PiLsExecErrorSchema=messageDesc(file_agent,522),PiLsExecResultSchema=messageDesc(file_agent,523);var McpApprovedSchema=messageDesc(file_agent,525);var McpStateServerSchema=messageDesc(file_agent,527),McpStateSuccessSchema=messageDesc(file_agent,528);var McpStateExecResultSchema=messageDesc(file_agent,531);var ShellAllowlistPrecheckResultSchema=messageDesc(file_agent,536);var McpAllowlistPrecheckResultSchema=messageDesc(file_agent,538);var WebFetchAllowlistPrecheckResultSchema=messageDesc(file_agent,540);var ForceBackgroundShellResultSchema=messageDesc(file_agent,545);var SubagentErrorSchema=messageDesc(file_agent,550),SubagentResultSchema=messageDesc(file_agent,551);var SubagentAwaitNotFoundSchema=messageDesc(file_agent,555);var SubagentAwaitResultSchema=messageDesc(file_agent,557);var ForceBackgroundSubagentResultSchema=messageDesc(file_agent,559);var PreCompactRequestResponseSchema=messageDesc(file_agent,570),SubagentStartRequestResponseSchema=messageDesc(file_agent,571),SubagentStopRequestResponseSchema=messageDesc(file_agent,572),PreToolUseRequestResponseSchema=messageDesc(file_agent,573),PostToolUseRequestResponseSchema=messageDesc(file_agent,574),PostToolUseFailureRequestResponseSchema=messageDesc(file_agent,575),BeforeSubmitPromptRequestResponseSchema=messageDesc(file_agent,576),AfterAgentResponseRequestResponseSchema=messageDesc(file_agent,577),AfterAgentThoughtRequestResponseSchema=messageDesc(file_agent,578),StopRequestResponseSchema=messageDesc(file_agent,579);var ExecuteHookResponseSchema=messageDesc(file_agent,581);var ExecuteHookResultSchema=messageDesc(file_agent,583);var SmartModeClassifierErrorSchema=messageDesc(file_agent,588),SmartModeClassifierResultSchema=messageDesc(file_agent,589);var CanvasDiagnosticsErrorSchema=messageDesc(file_agent,592),CanvasDiagnosticsResultSchema=messageDesc(file_agent,593);var ConversationSearchErrorSchema=messageDesc(file_agent,596);var ConversationSearchResultSchema=messageDesc(file_agent,598);var AgentStoreConflictErrorSchema=messageDesc(file_agent,602);var AgentStoreConflictResultSchema=messageDesc(file_agent,604);var ForceBackgroundShellStatus={UNSPECIFIED:0,ACCEPTED:1,NOT_FOUND:2};var ForceBackgroundSubagentStatus={UNSPECIFIED:0,ACCEPTED:1,NOT_FOUND:2};function piOutputText(toolResult){return toolResult.content.map(item=>item.type==="text"?item.text:`[${item.mimeType} image]`).join(`
21
+ `)}function bagValue(bag,key){if(!(!bag||typeof bag!="object"||!(key in bag)))return Reflect.get(bag,key)}function detailCount(toolResult,key){let value=bagValue(toolResult.details,key);return positiveCount(value)}function positiveCount(value){return typeof value=="number"&&Number.isFinite(value)&&value>0?Math.floor(value):void 0}function resultLimitReached(toolResult){let flat=detailCount(toolResult,"resultLimitReached");if(flat!==void 0)return flat;let limits=bagValue(bagValue(toolResult.details,"meta"),"limits");return positiveCount(bagValue(bagValue(limits,"resultLimit"),"reached"))}function piTruncation(toolResult){let direct=bagValue(toolResult.details,"truncation"),truncation=direct!==void 0?direct:bagValue(bagValue(toolResult.details,"meta"),"truncation");if(truncation==null)return;let flag=bagValue(truncation,"truncated");if(flag!==void 0&&flag!==!0)return;let truncatedBy=bagValue(truncation,"truncatedBy"),totalLines=bagValue(truncation,"totalLines"),outputLines=bagValue(truncation,"outputLines"),outputBytes=bagValue(truncation,"outputBytes");return create(PiTruncationSchema,{truncated:!0,truncatedBy:typeof truncatedBy=="string"?truncatedBy:"",totalLines:typeof totalLines=="number"?totalLines:0,outputLines:typeof outputLines=="number"?outputLines:0,outputBytes:typeof outputBytes=="number"?outputBytes:0,firstLineExceedsLimit:bagValue(truncation,"firstLineExceedsLimit")===!0,lastLinePartial:bagValue(truncation,"lastLinePartial")===!0})}function buildPiReadResult(toolResult){let text=piOutputText(toolResult);return toolResult.isError?buildPiReadError(text||"Read failed"):create(PiReadExecResultSchema,{result:{case:"success",value:create(PiReadExecSuccessSchema,{output:text,truncation:piTruncation(toolResult)})}})}function buildPiReadError(error){return create(PiReadExecResultSchema,{result:{case:"error",value:create(PiReadExecErrorSchema,{error})}})}function buildPiBashResult(toolResult){let text=piOutputText(toolResult),truncation=piTruncation(toolResult);return toolResult.isError?create(PiBashExecResultSchema,{result:{case:"error",value:create(PiBashExecErrorSchema,{error:text||"Command failed",truncation})}}):create(PiBashExecResultSchema,{result:{case:"success",value:create(PiBashExecSuccessSchema,{output:text,truncation})}})}function buildPiBashError(error){return create(PiBashExecResultSchema,{result:{case:"error",value:create(PiBashExecErrorSchema,{error})}})}function buildPiEditResult(toolResult){let text=piOutputText(toolResult);if(toolResult.isError)return buildPiEditError(text||"Edit failed");let diff=bagValue(toolResult.details,"diff"),patch=bagValue(toolResult.details,"patch");return create(PiEditExecResultSchema,{result:{case:"success",value:create(PiEditExecSuccessSchema,{output:text,diff:typeof diff=="string"?diff:"",patch:typeof patch=="string"?patch:"",firstChangedLine:detailCount(toolResult,"firstChangedLine")})}})}function buildPiEditError(error){return create(PiEditExecResultSchema,{result:{case:"error",value:create(PiEditExecErrorSchema,{error})}})}function buildPiEditRejected(reason){return create(PiEditExecResultSchema,{result:{case:"rejected",value:create(PiEditExecRejectedSchema,{reason})}})}function buildPiWriteResult(toolResult){let text=piOutputText(toolResult);return toolResult.isError?buildPiWriteError(text||"Write failed"):create(PiWriteExecResultSchema,{result:{case:"success",value:create(PiWriteExecSuccessSchema,{output:text})}})}function buildPiWriteError(error){return create(PiWriteExecResultSchema,{result:{case:"error",value:create(PiWriteExecErrorSchema,{error})}})}function buildPiWriteRejected(reason){return create(PiWriteExecResultSchema,{result:{case:"rejected",value:create(PiWriteExecRejectedSchema,{reason})}})}function buildPiGrepResult(toolResult){let text=piOutputText(toolResult);if(toolResult.isError)return buildPiGrepError(text||"Grep failed");let matchLimitReached=detailCount(toolResult,"perFileLimitReached");return create(PiGrepExecResultSchema,{result:{case:"success",value:create(PiGrepExecSuccessSchema,{output:text,truncation:piTruncation(toolResult)??grepInternalCapTruncation(toolResult,text,matchLimitReached),matchLimitReached,linesTruncated:bagValue(toolResult.details,"linesTruncated")===!0})}})}function grepInternalCapTruncation(toolResult,text,matchLimitReached){if(matchLimitReached===void 0&&bagValue(toolResult.details,"truncated")===!0)return create(PiTruncationSchema,{truncated:!0,truncatedBy:"matches",totalLines:0,outputLines:text?text.split(`
22
+ `).length:0,outputBytes:Buffer.byteLength(text,"utf-8"),firstLineExceedsLimit:!1,lastLinePartial:!1})}function buildPiGrepError(error){return create(PiGrepExecResultSchema,{result:{case:"error",value:create(PiGrepExecErrorSchema,{error})}})}function buildPiFindResult(toolResult){let text=piOutputText(toolResult);return toolResult.isError?buildPiFindError(text||"Find failed"):create(PiFindExecResultSchema,{result:{case:"success",value:create(PiFindExecSuccessSchema,{output:text,truncation:piTruncation(toolResult),resultLimitReached:resultLimitReached(toolResult)})}})}function buildPiFindError(error){return create(PiFindExecResultSchema,{result:{case:"error",value:create(PiFindExecErrorSchema,{error})}})}function buildPiLsResult(toolResult){let text=piOutputText(toolResult);return toolResult.isError?buildPiLsError(text||"Ls failed"):create(PiLsExecResultSchema,{result:{case:"success",value:create(PiLsExecSuccessSchema,{output:text,truncation:piTruncation(toolResult),entryLimitReached:resultLimitReached(toolResult)})}})}function buildPiLsError(error){return create(PiLsExecResultSchema,{result:{case:"error",value:create(PiLsExecErrorSchema,{error})}})}function buildMcpStateResult(tools,serverIdentifiers){let byProvider=new Map;for(let tool of tools){let identifier=tool.providerIdentifier,existing=byProvider.get(identifier);existing?existing.push(tool):byProvider.set(identifier,[tool])}let wanted=serverIdentifiers.length>0?new Set(serverIdentifiers):void 0,servers=[];for(let[identifier,serverTools]of byProvider)wanted&&!wanted.has(identifier)||servers.push(create(McpStateServerSchema,{serverName:identifier,serverIdentifier:identifier,tools:serverTools,status:"connected"}));return create(McpStateExecResultSchema,{result:{case:"success",value:create(McpStateSuccessSchema,{servers})}})}function buildNeutralHookResult(request){let response;switch(request?.request.case){case"preCompact":response=create(ExecuteHookResponseSchema,{response:{case:"preCompact",value:create(PreCompactRequestResponseSchema,{})}});break;case"subagentStart":response=create(ExecuteHookResponseSchema,{response:{case:"subagentStart",value:create(SubagentStartRequestResponseSchema,{})}});break;case"subagentStop":response=create(ExecuteHookResponseSchema,{response:{case:"subagentStop",value:create(SubagentStopRequestResponseSchema,{})}});break;case"preToolUse":response=create(ExecuteHookResponseSchema,{response:{case:"preToolUse",value:create(PreToolUseRequestResponseSchema,{})}});break;case"postToolUse":response=create(ExecuteHookResponseSchema,{response:{case:"postToolUse",value:create(PostToolUseRequestResponseSchema,{})}});break;case"postToolUseFailure":response=create(ExecuteHookResponseSchema,{response:{case:"postToolUseFailure",value:create(PostToolUseFailureRequestResponseSchema,{})}});break;case"beforeSubmitPrompt":response=create(ExecuteHookResponseSchema,{response:{case:"beforeSubmitPrompt",value:create(BeforeSubmitPromptRequestResponseSchema,{})}});break;case"afterAgentResponse":response=create(ExecuteHookResponseSchema,{response:{case:"afterAgentResponse",value:create(AfterAgentResponseRequestResponseSchema,{})}});break;case"afterAgentThought":response=create(ExecuteHookResponseSchema,{response:{case:"afterAgentThought",value:create(AfterAgentThoughtRequestResponseSchema,{})}});break;case"stop":response=create(ExecuteHookResponseSchema,{response:{case:"stop",value:create(StopRequestResponseSchema,{})}});break;default:return null}return create(ExecuteHookResultSchema,{response})}function piReadArgs(path,offset,limit){return limit!==void 0&&Math.floor(limit)<=0?null:{path,offset:offset!==void 0?Math.max(1,Math.floor(offset)):void 0,limit:limit!==void 0?Math.floor(limit):void 0}}function piLsPath(basePath){return basePath||"."}function piLimit(limit){return limit===void 0?void 0:Math.max(1,Math.floor(limit))}function piTimeout(timeout){return timeout!==void 0&&timeout>=0?timeout:void 0}function composeShellCommand(command,workingDirectory){return workingDirectory?`cd ${`'${workingDirectory.replace(/'/g,"'\\''")}'`} && { ${command}
23
+ }`:command}function omitUndefinedArgs(args){let out={};for(let key of Object.keys(args)){let value=args[key];value!==void 0&&(out[key]=value)}return out}var cursor_variant_aliases_default={$schema:"cursor-variant-aliases/v1",source:"union of GetUsableModels live capture (204 ids) and cursor-agent CLI listing capture (203 ids), 2026-08-18",aliases:{"claude-4-sonnet":{targetId:"claude-4-sonnet",legacyVariantId:"claude-4-sonnet",encoding:"legacy-variant"},"claude-4-sonnet-thinking":{targetId:"claude-4-sonnet-thinking",legacyVariantId:"claude-4-sonnet-thinking",encoding:"legacy-variant"},"claude-4.5-opus-high":{targetId:"claude-4.5-opus",level:"high",legacyVariantId:"claude-4.5-opus-high",encoding:"legacy-variant"},"claude-4.5-opus-high-thinking":{targetId:"claude-4.5-opus-thinking",level:"high",legacyVariantId:"claude-4.5-opus-high-thinking",encoding:"legacy-variant"},"claude-4.5-sonnet":{targetId:"claude-4.5-sonnet",legacyVariantId:"claude-4.5-sonnet",encoding:"legacy-variant"},"claude-4.5-sonnet-thinking":{targetId:"claude-4.5-sonnet-thinking",legacyVariantId:"claude-4.5-sonnet-thinking",encoding:"legacy-variant"},"claude-4.6-opus-high":{targetId:"claude-4.6-opus",level:"high",legacyVariantId:"claude-4.6-opus-high",encoding:"legacy-variant"},"claude-4.6-opus-max":{targetId:"claude-4.6-opus",level:"max",legacyVariantId:"claude-4.6-opus-max",encoding:"legacy-variant"},"claude-4.6-opus-high-thinking":{targetId:"claude-4.6-opus-thinking",level:"high",legacyVariantId:"claude-4.6-opus-high-thinking",encoding:"legacy-variant"},"claude-4.6-opus-max-thinking":{targetId:"claude-4.6-opus-thinking",level:"max",legacyVariantId:"claude-4.6-opus-max-thinking",encoding:"legacy-variant"},"claude-4.6-sonnet-medium":{targetId:"claude-4.6-sonnet",level:"medium",legacyVariantId:"claude-4.6-sonnet-medium",encoding:"legacy-variant"},"claude-4.6-sonnet-medium-thinking":{targetId:"claude-4.6-sonnet-thinking",level:"medium",legacyVariantId:"claude-4.6-sonnet-medium-thinking",encoding:"legacy-variant"},"claude-fable-5-high":{targetId:"claude-fable-5",level:"high",legacyVariantId:"claude-fable-5-high",encoding:"legacy-variant"},"claude-fable-5-low":{targetId:"claude-fable-5",level:"low",legacyVariantId:"claude-fable-5-low",encoding:"legacy-variant"},"claude-fable-5-max":{targetId:"claude-fable-5",level:"max",legacyVariantId:"claude-fable-5-max",encoding:"legacy-variant"},"claude-fable-5-medium":{targetId:"claude-fable-5",level:"medium",legacyVariantId:"claude-fable-5-medium",encoding:"legacy-variant"},"claude-fable-5-xhigh":{targetId:"claude-fable-5",level:"xhigh",legacyVariantId:"claude-fable-5-xhigh",encoding:"legacy-variant"},"claude-fable-5-thinking-high":{targetId:"claude-fable-5-thinking",level:"high",legacyVariantId:"claude-fable-5-thinking-high",encoding:"legacy-variant"},"claude-fable-5-thinking-low":{targetId:"claude-fable-5-thinking",level:"low",legacyVariantId:"claude-fable-5-thinking-low",encoding:"legacy-variant"},"claude-fable-5-thinking-max":{targetId:"claude-fable-5-thinking",level:"max",legacyVariantId:"claude-fable-5-thinking-max",encoding:"legacy-variant"},"claude-fable-5-thinking-medium":{targetId:"claude-fable-5-thinking",level:"medium",legacyVariantId:"claude-fable-5-thinking-medium",encoding:"legacy-variant"},"claude-fable-5-thinking-xhigh":{targetId:"claude-fable-5-thinking",level:"xhigh",legacyVariantId:"claude-fable-5-thinking-xhigh",encoding:"legacy-variant"},"claude-opus-4-7-high":{targetId:"claude-opus-4-7",level:"high",legacyVariantId:"claude-opus-4-7-high",encoding:"legacy-variant"},"claude-opus-4-7-low":{targetId:"claude-opus-4-7",level:"low",legacyVariantId:"claude-opus-4-7-low",encoding:"legacy-variant"},"claude-opus-4-7-max":{targetId:"claude-opus-4-7",level:"max",legacyVariantId:"claude-opus-4-7-max",encoding:"legacy-variant"},"claude-opus-4-7-medium":{targetId:"claude-opus-4-7",level:"medium",legacyVariantId:"claude-opus-4-7-medium",encoding:"legacy-variant"},"claude-opus-4-7-xhigh":{targetId:"claude-opus-4-7",level:"xhigh",legacyVariantId:"claude-opus-4-7-xhigh",encoding:"legacy-variant"},"claude-opus-4-7-high-fast":{targetId:"claude-opus-4-7-high-fast",legacyVariantId:"claude-opus-4-7-high-fast",encoding:"legacy-variant"},"claude-opus-4-7-low-fast":{targetId:"claude-opus-4-7-low-fast",legacyVariantId:"claude-opus-4-7-low-fast",encoding:"legacy-variant"},"claude-opus-4-7-max-fast":{targetId:"claude-opus-4-7-max-fast",legacyVariantId:"claude-opus-4-7-max-fast",encoding:"legacy-variant"},"claude-opus-4-7-medium-fast":{targetId:"claude-opus-4-7-medium-fast",legacyVariantId:"claude-opus-4-7-medium-fast",encoding:"legacy-variant"},"claude-opus-4-7-xhigh-fast":{targetId:"claude-opus-4-7-xhigh-fast",legacyVariantId:"claude-opus-4-7-xhigh-fast",encoding:"legacy-variant"},"claude-opus-4-7-thinking-high":{targetId:"claude-opus-4-7-thinking",level:"high",legacyVariantId:"claude-opus-4-7-thinking-high",encoding:"legacy-variant"},"claude-opus-4-7-thinking-low":{targetId:"claude-opus-4-7-thinking",level:"low",legacyVariantId:"claude-opus-4-7-thinking-low",encoding:"legacy-variant"},"claude-opus-4-7-thinking-max":{targetId:"claude-opus-4-7-thinking",level:"max",legacyVariantId:"claude-opus-4-7-thinking-max",encoding:"legacy-variant"},"claude-opus-4-7-thinking-medium":{targetId:"claude-opus-4-7-thinking",level:"medium",legacyVariantId:"claude-opus-4-7-thinking-medium",encoding:"legacy-variant"},"claude-opus-4-7-thinking-xhigh":{targetId:"claude-opus-4-7-thinking",level:"xhigh",legacyVariantId:"claude-opus-4-7-thinking-xhigh",encoding:"legacy-variant"},"claude-opus-4-7-thinking-high-fast":{targetId:"claude-opus-4-7-thinking-high-fast",legacyVariantId:"claude-opus-4-7-thinking-high-fast",encoding:"legacy-variant"},"claude-opus-4-7-thinking-low-fast":{targetId:"claude-opus-4-7-thinking-low-fast",legacyVariantId:"claude-opus-4-7-thinking-low-fast",encoding:"legacy-variant"},"claude-opus-4-7-thinking-max-fast":{targetId:"claude-opus-4-7-thinking-max-fast",legacyVariantId:"claude-opus-4-7-thinking-max-fast",encoding:"legacy-variant"},"claude-opus-4-7-thinking-medium-fast":{targetId:"claude-opus-4-7-thinking-medium-fast",legacyVariantId:"claude-opus-4-7-thinking-medium-fast",encoding:"legacy-variant"},"claude-opus-4-7-thinking-xhigh-fast":{targetId:"claude-opus-4-7-thinking-xhigh-fast",legacyVariantId:"claude-opus-4-7-thinking-xhigh-fast",encoding:"legacy-variant"},"claude-opus-4-8-high":{targetId:"claude-opus-4-8",level:"high",legacyVariantId:"claude-opus-4-8-high",encoding:"legacy-variant"},"claude-opus-4-8-low":{targetId:"claude-opus-4-8",level:"low",legacyVariantId:"claude-opus-4-8-low",encoding:"legacy-variant"},"claude-opus-4-8-max":{targetId:"claude-opus-4-8",level:"max",legacyVariantId:"claude-opus-4-8-max",encoding:"legacy-variant"},"claude-opus-4-8-medium":{targetId:"claude-opus-4-8",level:"medium",legacyVariantId:"claude-opus-4-8-medium",encoding:"legacy-variant"},"claude-opus-4-8-xhigh":{targetId:"claude-opus-4-8",level:"xhigh",legacyVariantId:"claude-opus-4-8-xhigh",encoding:"legacy-variant"},"claude-opus-4-8-high-fast":{targetId:"claude-opus-4-8-high-fast",legacyVariantId:"claude-opus-4-8-high-fast",encoding:"legacy-variant"},"claude-opus-4-8-low-fast":{targetId:"claude-opus-4-8-low-fast",legacyVariantId:"claude-opus-4-8-low-fast",encoding:"legacy-variant"},"claude-opus-4-8-max-fast":{targetId:"claude-opus-4-8-max-fast",legacyVariantId:"claude-opus-4-8-max-fast",encoding:"legacy-variant"},"claude-opus-4-8-medium-fast":{targetId:"claude-opus-4-8-medium-fast",legacyVariantId:"claude-opus-4-8-medium-fast",encoding:"legacy-variant"},"claude-opus-4-8-xhigh-fast":{targetId:"claude-opus-4-8-xhigh-fast",legacyVariantId:"claude-opus-4-8-xhigh-fast",encoding:"legacy-variant"},"claude-opus-4-8-thinking-high":{targetId:"claude-opus-4-8-thinking",level:"high",legacyVariantId:"claude-opus-4-8-thinking-high",encoding:"legacy-variant"},"claude-opus-4-8-thinking-low":{targetId:"claude-opus-4-8-thinking",level:"low",legacyVariantId:"claude-opus-4-8-thinking-low",encoding:"legacy-variant"},"claude-opus-4-8-thinking-max":{targetId:"claude-opus-4-8-thinking",level:"max",legacyVariantId:"claude-opus-4-8-thinking-max",encoding:"legacy-variant"},"claude-opus-4-8-thinking-medium":{targetId:"claude-opus-4-8-thinking",level:"medium",legacyVariantId:"claude-opus-4-8-thinking-medium",encoding:"legacy-variant"},"claude-opus-4-8-thinking-xhigh":{targetId:"claude-opus-4-8-thinking",level:"xhigh",legacyVariantId:"claude-opus-4-8-thinking-xhigh",encoding:"legacy-variant"},"claude-opus-4-8-thinking-high-fast":{targetId:"claude-opus-4-8-thinking-high-fast",legacyVariantId:"claude-opus-4-8-thinking-high-fast",encoding:"legacy-variant"},"claude-opus-4-8-thinking-low-fast":{targetId:"claude-opus-4-8-thinking-low-fast",legacyVariantId:"claude-opus-4-8-thinking-low-fast",encoding:"legacy-variant"},"claude-opus-4-8-thinking-max-fast":{targetId:"claude-opus-4-8-thinking-max-fast",legacyVariantId:"claude-opus-4-8-thinking-max-fast",encoding:"legacy-variant"},"claude-opus-4-8-thinking-medium-fast":{targetId:"claude-opus-4-8-thinking-medium-fast",legacyVariantId:"claude-opus-4-8-thinking-medium-fast",encoding:"legacy-variant"},"claude-opus-4-8-thinking-xhigh-fast":{targetId:"claude-opus-4-8-thinking-xhigh-fast",legacyVariantId:"claude-opus-4-8-thinking-xhigh-fast",encoding:"legacy-variant"},"claude-opus-5-high":{targetId:"claude-opus-5",level:"high",legacyVariantId:"claude-opus-5-high",encoding:"legacy-variant"},"claude-opus-5-low":{targetId:"claude-opus-5",level:"low",legacyVariantId:"claude-opus-5-low",encoding:"legacy-variant"},"claude-opus-5-medium":{targetId:"claude-opus-5",level:"medium",legacyVariantId:"claude-opus-5-medium",encoding:"legacy-variant"},"claude-opus-5-max":{targetId:"claude-opus-5",level:"max",legacyVariantId:"claude-opus-5-max",encoding:"legacy-variant"},"claude-opus-5-high-fast":{targetId:"claude-opus-5-high-fast",legacyVariantId:"claude-opus-5-high-fast",encoding:"legacy-variant"},"claude-opus-5-low-fast":{targetId:"claude-opus-5-low-fast",legacyVariantId:"claude-opus-5-low-fast",encoding:"legacy-variant"},"claude-opus-5-medium-fast":{targetId:"claude-opus-5-medium-fast",legacyVariantId:"claude-opus-5-medium-fast",encoding:"legacy-variant"},"claude-opus-5-max-fast":{targetId:"claude-opus-5-max-fast",legacyVariantId:"claude-opus-5-max-fast",encoding:"legacy-variant"},"claude-opus-5-thinking-high":{targetId:"claude-opus-5-thinking",level:"high",legacyVariantId:"claude-opus-5-thinking-high",encoding:"legacy-variant"},"claude-opus-5-thinking-low":{targetId:"claude-opus-5-thinking",level:"low",legacyVariantId:"claude-opus-5-thinking-low",encoding:"legacy-variant"},"claude-opus-5-thinking-max":{targetId:"claude-opus-5-thinking",level:"max",legacyVariantId:"claude-opus-5-thinking-max",encoding:"legacy-variant"},"claude-opus-5-thinking-medium":{targetId:"claude-opus-5-thinking",level:"medium",legacyVariantId:"claude-opus-5-thinking-medium",encoding:"legacy-variant"},"claude-opus-5-thinking-xhigh":{targetId:"claude-opus-5-thinking",level:"xhigh",legacyVariantId:"claude-opus-5-thinking-xhigh",encoding:"legacy-variant"},"claude-opus-5-thinking-high-fast":{targetId:"claude-opus-5-thinking-high-fast",legacyVariantId:"claude-opus-5-thinking-high-fast",encoding:"legacy-variant"},"claude-opus-5-thinking-low-fast":{targetId:"claude-opus-5-thinking-low-fast",legacyVariantId:"claude-opus-5-thinking-low-fast",encoding:"legacy-variant"},"claude-opus-5-thinking-max-fast":{targetId:"claude-opus-5-thinking-max-fast",legacyVariantId:"claude-opus-5-thinking-max-fast",encoding:"legacy-variant"},"claude-opus-5-thinking-medium-fast":{targetId:"claude-opus-5-thinking-medium-fast",legacyVariantId:"claude-opus-5-thinking-medium-fast",encoding:"legacy-variant"},"claude-opus-5-thinking-xhigh-fast":{targetId:"claude-opus-5-thinking-xhigh-fast",legacyVariantId:"claude-opus-5-thinking-xhigh-fast",encoding:"legacy-variant"},"claude-sonnet-5-high":{targetId:"claude-sonnet-5",level:"high",legacyVariantId:"claude-sonnet-5-high",encoding:"legacy-variant"},"claude-sonnet-5-low":{targetId:"claude-sonnet-5",level:"low",legacyVariantId:"claude-sonnet-5-low",encoding:"legacy-variant"},"claude-sonnet-5-max":{targetId:"claude-sonnet-5",level:"max",legacyVariantId:"claude-sonnet-5-max",encoding:"legacy-variant"},"claude-sonnet-5-medium":{targetId:"claude-sonnet-5",level:"medium",legacyVariantId:"claude-sonnet-5-medium",encoding:"legacy-variant"},"claude-sonnet-5-xhigh":{targetId:"claude-sonnet-5",level:"xhigh",legacyVariantId:"claude-sonnet-5-xhigh",encoding:"legacy-variant"},"claude-sonnet-5-thinking-high":{targetId:"claude-sonnet-5-thinking",level:"high",legacyVariantId:"claude-sonnet-5-thinking-high",encoding:"legacy-variant"},"claude-sonnet-5-thinking-low":{targetId:"claude-sonnet-5-thinking",level:"low",legacyVariantId:"claude-sonnet-5-thinking-low",encoding:"legacy-variant"},"claude-sonnet-5-thinking-max":{targetId:"claude-sonnet-5-thinking",level:"max",legacyVariantId:"claude-sonnet-5-thinking-max",encoding:"legacy-variant"},"claude-sonnet-5-thinking-medium":{targetId:"claude-sonnet-5-thinking",level:"medium",legacyVariantId:"claude-sonnet-5-thinking-medium",encoding:"legacy-variant"},"claude-sonnet-5-thinking-xhigh":{targetId:"claude-sonnet-5-thinking",level:"xhigh",legacyVariantId:"claude-sonnet-5-thinking-xhigh",encoding:"legacy-variant"},"composer-2.5":{targetId:"composer-2.5",legacyVariantId:"composer-2.5",encoding:"legacy-variant"},"composer-2.5-fast":{targetId:"composer-2.5-fast",legacyVariantId:"composer-2.5-fast",encoding:"legacy-variant"},"cursor-grok-4.5-high":{targetId:"cursor-grok-4.5",level:"high",legacyVariantId:"cursor-grok-4.5-high",encoding:"legacy-variant"},"cursor-grok-4.5-low":{targetId:"cursor-grok-4.5",level:"low",legacyVariantId:"cursor-grok-4.5-low",encoding:"legacy-variant"},"cursor-grok-4.5-medium":{targetId:"cursor-grok-4.5",level:"medium",legacyVariantId:"cursor-grok-4.5-medium",encoding:"legacy-variant"},"cursor-grok-4.5-max":{targetId:"cursor-grok-4.5",level:"max",legacyVariantId:"cursor-grok-4.5-max",encoding:"legacy-variant"},"cursor-grok-4.5-thinking-low":{targetId:"cursor-grok-4.5",level:"low",legacyVariantId:"cursor-grok-4.5-thinking-low",encoding:"legacy-variant"},"cursor-grok-4.5-thinking-medium":{targetId:"cursor-grok-4.5",level:"medium",legacyVariantId:"cursor-grok-4.5-thinking-medium",encoding:"legacy-variant"},"cursor-grok-4.5-thinking-max":{targetId:"cursor-grok-4.5",level:"max",legacyVariantId:"cursor-grok-4.5-thinking-max",encoding:"legacy-variant"},"cursor-grok-4.5-high-fast":{targetId:"cursor-grok-4.5-high-fast",legacyVariantId:"cursor-grok-4.5-high-fast",encoding:"legacy-variant"},"cursor-grok-4.5-low-fast":{targetId:"cursor-grok-4.5-low-fast",legacyVariantId:"cursor-grok-4.5-low-fast",encoding:"legacy-variant"},"cursor-grok-4.5-medium-fast":{targetId:"cursor-grok-4.5-medium-fast",legacyVariantId:"cursor-grok-4.5-medium-fast",encoding:"legacy-variant"},"cursor-grok-4.5-max-fast":{targetId:"cursor-grok-4.5-max-fast",legacyVariantId:"cursor-grok-4.5-max-fast",encoding:"legacy-variant"},"cursor-grok-4.6-high":{targetId:"cursor-grok-4.6",level:"high",legacyVariantId:"cursor-grok-4.6-high",encoding:"legacy-variant"},"cursor-grok-4.6-low":{targetId:"cursor-grok-4.6",level:"low",legacyVariantId:"cursor-grok-4.6-low",encoding:"legacy-variant"},"cursor-grok-4.6-medium":{targetId:"cursor-grok-4.6",level:"medium",legacyVariantId:"cursor-grok-4.6-medium",encoding:"legacy-variant"},"cursor-grok-4.6-xhigh":{targetId:"cursor-grok-4.6",level:"xhigh",legacyVariantId:"cursor-grok-4.6-xhigh",encoding:"legacy-variant"},"cursor-grok-4.6-max":{targetId:"cursor-grok-4.6",level:"max",legacyVariantId:"cursor-grok-4.6-max",encoding:"legacy-variant"},"cursor-grok-4.6-thinking-low":{targetId:"cursor-grok-4.6",level:"low",legacyVariantId:"cursor-grok-4.6-thinking-low",encoding:"legacy-variant"},"cursor-grok-4.6-thinking-medium":{targetId:"cursor-grok-4.6",level:"medium",legacyVariantId:"cursor-grok-4.6-thinking-medium",encoding:"legacy-variant"},"cursor-grok-4.6-thinking-max":{targetId:"cursor-grok-4.6",level:"max",legacyVariantId:"cursor-grok-4.6-thinking-max",encoding:"legacy-variant"},"cursor-grok-4.6-high-fast":{targetId:"cursor-grok-4.6-high-fast",legacyVariantId:"cursor-grok-4.6-high-fast",encoding:"legacy-variant"},"cursor-grok-4.6-low-fast":{targetId:"cursor-grok-4.6-low-fast",legacyVariantId:"cursor-grok-4.6-low-fast",encoding:"legacy-variant"},"cursor-grok-4.6-medium-fast":{targetId:"cursor-grok-4.6-medium-fast",legacyVariantId:"cursor-grok-4.6-medium-fast",encoding:"legacy-variant"},"cursor-grok-4.6-xhigh-fast":{targetId:"cursor-grok-4.6-xhigh-fast",legacyVariantId:"cursor-grok-4.6-xhigh-fast",encoding:"legacy-variant"},"cursor-grok-4.6-max-fast":{targetId:"cursor-grok-4.6-max-fast",legacyVariantId:"cursor-grok-4.6-max-fast",encoding:"legacy-variant"},default:{targetId:"default",legacyVariantId:"default",encoding:"legacy-variant"},"gemini-3-flash":{targetId:"gemini-3-flash",legacyVariantId:"gemini-3-flash",encoding:"legacy-variant"},"gemini-3.1-pro":{targetId:"gemini-3.1-pro",legacyVariantId:"gemini-3.1-pro",encoding:"legacy-variant"},"gemini-3.5-flash":{targetId:"gemini-3.5-flash",legacyVariantId:"gemini-3.5-flash",encoding:"legacy-variant"},"gemini-3.6-flash-high":{targetId:"gemini-3.6-flash",level:"high",legacyVariantId:"gemini-3.6-flash-high",encoding:"legacy-variant"},"gemini-3.6-flash-low":{targetId:"gemini-3.6-flash",level:"low",legacyVariantId:"gemini-3.6-flash-low",encoding:"legacy-variant"},"gemini-3.6-flash-medium":{targetId:"gemini-3.6-flash",level:"medium",legacyVariantId:"gemini-3.6-flash-medium",encoding:"legacy-variant"},"gemini-3.6-flash-minimal":{targetId:"gemini-3.6-flash",level:"minimal",legacyVariantId:"gemini-3.6-flash-minimal",encoding:"legacy-variant"},"gemini-3.7-flash-high":{targetId:"gemini-3.7-flash",level:"high",legacyVariantId:"gemini-3.7-flash-high",encoding:"legacy-variant"},"gemini-3.7-flash-low":{targetId:"gemini-3.7-flash",level:"low",legacyVariantId:"gemini-3.7-flash-low",encoding:"legacy-variant"},"gemini-3.7-flash-medium":{targetId:"gemini-3.7-flash",level:"medium",legacyVariantId:"gemini-3.7-flash-medium",encoding:"legacy-variant"},"gemini-3.7-flash-max":{targetId:"gemini-3.7-flash",level:"max",legacyVariantId:"gemini-3.7-flash-max",encoding:"legacy-variant"},"gemini-3.7-flash-thinking-low":{targetId:"gemini-3.7-flash",level:"low",legacyVariantId:"gemini-3.7-flash-thinking-low",encoding:"legacy-variant"},"gemini-3.7-flash-thinking-medium":{targetId:"gemini-3.7-flash",level:"medium",legacyVariantId:"gemini-3.7-flash-thinking-medium",encoding:"legacy-variant"},"gemini-3.7-flash-thinking-max":{targetId:"gemini-3.7-flash",level:"max",legacyVariantId:"gemini-3.7-flash-thinking-max",encoding:"legacy-variant"},"glm-5.2-high":{targetId:"glm-5.2",level:"high",legacyVariantId:"glm-5.2-high",encoding:"legacy-variant"},"glm-5.2-max":{targetId:"glm-5.2",level:"max",legacyVariantId:"glm-5.2-max",encoding:"legacy-variant"},"gpt-5-mini":{targetId:"gpt-5-mini",legacyVariantId:"gpt-5-mini",encoding:"legacy-variant"},"gpt-5.1":{targetId:"gpt-5.1",legacyVariantId:"gpt-5.1",encoding:"legacy-variant"},"gpt-5.1-high":{targetId:"gpt-5.1",level:"high",legacyVariantId:"gpt-5.1-high",encoding:"legacy-variant"},"gpt-5.1-low":{targetId:"gpt-5.1",level:"low",legacyVariantId:"gpt-5.1-low",encoding:"legacy-variant"},"gpt-5.2":{targetId:"gpt-5.2",legacyVariantId:"gpt-5.2",encoding:"legacy-variant"},"gpt-5.2-high":{targetId:"gpt-5.2",level:"high",legacyVariantId:"gpt-5.2-high",encoding:"legacy-variant"},"gpt-5.2-low":{targetId:"gpt-5.2",level:"low",legacyVariantId:"gpt-5.2-low",encoding:"legacy-variant"},"gpt-5.2-xhigh":{targetId:"gpt-5.2",level:"xhigh",legacyVariantId:"gpt-5.2-xhigh",encoding:"legacy-variant"},"gpt-5.2-medium":{targetId:"gpt-5.2",level:"medium",legacyVariantId:"gpt-5.2-medium",encoding:"legacy-variant"},"gpt-5.2-max":{targetId:"gpt-5.2",level:"max",legacyVariantId:"gpt-5.2-max",encoding:"legacy-variant"},"gpt-5.2-thinking-low":{targetId:"gpt-5.2",level:"low",legacyVariantId:"gpt-5.2-thinking-low",encoding:"legacy-variant"},"gpt-5.2-thinking-medium":{targetId:"gpt-5.2",level:"medium",legacyVariantId:"gpt-5.2-thinking-medium",encoding:"legacy-variant"},"gpt-5.2-thinking-max":{targetId:"gpt-5.2",level:"max",legacyVariantId:"gpt-5.2-thinking-max",encoding:"legacy-variant"},"gpt-5.2-fast":{targetId:"gpt-5.2-fast",legacyVariantId:"gpt-5.2-fast",encoding:"legacy-variant"},"gpt-5.2-high-fast":{targetId:"gpt-5.2-high-fast",legacyVariantId:"gpt-5.2-high-fast",encoding:"legacy-variant"},"gpt-5.2-low-fast":{targetId:"gpt-5.2-low-fast",legacyVariantId:"gpt-5.2-low-fast",encoding:"legacy-variant"},"gpt-5.2-xhigh-fast":{targetId:"gpt-5.2-xhigh-fast",legacyVariantId:"gpt-5.2-xhigh-fast",encoding:"legacy-variant"},"gpt-5.2-medium-fast":{targetId:"gpt-5.2-medium-fast",legacyVariantId:"gpt-5.2-medium-fast",encoding:"legacy-variant"},"gpt-5.2-max-fast":{targetId:"gpt-5.2-max-fast",legacyVariantId:"gpt-5.2-max-fast",encoding:"legacy-variant"},"gpt-5.3-codex":{targetId:"gpt-5.3-codex",legacyVariantId:"gpt-5.3-codex",encoding:"legacy-variant"},"gpt-5.3-codex-high":{targetId:"gpt-5.3-codex",level:"high",legacyVariantId:"gpt-5.3-codex-high",encoding:"legacy-variant"},"gpt-5.3-codex-low":{targetId:"gpt-5.3-codex",level:"low",legacyVariantId:"gpt-5.3-codex-low",encoding:"legacy-variant"},"gpt-5.3-codex-xhigh":{targetId:"gpt-5.3-codex",level:"xhigh",legacyVariantId:"gpt-5.3-codex-xhigh",encoding:"legacy-variant"},"gpt-5.3-codex-medium":{targetId:"gpt-5.3-codex",level:"medium",legacyVariantId:"gpt-5.3-codex-medium",encoding:"legacy-variant"},"gpt-5.3-codex-max":{targetId:"gpt-5.3-codex",level:"max",legacyVariantId:"gpt-5.3-codex-max",encoding:"legacy-variant"},"gpt-5.3-codex-thinking-low":{targetId:"gpt-5.3-codex",level:"low",legacyVariantId:"gpt-5.3-codex-thinking-low",encoding:"legacy-variant"},"gpt-5.3-codex-thinking-medium":{targetId:"gpt-5.3-codex",level:"medium",legacyVariantId:"gpt-5.3-codex-thinking-medium",encoding:"legacy-variant"},"gpt-5.3-codex-thinking-max":{targetId:"gpt-5.3-codex",level:"max",legacyVariantId:"gpt-5.3-codex-thinking-max",encoding:"legacy-variant"},"gpt-5.3-codex-fast":{targetId:"gpt-5.3-codex-fast",legacyVariantId:"gpt-5.3-codex-fast",encoding:"legacy-variant"},"gpt-5.3-codex-high-fast":{targetId:"gpt-5.3-codex-high-fast",legacyVariantId:"gpt-5.3-codex-high-fast",encoding:"legacy-variant"},"gpt-5.3-codex-low-fast":{targetId:"gpt-5.3-codex-low-fast",legacyVariantId:"gpt-5.3-codex-low-fast",encoding:"legacy-variant"},"gpt-5.3-codex-xhigh-fast":{targetId:"gpt-5.3-codex-xhigh-fast",legacyVariantId:"gpt-5.3-codex-xhigh-fast",encoding:"legacy-variant"},"gpt-5.3-codex-medium-fast":{targetId:"gpt-5.3-codex-medium-fast",legacyVariantId:"gpt-5.3-codex-medium-fast",encoding:"legacy-variant"},"gpt-5.3-codex-max-fast":{targetId:"gpt-5.3-codex-max-fast",legacyVariantId:"gpt-5.3-codex-max-fast",encoding:"legacy-variant"},"gpt-5.4-high":{targetId:"gpt-5.4",level:"high",legacyVariantId:"gpt-5.4-high",encoding:"legacy-variant"},"gpt-5.4-low":{targetId:"gpt-5.4",level:"low",legacyVariantId:"gpt-5.4-low",encoding:"legacy-variant"},"gpt-5.4-medium":{targetId:"gpt-5.4",level:"medium",legacyVariantId:"gpt-5.4-medium",encoding:"legacy-variant"},"gpt-5.4-xhigh":{targetId:"gpt-5.4",level:"xhigh",legacyVariantId:"gpt-5.4-xhigh",encoding:"legacy-variant"},"gpt-5.4-high-fast":{targetId:"gpt-5.4-high-fast",legacyVariantId:"gpt-5.4-high-fast",encoding:"legacy-variant"},"gpt-5.4-medium-fast":{targetId:"gpt-5.4-medium-fast",legacyVariantId:"gpt-5.4-medium-fast",encoding:"legacy-variant"},"gpt-5.4-xhigh-fast":{targetId:"gpt-5.4-xhigh-fast",legacyVariantId:"gpt-5.4-xhigh-fast",encoding:"legacy-variant"},"gpt-5.4-mini-high":{targetId:"gpt-5.4-mini",level:"high",legacyVariantId:"gpt-5.4-mini-high",encoding:"legacy-variant"},"gpt-5.4-mini-low":{targetId:"gpt-5.4-mini",level:"low",legacyVariantId:"gpt-5.4-mini-low",encoding:"legacy-variant"},"gpt-5.4-mini-medium":{targetId:"gpt-5.4-mini",level:"medium",legacyVariantId:"gpt-5.4-mini-medium",encoding:"legacy-variant"},"gpt-5.4-mini-none":{targetId:"gpt-5.4-mini",level:"off",legacyVariantId:"gpt-5.4-mini-none",encoding:"legacy-variant"},"gpt-5.4-mini-xhigh":{targetId:"gpt-5.4-mini",level:"xhigh",legacyVariantId:"gpt-5.4-mini-xhigh",encoding:"legacy-variant"},"gpt-5.4-nano-high":{targetId:"gpt-5.4-nano",level:"high",legacyVariantId:"gpt-5.4-nano-high",encoding:"legacy-variant"},"gpt-5.4-nano-low":{targetId:"gpt-5.4-nano",level:"low",legacyVariantId:"gpt-5.4-nano-low",encoding:"legacy-variant"},"gpt-5.4-nano-medium":{targetId:"gpt-5.4-nano",level:"medium",legacyVariantId:"gpt-5.4-nano-medium",encoding:"legacy-variant"},"gpt-5.4-nano-none":{targetId:"gpt-5.4-nano",level:"off",legacyVariantId:"gpt-5.4-nano-none",encoding:"legacy-variant"},"gpt-5.4-nano-xhigh":{targetId:"gpt-5.4-nano",level:"xhigh",legacyVariantId:"gpt-5.4-nano-xhigh",encoding:"legacy-variant"},"gpt-5.5-extra-high":{targetId:"gpt-5.5",level:"extra-high",legacyVariantId:"gpt-5.5-extra-high",encoding:"legacy-variant"},"gpt-5.5-high":{targetId:"gpt-5.5",level:"high",legacyVariantId:"gpt-5.5-high",encoding:"legacy-variant"},"gpt-5.5-low":{targetId:"gpt-5.5",level:"low",legacyVariantId:"gpt-5.5-low",encoding:"legacy-variant"},"gpt-5.5-medium":{targetId:"gpt-5.5",level:"medium",legacyVariantId:"gpt-5.5-medium",encoding:"legacy-variant"},"gpt-5.5-none":{targetId:"gpt-5.5",level:"off",legacyVariantId:"gpt-5.5-none",encoding:"legacy-variant"},"gpt-5.5-max":{targetId:"gpt-5.5",level:"max",legacyVariantId:"gpt-5.5-max",encoding:"legacy-variant"},"gpt-5.5-thinking-low":{targetId:"gpt-5.5",level:"low",legacyVariantId:"gpt-5.5-thinking-low",encoding:"legacy-variant"},"gpt-5.5-thinking-medium":{targetId:"gpt-5.5",level:"medium",legacyVariantId:"gpt-5.5-thinking-medium",encoding:"legacy-variant"},"gpt-5.5-thinking-max":{targetId:"gpt-5.5",level:"max",legacyVariantId:"gpt-5.5-thinking-max",encoding:"legacy-variant"},"gpt-5.5-extra-high-fast":{targetId:"gpt-5.5-extra-high-fast",legacyVariantId:"gpt-5.5-extra-high-fast",encoding:"legacy-variant"},"gpt-5.5-high-fast":{targetId:"gpt-5.5-high-fast",legacyVariantId:"gpt-5.5-high-fast",encoding:"legacy-variant"},"gpt-5.5-low-fast":{targetId:"gpt-5.5-low-fast",legacyVariantId:"gpt-5.5-low-fast",encoding:"legacy-variant"},"gpt-5.5-medium-fast":{targetId:"gpt-5.5-medium-fast",legacyVariantId:"gpt-5.5-medium-fast",encoding:"legacy-variant"},"gpt-5.5-none-fast":{targetId:"gpt-5.5-none-fast",legacyVariantId:"gpt-5.5-none-fast",encoding:"legacy-variant"},"gpt-5.5-max-fast":{targetId:"gpt-5.5-max-fast",legacyVariantId:"gpt-5.5-max-fast",encoding:"legacy-variant"},"gpt-5.6-luna-high":{targetId:"gpt-5.6-luna",level:"high",legacyVariantId:"gpt-5.6-luna-high",encoding:"legacy-variant"},"gpt-5.6-luna-low":{targetId:"gpt-5.6-luna",level:"low",legacyVariantId:"gpt-5.6-luna-low",encoding:"legacy-variant"},"gpt-5.6-luna-max":{targetId:"gpt-5.6-luna",level:"max",legacyVariantId:"gpt-5.6-luna-max",encoding:"legacy-variant"},"gpt-5.6-luna-medium":{targetId:"gpt-5.6-luna",level:"medium",legacyVariantId:"gpt-5.6-luna-medium",encoding:"legacy-variant"},"gpt-5.6-luna-none":{targetId:"gpt-5.6-luna",level:"off",legacyVariantId:"gpt-5.6-luna-none",encoding:"legacy-variant"},"gpt-5.6-luna-xhigh":{targetId:"gpt-5.6-luna",level:"xhigh",legacyVariantId:"gpt-5.6-luna-xhigh",encoding:"legacy-variant"},"gpt-5.6-luna-thinking-low":{targetId:"gpt-5.6-luna",level:"low",legacyVariantId:"gpt-5.6-luna-thinking-low",encoding:"legacy-variant"},"gpt-5.6-luna-thinking-medium":{targetId:"gpt-5.6-luna",level:"medium",legacyVariantId:"gpt-5.6-luna-thinking-medium",encoding:"legacy-variant"},"gpt-5.6-luna-thinking-max":{targetId:"gpt-5.6-luna",level:"max",legacyVariantId:"gpt-5.6-luna-thinking-max",encoding:"legacy-variant"},"gpt-5.6-luna-high-fast":{targetId:"gpt-5.6-luna-high-fast",legacyVariantId:"gpt-5.6-luna-high-fast",encoding:"legacy-variant"},"gpt-5.6-luna-low-fast":{targetId:"gpt-5.6-luna-low-fast",legacyVariantId:"gpt-5.6-luna-low-fast",encoding:"legacy-variant"},"gpt-5.6-luna-max-fast":{targetId:"gpt-5.6-luna-max-fast",legacyVariantId:"gpt-5.6-luna-max-fast",encoding:"legacy-variant"},"gpt-5.6-luna-medium-fast":{targetId:"gpt-5.6-luna-medium-fast",legacyVariantId:"gpt-5.6-luna-medium-fast",encoding:"legacy-variant"},"gpt-5.6-luna-none-fast":{targetId:"gpt-5.6-luna-none-fast",legacyVariantId:"gpt-5.6-luna-none-fast",encoding:"legacy-variant"},"gpt-5.6-luna-xhigh-fast":{targetId:"gpt-5.6-luna-xhigh-fast",legacyVariantId:"gpt-5.6-luna-xhigh-fast",encoding:"legacy-variant"},"gpt-5.6-sol-high":{targetId:"gpt-5.6-sol",level:"high",legacyVariantId:"gpt-5.6-sol-high",encoding:"legacy-variant"},"gpt-5.6-sol-low":{targetId:"gpt-5.6-sol",level:"low",legacyVariantId:"gpt-5.6-sol-low",encoding:"legacy-variant"},"gpt-5.6-sol-max":{targetId:"gpt-5.6-sol",level:"max",legacyVariantId:"gpt-5.6-sol-max",encoding:"legacy-variant"},"gpt-5.6-sol-medium":{targetId:"gpt-5.6-sol",level:"medium",legacyVariantId:"gpt-5.6-sol-medium",encoding:"legacy-variant"},"gpt-5.6-sol-none":{targetId:"gpt-5.6-sol",level:"off",legacyVariantId:"gpt-5.6-sol-none",encoding:"legacy-variant"},"gpt-5.6-sol-xhigh":{targetId:"gpt-5.6-sol",level:"xhigh",legacyVariantId:"gpt-5.6-sol-xhigh",encoding:"legacy-variant"},"gpt-5.6-sol-thinking-low":{targetId:"gpt-5.6-sol",level:"low",legacyVariantId:"gpt-5.6-sol-thinking-low",encoding:"legacy-variant"},"gpt-5.6-sol-thinking-medium":{targetId:"gpt-5.6-sol",level:"medium",legacyVariantId:"gpt-5.6-sol-thinking-medium",encoding:"legacy-variant"},"gpt-5.6-sol-thinking-max":{targetId:"gpt-5.6-sol",level:"max",legacyVariantId:"gpt-5.6-sol-thinking-max",encoding:"legacy-variant"},"gpt-5.6-sol-high-fast":{targetId:"gpt-5.6-sol-high-fast",legacyVariantId:"gpt-5.6-sol-high-fast",encoding:"legacy-variant"},"gpt-5.6-sol-low-fast":{targetId:"gpt-5.6-sol-low-fast",legacyVariantId:"gpt-5.6-sol-low-fast",encoding:"legacy-variant"},"gpt-5.6-sol-max-fast":{targetId:"gpt-5.6-sol-max-fast",legacyVariantId:"gpt-5.6-sol-max-fast",encoding:"legacy-variant"},"gpt-5.6-sol-medium-fast":{targetId:"gpt-5.6-sol-medium-fast",legacyVariantId:"gpt-5.6-sol-medium-fast",encoding:"legacy-variant"},"gpt-5.6-sol-none-fast":{targetId:"gpt-5.6-sol-none-fast",legacyVariantId:"gpt-5.6-sol-none-fast",encoding:"legacy-variant"},"gpt-5.6-sol-xhigh-fast":{targetId:"gpt-5.6-sol-xhigh-fast",legacyVariantId:"gpt-5.6-sol-xhigh-fast",encoding:"legacy-variant"},"gpt-5.6-terra-high":{targetId:"gpt-5.6-terra",level:"high",legacyVariantId:"gpt-5.6-terra-high",encoding:"legacy-variant"},"gpt-5.6-terra-low":{targetId:"gpt-5.6-terra",level:"low",legacyVariantId:"gpt-5.6-terra-low",encoding:"legacy-variant"},"gpt-5.6-terra-max":{targetId:"gpt-5.6-terra",level:"max",legacyVariantId:"gpt-5.6-terra-max",encoding:"legacy-variant"},"gpt-5.6-terra-medium":{targetId:"gpt-5.6-terra",level:"medium",legacyVariantId:"gpt-5.6-terra-medium",encoding:"legacy-variant"},"gpt-5.6-terra-none":{targetId:"gpt-5.6-terra",level:"off",legacyVariantId:"gpt-5.6-terra-none",encoding:"legacy-variant"},"gpt-5.6-terra-xhigh":{targetId:"gpt-5.6-terra",level:"xhigh",legacyVariantId:"gpt-5.6-terra-xhigh",encoding:"legacy-variant"},"gpt-5.6-terra-high-fast":{targetId:"gpt-5.6-terra-high-fast",legacyVariantId:"gpt-5.6-terra-high-fast",encoding:"legacy-variant"},"gpt-5.6-terra-low-fast":{targetId:"gpt-5.6-terra-low-fast",legacyVariantId:"gpt-5.6-terra-low-fast",encoding:"legacy-variant"},"gpt-5.6-terra-max-fast":{targetId:"gpt-5.6-terra-max-fast",legacyVariantId:"gpt-5.6-terra-max-fast",encoding:"legacy-variant"},"gpt-5.6-terra-medium-fast":{targetId:"gpt-5.6-terra-medium-fast",legacyVariantId:"gpt-5.6-terra-medium-fast",encoding:"legacy-variant"},"gpt-5.6-terra-none-fast":{targetId:"gpt-5.6-terra-none-fast",legacyVariantId:"gpt-5.6-terra-none-fast",encoding:"legacy-variant"},"gpt-5.6-terra-xhigh-fast":{targetId:"gpt-5.6-terra-xhigh-fast",legacyVariantId:"gpt-5.6-terra-xhigh-fast",encoding:"legacy-variant"},"kimi-k2.7-code":{targetId:"kimi-k2.7-code",legacyVariantId:"kimi-k2.7-code",encoding:"legacy-variant"},"kimi-k3-high":{targetId:"kimi-k3",level:"high",legacyVariantId:"kimi-k3-high",encoding:"legacy-variant"},"kimi-k3-low":{targetId:"kimi-k3",level:"low",legacyVariantId:"kimi-k3-low",encoding:"legacy-variant"},"kimi-k3-max":{targetId:"kimi-k3",level:"max",legacyVariantId:"kimi-k3-max",encoding:"legacy-variant"},auto:{targetId:"auto",legacyVariantId:"auto",encoding:"legacy-variant"},"claude-fable-5-low-fast":{targetId:"claude-fable-5-low-fast",legacyVariantId:"claude-fable-5-low-fast",encoding:"legacy-variant"},"claude-fable-5-medium-fast":{targetId:"claude-fable-5-medium-fast",legacyVariantId:"claude-fable-5-medium-fast",encoding:"legacy-variant"},"claude-fable-5-max-fast":{targetId:"claude-fable-5-max-fast",legacyVariantId:"claude-fable-5-max-fast",encoding:"legacy-variant"},"claude-sonnet-5-low-fast":{targetId:"claude-sonnet-5-low-fast",legacyVariantId:"claude-sonnet-5-low-fast",encoding:"legacy-variant"},"claude-sonnet-5-medium-fast":{targetId:"claude-sonnet-5-medium-fast",legacyVariantId:"claude-sonnet-5-medium-fast",encoding:"legacy-variant"},"claude-sonnet-5-max-fast":{targetId:"claude-sonnet-5-max-fast",legacyVariantId:"claude-sonnet-5-max-fast",encoding:"legacy-variant"},"claude-sonnet-4-7-low":{targetId:"claude-sonnet-4-7",level:"low",legacyVariantId:"claude-sonnet-4-7-low",encoding:"legacy-variant"},"claude-sonnet-4-7-medium":{targetId:"claude-sonnet-4-7",level:"medium",legacyVariantId:"claude-sonnet-4-7-medium",encoding:"legacy-variant"},"claude-sonnet-4-7-max":{targetId:"claude-sonnet-4-7",level:"max",legacyVariantId:"claude-sonnet-4-7-max",encoding:"legacy-variant"},"claude-sonnet-4-7-low-fast":{targetId:"claude-sonnet-4-7-low-fast",legacyVariantId:"claude-sonnet-4-7-low-fast",encoding:"legacy-variant"},"claude-sonnet-4-7-medium-fast":{targetId:"claude-sonnet-4-7-medium-fast",legacyVariantId:"claude-sonnet-4-7-medium-fast",encoding:"legacy-variant"},"claude-sonnet-4-7-max-fast":{targetId:"claude-sonnet-4-7-max-fast",legacyVariantId:"claude-sonnet-4-7-max-fast",encoding:"legacy-variant"},"claude-sonnet-4-7-thinking-low":{targetId:"claude-sonnet-4-7-thinking",level:"low",legacyVariantId:"claude-sonnet-4-7-thinking-low",encoding:"legacy-variant"},"claude-sonnet-4-7-thinking-medium":{targetId:"claude-sonnet-4-7-thinking",level:"medium",legacyVariantId:"claude-sonnet-4-7-thinking-medium",encoding:"legacy-variant"},"claude-sonnet-4-7-thinking-max":{targetId:"claude-sonnet-4-7-thinking",level:"max",legacyVariantId:"claude-sonnet-4-7-thinking-max",encoding:"legacy-variant"},"claude-mythos-5-low":{targetId:"claude-mythos-5",level:"low",legacyVariantId:"claude-mythos-5-low",encoding:"legacy-variant"},"claude-mythos-5-medium":{targetId:"claude-mythos-5",level:"medium",legacyVariantId:"claude-mythos-5-medium",encoding:"legacy-variant"},"claude-mythos-5-max":{targetId:"claude-mythos-5",level:"max",legacyVariantId:"claude-mythos-5-max",encoding:"legacy-variant"},"claude-mythos-5-low-fast":{targetId:"claude-mythos-5-low-fast",legacyVariantId:"claude-mythos-5-low-fast",encoding:"legacy-variant"},"claude-mythos-5-medium-fast":{targetId:"claude-mythos-5-medium-fast",legacyVariantId:"claude-mythos-5-medium-fast",encoding:"legacy-variant"},"claude-mythos-5-max-fast":{targetId:"claude-mythos-5-max-fast",legacyVariantId:"claude-mythos-5-max-fast",encoding:"legacy-variant"},"claude-mythos-5-thinking-low":{targetId:"claude-mythos-5-thinking",level:"low",legacyVariantId:"claude-mythos-5-thinking-low",encoding:"legacy-variant"},"claude-mythos-5-thinking-medium":{targetId:"claude-mythos-5-thinking",level:"medium",legacyVariantId:"claude-mythos-5-thinking-medium",encoding:"legacy-variant"},"claude-mythos-5-thinking-max":{targetId:"claude-mythos-5-thinking",level:"max",legacyVariantId:"claude-mythos-5-thinking-max",encoding:"legacy-variant"},"gpt-5.4-codex-low":{targetId:"gpt-5.4-codex",level:"low",legacyVariantId:"gpt-5.4-codex-low",encoding:"legacy-variant"},"gpt-5.4-codex-medium":{targetId:"gpt-5.4-codex",level:"medium",legacyVariantId:"gpt-5.4-codex-medium",encoding:"legacy-variant"},"gpt-5.4-codex-max":{targetId:"gpt-5.4-codex",level:"max",legacyVariantId:"gpt-5.4-codex-max",encoding:"legacy-variant"},"gpt-5.4-codex-thinking-low":{targetId:"gpt-5.4-codex",level:"low",legacyVariantId:"gpt-5.4-codex-thinking-low",encoding:"legacy-variant"},"gpt-5.4-codex-thinking-medium":{targetId:"gpt-5.4-codex",level:"medium",legacyVariantId:"gpt-5.4-codex-thinking-medium",encoding:"legacy-variant"},"gpt-5.4-codex-thinking-max":{targetId:"gpt-5.4-codex",level:"max",legacyVariantId:"gpt-5.4-codex-thinking-max",encoding:"legacy-variant"},"gpt-5.4-codex-low-fast":{targetId:"gpt-5.4-codex-low-fast",legacyVariantId:"gpt-5.4-codex-low-fast",encoding:"legacy-variant"},"gpt-5.4-codex-medium-fast":{targetId:"gpt-5.4-codex-medium-fast",legacyVariantId:"gpt-5.4-codex-medium-fast",encoding:"legacy-variant"},"gpt-5.4-codex-max-fast":{targetId:"gpt-5.4-codex-max-fast",legacyVariantId:"gpt-5.4-codex-max-fast",encoding:"legacy-variant"},"gemini-3.7-flash-low-fast":{targetId:"gemini-3.7-flash-low-fast",legacyVariantId:"gemini-3.7-flash-low-fast",encoding:"legacy-variant"},"gemini-3.7-flash-medium-fast":{targetId:"gemini-3.7-flash-medium-fast",legacyVariantId:"gemini-3.7-flash-medium-fast",encoding:"legacy-variant"},"gemini-3.7-flash-max-fast":{targetId:"gemini-3.7-flash-max-fast",legacyVariantId:"gemini-3.7-flash-max-fast",encoding:"legacy-variant"},"gemini-3.7-pro-low":{targetId:"gemini-3.7-pro",level:"low",legacyVariantId:"gemini-3.7-pro-low",encoding:"legacy-variant"},"gemini-3.7-pro-medium":{targetId:"gemini-3.7-pro",level:"medium",legacyVariantId:"gemini-3.7-pro-medium",encoding:"legacy-variant"},"gemini-3.7-pro-max":{targetId:"gemini-3.7-pro",level:"max",legacyVariantId:"gemini-3.7-pro-max",encoding:"legacy-variant"},"gemini-3.7-pro-thinking-low":{targetId:"gemini-3.7-pro",level:"low",legacyVariantId:"gemini-3.7-pro-thinking-low",encoding:"legacy-variant"},"gemini-3.7-pro-thinking-medium":{targetId:"gemini-3.7-pro",level:"medium",legacyVariantId:"gemini-3.7-pro-thinking-medium",encoding:"legacy-variant"},"gemini-3.7-pro-thinking-max":{targetId:"gemini-3.7-pro",level:"max",legacyVariantId:"gemini-3.7-pro-thinking-max",encoding:"legacy-variant"},"gemini-3.7-pro-low-fast":{targetId:"gemini-3.7-pro-low-fast",legacyVariantId:"gemini-3.7-pro-low-fast",encoding:"legacy-variant"},"gemini-3.7-pro-medium-fast":{targetId:"gemini-3.7-pro-medium-fast",legacyVariantId:"gemini-3.7-pro-medium-fast",encoding:"legacy-variant"},"gemini-3.7-pro-max-fast":{targetId:"gemini-3.7-pro-max-fast",legacyVariantId:"gemini-3.7-pro-max-fast",encoding:"legacy-variant"},"gemini-3.6-pro-low":{targetId:"gemini-3.6-pro",level:"low",legacyVariantId:"gemini-3.6-pro-low",encoding:"legacy-variant"},"gemini-3.6-pro-medium":{targetId:"gemini-3.6-pro",level:"medium",legacyVariantId:"gemini-3.6-pro-medium",encoding:"legacy-variant"},"gemini-3.6-pro-max":{targetId:"gemini-3.6-pro",level:"max",legacyVariantId:"gemini-3.6-pro-max",encoding:"legacy-variant"},"gemini-3.6-pro-thinking-low":{targetId:"gemini-3.6-pro",level:"low",legacyVariantId:"gemini-3.6-pro-thinking-low",encoding:"legacy-variant"},"gemini-3.6-pro-thinking-medium":{targetId:"gemini-3.6-pro",level:"medium",legacyVariantId:"gemini-3.6-pro-thinking-medium",encoding:"legacy-variant"},"gemini-3.6-pro-thinking-max":{targetId:"gemini-3.6-pro",level:"max",legacyVariantId:"gemini-3.6-pro-thinking-max",encoding:"legacy-variant"},"gemini-3.6-pro-low-fast":{targetId:"gemini-3.6-pro-low-fast",legacyVariantId:"gemini-3.6-pro-low-fast",encoding:"legacy-variant"},"gemini-3.6-pro-medium-fast":{targetId:"gemini-3.6-pro-medium-fast",legacyVariantId:"gemini-3.6-pro-medium-fast",encoding:"legacy-variant"},"gemini-3.6-pro-max-fast":{targetId:"gemini-3.6-pro-max-fast",legacyVariantId:"gemini-3.6-pro-max-fast",encoding:"legacy-variant"},"gemini-3.5-pro-low":{targetId:"gemini-3.5-pro",level:"low",legacyVariantId:"gemini-3.5-pro-low",encoding:"legacy-variant"},"gemini-3.5-pro-medium":{targetId:"gemini-3.5-pro",level:"medium",legacyVariantId:"gemini-3.5-pro-medium",encoding:"legacy-variant"},"gemini-3.5-pro-max":{targetId:"gemini-3.5-pro",level:"max",legacyVariantId:"gemini-3.5-pro-max",encoding:"legacy-variant"},"gemini-3.5-pro-thinking-low":{targetId:"gemini-3.5-pro",level:"low",legacyVariantId:"gemini-3.5-pro-thinking-low",encoding:"legacy-variant"},"gemini-3.5-pro-thinking-medium":{targetId:"gemini-3.5-pro",level:"medium",legacyVariantId:"gemini-3.5-pro-thinking-medium",encoding:"legacy-variant"},"gemini-3.5-pro-thinking-max":{targetId:"gemini-3.5-pro",level:"max",legacyVariantId:"gemini-3.5-pro-thinking-max",encoding:"legacy-variant"},"gemini-3.5-pro-low-fast":{targetId:"gemini-3.5-pro-low-fast",legacyVariantId:"gemini-3.5-pro-low-fast",encoding:"legacy-variant"},"gemini-3.5-pro-medium-fast":{targetId:"gemini-3.5-pro-medium-fast",legacyVariantId:"gemini-3.5-pro-medium-fast",encoding:"legacy-variant"},"gemini-3.5-pro-max-fast":{targetId:"gemini-3.5-pro-max-fast",legacyVariantId:"gemini-3.5-pro-max-fast",encoding:"legacy-variant"},"composer-2.6-low":{targetId:"composer-2.6",level:"low",legacyVariantId:"composer-2.6-low",encoding:"legacy-variant"},"composer-2.6-medium":{targetId:"composer-2.6",level:"medium",legacyVariantId:"composer-2.6-medium",encoding:"legacy-variant"},"composer-2.6-max":{targetId:"composer-2.6",level:"max",legacyVariantId:"composer-2.6-max",encoding:"legacy-variant"},"composer-2.6-thinking-low":{targetId:"composer-2.6",level:"low",legacyVariantId:"composer-2.6-thinking-low",encoding:"legacy-variant"},"composer-2.6-thinking-medium":{targetId:"composer-2.6",level:"medium",legacyVariantId:"composer-2.6-thinking-medium",encoding:"legacy-variant"},"composer-2.6-thinking-max":{targetId:"composer-2.6",level:"max",legacyVariantId:"composer-2.6-thinking-max",encoding:"legacy-variant"},"composer-2.6-low-fast":{targetId:"composer-2.6-low-fast",legacyVariantId:"composer-2.6-low-fast",encoding:"legacy-variant"},"composer-2.6-medium-fast":{targetId:"composer-2.6-medium-fast",legacyVariantId:"composer-2.6-medium-fast",encoding:"legacy-variant"},"composer-2.6-max-fast":{targetId:"composer-2.6-max-fast",legacyVariantId:"composer-2.6-max-fast",encoding:"legacy-variant"},"composer-2.6-lite-low":{targetId:"composer-2.6-lite",level:"low",legacyVariantId:"composer-2.6-lite-low",encoding:"legacy-variant"},"composer-2.6-lite-medium":{targetId:"composer-2.6-lite",level:"medium",legacyVariantId:"composer-2.6-lite-medium",encoding:"legacy-variant"},"composer-2.6-lite-max":{targetId:"composer-2.6-lite",level:"max",legacyVariantId:"composer-2.6-lite-max",encoding:"legacy-variant"},"composer-2.6-lite-thinking-low":{targetId:"composer-2.6-lite",level:"low",legacyVariantId:"composer-2.6-lite-thinking-low",encoding:"legacy-variant"},"composer-2.6-lite-thinking-medium":{targetId:"composer-2.6-lite",level:"medium",legacyVariantId:"composer-2.6-lite-thinking-medium",encoding:"legacy-variant"},"composer-2.6-lite-thinking-max":{targetId:"composer-2.6-lite",level:"max",legacyVariantId:"composer-2.6-lite-thinking-max",encoding:"legacy-variant"},"composer-2.6-lite-low-fast":{targetId:"composer-2.6-lite-low-fast",legacyVariantId:"composer-2.6-lite-low-fast",encoding:"legacy-variant"},"composer-2.6-lite-medium-fast":{targetId:"composer-2.6-lite-medium-fast",legacyVariantId:"composer-2.6-lite-medium-fast",encoding:"legacy-variant"},"composer-2.6-lite-max-fast":{targetId:"composer-2.6-lite-max-fast",legacyVariantId:"composer-2.6-lite-max-fast",encoding:"legacy-variant"},"deepseek-v4-low":{targetId:"deepseek-v4",level:"low",legacyVariantId:"deepseek-v4-low",encoding:"legacy-variant"},"deepseek-v4-medium":{targetId:"deepseek-v4",level:"medium",legacyVariantId:"deepseek-v4-medium",encoding:"legacy-variant"},"deepseek-v4-max":{targetId:"deepseek-v4",level:"max",legacyVariantId:"deepseek-v4-max",encoding:"legacy-variant"},"deepseek-v4-thinking-low":{targetId:"deepseek-v4",level:"low",legacyVariantId:"deepseek-v4-thinking-low",encoding:"legacy-variant"},"deepseek-v4-thinking-medium":{targetId:"deepseek-v4",level:"medium",legacyVariantId:"deepseek-v4-thinking-medium",encoding:"legacy-variant"},"deepseek-v4-thinking-max":{targetId:"deepseek-v4",level:"max",legacyVariantId:"deepseek-v4-thinking-max",encoding:"legacy-variant"},"deepseek-v4-low-fast":{targetId:"deepseek-v4-low-fast",legacyVariantId:"deepseek-v4-low-fast",encoding:"legacy-variant"},"deepseek-v4-medium-fast":{targetId:"deepseek-v4-medium-fast",legacyVariantId:"deepseek-v4-medium-fast",encoding:"legacy-variant"},"deepseek-v4-max-fast":{targetId:"deepseek-v4-max-fast",legacyVariantId:"deepseek-v4-max-fast",encoding:"legacy-variant"}}};var P="parameters",V="variant-id";function ladder(values,encoding=P){let out={};for(let value of values)out[value==="none"?"off":value]={value,encoding};return out}var CLAUDE_ORDER=["thinking","context","effort"],GPT_ORDER=["context","reasoning","fast"];function claude(window,maxWindow,levels,defaultContext){return{evidence:"available-models",window,maxWindow,parameterOrder:CLAUDE_ORDER,defaultContext,requestContext:window>=1e6?"1m":defaultContext,levels:ladder(levels)}}function gpt(levels,order=GPT_ORDER,window=4e5,maxWindow=4e5){return{evidence:"available-models",window,maxWindow,parameterOrder:order,defaultContext:"272k",requestContext:order.includes("context")&&window>=1e6?"1m":void 0,levels:ladder(levels)}}var CURSOR_MODEL_CAPABILITIES={"claude-fable-5":claude(1e6,1e6,["low","medium","high","xhigh","max"],"300k"),"claude-sonnet-5":claude(1e6,1e6,["low","medium","high","xhigh","max"],"300k"),"claude-opus-4-7":claude(1e6,1e6,["low","medium","high","xhigh","max"],"300k"),"claude-opus-4-8":claude(1e6,1e6,["low","medium","high","xhigh","max"],"300k"),"claude-opus-5":claude(1e6,1e6,["low","medium","high","xhigh","max"],"300k"),"claude-4.6-opus":claude(1e6,1e6,["high","max"],"200k"),"claude-4.6-sonnet":claude(1e6,1e6,["medium"],"200k"),"claude-4.5-opus":{evidence:"available-models",window:2e5,parameterOrder:["thinking"],levels:{high:{value:"high",encoding:V}}},"gpt-5.6-sol":gpt(["none","low","medium","high","xhigh","max"],GPT_ORDER,1e6,1e6),"gpt-5.6-luna":gpt(["none","low","medium","high","xhigh","max"],GPT_ORDER,1e6,1e6),"gpt-5.6-terra":gpt(["none","low","medium","high","xhigh","max"],GPT_ORDER,272e3,272e3),"gpt-5.5":{...gpt(["none","low","medium","high"],GPT_ORDER,1e6,1e6),levels:{...ladder(["none","low","medium","high"]),xhigh:{value:"extra-high",encoding:P}}},"gpt-5.3-codex":{...gpt([],["reasoning","fast"]),maxWindow:void 0,defaultContext:void 0,levels:{...ladder(["low","medium","high"]),xhigh:{value:"extra-high",encoding:P}}},"gpt-5.1":{...gpt([],["reasoning"]),maxWindow:void 0,defaultContext:void 0,levels:ladder(["low","high"])},"gpt-5.2":{...gpt([],["reasoning"]),maxWindow:void 0,defaultContext:void 0,levels:{...ladder(["low","high"]),xhigh:{value:"xhigh",encoding:V}}},"gpt-5.4":{...gpt([],["reasoning"]),maxWindow:void 0,defaultContext:void 0,levels:{...ladder(["low","medium","high"]),xhigh:{value:"xhigh",encoding:V}}},"gpt-5.4-mini":{evidence:"available-models",window:4e5,parameterOrder:[],levels:ladder(["none","low","medium","high","xhigh"],V)},"gpt-5.4-nano":{...gpt([],["reasoning"]),maxWindow:void 0,defaultContext:void 0,levels:ladder(["none","low","medium","high","xhigh"])},"gemini-3.7-flash":{evidence:"cli-live",window:1048576,parameterOrder:["effort"],levels:ladder(["low","medium","high"])},"gemini-3.6-flash":{evidence:"suffix-only",window:1048576,parameterOrder:[],levels:ladder(["minimal","low","medium","high"],V)},"cursor-grok-4.6":{evidence:"available-models",window:5e5,parameterOrder:["effort","fast"],levels:ladder(["low","medium","high","xhigh"])},"cursor-grok-4.5":{evidence:"suffix-only",window:5e5,parameterOrder:[],levels:ladder(["low","medium","high"],V)},"glm-5.2":{evidence:"available-models",window:1e6,parameterOrder:["reasoning"],levels:ladder(["high","max"])},"kimi-k3":{evidence:"available-models",window:1048576,parameterOrder:["reasoning"],levels:ladder(["low","high","max"])},"composer-2.5":{evidence:"available-models",window:2e5,parameterOrder:["fast"],levels:{}},"claude-haiku-4-5":{evidence:"available-models",window:2e5,parameterOrder:["thinking"],levels:{}},"claude-4-sonnet":{evidence:"available-models",window:2e5,parameterOrder:["thinking","context"],defaultContext:"200k",levels:{}},"claude-4.5-sonnet":{evidence:"available-models",window:2e5,parameterOrder:["thinking","context"],defaultContext:"200k",levels:{}},"kimi-k2.7-code":{evidence:"available-models",window:262144,parameterOrder:[],levels:{}},"gemini-3-flash":{evidence:"available-models",window:1e6,parameterOrder:[],levels:{}},"gemini-3.1-pro":{evidence:"available-models",window:1e6,parameterOrder:[],levels:{}},"gemini-3.5-flash":{evidence:"available-models",window:1048576,parameterOrder:[],levels:{}},"gpt-5-mini":{evidence:"available-models",window:4e5,parameterOrder:[],levels:{}}},ALIASES=cursor_variant_aliases_default.aliases;function getCursorVariantAlias(originalId){return ALIASES[originalId]}function identityCompat(model){return model.compat?.cursorReasoning}function suffixAliasId(compat,level,spec){let suffixes=level==="off"?["none"]:spec.value===level?[spec.value]:[spec.value,level];for(let suffix of suffixes){let candidates=compat.thinkingMode===!0?[`${compat.capabilityId}-thinking-${suffix}`,`${compat.capabilityId}-${suffix}-thinking`]:[`${compat.capabilityId}-${suffix}`];for(let candidate of candidates){let alias=getCursorVariantAlias(candidate);if(alias)return alias.legacyVariantId}}}function buildParameters(capabilityId,value,thinkingMode){let capability=CURSOR_MODEL_CAPABILITIES[capabilityId];if(!capability)return[];let out=[];for(let id of capability.parameterOrder)switch(id){case"thinking":out.push({id,value:thinkingMode===!0?"true":"false"});break;case"context":{let context=capability.requestContext??capability.defaultContext;context!==void 0&&out.push({id,value:context});break}case"effort":case"reasoning":out.push({id,value});break;case"fast":out.push({id,value:"false"});break}return out}function resolveCursorSelectionDescriptor(model,selection){let compat=identityCompat(model),fallback={modelId:model.upstreamModelId??model.id,parameters:[]};if(!compat)return fallback;if(selection===void 0)return{modelId:compat.representativeVariantId,parameters:[]};if(selection.source==="legacy-variant")return selection.legacyVariantId===void 0||getCursorVariantAlias(selection.legacyVariantId)===void 0?{modelId:compat.representativeVariantId,parameters:[]}:{modelId:selection.legacyVariantId,parameters:[]};let capability=CURSOR_MODEL_CAPABILITIES[compat.capabilityId],spec=capability?.levels[selection.level];if(!capability||!spec)return{modelId:compat.representativeVariantId,parameters:[]};let suffixId=suffixAliasId(compat,selection.level,spec);return suffixId!==void 0?{modelId:suffixId,parameters:[]}:spec.encoding==="variant-id"?{modelId:compat.representativeVariantId,parameters:[]}:{modelId:compat.capabilityId,parameters:buildParameters(compat.capabilityId,spec.value,compat.thinkingMode)}}function buildRequestedModelFields(model,selection){let resolved=resolveCursorSelectionDescriptor(model,selection);return{modelId:resolved.modelId,maxMode:model.compat?.cursorMaxMode===!0,parameters:resolved.parameters.map(parameter=>({id:parameter.id,value:parameter.value}))}}function buildRequestedModel(model,selection){let fields=buildRequestedModelFields(model,selection);return create(RequestedModelSchema,{modelId:fields.modelId,maxMode:fields.maxMode,parameters:fields.parameters.map(parameter=>create(RequestedModel_ModelParameterbytesSchema,{id:parameter.id,value:parameter.value}))})}var CursorRetryableStreamError=class extends Error{constructor(message,retryCause,options){super(message,options),this.name="CursorRetryableStreamError",this.retryCause=retryCause}};function isCursorRetryableStreamError(error){return error instanceof CursorRetryableStreamError}function cursorStreamRetryDelayMs(options){if(options.fixedDelayMs!==void 0)return Math.max(0,options.fixedDelayMs);let baseDelayMs=options.baseDelayMs??1e3,backoffMs=Math.min(baseDelayMs*2**options.attempt,6e4),jitter=Math.floor(backoffMs*.2*(options.random??Math.random)());return backoffMs+jitter}function shouldRetryCursorStream(options){return!options.sawTurnEnded&&!options.aborted&&options.retries<options.maxRetries&&isCursorRetryableStreamError(options.error)}async function waitForCursorStreamRetry(delayMs,signal){delayMs<=0||signal?.aborted||await new Promise(resolve=>{let timer=setTimeout(resolve,delayMs);signal?.addEventListener("abort",()=>{clearTimeout(timer),resolve()},{once:!0})})}import{randomUUID}from"node:crypto";import{mkdirSync as mkdirSync2,readFileSync as readFileSync2,writeFileSync as writeFileSync2}from"node:fs";import{dirname as dirname2}from"node:path";var MAX_CURSOR_CONVERSATION_ROTATIONS=3,MAX_CURSOR_CONVERSATION_ROTATION_RECORDS=512,CURSOR_CONVERSATION_POISONED_MESSAGE="Cursor conversation is poisoned for this session; use another provider",RESOURCE_EXHAUSTED_PATTERN=/resource.?exhausted/i;function isZeroTokenResourceExhausted(errorMessage,sawTokenDelta){return!sawTokenDelta&&RESOURCE_EXHAUSTED_PATTERN.test(errorMessage)}function createConversationRotationStore(options){let randomId=options.randomId??randomUUID,maxRecords=options.maxRecords??readRotationRecordLimit(process.env.PI_CURSOR_ROTATION_RECORD_LIMIT)??MAX_CURSOR_CONVERSATION_ROTATION_RECORDS,records=loadRecords(options.persistPath),trimRecords=()=>{let keys=Object.keys(records);for(let i=0;i<keys.length-maxRecords;i++)delete records[keys[i]]},persist=()=>{trimRecords(),mkdirSync2(dirname2(options.persistPath),{recursive:!0}),writeFileSync2(options.persistPath,`${JSON.stringify(records,null,2)}
24
+ `)};return{getWireId(baseId){let existing=records[baseId];if(!existing)return baseId;if(!existing.skip)return existing.wireId;let wireId=randomId();return existing.wireId=wireId,existing.skip=!1,existing.poisonCount=0,existing.surfaced=!1,records[baseId]=existing,persist(),wireId},shouldSkip(baseId){return records[baseId]?.skip===!0},shouldSurfaceBeforeRotating(baseId){return records[baseId]?.surfaced!==!0},markSurfaced(baseId,currentWireId){let existing=records[baseId]??{wireId:currentWireId,poisonCount:0,skip:!1,surfaced:!1};existing.surfaced||(existing.surfaced=!0,records[baseId]=existing,persist())},recordCount(){return Object.keys(records).length},recordZeroTokenPoison(baseId,currentWireId){let existing=records[baseId]??{wireId:currentWireId,poisonCount:0,skip:!1,surfaced:!1};if(existing.skip||existing.poisonCount>=MAX_CURSOR_CONVERSATION_ROTATIONS)return existing.skip=!0,existing.wireId=currentWireId,records[baseId]=existing,persist(),{kind:"exhausted"};let wireId=randomId();return existing.wireId=wireId,existing.poisonCount+=1,records[baseId]=existing,persist(),{kind:"rotated",wireId}}}}function resolveConversationRotationPersistPath(env=process.env){return env.CURSOR_CONVERSATION_ID_STORE?env.CURSOR_CONVERSATION_ID_STORE:`${(env.SENPI_CODING_AGENT_DIR??env.CODING_AGENT_DIR??`${(env.HOME??".").replace(/\/$/,"")}/.senpi/agent`).replace(/\/$/,"")}/cursor-conversation-ids.json`}function readRotationRecordLimit(raw){let parsed=Number(raw);return Number.isFinite(parsed)&&parsed>0?Math.floor(parsed):void 0}function loadRecords(persistPath){try{let parsed=JSON.parse(readFileSync2(persistPath,"utf8"));if(!parsed||typeof parsed!="object"||Array.isArray(parsed))return{};let records={};for(let[baseId,value]of Object.entries(parsed)){if(!value||typeof value!="object")continue;let raw=value;typeof raw.wireId!="string"||raw.wireId.length===0||(records[baseId]={wireId:raw.wireId,poisonCount:typeof raw.poisonCount=="number"&&raw.poisonCount>=0?raw.poisonCount:0,skip:raw.skip===!0,surfaced:raw.surfaced===!0})}return records}catch{return{}}}function isUsableCursorTaskArgs(args){if(!args||typeof args!="object"||Array.isArray(args))return!1;let rec=args;return!!(rec.category||rec.subagent_type||typeof rec.prompt=="string"&&rec.prompt.trim()||Array.isArray(rec.tasks)&&rec.tasks.length>0)}function keepUsableCursorTaskArgs(previous,next){return isUsableCursorTaskArgs(next)?next:isUsableCursorTaskArgs(previous)?previous:next}function hashBytes(input){let out=new Uint8Array(32),b=typeof input=="string"?new TextEncoder().encode(input):input;for(let i=0;i<b.length;i++)out[i%32]=out[i%32]+b[i]+i&255;return out}function createHash2(input){let data=typeof input=="string"?input:new TextDecoder().decode(input);return{update(v){return data+=typeof v=="string"?v:new TextDecoder().decode(v),this},digest(format){let b=hashBytes(data);return format==="hex"?[...b].map(x=>x.toString(16).padStart(2,"0")).join(""):b}}}function deterministicUuid2(s){let h=[...hashBytes(s)].map(x=>x.toString(16).padStart(2,"0")).join("");return`${h.slice(0,8)}-${h.slice(8,12)}-${h.slice(12,16)}-${h.slice(16,20)}-${h.slice(20,32)}`}function randomUUID2(){let h=[...hashBytes(String(Math.random())+Date.now())].map(x=>x.toString(16).padStart(2,"0")).join("");return`${h.slice(0,8)}-${h.slice(8,12)}-${h.slice(12,16)}-${h.slice(16,20)}-${h.slice(20,32)}`}function storeCursorBlob(m,d){let id=hashBytes(d);return m.set([...id].map(x=>x.toString(16).padStart(2,"0")).join(""),d),id}function readCursorBlob(m,id){let d=m.get([...id].map(x=>x.toString(16).padStart(2,"0")).join(""));if(!d)throw Error("Cursor blob not found");return d}function toolResultToText(r){return r.content.map(i=>i.type==="text"?i.text:`[${i.mimeType} image]`).join(`
25
+ `)}function extractUserMessageText(msg){if(msg.role!=="user")return"";let content=msg.content;return typeof content=="string"?content.trim():content.filter(c=>c.type==="text").map(c=>c.text).join(`
26
+ `).trim()}function hasUserMessageImages(msg){return msg.role==="user"&&Array.isArray(msg.content)&&msg.content.some(item=>item.type==="image")}function buildCursorRootPromptContent(content){if(typeof content=="string"){let text=content.trim();return text?[{type:"text",text}]:[]}let parts=[];for(let item of content)if(item.type==="text"){let text=item.text.trim();text&&parts.push({type:"text",text})}else parts.push({type:"image",image:`data:${item.mimeType};base64,${item.data}`,mediaType:item.mimeType});return parts}function cursorUserContentKey(content){if(typeof content=="string")return content.trim();let hash=createHash2("sha256");for(let item of content)hash.update(item.type),item.type==="text"?hash.update(item.text):(hash.update(item.mimeType),hash.update(item.data));return hash.digest("hex")}function buildCursorAssistantContent(msg){let content=[];for(let item of msg.content)item.type==="text"?item.text&&content.push({type:"text",text:item.text}):item.type==="toolCall"&&content.push({type:"tool-call",toolCallId:item.id,toolName:item.name,args:item.arguments});return content}function findLastUserMessageIndex(messages){for(let i=messages.length-1;i>=0;i--)if(messages[i].role==="user")return i;return-1}function buildRootPromptMessagesJson(messages,systemPromptIds,blobStore,activeUserMessageIndex=findLastUserMessageIndex(messages)){let entries=[...systemPromptIds],pushJson=obj=>{let bytes=new TextEncoder().encode(JSON.stringify(obj));entries.push(storeCursorBlob(blobStore,bytes))};for(let i=0;i<messages.length&&i!==activeUserMessageIndex;i++){let msg=messages[i];if(msg.role==="user"){let content=buildCursorRootPromptContent(msg.content);if(content.length===0)continue;pushJson({role:"user",content})}else if(msg.role==="assistant"){let content=buildCursorAssistantContent(msg);if(content.length===0)continue;pushJson({role:"assistant",content})}else msg.role==="toolResult"&&pushJson({role:"tool",id:msg.toolCallId,content:[{type:"tool-result",toolName:msg.toolName,toolCallId:msg.toolCallId,result:toolResultToText(msg),...msg.isError?{isError:!0}:{}}]})}return entries}function isPlainRecord(value){if(value===null||typeof value!="object"||Array.isArray(value))return!1;let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function isJsonValue(value){if(value===null||typeof value=="string"||typeof value=="boolean")return!0;if(typeof value=="number")return Number.isFinite(value);if(Array.isArray(value))return value.every(isJsonValue);if(!isPlainRecord(value))return!1;for(let key in value)if(!isJsonValue(value[key]))return!1;return!0}function encodeCursorMcpArguments(toolCall){let encoded={};for(let name in toolCall.arguments){let value=toolCall.arguments[name];if(value!==void 0){if(!isJsonValue(value))throw new Error(`Cursor tool argument ${toolCall.name}.${name} is not JSON-serializable`);encoded[name]=toBinary(ValueSchema,fromJson(ValueSchema,value))}}return encoded}function createCursorMcpResult(result){return result.isError?create(McpToolResultSchema,{result:{case:"error",value:create(McpToolErrorSchema,{error:toolResultToText(result)})}}):create(McpToolResultSchema,{result:{case:"success",value:create(McpSuccessSchema,{content:result.content.map(item=>item.type==="text"?create(McpToolResultContentItemSchema,{content:{case:"text",value:create(McpTextContentSchema,{text:item.text})}}):create(McpToolResultContentItemSchema,{content:{case:"image",value:create(McpImageContentSchema,{data:Uint8Array.from(Uint8Array.from(atob(item.data),c=>c.charCodeAt(0))),mimeType:item.mimeType})}}))})}})}function createCursorToolCallStep(toolCall,result){let mcpCall=create(McpToolCallSchema,{args:create(McpArgsSchema,{name:toolCall.name,args:encodeCursorMcpArguments(toolCall),toolCallId:toolCall.id,providerIdentifier:"pi-agent",toolName:toolCall.name}),...result?{result:createCursorMcpResult(result)}:{}});return create(ConversationStepSchema,{message:{case:"toolCall",value:create(ToolCallSchema,{tool:{case:"mcpToolCall",value:mcpCall},toolCallId:toolCall.id})}})}function buildConversationTurns(messages,blobStore,activeUserMessageIndex=findLastUserMessageIndex(messages)){let turns=[],historyEnd=activeUserMessageIndex>=0?activeUserMessageIndex:messages.length,toolResults=new Map,pairedToolCallIds=new Set;for(let index=0;index<historyEnd;index++){let message=messages[index];if(message.role==="toolResult")toolResults.set(message.toolCallId,message);else if(message.role==="assistant")for(let item of message.content)item.type==="toolCall"&&pairedToolCallIds.add(item.id)}let i=0;for(;i<messages.length;){let msg=messages[i];if(msg.role!=="user"){i++;continue}if(i===activeUserMessageIndex)break;let userText=extractUserMessageText(msg);if(userText.length===0&&!hasUserMessageImages(msg)){i++;continue}let userMessage=createCursorUserMessage(msg.content,userText,deterministicUuid2(`u:${turns.length}:${cursorUserContentKey(msg.content)}`)),userMessageBlobId=storeCursorBlob(blobStore,toBinary(UserMessageSchema,userMessage)),stepBlobIds=[];for(i++;i<messages.length&&messages[i].role!=="user";){let stepMsg=messages[i];if(stepMsg.role==="assistant")for(let item of stepMsg.content){let step;if(item.type==="text"){if(!item.text)continue;step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:item.text})}})}else{if(item.type==="thinking")continue;if(item.type==="toolCall")step=createCursorToolCallStep(item,toolResults.get(item.id));else continue}stepBlobIds.push(storeCursorBlob(blobStore,toBinary(ConversationStepSchema,step)))}else if(stepMsg.role==="toolResult"&&!pairedToolCallIds.has(stepMsg.toolCallId)){let text=toolResultToText(stepMsg);if(text){let prefix=stepMsg.isError?"[Tool Error]":"[Tool Result]",step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:`${prefix}
27
+ ${text}`})}});stepBlobIds.push(storeCursorBlob(blobStore,toBinary(ConversationStepSchema,step)))}}i++}let agentTurn=create(AgentConversationTurnStructureSchema,{userMessage:userMessageBlobId,steps:stepBlobIds}),turn=create(ConversationTurnStructureSchema,{turn:{case:"agentConversationTurn",value:agentTurn}});turns.push(storeCursorBlob(blobStore,toBinary(ConversationTurnStructureSchema,turn)))}return turns}function createCursorUserMessage(content,text,messageId=randomUUID2()){let images=typeof content=="string"?[]:extractImages(content);return create(UserMessageSchema,{text,messageId,...images.length>0?{selectedContext:create(SelectedContextSchema,{selectedImages:images})}:{}})}function extractImages(content){return content.filter(item=>item.type==="image").map(image=>create(SelectedImageSchema,{uuid:randomUUID2(),mimeType:image.mimeType,dataOrBlobId:{case:"data",value:Uint8Array.from(atob(image.data),c=>c.charCodeAt(0))}}))}function measureCursorModelInputSerializedBytes(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){let blobStore=new Map,total=0;for(let blobId of buildRootPromptMessagesJson(messages,[],blobStore,activeUserMessageIndex))total+=readCursorBlob(blobStore,blobId).byteLength;return total}function measureCursorHistorySerializedBytes(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){return buildCursorHistoryWireBytesForTest(messages,activeUserMessageIndex).reduce((total,bytes)=>total+bytes.byteLength,0)}function buildCursorHistoryWireBytesForTest(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){let blobStore=new Map;return buildRootPromptMessagesJson(messages,[],blobStore,activeUserMessageIndex),buildConversationTurns(messages,blobStore,activeUserMessageIndex),[...blobStore.values()]}var CURSOR_API_URL="https://api2.cursor.sh",CURSOR_CLIENT_VERSION="cli-2026.07.23-e383d2b",EXEC_HEARTBEAT_INTERVAL_MS=3e3,CURSOR_STREAM_HEALTH_FAIL_THRESHOLD_MS=3e4,CURSOR_STREAM_HEALTH_HEARTBEAT_ONLY_THRESHOLD_MS=CURSOR_STREAM_HEALTH_FAIL_THRESHOLD_MS*3,CURSOR_TURN_END_DRAIN_TIMEOUT_MS=5e3,HTTP2_FORBIDDEN_HEADERS=new Set(["connection","keep-alive","proxy-connection","transfer-encoding","upgrade","http2-settings"]),CURSOR_RESERVED_HEADERS=new Set(["content-type","connect-protocol-version","te","authorization","x-ghost-mode","x-cursor-client-version","x-cursor-client-type","x-request-id","host","content-length"]);function sanitizeCursorCallerHeaders(headers){let sanitized={};for(let[name,value]of Object.entries(headers??{})){let field=name.toLowerCase();field.startsWith(":")||HTTP2_FORBIDDEN_HEADERS.has(field)||CURSOR_RESERVED_HEADERS.has(field)||(sanitized[field]=value)}return sanitized}var NOT_IMPLEMENTED_SUFFIX="not implemented by this client",NOT_IMPLEMENTED="Not implemented by this client",conversationStateCache=new Map,conversationBlobStores=new Map,conversationCacheKeySessions=new Map,DEFAULT_CONVERSATION_CACHE_LIMIT=64,DEFAULT_CONVERSATION_BLOB_LIMIT_BYTES=256*1024*1024,DEFAULT_CONVERSATION_TOTAL_BLOB_LIMIT_BYTES=1024*1024*1024;function readPositiveIntEnv(raw,fallback){let parsed=Number(raw);return Number.isFinite(parsed)&&parsed>0?Math.floor(parsed):fallback}function conversationCacheLimit(){return readPositiveIntEnv(process.env.PI_CURSOR_CONVERSATION_CACHE_LIMIT,DEFAULT_CONVERSATION_CACHE_LIMIT)}function conversationBlobLimitBytes(){return readPositiveIntEnv(process.env.PI_CURSOR_CONVERSATION_BLOB_LIMIT_BYTES,DEFAULT_CONVERSATION_BLOB_LIMIT_BYTES)}function conversationTotalBlobLimitBytes(){return readPositiveIntEnv(process.env.PI_CURSOR_CONVERSATION_TOTAL_BLOB_LIMIT_BYTES,DEFAULT_CONVERSATION_TOTAL_BLOB_LIMIT_BYTES)}var ConversationBlobStore=class extends Map{constructor(){super(...arguments),this.blobBytes=0,this.pinnedKeys=new Set,this.pinHolders=0,this.warnedOverBudget=!1}set(key,value){let previous=super.get(key);return previous!==void 0&&(this.blobBytes-=previous.byteLength,super.delete(key)),this.blobBytes+=value.byteLength,super.set(key,value),this.pinHolders>0&&this.pinnedKeys.add(key),this.trimToBudget(),this}get(key){let value=super.get(key);if(value!==void 0)return super.delete(key),super.set(key,value),this.pinHolders>0&&this.pinnedKeys.add(key),value}delete(key){let existing=super.get(key);return this.pinnedKeys.delete(key),existing===void 0?super.delete(key):(this.blobBytes-=existing.byteLength,super.delete(key))}clear(){this.blobBytes=0,this.pinnedKeys.clear(),super.clear()}get totalBytes(){return this.blobBytes}get pinnedCount(){return this.pinnedKeys.size}beginRequestPins(){this.pinHolders+=1}shedUnpinnedBytes(keepBytes){let released=0;for(let[key,value]of this){if(this.blobBytes<=keepBytes)break;this.pinnedKeys.has(key)||(this.blobBytes-=value.byteLength,released+=value.byteLength,super.delete(key))}return released}releaseRequestPins(){this.pinHolders!==0&&(this.pinHolders-=1,!(this.pinHolders>0)&&(this.pinnedKeys.clear(),this.warnedOverBudget=!1,this.trimToBudget()))}trimToBudget(){let limit=conversationBlobLimitBytes();if(!(this.blobBytes<=limit)){for(let[key,value]of this){if(this.blobBytes<=limit)break;this.pinnedKeys.has(key)||(this.blobBytes-=value.byteLength,super.delete(key))}this.blobBytes<=limit||this.warnedOverBudget||(this.warnedOverBudget=!0,console.warn(`[cursor-agent] conversation blob store over budget: ${this.blobBytes} bytes pinned by the in-flight request exceed the ${limit} byte cap (${this.pinnedKeys.size} pinned blobs); the cap applies again when the stream settles`))}}};function registerConversationCacheKey(sessionId,conversationId){sessionId&&conversationCacheKeySessions.set(conversationId,sessionId)}function forgetConversationCacheKey(conversationId){conversationStateCache.delete(conversationId),conversationBlobStores.delete(conversationId),conversationCacheKeySessions.delete(conversationId)}var liveConversationKeys=new Map;function retainLiveConversation(conversationId){liveConversationKeys.set(conversationId,(liveConversationKeys.get(conversationId)??0)+1)}function releaseLiveConversation(conversationId){let holders=liveConversationKeys.get(conversationId);holders!==void 0&&(holders<=1?liveConversationKeys.delete(conversationId):liveConversationKeys.set(conversationId,holders-1))}function enforceConversationCacheLimit(newestKey,sessionId){let limit=conversationCacheLimit(),owner=sessionId??conversationCacheKeySessions.get(newestKey),ownedKeys=[...conversationBlobStores.keys()].filter(key=>conversationCacheKeySessions.get(key)===owner),owned=ownedKeys.length;for(let key of ownedKeys){if(owned<=limit)return;key!==newestKey&&(liveConversationKeys.has(key)||(forgetConversationCacheKey(key),owned-=1))}}function enforceConversationTotalBlobLimit(){let limit=conversationTotalBlobLimitBytes(),total=0;for(let store of conversationBlobStores.values())total+=store.totalBytes;if(total<=limit)return;let cold=[],live=[];for(let entry of conversationBlobStores)(liveConversationKeys.has(entry[0])?live:cold).push(entry);for(let[key,store]of[...cold,...live]){if(total<=limit)break;total-=store.shedUnpinnedBytes(Math.max(0,store.totalBytes-(total-limit))),store.size===0&&!liveConversationKeys.has(key)&&forgetConversationCacheKey(key)}total<=limit||console.warn(`[cursor-agent] cursor conversation blobs total ${total} bytes over the ${limit} byte process ceiling; the remainder is pinned by in-flight requests and is released when their streams settle`)}function getOrCreateConversationBlobStore(conversationId,sessionId){let existing=conversationBlobStores.get(conversationId);if(existing)return existing;let store=new ConversationBlobStore;return conversationBlobStores.set(conversationId,store),enforceConversationCacheLimit(conversationId,sessionId),store}function releaseConversationCacheForSession(sessionId){if(sessionId===void 0){conversationStateCache.clear(),conversationBlobStores.clear(),conversationCacheKeySessions.clear(),liveConversationKeys.clear();return}for(let[key,owner]of conversationCacheKeySessions)owner===sessionId&&(conversationStateCache.delete(key),conversationBlobStores.delete(key),conversationCacheKeySessions.delete(key))}registerSessionResourceCleanup(sessionId=>{releaseConversationCacheForSession(sessionId)});function getCursorConversationCacheStats(){let blobBytes=0;for(let store of conversationBlobStores.values())blobBytes+=store.totalBytes;return{conversations:conversationBlobStores.size,states:conversationStateCache.size,blobBytes,keys:[...conversationBlobStores.keys()]}}var conversationRotationStore=createConversationRotationStore({persistPath:resolveConversationRotationPersistPath()}),conversationRotationPersistPath=resolveConversationRotationPersistPath();function rotationStore(){let persistPath=resolveConversationRotationPersistPath();return persistPath!==conversationRotationPersistPath&&(conversationRotationPersistPath=persistPath,conversationRotationStore=createConversationRotationStore({persistPath})),conversationRotationStore}var CONNECT_END_STREAM_FLAG=2;function log(type,subtype,data){if(!process.env.DEBUG_CURSOR)return;let verbose=process.env.DEBUG_CURSOR==="2"||process.env.DEBUG_CURSOR==="verbose",dataStr="";if(verbose&&data!==void 0)try{dataStr=` ${JSON.stringify(data,(_key,value)=>value instanceof Uint8Array?`bytes(${value.length})`:typeof value=="bigint"?value.toString():value)?.slice(0,500)}`}catch{dataStr=" [unserializable]"}console.error(`[CURSOR] ${type}${subtype?`: ${subtype}`:""}${dataStr}`)}function frameConnectMessage(data,flags=0){let frame=Buffer.alloc(5+data.length);return frame[0]=flags,frame.writeUInt32BE(data.length,1),frame.set(data,5),frame}function parseConnectEndStream(data){try{let error=JSON.parse(new TextDecoder().decode(data))?.error;if(error){let code=typeof error.code=="string"?error.code:"unknown",message=typeof error.message=="string"?error.message:"Unknown error";return new Error(`Connect error ${code}: ${message}`)}return null}catch{return new Error("Failed to parse Connect end stream")}}function mapH2TransportError(error,baseUrl){let code=error?.code,message=error instanceof Error?error.message:String(error);return code==="ERR_HTTP2_ERROR"&&/h2 is not supported/i.test(message)?new Error(`Cursor run transport could not negotiate HTTP/2 with ${baseUrl}: "h2 is not supported". This host serves the run RPC over HTTP/2 only, and the TLS handshake did not negotiate h2 via ALPN \u2014 typically an ALPN-stripping TLS-intercepting proxy. Front the provider with a local HTTP/2 bridge and point the model's baseUrl at it.`):error}var stream=(model,context,options)=>{let stream2=new AssistantMessageEventStream;return(async()=>{let output={role:"assistant",content:[],api:"cursor-agent",provider:model.provider,model:model.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:Date.now()},inFlightDispatches=new Set,abortSettled,drainInFlightDispatches=async()=>{let signal=options?.signal;for(;inFlightDispatches.size>0;){if(signal?.aborted)return;let settled=Promise.all([...inFlightDispatches]);if(!signal){await settled;continue}abortSettled??=new Promise(resolve=>signal.addEventListener("abort",()=>resolve(),{once:!0})),await Promise.race([settled,abortSettled])}},h2Client=null,h2Request=null,heartbeatTimer=null,streamHealthTimer=null,h2Settled=!1,sawTurnEnded=!1,turnEndDrainTimedOut=!1,endStreamError=null,openBlockState,resolveH2=()=>{},rejectH2=()=>{},settleH2=error=>{if(!h2Settled){if(h2Settled=!0,error!==void 0){rejectH2(error);return}if(endStreamError){rejectH2(endStreamError);return}if(!sawTurnEnded){rejectH2(new Error("Cursor stream ended before turnEnded"));return}resolveH2()}},baseConversationId,conversationId,usageState,retryAttempt=!1,attempt=0,streamRetries=0,forceResumeAction=!1,pinnedRequestedModel,pinnedModelDetails;do{retryAttempt=!1,attempt+=1,h2Settled=!1,sawTurnEnded=!1,turnEndDrainTimedOut=!1,endStreamError=null,openBlockState=void 0;let h2Completion=new Promise((resolve,reject)=>{resolveH2=resolve,rejectH2=reject}),attemptSawCheckpoint=!1,attemptLiveKey,attemptPinnedStore;try{let apiKey=options?.apiKey;if(!apiKey)throw new Error("Cursor access token is required; run /login cursor");baseConversationId=options?.conversationId??options?.sessionId??randomUUID3(),conversationId=rotationStore().getWireId(baseConversationId),registerConversationCacheKey(options?.sessionId,conversationId),attemptLiveKey=conversationId,retainLiveConversation(conversationId);let blobStore=getOrCreateConversationBlobStore(conversationId,options?.sessionId);attemptPinnedStore=blobStore,blobStore.beginRequestPins();let cachedState=conversationStateCache.get(conversationId),{requestBytes,conversationState,requestedModel,modelDetails}=await buildGrpcRequest(model,context,options,{conversationId,blobStore,conversationState:cachedState,forceResumeAction,pinnedRequestedModel,pinnedModelDetails});pinnedRequestedModel??=requestedModel,pinnedModelDetails??=modelDetails,conversationStateCache.set(conversationId,conversationState),enforceConversationTotalBlobLimit();let requestContextTools=buildMcpToolDefinitions(context.tools),baseUrl=model.baseUrl||CURSOR_API_URL,requestHeaders={...sanitizeCursorCallerHeaders(providerHeadersToRecord(options?.headers)),":method":"POST",":path":"/agent.v1.AgentService/Run","content-type":"application/connect+proto","connect-protocol-version":"1",te:"trailers",authorization:`Bearer ${apiKey}`,"x-ghost-mode":"true","x-cursor-client-version":CURSOR_CLIENT_VERSION,"x-cursor-client-type":"cli","x-request-id":randomUUID3()},attemptH2Client=http2.connect(baseUrl);h2Client=attemptH2Client,attemptH2Client.on("error",error=>{if(h2Client!==attemptH2Client)return;let mapped=mapH2TransportError(error,baseUrl);settleH2(sawTurnEnded?mapped:new CursorRetryableStreamError(mapped instanceof Error?mapped.message:String(mapped),"transport",{cause:mapped}))}),attemptH2Client.on("goaway",()=>{h2Client===attemptH2Client&&!h2Settled&&!sawTurnEnded&&(settleH2(new CursorRetryableStreamError("Cursor HTTP/2 session received GOAWAY","transport")),h2Request?.close())}),attemptH2Client.on("close",()=>{h2Client===attemptH2Client&&!h2Settled&&!sawTurnEnded&&!endStreamError&&settleH2(new CursorRetryableStreamError("Cursor HTTP/2 session closed","transport"))}),h2Request=attemptH2Client.request(requestHeaders),attempt===1&&stream2.push({type:"start",partial:output});let pendingBuffer=Buffer.alloc(0),currentTextBlock=null,currentThinkingBlock=null,currentToolCall=null,resolvedMcpToolCallIds=new Set;usageState={sawTokenDelta:!1,sawTurnEndedUsage:!1};let state={get currentTextBlock(){return currentTextBlock},get currentThinkingBlock(){return currentThinkingBlock},get currentToolCall(){return currentToolCall},openToolCalls:new Map,resolvedMcpToolCallIds,setTextBlock:b=>{currentTextBlock=b},setThinkingBlock:b=>{currentThinkingBlock=b},setToolCall:t=>{currentToolCall=t},onToolResult:options?.onToolResult??options?.execHandlers?.onToolResult};openBlockState=state;let onConversationCheckpoint=checkpoint=>{attemptSawCheckpoint=!0,recordCursorContextLimit2(model.id,checkpoint.tokenDetails?.maxTokens),conversationStateCache.set(conversationId,checkpoint)},healthFailThresholdMs=options?.streamHealthFailThresholdMs??CURSOR_STREAM_HEALTH_FAIL_THRESHOLD_MS,lastInboundFrameAt=Date.now(),turnEndCompletionStarted=!1,armStreamHealthTimer=()=>{if(streamHealthTimer&&clearTimeout(streamHealthTimer),sawTurnEnded||h2Settled)return;let now=Date.now(),deadline=lastInboundFrameAt+healthFailThresholdMs;streamHealthTimer=setTimeout(()=>{if(streamHealthTimer=null,sawTurnEnded||h2Settled)return;if(Date.now()-lastInboundFrameAt<healthFailThresholdMs){armStreamHealthTimer();return}settleH2(new CursorRetryableStreamError("Cursor stream ended before turnEnded: inbound stream stalled","stall")),h2Request?.close()},Math.max(0,deadline-now))},completeAfterTurnEnded=async()=>{let drainTimeoutMs=options?.turnEndDrainTimeoutMs??CURSOR_TURN_END_DRAIN_TIMEOUT_MS,timeout,drained=await Promise.race([drainInFlightDispatches().then(()=>!0),new Promise(resolve=>{timeout=setTimeout(()=>resolve(!1),drainTimeoutMs)})]);if(timeout&&clearTimeout(timeout),!h2Settled){if(!drained){turnEndDrainTimedOut=!0,settleH2(new Error(`Cursor exec dispatches did not settle within ${drainTimeoutMs}ms after turnEnded`)),h2Request?.close();return}h2Request?.close(),settleH2()}};armStreamHealthTimer(),h2Request.on("data",chunk=>{for(pendingBuffer=pendingBuffer.length===0?chunk:Buffer.concat([pendingBuffer,chunk]);pendingBuffer.length>=5;){let flags=pendingBuffer[0],msgLen=pendingBuffer.readUInt32BE(1);if(pendingBuffer.length<5+msgLen)break;let messageBytes=pendingBuffer.subarray(5,5+msgLen);if(pendingBuffer=pendingBuffer.subarray(5+msgLen),flags&CONNECT_END_STREAM_FLAG){let endError=parseConnectEndStream(messageBytes);endError&&(endStreamError=endError,h2Request?.close());continue}try{let serverMessage=fromBinary(AgentServerMessageSchema,messageBytes),isTurnEnded=(serverMessage.message.case==="interactionUpdate"?serverMessage.message.value.message?.case:void 0)==="turnEnded";lastInboundFrameAt=Date.now(),armStreamHealthTimer();let dispatch=handleServerMessage(serverMessage,output,stream2,state,blobStore,h2Request,options?.execHandlers,state.onToolResult,usageState,requestContextTools,onConversationCheckpoint).catch(error=>{log("error","handleServerMessage",{error:String(error)})});inFlightDispatches.add(dispatch),dispatch.finally(()=>inFlightDispatches.delete(dispatch)),isTurnEnded&&!turnEndCompletionStarted&&(sawTurnEnded=!0,turnEndCompletionStarted=!0,completeAfterTurnEnded().catch(error=>settleH2(error)))}catch(e){log("error","parseServerMessage",{error:String(e)})}}});let sendHeartbeat=()=>{if(!h2Request||h2Request.closed)return;let heartbeatMessage=create(AgentClientMessageSchema,{message:{case:"clientHeartbeat",value:create(ClientHeartbeatSchema,{})}}),heartbeatBytes=toBinary(AgentClientMessageSchema,heartbeatMessage);h2Request.write(frameConnectMessage(heartbeatBytes))};h2Request.on("trailers",trailers=>{let status=trailers["grpc-status"],msg=trailers["grpc-message"];status&&status!=="0"&&!endStreamError&&(endStreamError=new Error(`gRPC error ${status}: ${decodeURIComponent(String(msg||""))}`))}),h2Request.on("end",()=>{if(!sawTurnEnded&&!endStreamError){settleH2(new CursorRetryableStreamError("Cursor stream ended before turnEnded","clean-end"));return}settleH2()}),h2Request.on("error",error=>{let mapped=mapH2TransportError(error,baseUrl);settleH2(sawTurnEnded?mapped:new CursorRetryableStreamError(mapped instanceof Error?mapped.message:String(mapped),"transport",{cause:mapped}))}),options?.signal&&options.signal.addEventListener("abort",()=>{h2Request?.close(),settleH2(new Error("Request was aborted"))}),h2Request.write(frameConnectMessage(requestBytes)),heartbeatTimer=setInterval(sendHeartbeat,5e3),await h2Completion,await drainInFlightDispatches(),endCurrentTextBlock(output,stream2,state),endCurrentThinkingBlock(output,stream2,state),flushOpenToolCalls(output,stream2,state),calculateCost(model,output.usage),stream2.push({type:"done",reason:output.stopReason,message:output}),stream2.end()}catch(error){if(turnEndDrainTimedOut||await drainInFlightDispatches(),shouldRetryCursorStream({error,retries:streamRetries,maxRetries:options?.streamStallMaxRetries??10,sawTurnEnded,aborted:options?.signal?.aborted===!0})){openBlockState&&(endCurrentTextBlock(output,stream2,openBlockState),endCurrentThinkingBlock(output,stream2,openBlockState),flushOpenToolCalls(output,stream2,openBlockState)),forceResumeAction||=attemptSawCheckpoint;let retryDelayMs=cursorStreamRetryDelayMs({attempt:streamRetries,fixedDelayMs:options?.streamStallRetryDelayMs});streamRetries+=1,retryAttempt=!0,await waitForCursorStreamRetry(retryDelayMs,options?.signal),options?.signal?.aborted&&(retryAttempt=!1,output.stopReason="aborted",output.errorMessage="Request was aborted",stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end());continue}openBlockState&&(endCurrentTextBlock(output,stream2,openBlockState),endCurrentThinkingBlock(output,stream2,openBlockState),flushOpenToolCalls(output,stream2,openBlockState));let message=error instanceof Error?error.message:JSON.stringify(error);if(conversationId!==void 0&&baseConversationId!==void 0&&usageState!==void 0&&isZeroTokenResourceExhausted(message,usageState.sawTokenDelta))if(rotationStore().shouldSkip(baseConversationId))message=CURSOR_CONVERSATION_POISONED_MESSAGE;else if(rotationStore().shouldSurfaceBeforeRotating(baseConversationId))rotationStore().markSurfaced(baseConversationId,conversationId);else{let decision=rotationStore().recordZeroTokenPoison(baseConversationId,conversationId);if(decision.kind==="rotated"){let cached=conversationStateCache.get(conversationId);cached&&conversationStateCache.set(decision.wireId,cached);let blobs=conversationBlobStores.get(conversationId);blobs&&conversationBlobStores.set(decision.wireId,blobs),registerConversationCacheKey(options?.sessionId,decision.wireId),enforceConversationCacheLimit(decision.wireId,options?.sessionId),decision.wireId!==conversationId&&forgetConversationCacheKey(conversationId),retryAttempt=!0}else message=CURSOR_CONVERSATION_POISONED_MESSAGE}retryAttempt||(output.stopReason=options?.signal?.aborted?"aborted":"error",output.errorMessage=message,stream2.push({type:"error",reason:output.stopReason,error:output}),stream2.end())}finally{attemptPinnedStore?.releaseRequestPins(),attemptLiveKey!==void 0&&releaseLiveConversation(attemptLiveKey),attemptPinnedStore&&enforceConversationTotalBlobLimit(),heartbeatTimer&&(clearInterval(heartbeatTimer),heartbeatTimer=null),streamHealthTimer&&(clearTimeout(streamHealthTimer),streamHealthTimer=null),h2Request?.close(),h2Client?.close(),h2Request=null,h2Client=null}}while(retryAttempt)})(),stream2},streamSimple=(model,context,options)=>stream(model,context,options);function markCursorExecResolved(block){block[kCursorExecResolved]=!0}async function handleServerMessage(msg,output,stream2,state,blobStore,h2Request,execHandlers,onToolResult,usageState,requestContextTools,onConversationCheckpoint){let msgCase=msg.message.case;log("serverMessage",msgCase),msgCase==="interactionUpdate"?processInteractionUpdate(msg.message.value,output,stream2,state,usageState):msgCase==="kvServerMessage"?handleKvServerMessage(msg.message.value,blobStore,h2Request):msgCase==="execServerMessage"?await stream2.trackLocalWork(handleExecServerMessage(msg.message.value,h2Request,execHandlers,onToolResult,requestContextTools,output,stream2,state)):msgCase==="conversationCheckpointUpdate"&&(applyCheckpointTokenDetails(msg.message.value,output,usageState),onConversationCheckpoint?.(msg.message.value))}function handleKvServerMessage(kvMsg,blobStore,h2Request){let kvCase=kvMsg.message.case;if(kvCase==="getBlobArgs"){let blobId=kvMsg.message.value.blobId,blobIdKey=Buffer.from(blobId).toString("hex"),blobData=blobStore.get(blobIdKey),response=create(KvClientMessageSchema,{id:kvMsg.id,message:{case:"getBlobResult",value:create(GetBlobResultSchema,blobData?{blobData}:{})}}),kvClientMessage=create(AgentClientMessageSchema,{message:{case:"kvClientMessage",value:response}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,kvClientMessage))),log("kvClient","getBlobResult",{blobId:blobIdKey.slice(0,40)})}else if(kvCase==="setBlobArgs"){let{blobId,blobData}=kvMsg.message.value,blobIdKey=Buffer.from(blobId).toString("hex");blobStore.set(blobIdKey,blobData);let response=create(KvClientMessageSchema,{id:kvMsg.id,message:{case:"setBlobResult",value:create(SetBlobResultSchema,{})}}),kvClientMessage=create(AgentClientMessageSchema,{message:{case:"kvClientMessage",value:response}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,kvClientMessage))),log("kvClient","setBlobResult",{blobId:blobIdKey.slice(0,40)})}}function sendShellStreamEvent(h2Request,execMsg,event){sendExecClientMessage(h2Request,execMsg,"shellStream",create(ShellStreamSchema,{event}))}function sanitizeShellExecResult(execResult){let result=execResult.result;if(!result)return execResult;switch(result.case){case"success":case"failure":{let value=result.value;return{...execResult,result:{case:result.case,value:{...value,stdout:value.stdout?sanitizeSurrogates(value.stdout):value.stdout,stderr:value.stderr?sanitizeSurrogates(value.stderr):value.stderr}}}}default:return execResult}}async function handleShellStreamArgs(args,execMsg,h2Request,execHandlers,onToolResult){let normalizedWorkingDirectory=args.workingDirectory||process.cwd(),normalizedArgs={...args,workingDirectory:normalizedWorkingDirectory};sendShellStreamEvent(h2Request,execMsg,{case:"start",value:create(ShellStreamStartSchema,{})});let stdoutBuffer="",stderrBuffer="",incompleteEscapeRegex=/\x1b(|\[|\[\d*|\[\?|\[\?\d*|\]\d*;?)$/,flushStdout=()=>{if(stdoutBuffer){let safeEnd=stdoutBuffer.length,match=stdoutBuffer.match(incompleteEscapeRegex);match&&match[0].length>0&&(safeEnd=stdoutBuffer.length-match[0].length);let toSend=stdoutBuffer.slice(0,safeEnd),remaining=stdoutBuffer.slice(safeEnd);toSend&&sendShellStreamEvent(h2Request,execMsg,{case:"stdout",value:create(ShellStreamStdoutSchema,{data:sanitizeSurrogates(toSend)})}),stdoutBuffer=remaining}},flushStderr=()=>{if(stderrBuffer){let safeEnd=stderrBuffer.length,match=stderrBuffer.match(incompleteEscapeRegex);match&&match[0].length>0&&(safeEnd=stderrBuffer.length-match[0].length);let toSend=stderrBuffer.slice(0,safeEnd),remaining=stderrBuffer.slice(safeEnd);toSend&&sendShellStreamEvent(h2Request,execMsg,{case:"stderr",value:create(ShellStreamStderrSchema,{data:sanitizeSurrogates(toSend)})}),stderrBuffer=remaining}},stdoutFlushTimer=null,stderrFlushTimer=null,scheduleStdoutFlush=()=>{stdoutFlushTimer||(stdoutFlushTimer=setTimeout(()=>{stdoutFlushTimer=null,flushStdout()},100))},scheduleStderrFlush=()=>{stderrFlushTimer||(stderrFlushTimer=setTimeout(()=>{stderrFlushTimer=null,flushStderr()},100))},streamCallbacks={onStdout(data){stdoutBuffer+=data,stdoutBuffer.includes(`
28
+ `)||stdoutBuffer.length>4096?(stdoutFlushTimer&&(clearTimeout(stdoutFlushTimer),stdoutFlushTimer=null),flushStdout()):scheduleStdoutFlush()},onStderr(data){stderrBuffer+=data,stderrBuffer.includes(`
29
+ `)||stderrBuffer.length>4096?(stderrFlushTimer&&(clearTimeout(stderrFlushTimer),stderrFlushTimer=null),flushStderr()):scheduleStderrFlush()}},streamHandler=execHandlers?.shellStream?.bind(execHandlers),batchHandler=execHandlers?.shell?.bind(execHandlers),handler=streamHandler?shellArgs=>streamHandler(shellArgs,streamCallbacks):batchHandler,{execResult}=await resolveExecHandler(normalizedArgs,handler,onToolResult,toolResult=>buildShellResultFromToolResult(normalizedArgs,toolResult),reason=>buildShellRejectedResult(normalizedArgs.command,normalizedArgs.workingDirectory,reason),error=>buildShellFailureResult(normalizedArgs.command,normalizedArgs.workingDirectory,error),{toolCallId:args.toolCallId,toolName:"bash"}),sendBufferedOutput=!streamHandler,sanitizedExecResult=sanitizeShellExecResult(execResult);stdoutFlushTimer&&clearTimeout(stdoutFlushTimer),stderrFlushTimer&&clearTimeout(stderrFlushTimer),flushStdout(),flushStderr(),sendShellStreamExitFromResult(h2Request,execMsg,sanitizedExecResult,sendBufferedOutput),sendExecClientMessage(h2Request,execMsg,"shellResult",sanitizedExecResult)}function sendShellStreamExitFromResult(h2Request,execMsg,execResult,sendBufferedOutput){let result=execResult.result;switch(result.case){case"success":{let value=result.value;sendBufferedOutput&&(value.stdout&&sendShellStreamEvent(h2Request,execMsg,{case:"stdout",value:create(ShellStreamStdoutSchema,{data:sanitizeSurrogates(value.stdout)})}),value.stderr&&sendShellStreamEvent(h2Request,execMsg,{case:"stderr",value:create(ShellStreamStderrSchema,{data:sanitizeSurrogates(value.stderr)})})),sendShellStreamEvent(h2Request,execMsg,{case:"exit",value:create(ShellStreamExitSchema,{code:value.exitCode,cwd:value.workingDirectory,aborted:!1})});return}case"failure":{let value=result.value;sendBufferedOutput&&(value.stdout&&sendShellStreamEvent(h2Request,execMsg,{case:"stdout",value:create(ShellStreamStdoutSchema,{data:sanitizeSurrogates(value.stdout)})}),value.stderr&&sendShellStreamEvent(h2Request,execMsg,{case:"stderr",value:create(ShellStreamStderrSchema,{data:sanitizeSurrogates(value.stderr)})})),sendShellStreamEvent(h2Request,execMsg,{case:"exit",value:create(ShellStreamExitSchema,{code:value.exitCode,cwd:value.workingDirectory,aborted:value.aborted,abortReason:value.abortReason})});return}case"rejected":{sendShellStreamEvent(h2Request,execMsg,{case:"rejected",value:result.value}),sendShellStreamEvent(h2Request,execMsg,{case:"exit",value:create(ShellStreamExitSchema,{code:1,cwd:result.value.workingDirectory,aborted:!1})});return}case"timeout":{let value=result.value;sendShellStreamEvent(h2Request,execMsg,{case:"stderr",value:create(ShellStreamStderrSchema,{data:`Command timed out after ${value.timeoutMs}ms`})}),sendShellStreamEvent(h2Request,execMsg,{case:"exit",value:create(ShellStreamExitSchema,{code:1,cwd:value.workingDirectory,aborted:!0})});return}case"permissionDenied":{sendShellStreamEvent(h2Request,execMsg,{case:"permissionDenied",value:result.value}),sendShellStreamEvent(h2Request,execMsg,{case:"exit",value:create(ShellStreamExitSchema,{code:1,cwd:result.value.workingDirectory,aborted:!1})});return}default:return}}async function handleExecServerMessage(execMsg,h2Request,execHandlers,onToolResult,requestContextTools,output,stream2,state){let execCase=execMsg.message.case;if(log("exec","dispatch",{execCase,execId:execMsg.execId,hasHandlers:!!execHandlers}),!execCase){log("warn","unknownExecVariant",{id:execMsg.id,execId:execMsg.execId}),sendExecClientThrow(h2Request,execMsg,"Unknown exec message variant","unknown_exec_variant"),sendExecClientStreamClose(h2Request,execMsg);return}let stopExecHeartbeat=armCursorExecHeartbeat(h2Request,execMsg);try{await dispatchExecServerMessage({execMsg,h2Request,execHandlers,onToolResult,requestContextTools,output,stream:stream2,state})}catch(error){log("error","execDispatch",{error:error instanceof Error?error.message:String(error),id:execMsg.id,execId:execMsg.execId}),sendExecClientThrow(h2Request,execMsg,"Local exec dispatch failed","exec_dispatch_failed")}finally{stopExecHeartbeat(),sendExecClientStreamClose(h2Request,execMsg)}}async function dispatchExecServerMessage(context){let{execMsg,h2Request,execHandlers,onToolResult,requestContextTools,output,stream:stream2,state}=context,execCase=execMsg.message.case;if(!execCase)throw new Error("Expected a recognized exec message");if(execCase==="requestContextArgs"){let requestContext=create(RequestContextSchema,{rules:[],repositoryInfo:[],tools:requestContextTools,gitRepos:[],projectLayouts:[],mcpInstructions:[],fileContents:{},customSubagents:[]}),requestContextResult=create(RequestContextResultSchema,{result:{case:"success",value:create(RequestContextSuccessSchema,{requestContext})}});sendExecClientMessage(h2Request,execMsg,"requestContextResult",requestContextResult);return}switch(execCase){case"readArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args),synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"read",{path:args.path,offset:args.offset,limit:args.limit});let{execResult}=await resolveExecHandler(args,execHandlers?.read?.bind(execHandlers),onToolResult,toolResult=>buildReadResultFromToolResult(args.path,toolResult,args.offset!==void 0||args.limit!==void 0),reason=>buildReadRejectedResult(args.path,reason),error=>buildReadErrorResult(args.path,error),{toolCallId:args.toolCallId,toolName:"read"});sendExecClientMessage(h2Request,execMsg,"readResult",execResult);return}case"lsArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args),synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"ls",{path:piLsPath(args.path)});let{execResult}=await resolveExecHandler(args,execHandlers?.ls?.bind(execHandlers),onToolResult,toolResult=>buildLsResultFromToolResult(args.path,toolResult),reason=>buildLsRejectedResult(args.path,reason),error=>buildLsErrorResult(args.path,error),{toolCallId:args.toolCallId,toolName:"ls"});sendExecClientMessage(h2Request,execMsg,"lsResult",execResult);return}case"grepArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args);let emptyPatternError=emptyGrepPatternRejection(args.pattern,args.glob);if(emptyPatternError!==null){sendExecClientMessage(h2Request,execMsg,"grepResult",buildGrepErrorResult(emptyPatternError));return}synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"grep",{pattern:args.pattern,path:args.path||void 0,glob:args.glob||void 0,ignoreCase:args.caseInsensitive===!0?!0:void 0});let{execResult}=await resolveExecHandler(args,execHandlers?.grep?.bind(execHandlers),onToolResult,toolResult=>buildGrepResultFromToolResult(args,toolResult),reason=>buildGrepErrorResult(reason),error=>buildGrepErrorResult(error),{toolCallId:args.toolCallId,toolName:"grep"});sendExecClientMessage(h2Request,execMsg,"grepResult",execResult);return}case"writeArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args);let content=args.fileText??new TextDecoder().decode(args.fileBytes??new Uint8Array);synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"write",{path:args.path,content});let{execResult}=await resolveExecHandler(args,execHandlers?.write?.bind(execHandlers),onToolResult,toolResult=>buildWriteResultFromToolResult({path:args.path,fileText:args.fileText,fileBytes:args.fileBytes,returnFileContentAfterWrite:args.returnFileContentAfterWrite},toolResult),reason=>buildWriteRejectedResult(args.path,reason),error=>buildWriteErrorResult(args.path,error),{toolCallId:args.toolCallId,toolName:"write"});sendExecClientMessage(h2Request,execMsg,"writeResult",execResult);return}case"deleteArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args),synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"delete",{path:args.path});let{execResult}=await resolveExecHandler(args,execHandlers?.delete?.bind(execHandlers),onToolResult,toolResult=>buildDeleteResultFromToolResult(args.path,toolResult),reason=>buildDeleteRejectedResult(args.path,reason),error=>buildDeleteErrorResult(args.path,error),{toolCallId:args.toolCallId,toolName:"delete"});sendExecClientMessage(h2Request,execMsg,"deleteResult",execResult);return}case"shellArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args);let normalizedArgs={...args,workingDirectory:args.workingDirectory||process.cwd()},shellTimeout=args.timeout&&args.timeout>0?args.timeout:void 0;synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"bash",{command:composeShellCommand(args.command,args.workingDirectory||void 0),timeout:shellTimeout});let{execResult}=await resolveExecHandler(normalizedArgs,execHandlers?.shell?.bind(execHandlers),onToolResult,toolResult=>buildShellResultFromToolResult(normalizedArgs,toolResult),reason=>buildShellRejectedResult(normalizedArgs.command,normalizedArgs.workingDirectory,reason),error=>buildShellFailureResult(normalizedArgs.command,normalizedArgs.workingDirectory,error),{toolCallId:args.toolCallId,toolName:"bash"});sendExecClientMessage(h2Request,execMsg,"shellResult",sanitizeShellExecResult(execResult));return}case"shellStreamArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args);let shellStreamTimeout=args.timeout&&args.timeout>0?args.timeout:void 0;synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"bash",{command:composeShellCommand(args.command,args.workingDirectory||void 0),timeout:shellStreamTimeout}),await handleShellStreamArgs(args,execMsg,h2Request,execHandlers,onToolResult);return}case"backgroundShellSpawnArgs":{let args=execMsg.message.value,execResult=create(BackgroundShellSpawnResultSchema,{result:{case:"rejected",value:create(ShellRejectedSchema,{command:args.command,workingDirectory:args.workingDirectory,reason:"Not implemented",isReadonly:!1})}});sendExecClientMessage(h2Request,execMsg,"backgroundShellSpawnResult",execResult);return}case"writeShellStdinArgs":{let execResult=create(WriteShellStdinResultSchema,{result:{case:"error",value:create(WriteShellStdinErrorSchema,{error:"Not implemented"})}});sendExecClientMessage(h2Request,execMsg,"writeShellStdinResult",execResult);return}case"fetchArgs":{let args=execMsg.message.value,execResult=create(FetchResultSchema,{result:{case:"error",value:create(FetchErrorSchema,{url:args.url,error:"Not implemented"})}});sendExecClientMessage(h2Request,execMsg,"fetchResult",execResult);return}case"diagnosticsArgs":{let args=execMsg.message.value;args.toolCallId||(args.toolCallId=randomUUID3());let{execResult}=await resolveExecHandler(args,execHandlers?.diagnostics?.bind(execHandlers),onToolResult,toolResult=>buildDiagnosticsResultFromToolResult(args.path,toolResult),reason=>buildDiagnosticsRejectedResult(args.path,reason),error=>buildDiagnosticsErrorResult(args.path,error),null);sendExecClientMessage(h2Request,execMsg,"diagnosticsResult",execResult);return}case"mcpArgs":{let args=execMsg.message.value,mcpCall=decodeMcpCall(args);if(mcpCall.approvalOnly){let approved=await execHandlers?.mcpApprovalPreflight?.(mcpCall)===!0;sendExecClientMessage(h2Request,execMsg,"mcpResult",create(McpResultSchema,{result:approved?{case:"approved",value:create(McpApprovedSchema,{})}:{case:"rejected",value:create(McpRejectedSchema,{reason:`Tool "${mcpCall.toolName||mcpCall.name}" is not approved to run without asking.`})}}));return}if(execHandlers?.mcp){let existingBlock=output.content.find(block=>block.type==="toolCall"&&block.id===mcpCall.toolCallId);existingBlock?markCursorExecResolved(existingBlock):(synthesizeCursorExecToolCall(output,stream2,state,mcpCall.toolCallId,mcpCall.toolName||mcpCall.name,mcpCall.args),state.resolvedMcpToolCallIds.add(mcpCall.toolCallId))}let{execResult}=await resolveExecHandler(mcpCall,execHandlers?.mcp?.bind(execHandlers),onToolResult,toolResult=>buildMcpResultFromToolResult(mcpCall,toolResult),_reason=>buildMcpToolNotFoundResult(mcpCall),error=>buildMcpErrorResult(error),execHandlers?.mcp?{toolCallId:mcpCall.toolCallId,toolName:mcpCall.toolName}:null);sendExecClientMessage(h2Request,execMsg,"mcpResult",execResult);return}case"listMcpResourcesExecArgs":{let execResult=create(ListMcpResourcesExecResultSchema,{result:{case:"success",value:create(ListMcpResourcesSuccessSchema,{resources:[]})}});sendExecClientMessage(h2Request,execMsg,"listMcpResourcesExecResult",execResult);return}case"readMcpResourceExecArgs":{let args=execMsg.message.value,execResult=create(ReadMcpResourceExecResultSchema,{result:{case:"notFound",value:create(ReadMcpResourceNotFoundSchema,{uri:args.uri})}});sendExecClientMessage(h2Request,execMsg,"readMcpResourceExecResult",execResult);return}case"recordScreenArgs":{let execResult=create(RecordScreenResultSchema,{result:{case:"failure",value:create(RecordScreenFailureSchema,{error:NOT_IMPLEMENTED})}});sendExecClientMessage(h2Request,execMsg,"recordScreenResult",execResult);return}case"computerUseArgs":{let execResult=create(ComputerUseResultSchema,{result:{case:"error",value:create(ComputerUseErrorSchema,{error:NOT_IMPLEMENTED})}});sendExecClientMessage(h2Request,execMsg,"computerUseResult",execResult);return}case"piReadArgs":{let args=execMsg.message.value,toolCallId=randomUUID3(),readArgs=piReadArgs(args.path,args.offset,args.limit);synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"read",readArgs??{path:args.path,offset:args.offset,limit:0});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piRead?.bind(execHandlers),onToolResult,buildPiReadResult,buildPiReadError,buildPiReadError,{toolCallId,toolName:"read"});sendExecClientMessage(h2Request,execMsg,"piReadResult",execResult);return}case"piBashArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"bash",{command:args.command,timeout:piTimeout(args.timeout)});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piBash?.bind(execHandlers),onToolResult,buildPiBashResult,buildPiBashError,buildPiBashError,{toolCallId,toolName:"bash"});sendExecClientMessage(h2Request,execMsg,"piBashResult",execResult);return}case"piEditArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"edit",{path:args.path,edits:args.edits.map(edit=>({oldText:edit.oldText,newText:edit.newText}))});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piEdit?.bind(execHandlers),onToolResult,buildPiEditResult,buildPiEditRejected,buildPiEditError,{toolCallId,toolName:"edit"});sendExecClientMessage(h2Request,execMsg,"piEditResult",execResult);return}case"piWriteArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"write",{path:args.path,content:args.content});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piWrite?.bind(execHandlers),onToolResult,buildPiWriteResult,buildPiWriteRejected,buildPiWriteError,{toolCallId,toolName:"write"});sendExecClientMessage(h2Request,execMsg,"piWriteResult",execResult);return}case"piGrepArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"grep",{pattern:args.pattern,path:args.path||void 0,glob:args.glob||void 0,ignoreCase:args.ignoreCase===!0?!0:void 0,literal:args.literal===!0?!0:void 0,context:args.context,limit:piLimit(args.limit)});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piGrep?.bind(execHandlers),onToolResult,buildPiGrepResult,buildPiGrepError,buildPiGrepError,{toolCallId,toolName:"grep"});sendExecClientMessage(h2Request,execMsg,"piGrepResult",execResult);return}case"piFindArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"find",{pattern:args.pattern,path:args.path||void 0,limit:piLimit(args.limit)});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piFind?.bind(execHandlers),onToolResult,buildPiFindResult,buildPiFindError,buildPiFindError,{toolCallId,toolName:"find"});sendExecClientMessage(h2Request,execMsg,"piFindResult",execResult);return}case"piLsArgs":{let args=execMsg.message.value,toolCallId=randomUUID3();synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"ls",{path:piLsPath(args.path),limit:piLimit(args.limit)});let{execResult}=await resolveExecHandler({args,toolCallId},execHandlers?.piLs?.bind(execHandlers),onToolResult,buildPiLsResult,buildPiLsError,buildPiLsError,{toolCallId,toolName:"ls"});sendExecClientMessage(h2Request,execMsg,"piLsResult",execResult);return}case"miniSweAgentBashArgs":{let args=execMsg.message.value;ensureUniqueCursorExecToolCallId(output,args);let normalizedArgs={...args,workingDirectory:args.workingDirectory||process.cwd()};synthesizeCursorExecToolCall(output,stream2,state,args.toolCallId,"bash",{command:composeShellCommand(args.command,args.workingDirectory||void 0),timeout:args.timeout&&args.timeout>0?args.timeout:void 0});let{execResult}=await resolveExecHandler(normalizedArgs,execHandlers?.shell?.bind(execHandlers),onToolResult,toolResult=>buildShellResultFromToolResult(normalizedArgs,toolResult),reason=>buildShellRejectedResult(normalizedArgs.command,normalizedArgs.workingDirectory,reason),error=>buildShellFailureResult(normalizedArgs.command,normalizedArgs.workingDirectory,error),{toolCallId:args.toolCallId,toolName:"bash"});sendExecClientMessage(h2Request,execMsg,"miniSweAgentBashResult",sanitizeShellExecResult(execResult));return}case"redactedReadArgs":{let args=execMsg.message.value;sendExecClientMessage(h2Request,execMsg,"redactedReadResult",buildReadErrorResult(args.path,"Secret redaction is not implemented by this client"));return}case"mcpStateExecArgs":{let args=execMsg.message.value;sendExecClientMessage(h2Request,execMsg,"mcpStateExecResult",buildMcpStateResult(requestContextTools,args.serverIdentifiers));return}case"executeHookArgs":{let args=execMsg.message.value,execResult=buildNeutralHookResult(args.request);if(!execResult){sendExecClientThrow(h2Request,execMsg,`Unsupported hook request: ${args.request?.request.case??"unset"}`,"unknown_hook_request");return}sendExecClientMessage(h2Request,execMsg,"executeHookResult",execResult);return}case"subagentArgs":{let execResult=create(SubagentResultSchema,{result:{case:"error",value:create(SubagentErrorSchema,{error:`Subagents are ${NOT_IMPLEMENTED_SUFFIX}`})}});sendExecClientMessage(h2Request,execMsg,"subagentResult",execResult);return}case"subagentAwaitArgs":{let args=execMsg.message.value,execResult=create(SubagentAwaitResultSchema,{result:{case:"notFound",value:create(SubagentAwaitNotFoundSchema,{agentId:args.agentId})}});sendExecClientMessage(h2Request,execMsg,"subagentAwaitResult",execResult);return}case"forceBackgroundShellArgs":{let execResult=create(ForceBackgroundShellResultSchema,{status:ForceBackgroundShellStatus.NOT_FOUND});sendExecClientMessage(h2Request,execMsg,"forceBackgroundShellResult",execResult);return}case"forceBackgroundSubagentArgs":{let execResult=create(ForceBackgroundSubagentResultSchema,{status:ForceBackgroundSubagentStatus.NOT_FOUND});sendExecClientMessage(h2Request,execMsg,"forceBackgroundSubagentResult",execResult);return}case"smartModeClassifierArgs":{let execResult=create(SmartModeClassifierResultSchema,{result:{case:"error",value:create(SmartModeClassifierErrorSchema,{error:`Smart-mode classification is ${NOT_IMPLEMENTED_SUFFIX}`})}});sendExecClientMessage(h2Request,execMsg,"smartModeClassifierResult",execResult);return}case"canvasDiagnosticsArgs":{let args=execMsg.message.value,execResult=create(CanvasDiagnosticsResultSchema,{result:{case:"error",value:create(CanvasDiagnosticsErrorSchema,{path:args.path,error:`Canvas diagnostics are ${NOT_IMPLEMENTED_SUFFIX}`})}});sendExecClientMessage(h2Request,execMsg,"canvasDiagnosticsResult",execResult);return}case"shellAllowlistPrecheckArgs":{sendExecClientMessage(h2Request,execMsg,"shellAllowlistPrecheckResult",create(ShellAllowlistPrecheckResultSchema,{allowlisted:!1}));return}case"mcpAllowlistPrecheckArgs":{sendExecClientMessage(h2Request,execMsg,"mcpAllowlistPrecheckResult",create(McpAllowlistPrecheckResultSchema,{allowlisted:!1}));return}case"webFetchAllowlistPrecheckArgs":{sendExecClientMessage(h2Request,execMsg,"webFetchAllowlistPrecheckResult",create(WebFetchAllowlistPrecheckResultSchema,{allowlisted:!1}));return}case"conversationSearchArgs":{let args=execMsg.message.value,toolCallId=args.toolCallId||randomUUID3(),error=`Conversation search is ${NOT_IMPLEMENTED_SUFFIX}`;synthesizeCursorExecToolCall(output,stream2,state,toolCallId,"search_conversations",{query:args.query,limit:args.limit}),await pairSynthesizedExecResult(state,onToolResult,toolCallId,"search_conversations",error);let execResult=create(ConversationSearchResultSchema,{result:{case:"error",value:create(ConversationSearchErrorSchema,{error})}});sendExecClientMessage(h2Request,execMsg,"conversationSearchResult",execResult);return}case"agentStoreConflictArgs":{let execResult=create(AgentStoreConflictResultSchema,{result:{case:"error",value:create(AgentStoreConflictErrorSchema,{error:`Agent store conflicts are ${NOT_IMPLEMENTED_SUFFIX}`})}});sendExecClientMessage(h2Request,execMsg,"agentStoreConflictResult",execResult);return}case"gitDiffRequest":{sendExecClientThrow(h2Request,execMsg,`Git diff is ${NOT_IMPLEMENTED_SUFFIX}`,"exec_variant_unsupported");return}default:log("warn","unhandledExecMessage",{execCase}),sendExecClientThrow(h2Request,execMsg,`No handler for exec message of type ${execCase}`,"exec_variant_unsupported")}}function armCursorExecHeartbeat(h2Request,execMsg){return armExecHeartbeat({intervalMs:EXEC_HEARTBEAT_INTERVAL_MS,isClosed:()=>h2Request.closed,writeHeartbeat:onComplete=>{let controlMessage=create(ExecClientControlMessageSchema,{message:{case:"heartbeat",value:create(ExecClientHeartbeatSchema,{id:execMsg.id})}}),clientMessage=create(AgentClientMessageSchema,{message:{case:"execClientControlMessage",value:controlMessage}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,clientMessage)),onComplete),log("execClientControl","heartbeat",{id:execMsg.id,execId:execMsg.execId})}})}function sendExecClientMessage(h2Request,execMsg,messageCase,value){let execClientMessage=create(ExecClientMessageSchema,{id:execMsg.id,execId:execMsg.execId,message:{case:messageCase,value}}),clientMessage=create(AgentClientMessageSchema,{message:{case:"execClientMessage",value:execClientMessage}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,clientMessage))),log("execClientMessage",messageCase)}function sendExecClientThrow(h2Request,execMsg,error,errorCode){let controlMessage=create(ExecClientControlMessageSchema,{message:{case:"throw",value:create(ExecClientThrowSchema,{id:execMsg.id,error,errorCode})}}),clientMessage=create(AgentClientMessageSchema,{message:{case:"execClientControlMessage",value:controlMessage}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,clientMessage))),log("execClientControl","throw",{id:execMsg.id,execId:execMsg.execId,error,errorCode})}function sendExecClientStreamClose(h2Request,execMsg){let closeMessage=create(ExecClientControlMessageSchema,{message:{case:"streamClose",value:create(ExecClientStreamCloseSchema,{id:execMsg.id})}}),clientMessage=create(AgentClientMessageSchema,{message:{case:"execClientControlMessage",value:closeMessage}});h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema,clientMessage))),log("execClientControl","streamClose",{id:execMsg.id,execId:execMsg.execId})}async function resolveExecHandler(args,handler,onToolResult,buildFromToolResult,buildRejected,buildError,pairing){let pair=async(text,isError)=>{if(!pairing)return;let synthesized={role:"toolResult",toolCallId:pairing.toolCallId,toolName:pairing.toolName,content:[{type:"text",text}],isError,timestamp:Date.now()};return await applyToolResultHandler(synthesized,onToolResult)};if(!handler){let reason="Tool not available";return{execResult:buildRejected(reason),toolResult:await pair(reason,!0)}}try{let handlerResult=await handler(args),{execResult,toolResult}=splitExecHandlerResult(handlerResult),finalToolResult=await applyToolResultHandler(toolResult,onToolResult);if(execResult)return{execResult,toolResult:finalToolResult??await pair(...describeExecResult(execResult))};if(finalToolResult)return{execResult:buildFromToolResult(finalToolResult),toolResult:finalToolResult};let reason="Tool returned no result";return{execResult:buildRejected(reason),toolResult:await pair(reason,!0)}}catch(error){let message=error instanceof Error?error.message:String(error);return{execResult:buildError(message),toolResult:await pair(message,!0)}}}function describeExecResult(execResult){let result=execResult?.result,variant=result?.case;if(variant==="success"){let success=result?.value;return success?.isError?[mcpContentToText(success.content)||"MCP tool reported an error",!0]:["Tool produced no transcript result",!1]}if(!variant)return["Tool produced no transcript result",!1];let value=result?.value;return[value?.error||value?.reason||`Tool call ${variant}`,!0]}function mcpContentToText(content){if(!Array.isArray(content))return"";let parts=[];for(let item of content){let inner=item?.content;inner?.case==="text"&&inner.value?.text&&parts.push(inner.value.text)}return parts.join(`
30
+ `)}function splitExecHandlerResult(result){if(isToolResultMessage(result))return{toolResult:result};if(result&&typeof result=="object"){let record=result;if("execResult"in record){let{execResult,toolResult}=record;return{execResult,toolResult}}if("toolResult"in record&&!isToolResultMessage(record)){let{result:execResult,toolResult}=record;return{execResult,toolResult}}if("result"in record&&!("$typeName"in record)){let{result:execResult,toolResult}=record;return{execResult,toolResult}}}return{execResult:result}}function isToolResultMessage(value){return!!value&&typeof value=="object"&&value.role==="toolResult"}async function applyToolResultHandler(toolResult,onToolResult){return!toolResult||!onToolResult?toolResult:await onToolResult(toolResult)??toolResult}function toolResultToText2(toolResult){return toolResult.content.map(item=>item.type==="text"?item.text:`[${item.mimeType} image]`).join(`
31
+ `)}function toolResultWasTruncated(toolResult){return!toolResult.details||typeof toolResult.details!="object"?!1:!!toolResult.details.truncation?.truncated}function toolResultDetailBoolean(toolResult,key){if(!toolResult.details||typeof toolResult.details!="object")return!1;let value=toolResult.details[key];return typeof value=="boolean"?value:!1}function readTotalLinesFromDetails(toolResult){let details=toolResult.details;if(!details||typeof details!="object")return;let direct="totalLines"in details?details.totalLines:void 0;if(typeof direct=="number"&&Number.isFinite(direct))return direct;let meta="meta"in details?details.meta:void 0;if(!meta||typeof meta!="object")return;let truncation="truncation"in meta?meta.truncation:void 0;if(!truncation||typeof truncation!="object")return;let totalLines="totalLines"in truncation?truncation.totalLines:void 0;return typeof totalLines=="number"&&Number.isFinite(totalLines)?totalLines:void 0}function readFileSizeFromDetails(toolResult){let details=toolResult.details;if(!details||typeof details!="object"||!("fileSize"in details))return;let{fileSize}=details;return typeof fileSize=="number"&&Number.isSafeInteger(fileSize)&&fileSize>=0?fileSize:void 0}function buildReadResultFromToolResult(path,toolResult,rangeApplied=!1){let text=toolResultToText2(toolResult);if(toolResult.isError)return buildReadErrorResult(path,text||"Read failed");let totalLines=readTotalLinesFromDetails(toolResult)??(rangeApplied?0:text?text.split(`
32
+ `).length:0);return create(ReadResultSchema,{result:{case:"success",value:create(ReadSuccessSchema,{path,totalLines,fileSize:BigInt(readFileSizeFromDetails(toolResult)??Buffer.byteLength(text,"utf-8")),truncated:toolResultWasTruncated(toolResult),output:{case:"content",value:text},rangeApplied})}})}function buildReadErrorResult(path,error){return create(ReadResultSchema,{result:{case:"error",value:create(ReadErrorSchema,{path,error})}})}function buildReadRejectedResult(path,reason){return create(ReadResultSchema,{result:{case:"rejected",value:create(ReadRejectedSchema,{path,reason})}})}function buildWriteResultFromToolResult(args,toolResult){let text=toolResultToText2(toolResult);if(toolResult.isError)return buildWriteErrorResult(args.path,text||"Write failed");let fileText=args.fileText??"",fileSize=args.fileBytes?.length??Buffer.byteLength(fileText,"utf-8"),linesCreated=fileText?fileText.split(`
33
+ `).length:0;return create(WriteResultSchema,{result:{case:"success",value:create(WriteSuccessSchema,{path:args.path,linesCreated,fileSize,fileContentAfterWrite:args.returnFileContentAfterWrite?fileText:void 0})}})}function buildWriteErrorResult(path,error){return create(WriteResultSchema,{result:{case:"error",value:create(WriteErrorSchema,{path,error})}})}function buildWriteRejectedResult(path,reason){return create(WriteResultSchema,{result:{case:"rejected",value:create(WriteRejectedSchema,{path,reason})}})}function buildDeleteResultFromToolResult(path,toolResult){let text=toolResultToText2(toolResult);return toolResult.isError?buildDeleteErrorResult(path,text||"Delete failed"):create(DeleteResultSchema,{result:{case:"success",value:create(DeleteSuccessSchema,{path,deletedFile:path,fileSize:BigInt(0),prevContent:""})}})}function buildDeleteErrorResult(path,error){return create(DeleteResultSchema,{result:{case:"error",value:create(DeleteErrorSchema,{path,error})}})}function buildDeleteRejectedResult(path,reason){return create(DeleteResultSchema,{result:{case:"rejected",value:create(DeleteRejectedSchema,{path,reason})}})}function buildShellResultFromToolResult(args,toolResult){let output=toolResultToText2(toolResult);return toolResult.isError?buildShellFailureResult(args.command,args.workingDirectory,output||"Shell failed"):create(ShellResultSchema,{result:{case:"success",value:create(ShellSuccessSchema,{command:args.command,workingDirectory:args.workingDirectory,exitCode:0,signal:"",stdout:output,stderr:"",executionTime:0})}})}function buildShellFailureResult(command,workingDirectory,error){return create(ShellResultSchema,{result:{case:"failure",value:create(ShellFailureSchema,{command,workingDirectory,exitCode:1,signal:"",stdout:"",stderr:error,executionTime:0,aborted:!1})}})}function buildShellRejectedResult(command,workingDirectory,reason){return create(ShellResultSchema,{result:{case:"rejected",value:create(ShellRejectedSchema,{command,workingDirectory,reason,isReadonly:!1})}})}function buildLsResultFromToolResult(path,toolResult){let text=toolResultToText2(toolResult);if(toolResult.isError)return buildLsErrorResult(path,text||"Ls failed");let rootPath=path||".",entries=text.split(`
34
+ `).map(line=>line.trim()).filter(line=>line.length>0&&!line.startsWith("[")),childrenDirs=[],childrenFiles=[];for(let entry of entries){let name=entry.split(" (")[0];if(name.endsWith("/")){let dirName=name.slice(0,-1);childrenDirs.push(create(LsDirectoryTreeNodeSchema,{absPath:`${rootPath.replace(/\/$/,"")}/${dirName}`,childrenDirs:[],childrenFiles:[],childrenWereProcessed:!1,fullSubtreeExtensionCounts:{},numFiles:0}))}else childrenFiles.push(create(LsDirectoryTreeNode_FileSchema,{name}))}let root=create(LsDirectoryTreeNodeSchema,{absPath:rootPath,childrenDirs,childrenFiles,childrenWereProcessed:!0,fullSubtreeExtensionCounts:{},numFiles:childrenFiles.length});return create(LsResultSchema,{result:{case:"success",value:create(LsSuccessSchema,{directoryTreeRoot:root})}})}function buildLsErrorResult(path,error){return create(LsResultSchema,{result:{case:"error",value:create(LsErrorSchema,{path,error})}})}function buildLsRejectedResult(path,reason){return create(LsResultSchema,{result:{case:"rejected",value:create(LsRejectedSchema,{path,reason})}})}function buildGrepResultFromToolResult(args,toolResult){let text=toolResultToText2(toolResult);if(toolResult.isError)return buildGrepErrorResult(text||"Grep failed");let outputMode=args.outputMode||"content",clientTruncated=toolResultDetailBoolean(toolResult,"truncated"),lines=text.split(`
35
+ `).map(line=>line.trimEnd()).filter(line=>line.length>0&&!line.startsWith("[")&&!line.toLowerCase().startsWith("no matches")),workspaceKey=args.path||".",unionResult;if(outputMode==="files_with_matches"){let files=lines;unionResult=create(GrepUnionResultSchema,{result:{case:"files",value:create(GrepFilesResultSchema,{files,totalFiles:files.length,clientTruncated,ripgrepTruncated:!1,offsetApplied:args.offset})}})}else if(outputMode==="count"){let counts=lines.map(line=>{let separatorIndex=line.lastIndexOf(":");if(separatorIndex===-1)return null;let file=line.slice(0,separatorIndex),count=Number.parseInt(line.slice(separatorIndex+1),10);return!file||Number.isNaN(count)?null:create(GrepFileCountSchema,{file,count})}).filter(entry=>entry!==null),totalMatches=counts.reduce((sum,entry)=>sum+entry.count,0);unionResult=create(GrepUnionResultSchema,{result:{case:"count",value:create(GrepCountResultSchema,{counts,totalFiles:counts.length,totalMatches,clientTruncated,ripgrepTruncated:!1,offsetApplied:args.offset})}})}else{let matchMap=new Map,totalMatchedLines=0;for(let line of lines){let matchLine=line.match(/^(.+?):(\d+):\s?(.*)$/),contextLine=line.match(/^(.+?)-(\d+)-\s?(.*)$/),match=matchLine??contextLine;if(!match)continue;let[,file,lineNumber,content]=match,isContextLine=!!contextLine,list=matchMap.get(file)??[];list.push({line:Number(lineNumber),content,isContextLine}),matchMap.set(file,list),isContextLine||(totalMatchedLines+=1)}let matches=Array.from(matchMap.entries()).map(([file,fileMatches])=>create(GrepFileMatchSchema,{file,matches:fileMatches.map(entry=>create(GrepContentMatchSchema,{lineNumber:entry.line,content:entry.content,contentTruncated:!1,isContextLine:entry.isContextLine}))})),totalLines=matches.reduce((sum,entry)=>sum+entry.matches.length,0);unionResult=create(GrepUnionResultSchema,{result:{case:"content",value:create(GrepContentResultSchema,{matches,totalLines,totalMatchedLines,clientTruncated,ripgrepTruncated:!1,offsetApplied:args.offset})}})}return create(GrepResultSchema,{result:{case:"success",value:create(GrepSuccessSchema,{pattern:args.pattern,path:args.path||"",outputMode,workspaceResults:{[workspaceKey]:unionResult}})}})}function buildGrepErrorResult(error){return create(GrepResultSchema,{result:{case:"error",value:create(GrepErrorSchema,{error})}})}function emptyGrepPatternRejection(pattern,glob){return pattern&&pattern.trim().length>0?null:glob&&glob.length>0?`grep pattern is required (received an empty pattern). To list files matching "${glob}", pass a non-empty regex (e.g. ".") and set path to that glob, or use the ls/read tool instead.`:"grep pattern is required (received an empty pattern)."}function buildDiagnosticsResultFromToolResult(path,toolResult){let text=toolResultToText2(toolResult);return toolResult.isError?buildDiagnosticsErrorResult(path,text||"Diagnostics failed"):create(DiagnosticsResultSchema,{result:{case:"success",value:create(DiagnosticsSuccessSchema,{path,diagnostics:[],totalDiagnostics:0})}})}function buildDiagnosticsErrorResult(_path,error){return create(DiagnosticsResultSchema,{result:{case:"error",value:create(DiagnosticsErrorSchema,{error})}})}function buildDiagnosticsRejectedResult(path,reason){return create(DiagnosticsResultSchema,{result:{case:"rejected",value:create(DiagnosticsRejectedSchema,{path,reason})}})}function parseToolArgsJson(text){let trimmed=text.trim();if(!trimmed)return text;try{return parseJsonWithRepair(trimmed)}catch{return text}}function decodeMcpArgValue(value){try{let parsedValue=fromBinary(ValueSchema,value),jsonValue=toJson(ValueSchema,parsedValue);return typeof jsonValue=="string"?parseToolArgsJson(jsonValue):jsonValue}catch{}let text=new TextDecoder().decode(value);return parseToolArgsJson(text)}function decodeMcpArgsMap(args){if(!args)return;let decoded={};for(let[key,value]of Object.entries(args))decoded[key]=decodeMcpArgValue(value);return decoded}function decodeMcpCall(args){let decodedArgs={};for(let[key,value]of Object.entries(args.args??{}))decodedArgs[key]=decodeMcpArgValue(value);return{name:args.name,providerIdentifier:args.providerIdentifier,toolName:args.toolName||args.name,toolCallId:args.toolCallId,args:decodedArgs,rawArgs:args.args??{},approvalOnly:args.smartModeApprovalOnly===!0}}function mapTodoStatusValue(status){switch(status){case 2:return"in_progress";case 3:return"completed";case 4:return"abandoned";default:return"pending"}}function selectTodoCalls(toolCall){let oneof=toolCall.tool;return oneof?.case==="updateTodosToolCall"?{update:oneof.value}:oneof?.case==="readTodosToolCall"?{read:oneof.value}:{update:toolCall.updateTodosToolCall,read:toolCall.readTodosToolCall}}function mapTodoSnapshot(todos){return todos.map(todo=>({content:typeof todo.content=="string"?todo.content:"",status:mapTodoStatusValue(typeof todo.status=="number"?todo.status:void 0)}))}function selectMcpCall(toolCall){let oneof=toolCall?.tool;return oneof?.case==="mcpToolCall"?oneof.value:toolCall?.mcpToolCall}var EXEC_OWNED_TOOL_CALL_CASES=new Set(["piReadToolCall","piBashToolCall","piEditToolCall","piWriteToolCall","piGrepToolCall","piFindToolCall","piLsToolCall","listMcpResourcesToolCall","readMcpResourceToolCall"]);function isExecOwnedToolCall(toolCall){let variant=toolCall?.tool?.case;return variant!==void 0&&EXEC_OWNED_TOOL_CALL_CASES.has(variant)}function flushOpenToolCalls(output,stream2,state){let openBlocks=new Set(state.openToolCalls.values());state.currentToolCall&&openBlocks.add(state.currentToolCall);for(let block of openBlocks){let idx=output.content.indexOf(block),partialJson=block[kStreamingPartialJson];partialJson!==void 0&&(block.arguments=parseStreamingJson(partialJson),clearStreamingPartialJson(block));let kind=block[kStreamingBlockKind];(kind==="connect-scm"||kind==="todo")&&state.onToolResult?.({role:"toolResult",toolCallId:block.id,toolName:block.name,content:[{type:"text",text:"The connection to Cursor closed before this call completed."}],isError:!0,timestamp:Date.now()}),stream2.push({type:"toolcall_end",contentIndex:idx,toolCall:block,partial:output})}state.openToolCalls.clear(),state.setToolCall(null)}function retainStreamedCall(state,block,envelopeId){envelopeId&&state.openToolCalls.set(envelopeId,block),state.setToolCall(block)}function resolveStreamedCall(state,envelopeId){if(!envelopeId)return state.currentToolCall;let keyed=state.openToolCalls.get(envelopeId);if(keyed)return keyed;let current=state.currentToolCall;return current&&current[kStreamingEnvelopeId]===void 0?current:null}function releaseStreamedCall(state,block){let envelopeId=block[kStreamingEnvelopeId];envelopeId&&state.openToolCalls.delete(envelopeId),state.currentToolCall===block&&state.setToolCall(null)}function selectConnectScmCall(toolCall){let oneof=toolCall?.tool;return oneof?.case==="connectScmToolCall"?oneof.value:toolCall?.connectScmToolCall}function selectConnectScmRepository(call){let target=call?.args?.target;return target?.case==="github"?target.value?.repository:call?.args?.github?.repository}function describeConnectScmResult(call){let result=call?.result?.result;switch(result?.case){case"success":return{text:"SCM connected",isError:!1};case"error":return{text:result.value?.error||"SCM connection failed",isError:!0};case"rejected":return{text:result.value?.reason||"SCM connection rejected",isError:!0};default:return{text:"SCM connection reported no result",isError:!0}}}function extractTodoSnapshot(toolCall){let{update,read}=selectTodoCalls(toolCall);if(read&&((read.args?.statusFilter?.length??0)>0||(read.args?.idFilter?.length??0)>0))return null;let call=update??read;if(!call)return null;let result=call.result?.result;if(result?.case!=="success")return null;let todos=result.value?.todos;if(!todos)return null;let totalCount=result.value?.totalCount;if(typeof totalCount=="number"&&totalCount!==todos.length||read&&todos.length===0)return null;let mapped=mapTodoSnapshot(todos);return mapped.some(todo=>todo.content.length===0)?null:{todos:mapped,merged:result.value?.wasMerge===!0}}function extractTodoError(toolCall){let{update,read}=selectTodoCalls(toolCall),result=(update??read)?.result?.result;if(result?.case!=="error")return null;let error=result.value?.error;return typeof error=="string"&&error.length>0?error:"Todo operation failed"}function buildTodoDisplayArgs(toolCall){let args=selectTodoCalls(toolCall).update?.args;return{todos:args?.todos?mapTodoSnapshot(args.todos):[],merge:args?.merge===!0?!0:void 0}}function buildTodoToolResult(toolCallId,snapshot,error){let text=error??(snapshot?formatTodoSnapshotSummary(snapshot.todos):"Todo snapshot not mirrored");return{role:"toolResult",toolCallId,toolName:"todo",content:[{type:"text",text}],isError:error!==null,timestamp:Date.now()}}function formatTodoSnapshotSummary(todos){return todos.length===0?"No todos":`${todos.filter(todo=>todo.status==="completed").length}/${todos.length} tasks completed`}function buildMcpResultFromToolResult(_mcpCall,toolResult){if(toolResult.isError)return buildMcpErrorResult(toolResultToText2(toolResult)||"MCP tool failed");let content=toolResult.content.map(item=>item.type==="image"?create(McpToolResultContentItemSchema,{content:{case:"image",value:create(McpImageContentSchema,{data:Uint8Array.from(Buffer.from(item.data,"base64")),mimeType:item.mimeType})}}):create(McpToolResultContentItemSchema,{content:{case:"text",value:create(McpTextContentSchema,{text:item.text})}}));return create(McpResultSchema,{result:{case:"success",value:create(McpSuccessSchema,{content,isError:!1})}})}function buildMcpToolNotFoundResult(mcpCall){return create(McpResultSchema,{result:{case:"toolNotFound",value:create(McpToolNotFoundSchema,{name:mcpCall.toolName,availableTools:[]})}})}function buildMcpErrorResult(error){return create(McpResultSchema,{result:{case:"error",value:create(McpErrorSchema,{error})}})}function mergeCursorMcpToolCallArgs(streamed,completion){let merged={...streamed??{}};if(!completion)return merged;for(let[key,completionValue]of Object.entries(completion)){let streamedValue=merged[key];typeof completionValue=="string"&&streamedValue!==null&&typeof streamedValue=="object"||(merged[key]=completionValue)}return merged}function endCurrentTextBlock(output,stream2,state){let block=state.currentTextBlock;if(!block)return;let idx=output.content.indexOf(block);stream2.push({type:"text_end",contentIndex:idx,content:block.text,partial:output}),state.setTextBlock(null)}function endCurrentThinkingBlock(output,stream2,state){let block=state.currentThinkingBlock;if(!block)return;let idx=output.content.indexOf(block);stream2.push({type:"thinking_end",contentIndex:idx,content:block.thinking,partial:output}),state.setThinkingBlock(null)}function ensureUniqueCursorExecToolCallId(output,args){if(!args.toolCallId){args.toolCallId=randomUUID3();return}let base=args.toolCallId,candidate=base,suffix=2;for(;output.content.some(block=>block.type==="toolCall"&&block.id===candidate);)candidate=`${base}-${suffix}`,suffix+=1;args.toolCallId=candidate}function synthesizeCursorExecToolCall(output,stream2,state,toolCallId,toolName,args){endCurrentTextBlock(output,stream2,state),endCurrentThinkingBlock(output,stream2,state);let block={type:"toolCall",id:toolCallId,name:toolName,arguments:omitUndefinedArgs(args),[kStreamingBlockIndex]:output.content.length,[kStreamingBlockKind]:"cursor-exec",[kCursorExecResolved]:!0};output.content.push(block);let idx=output.content.length-1;stream2.push({type:"toolcall_start",contentIndex:idx,partial:output}),stream2.push({type:"toolcall_end",contentIndex:idx,toolCall:block,partial:output})}async function pairSynthesizedExecResult(state,onToolResult,toolCallId,toolName,text,isError=!0){let synthesized={role:"toolResult",toolCallId,toolName,content:[{type:"text",text}],isError,timestamp:Date.now()},sink=onToolResult??state.onToolResult;sink&&await sink(synthesized)}var STREAMING_ARGS_REPARSE_DELTA=1024;function processInteractionUpdate(update,output,stream2,state,usageState){let updateCase=update.message?.case;if(log("interactionUpdate",updateCase),updateCase==="textDelta"){let delta=update.message.value.text||"";if(!state.currentTextBlock){let block={type:"text",text:"",[kStreamingBlockIndex]:output.content.length};output.content.push(block),state.setTextBlock(block),stream2.push({type:"text_start",contentIndex:output.content.length-1,partial:output})}state.currentTextBlock.text+=delta;let idx=output.content.indexOf(state.currentTextBlock);stream2.push({type:"text_delta",contentIndex:idx,delta,partial:output})}else if(updateCase==="thinkingDelta"){let delta=update.message.value.text||"";if(!state.currentThinkingBlock){let block={type:"thinking",thinking:"",[kStreamingBlockIndex]:output.content.length};output.content.push(block),state.setThinkingBlock(block),stream2.push({type:"thinking_start",contentIndex:output.content.length-1,partial:output})}state.currentThinkingBlock.thinking+=delta;let idx=output.content.indexOf(state.currentThinkingBlock);stream2.push({type:"thinking_delta",contentIndex:idx,delta,partial:output})}else if(updateCase==="thinkingCompleted")endCurrentThinkingBlock(output,stream2,state);else if(updateCase==="toolCallStarted"&&selectConnectScmCall(update.message.value.toolCall)){endCurrentTextBlock(output,stream2,state),endCurrentThinkingBlock(output,stream2,state);let scmCall=selectConnectScmCall(update.message.value.toolCall),repository=selectConnectScmRepository(scmCall),block={type:"toolCall",id:scmCall?.args?.toolCallId||update.message.value.callId||randomUUID3(),name:"connect_scm",arguments:repository?{owner:repository.owner,repo:repository.repo}:{},[kStreamingBlockIndex]:output.content.length,[kStreamingBlockKind]:"connect-scm",[kStreamingEnvelopeId]:update.message.value.callId||void 0,[kCursorExecResolved]:!0};output.content.push(block),retainStreamedCall(state,block,update.message.value.callId),stream2.push({type:"toolcall_start",contentIndex:output.content.length-1,partial:output})}else if(updateCase==="toolCallStarted"&&isExecOwnedToolCall(update.message.value.toolCall))endCurrentTextBlock(output,stream2,state),endCurrentThinkingBlock(output,stream2,state),log("exec","streamedToolCallOwnedByExec",{case:update.message.value.toolCall?.tool?.case});else if(updateCase==="toolCallStarted"){endCurrentTextBlock(output,stream2,state),endCurrentThinkingBlock(output,stream2,state);let toolCall=update.message.value.toolCall;if(toolCall){let mcpCall=selectMcpCall(toolCall);if(mcpCall){let args=mcpCall.args||{},id=args.toolCallId||randomUUID3(),resolvedByExec=state.resolvedMcpToolCallIds.delete(id);if(resolvedByExec&&output.content.some(block2=>block2.type==="toolCall"&&block2.id===id))return;let block={type:"toolCall",id,name:args.toolName||args.name||"",arguments:{},[kStreamingBlockIndex]:output.content.length,[kStreamingPartialJson]:"",[kStreamingBlockKind]:"mcp",[kStreamingEnvelopeId]:update.message.value.callId||void 0};resolvedByExec&&markCursorExecResolved(block),output.content.push(block),retainStreamedCall(state,block,update.message.value.callId),stream2.push({type:"toolcall_start",contentIndex:output.content.length-1,partial:output});return}let todoCalls=selectTodoCalls(toolCall);if(todoCalls.update||todoCalls.read){let block={type:"toolCall",id:update.message.value.callId||randomUUID3(),name:"todo",arguments:buildTodoDisplayArgs(toolCall),[kStreamingBlockIndex]:output.content.length,[kStreamingBlockKind]:"todo",[kStreamingEnvelopeId]:update.message.value.callId||void 0,[kCursorExecResolved]:!0};output.content.push(block),retainStreamedCall(state,block,update.message.value.callId),stream2.push({type:"toolcall_start",contentIndex:output.content.length-1,partial:output})}}}else if(updateCase==="toolCallDelta"||updateCase==="partialToolCall"){let target=resolveStreamedCall(state,update.message.value.callId);if(target?.[kStreamingBlockKind]==="mcp"){let snapshot=update.message.value.argsTextDelta||"",current=target[kStreamingPartialJson]??"",chunk=snapshot.startsWith(current)?snapshot.slice(current.length):snapshot;if(chunk.length===0)return;let nextBuffer=current+chunk;target[kStreamingPartialJson]=nextBuffer;let lastParseLen=target[kStreamingLastParseLen]??0;nextBuffer.length-lastParseLen>=STREAMING_ARGS_REPARSE_DELTA&&(target.arguments=parseStreamingJson(nextBuffer),target[kStreamingLastParseLen]=nextBuffer.length);let idx=output.content.indexOf(target);stream2.push({type:"toolcall_delta",contentIndex:idx,delta:chunk,partial:output})}}else if(updateCase==="toolCallCompleted"){let settled=resolveStreamedCall(state,update.message.value.callId);if(settled){let toolCall=update.message.value.toolCall;if(settled[kStreamingBlockKind]==="mcp"){let previousArgs=settled.arguments,partial=settled[kStreamingPartialJson];partial!==void 0&&(settled.arguments=parseStreamingJson(partial));let decodedArgs=decodeMcpArgsMap(selectMcpCall(toolCall)?.args?.args);settled.arguments=mergeCursorMcpToolCallArgs(settled.arguments,decodedArgs),settled.name==="task"&&(settled.arguments=keepUsableCursorTaskArgs(previousArgs,settled.arguments))}else if(settled[kStreamingBlockKind]==="connect-scm"){let scmCall=selectConnectScmCall(toolCall),repository=selectConnectScmRepository(scmCall);repository&&(settled.arguments={owner:repository.owner,repo:repository.repo});let{text,isError}=describeConnectScmResult(scmCall);state.onToolResult?.({role:"toolResult",toolCallId:settled.id,toolName:"connect_scm",content:[{type:"text",text}],isError,timestamp:Date.now()})}else if(settled[kStreamingBlockKind]==="todo"){let snapshot=toolCall?extractTodoSnapshot(toolCall):null,error=toolCall?extractTodoError(toolCall):null;snapshot&&(settled.arguments={todos:snapshot.todos,merged:snapshot.merged}),state.onToolResult?.(buildTodoToolResult(settled.id,snapshot,error))}let idx=output.content.indexOf(settled);clearStreamingPartialJson(settled),stream2.push({type:"toolcall_end",contentIndex:idx,toolCall:settled,partial:output}),releaseStreamedCall(state,settled)}}else if(updateCase==="turnEnded")output.stopReason="stop",applyBilledTurnEndedUsage(update.message.value,output,usageState);else if(updateCase==="tokenDelta"){let tokenDelta=update.message.value;usageState.sawTokenDelta=!0,output.usage.output+=tokenDelta.tokens||0,output.usage.totalTokens=output.usage.input+output.usage.output+output.usage.cacheRead+output.usage.cacheWrite}}function applyBilledTurnEndedUsage(update,output,usageState){let{inputTokens,outputTokens,cacheReadTokens,cacheWriteTokens}=update;if(inputTokens===void 0&&outputTokens===void 0&&cacheReadTokens===void 0&&cacheWriteTokens===void 0)return;usageState.sawTurnEndedUsage=!0;let usage=output.usage,cacheRead=Number(cacheReadTokens??0n),cacheWrite=Number(cacheWriteTokens??0n),liveUsed=usageState.liveUsedTokens??0;if(liveUsed>0&&cacheRead>liveUsed*3){outputTokens!==void 0&&(usage.output=Number(outputTokens)),usage.cacheRead=0,usage.cacheWrite=cacheWrite<=liveUsed?cacheWrite:0,usage.input=Math.max(0,liveUsed-usage.output-usage.cacheWrite),usage.totalTokens=liveUsed;return}usage.cacheRead=cacheRead,usage.cacheWrite=cacheWrite,usage.input=Math.max(0,Number(inputTokens??0n)-usage.cacheRead-usage.cacheWrite),outputTokens!==void 0&&(usage.output=Number(outputTokens)),usage.totalTokens=usage.input+usage.output+usage.cacheRead+usage.cacheWrite}function applyCheckpointTokenDetails(checkpoint,output,usageState){if(usageState.sawTurnEndedUsage)return;let usedTokens=checkpoint.tokenDetails?.usedTokens??0;if(usedTokens<=0)return;usageState.liveUsedTokens=usedTokens;let usage=output.usage;usage.input=Math.max(0,usedTokens-usage.output-usage.cacheRead-usage.cacheWrite),usage.totalTokens=usage.input+usage.output+usage.cacheRead+usage.cacheWrite}function createBlobId(data){return new Uint8Array(createHash3("sha256").update(data).digest())}function storeCursorBlob2(blobStore,data){let blobId=createBlobId(data);return blobStore.set(Buffer.from(blobId).toString("hex"),data),blobId}function readCursorBlob2(blobStore,blobId){let data=blobStore.get(Buffer.from(blobId).toString("hex"));if(!data)throw new Error("Cursor blob not found");return data}var CURSOR_NATIVE_TOOL_NAMES=new Set(["bash","read","write","delete","ls","grep","todo"]);function toolParametersToJsonSchema(tool){try{return JSON.parse(JSON.stringify(tool.parameters))}catch{return{type:"object",properties:{},required:[]}}}var CURSOR_UNSUPPORTED_SCHEMA_KEYS=new Set(["oneOf","anyOf","allOf"]);function sanitizeCursorToolSchema(schema){if(Array.isArray(schema))return schema.map(sanitizeCursorToolSchema);if(schema===null||typeof schema!="object")return schema;let sanitized={};for(let[key,value]of Object.entries(schema))CURSOR_UNSUPPORTED_SCHEMA_KEYS.has(key)||(sanitized[key]=sanitizeCursorToolSchema(value));return sanitized}function buildMcpToolDefinitions(tools){if(!tools||tools.length===0)return[];let advertisedTools=tools.filter(tool=>!CURSOR_NATIVE_TOOL_NAMES.has(tool.name));return advertisedTools.length===0?[]:advertisedTools.map(tool=>{let jsonSchema=sanitizeCursorToolSchema(toolParametersToJsonSchema(tool)),inputSchema=toBinary(ValueSchema,fromJson(ValueSchema,jsonSchema&&typeof jsonSchema=="object"?jsonSchema:{type:"object",properties:{},required:[]}));return create(McpToolDefinitionSchema,{name:tool.name,description:tool.description||"",providerIdentifier:"pi-agent",toolName:tool.name,inputSchema})})}function extractUserMessageText2(msg){if(msg.role!=="user")return"";let content=msg.content;return typeof content=="string"?content.trim():content.filter(c=>c.type==="text").map(c=>c.text).join(`
36
+ `).trim()}function hasUserMessageImages2(msg){return msg.role==="user"&&Array.isArray(msg.content)&&msg.content.some(item=>item.type==="image")}function buildCursorRootPromptContent2(content){if(typeof content=="string"){let text=content.trim();return text?[{type:"text",text}]:[]}let parts=[];for(let item of content)if(item.type==="text"){let text=item.text.trim();text&&parts.push({type:"text",text})}else parts.push({type:"image",image:`data:${item.mimeType};base64,${item.data}`,mediaType:item.mimeType});return parts}function cursorUserContentKey2(content){if(typeof content=="string")return content.trim();let hash=createHash3("sha256");for(let item of content)hash.update(item.type),item.type==="text"?hash.update(item.text):(hash.update(item.mimeType),hash.update(item.data));return hash.digest("hex")}function buildCursorAssistantContent2(msg){let content=[];for(let item of msg.content)item.type==="text"?item.text&&content.push({type:"text",text:item.text}):item.type==="toolCall"&&content.push({type:"tool-call",toolCallId:item.id,toolName:item.name,args:item.arguments});return content}function findLastUserMessageIndex2(messages){for(let i=messages.length-1;i>=0;i--)if(messages[i].role==="user")return i;return-1}function buildCursorSystemPromptJsons(systemPrompt,modelId){let trimmed=systemPrompt?.trim(),host=trimmed?[JSON.stringify({role:"system",content:trimmed})]:[JSON.stringify({role:"system",content:"You are a helpful assistant."})];return modelId!==void 0&&isCursorComposerModel(modelId)?[JSON.stringify({role:"system",content:CURSOR_COMPOSER_PROMPT}),...host]:host}function buildRootPromptMessagesJson2(messages,systemPromptIds,blobStore,activeUserMessageIndex=findLastUserMessageIndex2(messages)){let entries=[...systemPromptIds],pushJson=obj=>{let bytes=new TextEncoder().encode(JSON.stringify(obj));entries.push(storeCursorBlob2(blobStore,bytes))};for(let i=0;i<messages.length&&i!==activeUserMessageIndex;i++){let msg=messages[i];if(msg.role==="user"){let content=buildCursorRootPromptContent2(msg.content);if(content.length===0)continue;pushJson({role:"user",content})}else if(msg.role==="assistant"){let content=buildCursorAssistantContent2(msg);if(content.length===0)continue;pushJson({role:"assistant",content})}else msg.role==="toolResult"&&pushJson({role:"tool",id:msg.toolCallId,content:[{type:"tool-result",toolName:msg.toolName,toolCallId:msg.toolCallId,result:toolResultToText2(msg),...msg.isError?{isError:!0}:{}}]})}return entries}function isPlainRecord2(value){if(value===null||typeof value!="object"||Array.isArray(value))return!1;let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function isJsonValue2(value){if(value===null||typeof value=="string"||typeof value=="boolean")return!0;if(typeof value=="number")return Number.isFinite(value);if(Array.isArray(value))return value.every(isJsonValue2);if(!isPlainRecord2(value))return!1;for(let key in value)if(!isJsonValue2(value[key]))return!1;return!0}function encodeCursorMcpArguments2(toolCall){let encoded={};for(let name in toolCall.arguments){let value=toolCall.arguments[name];if(value!==void 0){if(!isJsonValue2(value))throw new Error(`Cursor tool argument ${toolCall.name}.${name} is not JSON-serializable`);encoded[name]=toBinary(ValueSchema,fromJson(ValueSchema,value))}}return encoded}function createCursorMcpResult2(result){return result.isError?create(McpToolResultSchema,{result:{case:"error",value:create(McpToolErrorSchema,{error:toolResultToText2(result)})}}):create(McpToolResultSchema,{result:{case:"success",value:create(McpSuccessSchema,{content:result.content.map(item=>item.type==="text"?create(McpToolResultContentItemSchema,{content:{case:"text",value:create(McpTextContentSchema,{text:item.text})}}):create(McpToolResultContentItemSchema,{content:{case:"image",value:create(McpImageContentSchema,{data:Uint8Array.from(Buffer.from(item.data,"base64")),mimeType:item.mimeType})}}))})}})}function createCursorToolCallStep2(toolCall,result){let mcpCall=create(McpToolCallSchema,{args:create(McpArgsSchema,{name:toolCall.name,args:encodeCursorMcpArguments2(toolCall),toolCallId:toolCall.id,providerIdentifier:"pi-agent",toolName:toolCall.name}),...result?{result:createCursorMcpResult2(result)}:{}});return create(ConversationStepSchema,{message:{case:"toolCall",value:create(ToolCallSchema,{tool:{case:"mcpToolCall",value:mcpCall},toolCallId:toolCall.id})}})}function buildConversationTurns2(messages,blobStore,activeUserMessageIndex=findLastUserMessageIndex2(messages)){let turns=[],historyEnd=activeUserMessageIndex>=0?activeUserMessageIndex:messages.length,toolResults=new Map,pairedToolCallIds=new Set;for(let index=0;index<historyEnd;index++){let message=messages[index];if(message.role==="toolResult")toolResults.set(message.toolCallId,message);else if(message.role==="assistant")for(let item of message.content)item.type==="toolCall"&&pairedToolCallIds.add(item.id)}let i=0;for(;i<messages.length;){let msg=messages[i];if(msg.role!=="user"){i++;continue}if(i===activeUserMessageIndex)break;let userText=extractUserMessageText2(msg);if(userText.length===0&&!hasUserMessageImages2(msg)){i++;continue}let userMessage=createCursorUserMessage2(msg.content,userText,deterministicUuid(`u:${turns.length}:${cursorUserContentKey2(msg.content)}`)),userMessageBlobId=storeCursorBlob2(blobStore,toBinary(UserMessageSchema,userMessage)),stepBlobIds=[];for(i++;i<messages.length&&messages[i].role!=="user";){let stepMsg=messages[i];if(stepMsg.role==="assistant")for(let item of stepMsg.content){let step;if(item.type==="text"){if(!item.text)continue;step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:item.text})}})}else{if(item.type==="thinking")continue;if(item.type==="toolCall")step=createCursorToolCallStep2(item,toolResults.get(item.id));else continue}stepBlobIds.push(storeCursorBlob2(blobStore,toBinary(ConversationStepSchema,step)))}else if(stepMsg.role==="toolResult"&&!pairedToolCallIds.has(stepMsg.toolCallId)){let text=toolResultToText2(stepMsg);if(text){let prefix=stepMsg.isError?"[Tool Error]":"[Tool Result]",step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:`${prefix}
37
+ ${text}`})}});stepBlobIds.push(storeCursorBlob2(blobStore,toBinary(ConversationStepSchema,step)))}}i++}let agentTurn=create(AgentConversationTurnStructureSchema,{userMessage:userMessageBlobId,steps:stepBlobIds}),turn=create(ConversationTurnStructureSchema,{turn:{case:"agentConversationTurn",value:agentTurn}});turns.push(storeCursorBlob2(blobStore,toBinary(ConversationTurnStructureSchema,turn)))}return turns}function buildCursorHistoryForTest(messages,activeUserMessageIndex=findLastUserMessageIndex2(messages)){let blobStore=new Map,rootPromptMessagesJson=buildRootPromptMessagesJson2(messages,[],blobStore,activeUserMessageIndex).map(blobId=>JSON.parse(new TextDecoder().decode(readCursorBlob2(blobStore,blobId)))),turnUserMessagesJson=[],turnStepMessagesJson=[];for(let turnBlobId of buildConversationTurns2(messages,blobStore,activeUserMessageIndex)){let turn=fromBinary(ConversationTurnStructureSchema,readCursorBlob2(blobStore,turnBlobId));if(turn.turn.case!=="agentConversationTurn")continue;let userMessage=fromBinary(UserMessageSchema,readCursorBlob2(blobStore,turn.turn.value.userMessage));turnUserMessagesJson.push(toJson(UserMessageSchema,userMessage)),turnStepMessagesJson.push(turn.turn.value.steps.map(stepBlobId=>{let step=fromBinary(ConversationStepSchema,readCursorBlob2(blobStore,stepBlobId));return toJson(ConversationStepSchema,step)}))}return{rootPromptMessagesJson,turnUserMessagesJson,turnStepMessagesJson}}function createCursorUserMessage2(content,text,messageId=randomUUID3()){let images=typeof content=="string"?[]:extractImages2(content);return create(UserMessageSchema,{text,messageId,...images.length>0?{selectedContext:create(SelectedContextSchema,{selectedImages:images})}:{}})}function extractImages2(content){return content.filter(item=>item.type==="image").map(image=>create(SelectedImageSchema,{uuid:randomUUID3(),mimeType:image.mimeType,dataOrBlobId:{case:"data",value:Uint8Array.from(Buffer.from(image.data,"base64"))}}))}async function buildGrpcRequest(model,context,options,state){let blobStore=state.blobStore,systemPromptIds=buildCursorSystemPromptJsons(context.systemPrompt,model.id).map(json=>storeCursorBlob2(blobStore,new TextEncoder().encode(json))),activeUserMessageIndex=context.messages.length-1,activeMessage=context.messages[activeUserMessageIndex],activeUserMessage=activeMessage?.role==="user"?activeMessage:void 0,userContent,userText="",hasUserImages=!1;activeUserMessage&&(userContent=activeUserMessage.content,typeof userContent=="string"?userText=userContent.trim():(userText=extractText(userContent),hasUserImages=hasImages(userContent)));let action=create(ConversationActionSchema,{action:!state.forceResumeAction&&userContent&&(userText.trim().length>0||hasUserImages)?{case:"userMessageAction",value:create(UserMessageActionSchema,{userMessage:createCursorUserMessage2(userContent,userText)})}:{case:"resumeAction",value:create(ResumeActionSchema,{})}}),turns=buildConversationTurns2(context.messages,blobStore,activeUserMessage?activeUserMessageIndex:-1),rootPromptMessagesJson=buildRootPromptMessagesJson2(context.messages,systemPromptIds,blobStore,activeUserMessage?activeUserMessageIndex:-1),cachedPromptHead=state.conversationState?.rootPromptMessagesJson?.slice(0,systemPromptIds.length)??[],hasMatchingPrompt=cachedPromptHead.length===systemPromptIds.length&&systemPromptIds.every((id,idx)=>Buffer.from(cachedPromptHead[idx]).equals(id)),baseState=state.conversationState&&hasMatchingPrompt?state.conversationState:create(ConversationStateStructureSchema,{rootPromptMessagesJson:systemPromptIds,turns:[],todos:[],pendingToolCalls:[],previousWorkspaceUris:[],fileStates:{},fileStatesV2:{},summaryArchives:[],turnTimings:[],subagentStates:{},selfSummaryCount:0,readPaths:[]}),conversationState=create(ConversationStateStructureSchema,{...baseState,rootPromptMessagesJson,turns}),requestedModel=state.pinnedRequestedModel??buildRequestedModel(model,options?.thinkingSelection),wireModelId=requestedModel.modelId,cursorMaxMode=model.compat?.cursorMaxMode===!0,modelDetails=state.pinnedModelDetails??create(ModelDetailsSchema,{modelId:wireModelId,displayModelId:model.id,displayName:model.name,...cursorMaxMode?{maxMode:!0}:void 0}),runRequest=create(AgentRunRequestSchema,{conversationState,action,modelDetails,requestedModel,conversationId:state.conversationId});options?.customSystemPrompt&&(runRequest.customSystemPrompt=options.customSystemPrompt),await options?.onPayload?.(runRequest,model);let clientMessage=create(AgentClientMessageSchema,{message:{case:"runRequest",value:runRequest}}),requestBytes=toBinary(AgentClientMessageSchema,clientMessage);return log("info","builtRunRequest",{bytes:requestBytes.length,tools:context.tools?.length??0}),{requestBytes,blobStore,conversationState,requestedModel,modelDetails}}function hasImages(content){return content.some(item=>item.type==="image")}function extractText(content){return content.filter(c=>c.type==="text").map(c=>c.text).join(`
38
+ `)}var CURSOR_GET_USABLE_MODELS_PATH="/agent.v1.AgentService/GetUsableModels",CURSOR_DEFAULT_CONTEXT_WINDOW=2e5,CURSOR_DEFAULT_MAX_TOKENS=64e3,CURSOR_1M_CONTEXT_WINDOW=1e6,CURSOR_1M_NAME_PATTERN=/\b1m\b/i,CURSOR_MAX_MODE_1M_ID_PATTERN=/claude|gemini/,CURSOR_MULTIMODAL_ID_PATTERN=/claude|gemini|gpt-|codex/;async function fetchCursorUsableModels(options){let timeoutMs=options.timeoutMs??1e4;try{let requestPayload=create(GetUsableModelsRequestSchema,{customModelIds:[]}),body=toBinary(GetUsableModelsRequestSchema,requestPayload),baseUrl=(options.baseUrl??CURSOR_API_URL).replace(/\/+$/,""),responseBuffer=await new Promise(resolve=>{let client=http2.connect(baseUrl),timer=setTimeout(()=>{client.destroy(),resolve(null)},timeoutMs),abort=()=>{clearTimeout(timer),client.destroy(),resolve(null)};options.signal?.addEventListener("abort",abort,{once:!0}),client.on("error",()=>{clearTimeout(timer),resolve(null)});let req=client.request({":method":"POST",":path":CURSOR_GET_USABLE_MODELS_PATH,"content-type":"application/proto",te:"trailers",authorization:`Bearer ${options.apiKey}`,"x-ghost-mode":"true","x-cursor-client-version":CURSOR_CLIENT_VERSION,"x-cursor-client-type":"cli"}),chunks=[];req.on("data",chunk=>chunks.push(chunk)),req.on("end",()=>{clearTimeout(timer),client.close(),resolve(new Uint8Array(Buffer.concat(chunks)))}),req.on("error",()=>{clearTimeout(timer),client.close(),resolve(null)}),req.on("response",headers=>{let status=Number(headers[":status"]??0);(status<200||status>=300)&&(clearTimeout(timer),client.close(),resolve(null))}),body.length>0?req.end(Buffer.from(body)):req.end()});if(!responseBuffer||responseBuffer.length===0)return null;let decoded=decodeGetUsableModelsResponse(responseBuffer);if(!decoded)return null;let byId=new Map;for(let model of decoded.models??[]){let id=model.modelId?.trim();if(!id)continue;let name=pickModelDisplayName(model,id),labeled1M=CURSOR_1M_NAME_PATTERN.test(id)||[model.displayName,model.displayNameShort,model.displayModelId,...model.aliases??[]].some(candidate=>typeof candidate=="string"&&CURSOR_1M_NAME_PATTERN.test(candidate)),maxMode=model.maxMode===!0,contextWindow=labeled1M||maxMode&&CURSOR_MAX_MODE_1M_ID_PATTERN.test(id)?CURSOR_1M_CONTEXT_WINDOW:CURSOR_DEFAULT_CONTEXT_WINDOW;byId.set(id,{id,name,reasoning:!!model.thinkingDetails,input:CURSOR_MULTIMODAL_ID_PATTERN.test(id.toLowerCase())?["text","image"]:["text"],contextWindow,maxTokens:CURSOR_DEFAULT_MAX_TOKENS,cursorMaxMode:maxMode})}return[...byId.values()].sort((a,b)=>a.id.localeCompare(b.id))}catch{return null}}function decodeGetUsableModelsResponse(payload){let framedBody=decodeConnectUnaryBody(payload);if(framedBody)try{return fromBinary(GetUsableModelsResponseSchema,framedBody)}catch{return null}try{return fromBinary(GetUsableModelsResponseSchema,payload)}catch{return null}}function decodeConnectUnaryBody(payload){if(payload.length<5)return null;let offset=0;for(;offset+5<=payload.length;){let flags=payload[offset],messageLength=new DataView(payload.buffer,payload.byteOffset+offset,payload.byteLength-offset).getUint32(1,!1),frameEnd=offset+5+messageLength;if(frameEnd>payload.length||(flags&1)!==0)return null;if(!((flags&2)!==0))return payload.subarray(offset+5,frameEnd);offset=frameEnd}return null}function pickModelDisplayName(model,fallbackId){let candidates=[model.displayName,model.displayNameShort,model.displayModelId,...model.aliases??[]];for(let candidate of candidates){if(typeof candidate!="string")continue;let trimmed=candidate.trim();if(trimmed)return trimmed}return fallbackId}export{CURSOR_API_URL,CURSOR_CLIENT_VERSION,CURSOR_STREAM_HEALTH_FAIL_THRESHOLD_MS,CURSOR_STREAM_HEALTH_HEARTBEAT_ONLY_THRESHOLD_MS,CURSOR_TURN_END_DRAIN_TIMEOUT_MS,buildCursorHistoryForTest,buildCursorHistoryWireBytesForTest,buildCursorSystemPromptJsons,buildMcpToolDefinitions,emptyGrepPatternRejection,ensureUniqueCursorExecToolCallId,fetchCursorUsableModels,flushOpenToolCalls,frameConnectMessage,getCursorConversationCacheStats,handleServerMessage,mapH2TransportError,measureCursorHistorySerializedBytes,measureCursorModelInputSerializedBytes,mergeCursorMcpToolCallArgs,processInteractionUpdate,resolveExecHandler,sanitizeCursorCallerHeaders,sanitizeCursorToolSchema,stream,streamSimple,synthesizeCursorExecToolCall};