@antseed/gateway-console 0.0.0-stage → 0.1.0

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 (534) hide show
  1. package/LICENSE +674 -0
  2. package/dist/assets/Activity-TLrqPYT_.js +1 -0
  3. package/dist/assets/Arc-VDBY7LNS-BChRXCXW.js +1 -0
  4. package/dist/assets/Audit-Ulc9lO-n.js +1 -0
  5. package/dist/assets/Brave-BRAKJXDS-mq-Xo37j.js +1 -0
  6. package/dist/assets/Browser-76IHF3Y2-BMhRaC5Z.js +1 -0
  7. package/dist/assets/ChainGate-DByG6cpi.js +1 -0
  8. package/dist/assets/ChannelClose-o3JlhOLp.js +1 -0
  9. package/dist/assets/Charts-ogViQ7jC.js +1 -0
  10. package/dist/assets/Chrome-65Q5P54Y-DR9MQEVr.js +1 -0
  11. package/dist/assets/ConnectWallet-BgR8VSGh.js +1 -0
  12. package/dist/assets/DataTable-Cizb1YVv.js +1 -0
  13. package/dist/assets/Disclosure-Ygp-7rwy.js +1 -0
  14. package/dist/assets/Edge-XSPUTORV-DEoZslQE.js +1 -0
  15. package/dist/assets/Firefox-AAHGJQIP-Bp_Hm04m.js +1 -0
  16. package/dist/assets/KeyHolder-BnyOBKE-.js +1 -0
  17. package/dist/assets/Keys-ySYMBnwu.js +1 -0
  18. package/dist/assets/Linux-OO4TNCLJ-B0aw93n9.js +1 -0
  19. package/dist/assets/Logs-B3jGPBKu.js +1 -0
  20. package/dist/assets/Macos-MW4AE7LN-Vvm8Drw3.js +1 -0
  21. package/dist/assets/Members-DoR2B86a.js +1 -0
  22. package/dist/assets/Migrate-BO1VvY3j.js +1 -0
  23. package/dist/assets/Models-B3ydIRK0.js +1 -0
  24. package/dist/assets/Opera-KQZLSACL-Cwv5MDFy.js +1 -0
  25. package/dist/assets/OperatorActions-BiEyggac.js +1 -0
  26. package/dist/assets/OperatorGateAlert-YOWZD4vB.js +1 -0
  27. package/dist/assets/Overview-C4HAFyAv.js +1 -0
  28. package/dist/assets/PolicyEditor-CxJuR6mU.js +1 -0
  29. package/dist/assets/PolicyField-B7_URv8N.js +1 -0
  30. package/dist/assets/Presets-B1xDCjO5.js +4 -0
  31. package/dist/assets/Providers-DvAeVyia.js +1 -0
  32. package/dist/assets/RequestLog-DYJGceII.js +1 -0
  33. package/dist/assets/Rewards-B5U3sj8Q.js +2 -0
  34. package/dist/assets/RewardsClaim-BvXAMTsl.js +1 -0
  35. package/dist/assets/Routing-CmwA_zD2.js +1 -0
  36. package/dist/assets/Safari-ZPL37GXR-C4Ggg6rz.js +1 -0
  37. package/dist/assets/Segmented-DfgcyK0R.js +1 -0
  38. package/dist/assets/SelectField-BCIB_aud.js +1 -0
  39. package/dist/assets/Settings-CNzp4dy6.js +7 -0
  40. package/dist/assets/Switch-GA0Kao4V.js +1 -0
  41. package/dist/assets/Tabs-dykHKE0J.js +1 -0
  42. package/dist/assets/TextAreaField-DWl60i8s.js +1 -0
  43. package/dist/assets/UsageByModel-BEa6PT2A.js +1 -0
  44. package/dist/assets/Wallet-Uy4ZSU5T.js +9 -0
  45. package/dist/assets/WalletConfirm-DnVf8fxx.js +1 -0
  46. package/dist/assets/WalletFunding-Evna4htj.js +1 -0
  47. package/dist/assets/WalletSignIn-DTELVhCs.js +1 -0
  48. package/dist/assets/Windows-PPTHQER6-BlyV2p7Y.js +1 -0
  49. package/dist/assets/Workspaces-B2-b1tIs.js +1 -0
  50. package/dist/assets/abap-BdImnpbu.js +1 -0
  51. package/dist/assets/actionscript-3-B3316cI-.js +1 -0
  52. package/dist/assets/ada-BIOnG6TC.js +1 -0
  53. package/dist/assets/add-j5zdPda_.js +15 -0
  54. package/dist/assets/ahk-BrbAagtO.js +1 -0
  55. package/dist/assets/ahk2-8Zs4aa1G.js +1 -0
  56. package/dist/assets/all-wallets-CA6rWtJi.js +6 -0
  57. package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  58. package/dist/assets/angular-html-D_SYSyRt.js +1 -0
  59. package/dist/assets/angular-ts-DGq0tZX5.js +1 -0
  60. package/dist/assets/ant-icon-zZhiTevn.svg +25 -0
  61. package/dist/assets/ants-B38m9Phv.js +1 -0
  62. package/dist/assets/antseed-mark-3TDLhfuw.svg +21 -0
  63. package/dist/assets/apache-Pmp26Uib.js +1 -0
  64. package/dist/assets/apechain-SX5YFU6N-q5qBv-mp.js +1 -0
  65. package/dist/assets/apex-DhZFqWV2.js +1 -0
  66. package/dist/assets/apl-ChzvTHjC.js +1 -0
  67. package/dist/assets/app-store-DVSDl9sG.js +17 -0
  68. package/dist/assets/apple-F6q4P0GW.js +18 -0
  69. package/dist/assets/applescript-Co6uUVPk.js +1 -0
  70. package/dist/assets/ar_AR-44JUQ6EW-BMX-am0v.js +1487 -0
  71. package/dist/assets/ara-BRHolxvo.js +1 -0
  72. package/dist/assets/arbitrum-WURIBY6W-CqVkHBr5.js +1 -0
  73. package/dist/assets/arrow-bottom-DTDfowA3.js +8 -0
  74. package/dist/assets/arrow-bottom-circle-BuTjDGNx.js +11 -0
  75. package/dist/assets/arrow-left-B6jPBX4Q.js +8 -0
  76. package/dist/assets/arrow-right-CtG-tU7-.js +8 -0
  77. package/dist/assets/arrow-top-tqiU407U.js +8 -0
  78. package/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
  79. package/dist/assets/asm-D_Q5rh1f.js +1 -0
  80. package/dist/assets/assets-Q6ZU7ZJ5-P8HioiAD.js +1 -0
  81. package/dist/assets/astro-DTjqU0_L.js +1 -0
  82. package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  83. package/dist/assets/avalanche-KOMJD3XY-Dsn_JPR4.js +1 -0
  84. package/dist/assets/awk-DMzUqQB5.js +1 -0
  85. package/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  86. package/dist/assets/ayu-light-BA47KaF1.js +1 -0
  87. package/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  88. package/dist/assets/ballerina-BFfxhgS-.js +1 -0
  89. package/dist/assets/bank-GyeZDLGq.js +14 -0
  90. package/dist/assets/base-OAXLRA4F-CoYTVIiL.js +1 -0
  91. package/dist/assets/baseAccount-44UITRK7-CsjdbWCf.js +1 -0
  92. package/dist/assets/basic-CmQlzGue.js +2128 -0
  93. package/dist/assets/bat-CickPsom.js +1 -0
  94. package/dist/assets/beancount-BgSHGh8x.js +1 -0
  95. package/dist/assets/berachain-NJECWIVC-DumxnFvf.js +1 -0
  96. package/dist/assets/berry-uYugtg8r.js +1 -0
  97. package/dist/assets/bibtex-CHM0blh-.js +1 -0
  98. package/dist/assets/bicep-Bmn6On1c.js +1 -0
  99. package/dist/assets/bird2-Bx8U0n9b.js +1 -0
  100. package/dist/assets/blade-k33SngOZ.js +1 -0
  101. package/dist/assets/blast-V555OVXZ-BbhJh1tj.js +1 -0
  102. package/dist/assets/browser-B2noKwpy.js +14 -0
  103. package/dist/assets/bsc-N647EYR2-B2nLKXWV.js +1 -0
  104. package/dist/assets/bsl-DlhNcFeZ.js +1 -0
  105. package/dist/assets/c-BIGW1oBm.js +1 -0
  106. package/dist/assets/c3-Dp5svz6Z.js +1 -0
  107. package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  108. package/dist/assets/cairo-KRGpt6FW.js +1 -0
  109. package/dist/assets/card-BzkRiTRW.js +14 -0
  110. package/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
  111. package/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
  112. package/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
  113. package/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
  114. package/dist/assets/ccip-B5yDFwGe.js +1 -0
  115. package/dist/assets/celo-GEP4TUHG-CenIBYLU.js +1 -0
  116. package/dist/assets/chapel-DTp_pixX.js +1 -0
  117. package/dist/assets/checkmark-BPvD-RlS.js +11 -0
  118. package/dist/assets/checkmark-bold-15LUuMgT.js +8 -0
  119. package/dist/assets/chevron-bottom-B4wBpHkq.js +8 -0
  120. package/dist/assets/chevron-left-CVZZ7Yrp.js +8 -0
  121. package/dist/assets/chevron-right-CHU8KrpS.js +8 -0
  122. package/dist/assets/chevron-top-1zX-3DnW.js +8 -0
  123. package/dist/assets/chrome-store-C1tTudWr.js +61 -0
  124. package/dist/assets/clarity-Dn5IMItf.js +1 -0
  125. package/dist/assets/clock-DzN1w847.js +8 -0
  126. package/dist/assets/clojure-P80f7IUj.js +1 -0
  127. package/dist/assets/close-2PkXZunJ.js +8 -0
  128. package/dist/assets/clsx-B-dksMZM.js +1 -0
  129. package/dist/assets/cmake-D1j8_8rp.js +1 -0
  130. package/dist/assets/cobol-BBKr1ja6.js +1 -0
  131. package/dist/assets/codeowners-Bp6g37R7.js +1 -0
  132. package/dist/assets/codeql-DsOJ9woJ.js +1 -0
  133. package/dist/assets/coffee-Ch7k5sss.js +1 -0
  134. package/dist/assets/coinPlaceholder-CPo15KWk.js +8 -0
  135. package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  136. package/dist/assets/compass-BkQOvGr9.js +8 -0
  137. package/dist/assets/connect-UA7M4XW6-IY3X6Bmr.js +1 -0
  138. package/dist/assets/copy-D7J_9yWu.js +15 -0
  139. package/dist/assets/coq-BqXF5kFF.js +1 -0
  140. package/dist/assets/core-D7Iu3F-N.js +908 -0
  141. package/dist/assets/cpp-BMRokrvK.js +1 -0
  142. package/dist/assets/create-FASO7PVG-D_rvSpre.js +1 -0
  143. package/dist/assets/cronos-HJPAQTAE-BEOvlOC4.js +1 -0
  144. package/dist/assets/crystal-LUwhHfY5.js +1 -0
  145. package/dist/assets/csharp-B_TYUkTI.js +1 -0
  146. package/dist/assets/css-Z72CF80r.js +1 -0
  147. package/dist/assets/csv-fuZLfV_i.js +1 -0
  148. package/dist/assets/cue-D82EKSYY.js +1 -0
  149. package/dist/assets/cursor-D_ZL5xdj.js +3 -0
  150. package/dist/assets/cursor-transparent-5cw6wIF5.js +12 -0
  151. package/dist/assets/cypher-COkxafJQ.js +1 -0
  152. package/dist/assets/d-85-TOEBH.js +1 -0
  153. package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  154. package/dist/assets/dart-CtKP3W-j.js +1 -0
  155. package/dist/assets/dates-Pi3-Ywng.js +1 -0
  156. package/dist/assets/dax-CEL-wOlO.js +1 -0
  157. package/dist/assets/de_DE-PYAO5YD6-BWlqPWgO.js +1487 -0
  158. package/dist/assets/degen-FQQ4XGHB-CeHTs88l.js +1 -0
  159. package/dist/assets/desktop-BmXAJ9_W.js +1 -0
  160. package/dist/assets/desktop-CN9tnTE4.js +9 -0
  161. package/dist/assets/diff-D97Zzqfu.js +1 -0
  162. package/dist/assets/dijkstra-COg3n3zL.js +1 -0
  163. package/dist/assets/disconnect-BT0EHVOp.js +8 -0
  164. package/dist/assets/discord-Aua-xz-O.js +17 -0
  165. package/dist/assets/docker-BcOcwvcX.js +1 -0
  166. package/dist/assets/dotenv-De0Btta0.js +1 -0
  167. package/dist/assets/dracula-BzJJZx-M.js +1 -0
  168. package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  169. package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  170. package/dist/assets/edge-CJaD-t2L.js +1 -0
  171. package/dist/assets/elixir-DkJLSxtU.js +1 -0
  172. package/dist/assets/elm-DbKCFpqz.js +1 -0
  173. package/dist/assets/emacs-lisp-DaIrSCgJ.js +1 -0
  174. package/dist/assets/en_US-Y4ZOVFV4-CcVPgXVa.css +1 -0
  175. package/dist/assets/en_US-Y4ZOVFV4-Dx46mx69.js +1651 -0
  176. package/dist/assets/erb-CSMaCouu.js +1 -0
  177. package/dist/assets/erlang-DsQrWhSR.js +1 -0
  178. package/dist/assets/es_419-HRGOJ6VT-D-qzxUM-.js +1487 -0
  179. package/dist/assets/ethereum-RGGVA4PY-SWGOlkuk.js +1 -0
  180. package/dist/assets/etherscan-CFVn8yLT.js +6 -0
  181. package/dist/assets/events-DQ172AOg.js +1 -0
  182. package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  183. package/dist/assets/everforest-light-C8M2exoo.js +1 -0
  184. package/dist/assets/exclamation-triangle-DuGroEVd.js +4 -0
  185. package/dist/assets/extension-vxS12Di_.js +8 -0
  186. package/dist/assets/external-link-_BcrwSiW.js +8 -0
  187. package/dist/assets/facebook-DmCisZFD.js +26 -0
  188. package/dist/assets/farcaster-BicNTxi0.js +12 -0
  189. package/dist/assets/fennel-BYunw83y.js +1 -0
  190. package/dist/assets/filters-DsqaapJj.js +8 -0
  191. package/dist/assets/fish-BvzEVeQv.js +1 -0
  192. package/dist/assets/flow-5FQJFCTK-CUie2reO.js +1 -0
  193. package/dist/assets/fluent-C4IJs8-o.js +1 -0
  194. package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  195. package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  196. package/dist/assets/fr_FR-IGGVC6RM-D8LpUM75.js +1487 -0
  197. package/dist/assets/fsharp-CXgrBDvD.js +1 -0
  198. package/dist/assets/gdresource-TyuKm33G.js +1 -0
  199. package/dist/assets/gdscript-DqcFQ5yU.js +1 -0
  200. package/dist/assets/gdshader-DkwncUOv.js +1 -0
  201. package/dist/assets/genie-D0YGMca9.js +1 -0
  202. package/dist/assets/gherkin-DyxjwDmM.js +1 -0
  203. package/dist/assets/git-commit-F4YmCXRG.js +1 -0
  204. package/dist/assets/git-rebase-r7XF79zn.js +1 -0
  205. package/dist/assets/github-Cy8vtSA1.js +18 -0
  206. package/dist/assets/github-dark-DHJKELXO.js +1 -0
  207. package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  208. package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  209. package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  210. package/dist/assets/github-light-DAi9KRSo.js +1 -0
  211. package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  212. package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  213. package/dist/assets/gleam-BspZqrRM.js +1 -0
  214. package/dist/assets/glimmer-js-Drrc9bTt.js +1 -0
  215. package/dist/assets/glimmer-ts-zeybXsvi.js +1 -0
  216. package/dist/assets/glsl-DplSGwfg.js +1 -0
  217. package/dist/assets/gn-8iBmfbXw.js +1 -0
  218. package/dist/assets/gnosis-37ZC4RBL-B137OtHZ.js +1 -0
  219. package/dist/assets/gnuplot-DdkO51Og.js +1 -0
  220. package/dist/assets/go-C27-OAKa.js +1 -0
  221. package/dist/assets/google-DWOb5WfA.js +18 -0
  222. package/dist/assets/graphql-ChdNCCLP.js +1 -0
  223. package/dist/assets/gravity-J5YQHTYH-Bj6B0uod.js +1 -0
  224. package/dist/assets/groovy-gcz8RCvz.js +1 -0
  225. package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  226. package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  227. package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  228. package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  229. package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  230. package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  231. package/dist/assets/hack-Ck6-gGSS.js +1 -0
  232. package/dist/assets/haml-GN_XdMnF.js +1 -0
  233. package/dist/assets/handlebars-DPT5vKgj.js +1 -0
  234. package/dist/assets/hardhat-TX56IT5N-CV1FY-wE.js +1 -0
  235. package/dist/assets/haskell-Df6bDoY_.js +1 -0
  236. package/dist/assets/haxe-CfZj7gIn.js +1 -0
  237. package/dist/assets/hcl-BWvSN4gD.js +1 -0
  238. package/dist/assets/help-circle-D71RiRr9.js +12 -0
  239. package/dist/assets/hi_IN-XSKAA3MF-C3QUpWyP.js +1487 -0
  240. package/dist/assets/highlighted-body-KQOG7T2V-BnrhMNof.js +1 -0
  241. package/dist/assets/hjson-D5-asLiD.js +1 -0
  242. package/dist/assets/hlsl-D3lLCCz7.js +1 -0
  243. package/dist/assets/horizon-BUw7H-hv.js +1 -0
  244. package/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
  245. package/dist/assets/houston-DnULxvSX.js +1 -0
  246. package/dist/assets/html-BlS82ilI.js +1 -0
  247. package/dist/assets/html-derivative-DZhk3IEZ.js +1 -0
  248. package/dist/assets/http-jrhK8wxY.js +1 -0
  249. package/dist/assets/hurl-irOxFIW8.js +1 -0
  250. package/dist/assets/hxml-2-FPmUDs.js +1 -0
  251. package/dist/assets/hy-DFXneXwc.js +1 -0
  252. package/dist/assets/hyperevm-VKPAA4SA-CHwraEsx.js +1 -0
  253. package/dist/assets/id-DrPfUse9.js +12 -0
  254. package/dist/assets/id_ID-KUOB4UAL-K9y-nRWm.js +1487 -0
  255. package/dist/assets/image-CnNTNyxr.js +4 -0
  256. package/dist/assets/imba-DGztddWO.js +1 -0
  257. package/dist/assets/index-BC-1LZkB.js +91 -0
  258. package/dist/assets/index-BwpQbdIU.js +1 -0
  259. package/dist/assets/index-CTBUSmCv.css +1 -0
  260. package/dist/assets/index-DAL5B3y6.js +1 -0
  261. package/dist/assets/index-DKArLaJL.js +395 -0
  262. package/dist/assets/index-DX_0N6eB.js +1 -0
  263. package/dist/assets/index-Davt47yI.js +47 -0
  264. package/dist/assets/index-DoyAkmwr.js +16 -0
  265. package/dist/assets/index-kzlEvkEN.js +1 -0
  266. package/dist/assets/index.es-_gKXPOax.js +39 -0
  267. package/dist/assets/info-DyD6yyYg.js +3 -0
  268. package/dist/assets/info-circle-Ci0aBoWf.js +12 -0
  269. package/dist/assets/ini-BEwlwnbL.js +1 -0
  270. package/dist/assets/ink-FZMYZWHG-62p-5IK5.js +1 -0
  271. package/dist/assets/ja_JP-4WRQ63RX-Ct5pF4ug.js +1487 -0
  272. package/dist/assets/java-CylS5w8V.js +1 -0
  273. package/dist/assets/javascript-wDzz0qaB.js +1 -0
  274. package/dist/assets/jinja-DFQZVq3b.js +1 -0
  275. package/dist/assets/jison-wvAkD_A8.js +1 -0
  276. package/dist/assets/json-Cp-IABpG.js +1 -0
  277. package/dist/assets/json5-C9tS-k6U.js +1 -0
  278. package/dist/assets/jsonc-Des-eS-w.js +1 -0
  279. package/dist/assets/jsonl-DcaNXYhu.js +1 -0
  280. package/dist/assets/jsonnet-DFQXde-d.js +1 -0
  281. package/dist/assets/jssm-C2t-YnRu.js +1 -0
  282. package/dist/assets/jsx-g9-lgVsj.js +1 -0
  283. package/dist/assets/julia-Cu79e8SL.js +1 -0
  284. package/dist/assets/just-CMxyWJJc.js +1 -0
  285. package/dist/assets/kaia-65D2U3PU-JmuLQ4gC.js +1 -0
  286. package/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
  287. package/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
  288. package/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
  289. package/dist/assets/kdl-DV7GczEv.js +1 -0
  290. package/dist/assets/ko_KR-I2K7AIEP-B5gw8Mwb.js +1487 -0
  291. package/dist/assets/kotlin-BdnUsdx6.js +1 -0
  292. package/dist/assets/kusto-wEQ09or8.js +1 -0
  293. package/dist/assets/laserwave-DUszq2jm.js +1 -0
  294. package/dist/assets/latex-DJVikpzR.js +1 -0
  295. package/dist/assets/lean-BZvkOJ9d.js +1 -0
  296. package/dist/assets/less-B1dDrJ26.js +1 -0
  297. package/dist/assets/light-plus-B7mTdjB0.js +1 -0
  298. package/dist/assets/lightbulb-Bc9E0FQl.js +3 -0
  299. package/dist/assets/limits-DONLLmCg.js +1 -0
  300. package/dist/assets/linea-QRMVQ5DY-DuI3vv0d.js +1 -0
  301. package/dist/assets/liquid-B-duXHXw.js +1 -0
  302. package/dist/assets/llvm-BZoOZj88.js +1 -0
  303. package/dist/assets/log-2UxHyX5q.js +1 -0
  304. package/dist/assets/login-UP3DZBGS-Db_wM5oQ.js +1 -0
  305. package/dist/assets/logo-BtOb2qkB.js +1 -0
  306. package/dist/assets/lua-BaeVxFsk.js +1 -0
  307. package/dist/assets/luau-nOZpfvQi.js +1 -0
  308. package/dist/assets/mail-DX77ctj9.js +8 -0
  309. package/dist/assets/make-CHLpvVh8.js +1 -0
  310. package/dist/assets/manta-SI27YFEJ-CpVOKa06.js +1 -0
  311. package/dist/assets/mantle-CKIUT334-DR2WgqzU.js +1 -0
  312. package/dist/assets/markdown-Cvjx9yec.js +1 -0
  313. package/dist/assets/marko-BYgDmDgU.js +1 -0
  314. package/dist/assets/material-theme-D5KoaKCx.js +1 -0
  315. package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  316. package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  317. package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  318. package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  319. package/dist/assets/matlab-D7o27uSR.js +1 -0
  320. package/dist/assets/mdc-DF4WjDMn.js +1 -0
  321. package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  322. package/dist/assets/mermaid-CQcHuHx7.js +1 -0
  323. package/dist/assets/mermaid-MCJ5UELQ-BwMuBn9t.css +1 -0
  324. package/dist/assets/mermaid-MCJ5UELQ-C7m1hGo2.js +788 -0
  325. package/dist/assets/metaMaskWallet-SITXT2FV-BlemcphV.js +1 -0
  326. package/dist/assets/metamask-sdk-BIed_ryS.js +542 -0
  327. package/dist/assets/min-dark-CafNBF8u.js +1 -0
  328. package/dist/assets/min-light-CTRr51gU.js +1 -0
  329. package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  330. package/dist/assets/mobile-D5d7E8aH.js +9 -0
  331. package/dist/assets/models-B4dUNXf8.js +1 -0
  332. package/dist/assets/mojo-DJz3ZmWd.js +1 -0
  333. package/dist/assets/monad-4KWC6TSS-DVXSkpiz.js +1 -0
  334. package/dist/assets/monokai-CR4piiQ-.js +1 -0
  335. package/dist/assets/moonbit-Bag4Rp_g.js +1 -0
  336. package/dist/assets/more-C0LpQuB5.js +11 -0
  337. package/dist/assets/move-el3G9tDJ.js +1 -0
  338. package/dist/assets/ms_MY-6VZW6Q3Z-BtFD07hR.js +1487 -0
  339. package/dist/assets/narrat-DRg8JJMk.js +1 -0
  340. package/dist/assets/network-placeholder-DyHu8rcA.js +14 -0
  341. package/dist/assets/nextflow-BCxp2Aob.js +1 -0
  342. package/dist/assets/nextflow-groovy-CedDknKX.js +1 -0
  343. package/dist/assets/nftPlaceholder-BSGI5wo_.js +8 -0
  344. package/dist/assets/nginx-BpAMiNFr.js +1 -0
  345. package/dist/assets/night-owl-C39BiMTA.js +1 -0
  346. package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  347. package/dist/assets/nim-nV83PyhX.js +1 -0
  348. package/dist/assets/nix-CwoSXNpI.js +1 -0
  349. package/dist/assets/nord-Ddv68eIx.js +1 -0
  350. package/dist/assets/nsis-BlV79W_Q.js +1 -0
  351. package/dist/assets/nushell-BXD5iret.js +1 -0
  352. package/dist/assets/objective-c-DXmwc3jG.js +1 -0
  353. package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  354. package/dist/assets/ocaml-C0hk2d4L.js +1 -0
  355. package/dist/assets/odin-BBf5iR-q.js +1 -0
  356. package/dist/assets/off-DaDUbVtw.js +8 -0
  357. package/dist/assets/one-dark-pro-CxGP3dtY.js +1 -0
  358. package/dist/assets/one-light-C3Wv6jpd.js +1 -0
  359. package/dist/assets/openscad-C4EeE6gA.js +1 -0
  360. package/dist/assets/optimism-HAF2GUT7-ec6Nqxs9.js +1 -0
  361. package/dist/assets/org-6a7ccXN_.js +1 -0
  362. package/dist/assets/pascal-D93ZcfNL.js +1 -0
  363. package/dist/assets/perl-5klg-GXX.js +1 -0
  364. package/dist/assets/php-DoruYMF0.js +1 -0
  365. package/dist/assets/pkl-u5AG7uiY.js +1 -0
  366. package/dist/assets/plastic-3e1v2bzS.js +1 -0
  367. package/dist/assets/play-store-JqDZrwEV.js +32 -0
  368. package/dist/assets/plsql-ChMvpjG-.js +1 -0
  369. package/dist/assets/plus-DRfkCkbA.js +13 -0
  370. package/dist/assets/po-BTJTHyun.js +1 -0
  371. package/dist/assets/poimandres-CS3Unz2-.js +1 -0
  372. package/dist/assets/polar-C0HS_06l.js +1 -0
  373. package/dist/assets/polygon-WW6ZI7PM-DXlmm4L1.js +1 -0
  374. package/dist/assets/postcss-CXtECtnM.js +1 -0
  375. package/dist/assets/powerquery-CEu0bR-o.js +1 -0
  376. package/dist/assets/powershell-Dd0kTxKP.js +1 -0
  377. package/dist/assets/prisma-Vru482bI.js +1 -0
  378. package/dist/assets/prolog-CbFg5uaA.js +1 -0
  379. package/dist/assets/proto-C7zT0LnQ.js +1 -0
  380. package/dist/assets/pt_BR-N3XOZ4SV-CvVpfsHb.js +1487 -0
  381. package/dist/assets/pug-BtYPkAgq.js +1 -0
  382. package/dist/assets/puppet-BMWR74SV.js +1 -0
  383. package/dist/assets/purescript-CklMAg4u.js +1 -0
  384. package/dist/assets/python-B6aJPvgy.js +1 -0
  385. package/dist/assets/qml-3beO22l8.js +1 -0
  386. package/dist/assets/qmldir-C8lEn-DE.js +1 -0
  387. package/dist/assets/qr-code-xpdnr3F5.js +6 -0
  388. package/dist/assets/qss-IeuSbFQv.js +1 -0
  389. package/dist/assets/r-Cf5RLm7j.js +1 -0
  390. package/dist/assets/racket-BqYA7rlc.js +1 -0
  391. package/dist/assets/rainbowWallet-O26YNBMX-DUhYus-9.js +1 -0
  392. package/dist/assets/raku-DXvB9xmW.js +1 -0
  393. package/dist/assets/razor-CyjPwjZj.js +1 -0
  394. package/dist/assets/rbs-CpoqiR4B.js +1 -0
  395. package/dist/assets/recycle-horizontal-DCb4o2oq.js +9 -0
  396. package/dist/assets/red-DMbB5_pp.js +1 -0
  397. package/dist/assets/refresh-Dh1nUzf1.js +8 -0
  398. package/dist/assets/refresh-S4T5V5GX-CwqIaaxK.js +1 -0
  399. package/dist/assets/reg-C-SQnVFl.js +1 -0
  400. package/dist/assets/regexp-CDVJQ6XC.js +1 -0
  401. package/dist/assets/rel-C3B-1QV4.js +1 -0
  402. package/dist/assets/reown-logo-D2B07KAj.js +12 -0
  403. package/dist/assets/riscv-BM1_JUlF.js +1 -0
  404. package/dist/assets/ron-D8l8udqQ.js +1 -0
  405. package/dist/assets/ronin-EMCPYXZT-N-QBHZdV.js +1 -0
  406. package/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
  407. package/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
  408. package/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
  409. package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  410. package/dist/assets/roving-DkptacxO.js +1 -0
  411. package/dist/assets/rst-CVOjT0e7.js +1 -0
  412. package/dist/assets/ru_RU-IITAPRET-DOj6Jzj7.js +1487 -0
  413. package/dist/assets/ruby-C8rp0wew.js +1 -0
  414. package/dist/assets/rust-DPvrY3IQ.js +1 -0
  415. package/dist/assets/safeWallet-5MNKTR5Z-D-5imDLD.js +1 -0
  416. package/dist/assets/sanko-RHQYXGM5-OX010CbN.js +1 -0
  417. package/dist/assets/sas-BGn39htG.js +1 -0
  418. package/dist/assets/sass-Cj5Yp3dK.js +1 -0
  419. package/dist/assets/scala-CqE71os6.js +1 -0
  420. package/dist/assets/scan-4UYSQ56Q-CjMz6-XC.js +1 -0
  421. package/dist/assets/scheme-C98Dy4si.js +1 -0
  422. package/dist/assets/scroll-5OBGQVOV-DJFECiai.js +1 -0
  423. package/dist/assets/scss-Cw6XMfVs.js +1 -0
  424. package/dist/assets/sdbl-DVxCFoDh.js +1 -0
  425. package/dist/assets/search-DxSQ6hKW.js +8 -0
  426. package/dist/assets/secp256k1-Cb4vPU9D.js +1 -0
  427. package/dist/assets/secp256k1-CjIPHKIU.js +1 -0
  428. package/dist/assets/send-fGQXWcs3.js +15 -0
  429. package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  430. package/dist/assets/shellscript-Yzrsuije.js +1 -0
  431. package/dist/assets/shellsession-BADoaaVG.js +1 -0
  432. package/dist/assets/sign-A7IJEUT5-CGsRnPrd.js +1 -0
  433. package/dist/assets/slack-dark-BthQWCQV.js +1 -0
  434. package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  435. package/dist/assets/smalltalk-BOQMe2GC.js +1 -0
  436. package/dist/assets/smithy-cds9vsN8.js +1 -0
  437. package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  438. package/dist/assets/solarized-dark-UcubFVte.js +1 -0
  439. package/dist/assets/solarized-light-DCG28T6R.js +1 -0
  440. package/dist/assets/solidity-DijEV5ha.js +1 -0
  441. package/dist/assets/soy-zscZBeg6.js +1 -0
  442. package/dist/assets/sparql-rVzFXLq3.js +1 -0
  443. package/dist/assets/splunk-BtCnVYZw.js +1 -0
  444. package/dist/assets/sql-DkvoVjww.js +1 -0
  445. package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  446. package/dist/assets/stata-DACIj5bg.js +1 -0
  447. package/dist/assets/stylus-BEDo0Tqx.js +1 -0
  448. package/dist/assets/superposition-HG6MMR2Y-bRkgatRO.js +1 -0
  449. package/dist/assets/surrealql-Cjom0U5J.js +1 -0
  450. package/dist/assets/svelte-D84K1R2Q.js +1 -0
  451. package/dist/assets/swapHorizontal-BBY5Lgpd.js +8 -0
  452. package/dist/assets/swapHorizontalBold-Cq-sYmrj.js +8 -0
  453. package/dist/assets/swapHorizontalMedium-BqOEbUvj.js +16 -0
  454. package/dist/assets/swapHorizontalRoundedBold-C0OuqTc3.js +8 -0
  455. package/dist/assets/swapVertical-BXdNxS19.js +8 -0
  456. package/dist/assets/swift-C2oV4EkX.js +1 -0
  457. package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  458. package/dist/assets/system-verilog-0hqHdDBg.js +1 -0
  459. package/dist/assets/systemd-4A_iFExJ.js +1 -0
  460. package/dist/assets/talonscript-CkByrt1z.js +1 -0
  461. package/dist/assets/tasl-QIJgUcNo.js +1 -0
  462. package/dist/assets/tcl-dwOrl1Do.js +1 -0
  463. package/dist/assets/telegram-BmiIZY4i.js +16 -0
  464. package/dist/assets/templ-Vpw5XpSW.js +1 -0
  465. package/dist/assets/terraform-BETggiCN.js +1 -0
  466. package/dist/assets/tex-D96PA37w.js +1 -0
  467. package/dist/assets/th_TH-3ZQCKCQE-BcHUN2Q4.js +1487 -0
  468. package/dist/assets/three-dots-DTapkkpV.js +5 -0
  469. package/dist/assets/tokyo-night-hegEt444.js +1 -0
  470. package/dist/assets/toml-vGWfd6FD.js +1 -0
  471. package/dist/assets/tr_TR-QUPUGMUF-CwpF6ZFn.js +1487 -0
  472. package/dist/assets/ts-tags-Ls60c9xG.js +1 -0
  473. package/dist/assets/tsv-B_m7g4N7.js +1 -0
  474. package/dist/assets/tsx-COt5Ahok.js +1 -0
  475. package/dist/assets/turtle-BsS91CYL.js +1 -0
  476. package/dist/assets/twig-D9-LOF2p.js +1 -0
  477. package/dist/assets/twitch-DYg0xYBZ.js +18 -0
  478. package/dist/assets/twitterIcon-CWX6L2yg.js +6 -0
  479. package/dist/assets/typescript-BPQ3VLAy.js +1 -0
  480. package/dist/assets/typespec-ClX509-Q.js +1 -0
  481. package/dist/assets/typst-DamkJZ1Q.js +1 -0
  482. package/dist/assets/uk_UA-SSN6SV5E-IlYYyRC6.js +1487 -0
  483. package/dist/assets/unichain-C5BWO2ZY-BfguYsnu.js +1 -0
  484. package/dist/assets/usage-kR1h5urb.js +1 -0
  485. package/dist/assets/useInfiniteQuery-CgC_8jUi.js +1 -0
  486. package/dist/assets/useTx-VVmPNn5M.js +1 -0
  487. package/dist/assets/v-BGw2Nkan.js +1 -0
  488. package/dist/assets/vala-CsfeWuGM.js +1 -0
  489. package/dist/assets/vb-Cu-pLBUe.js +1 -0
  490. package/dist/assets/verify-9xDOJyem.js +8 -0
  491. package/dist/assets/verify-filled-Ddmmdp9A.js +8 -0
  492. package/dist/assets/verilog-nZwndyjY.js +1 -0
  493. package/dist/assets/vesper-DRje8inN.js +1 -0
  494. package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  495. package/dist/assets/vi_VN-7BUVRNYY-CZ9S75qZ.js +1487 -0
  496. package/dist/assets/viml-CJc9bBzg.js +1 -0
  497. package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  498. package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  499. package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  500. package/dist/assets/vue-DSqPwMUe.js +1 -0
  501. package/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  502. package/dist/assets/vue-vine-C0RcJ6UU.js +1 -0
  503. package/dist/assets/vyper-CDx5xZoG.js +1 -0
  504. package/dist/assets/w3m-modal-Db-ExkQd.js +642 -0
  505. package/dist/assets/wallet-BFpW6bHU.js +8 -0
  506. package/dist/assets/wallet-placeholder-BCJd28d4.js +14 -0
  507. package/dist/assets/walletConnectWallet-YHWKVTDY-D3lyiczV.js +1 -0
  508. package/dist/assets/walletconnect-RK9ghEgJ.js +30 -0
  509. package/dist/assets/warning-circle-BN9_WKsD.js +12 -0
  510. package/dist/assets/wasm-CG6Dc4jp.js +1 -0
  511. package/dist/assets/wasm-MzD3tlZU.js +1 -0
  512. package/dist/assets/wenyan-BV7otONQ.js +1 -0
  513. package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  514. package/dist/assets/wikitext-BhOHFoWU.js +1 -0
  515. package/dist/assets/wit-5i3qLPDT.js +1 -0
  516. package/dist/assets/wolfram-lXgVvXCa.js +1 -0
  517. package/dist/assets/x-B_Ut3Zzd.js +12 -0
  518. package/dist/assets/xdc-KJ3TDBYO-DNV6zchh.js +1 -0
  519. package/dist/assets/xml-sdJ4AIDG.js +1 -0
  520. package/dist/assets/xsl-CtQFsRM5.js +1 -0
  521. package/dist/assets/yaml-Buea-lGh.js +1 -0
  522. package/dist/assets/zenscript-DVFEvuxE.js +1 -0
  523. package/dist/assets/zetachain-TLDS5IPW-Udhyw16T.js +1 -0
  524. package/dist/assets/zh_CN-HJBN674C-Baf0GEeT.js +1487 -0
  525. package/dist/assets/zh_HK-JW3WLRKE-VztJKXL5.js +1487 -0
  526. package/dist/assets/zh_TW-VNNRNXY7-aWfg7Qp4.js +1487 -0
  527. package/dist/assets/zig-VOosw3JB.js +1 -0
  528. package/dist/assets/zksync-DH7HK5U4-Dt4usFw6.js +1 -0
  529. package/dist/assets/zora-FYL5H3IO-iB4wygST.js +1 -0
  530. package/dist/index.html +16 -0
  531. package/index.d.ts +2 -0
  532. package/index.js +4 -0
  533. package/package.json +55 -3
  534. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ var B="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20fill%3D%22none%22%20viewBox%3D%220%200%2048%2048%22%3E%3Cpath%20fill%3D%22url(%23a)%22%20d%3D%22M0%200h48v48H0z%22%2F%3E%3Cdefs%3E%3Cpattern%20id%3D%22a%22%20width%3D%221%22%20height%3D%221%22%20patternContentUnits%3D%22objectBoundingBox%22%3E%3Cuse%20xlink%3Ahref%3D%22%23b%22%20transform%3D%22scale(.00694)%22%2F%3E%3C%2Fpattern%3E%3Cimage%20xlink%3Ahref%3D%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAAAXNSR0IArs4c6QAAALRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAqY3AAAJbAACpjcAAAlsAAaQAAAHAAAABDAyMTCRAQAHAAAABAECAwCgAAAHAAAABDAxMDCgAQADAAAAAQABAACgAgAEAAAAAQAAAJCgAwAEAAAAAQAAAJAAAAAAdWMR1AAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAABNJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BMTAyNDwvZXhpZjpQaXhlbFhEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkV4aWZWZXJzaW9uPjAyMTA8L2V4aWY6RXhpZlZlcnNpb24%2BCiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMDI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Rmxhc2hQaXhWZXJzaW9uPjAxMDA8L2V4aWY6Rmxhc2hQaXhWZXJzaW9uPgogICAgICAgICA8ZXhpZjpDb21wb25lbnRzQ29uZmlndXJhdGlvbj4KICAgICAgICAgICAgPHJkZjpTZXE%2BCiAgICAgICAgICAgICAgIDxyZGY6bGk%2BMTwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpPjI8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT4zPC9yZGY6bGk%2BCiAgICAgICAgICAgICAgIDxyZGY6bGk%2BMDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE%2BCiAgICAgICAgIDwvZXhpZjpDb21wb25lbnRzQ29uZmlndXJhdGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ%2BMjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24%2BCiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24%2BCiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24%2BCiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE3MzYyMy8yNDEyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNzM2MjMvMjQxMjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24%2BCiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE%2BCspvVSsAAEAASURBVHgB7L0JtOdXVed7%2FuOdp5pTSaVSmUOYZEgYhYiCIBDB1taljU8EUXmvl6z2red6vvXEZa%2FX3eu19vKh2PJasJWWxumhTCKDCQQykRASM1dVKjXfqrq37vy%2F%2F%2Fl9Pvv8%2Fze3UlNCIqLNr%2Bp3f9MZ9%2FmevffZZ5%2FzT%2Bm7x3cp8F0KfJcC36XAdynwXQp8lwL%2F41Gg8D9elc9e4263%2B5ToUSgUumdP5btf%2FllTQJBwFjnLnJXe6X3p%2Fe9%2Ff%2FF8lTeMYTmfHN%2F3TwmA58vjn9L3f%2FYVplEFRQDjz%2F7sz7o%2F9mM%2F1j5PAw383d%2F9XWVycrJcrVYjXqPR6MzNzbVuuOGGJnHr54r%2Fp3%2F6p6Uf%2FdEf7dO1A7fqnCv8P%2FVv%2FYr%2BU6%2FHWvl7XKB01113FV784he3nixuAMfkNddcs2N4eHgXANlVLBYvJvKFXDcRdgPnCM9DnBXOEqeHoBM8NdJf5pztdDoneD7EdT8Ae2xlZeWxBx988AAgm%2BP92mF5KEuZsij22k8uz1rAf6I3%2FywA1AeNbUADtda1ReXIkSNXwk1eVCqVruPbCwHK5Vy3cj6rdacMHtPtdns3%2Bd%2FD9Q641t0XXHDBwzyvlYkw5V75%2FlmA6Vkl4rqG%2B7bc0hhyiCJYkDvEcd9992295JJLXlmpVN7A%2BSq%2BXc15mm5DXBswxAv30qFPi%2F61l%2BJpl74C3SV%2B3BPf9Es8nxKY9x3Oh5rN5lc4%2F%2Fb%2B%2B%2B%2F%2F6ste9rLpfiC%2ByeUUc%2BcTq%2F0o370%2BUwpAdJXgUHr7ad1%2B%2B%2B0bESE%2FQSP9RavVmuH7KQdiptk7W1zbnB7dONvtbmftbK27X%2F%2B%2Bf%2B%2F3%2Fsm7jmcvHVPMaZtH5HdKIXiAK81YxqWlpZ%2BwzP3y86mvlJ%2BKwH6A7%2BDrP5kCQ2TLWqa3Kg6i58%2FOzr4SXeany%2BXyjYioLX0621accgjjyB0KqbvGOOIxwZSexDByov1EcqhT3p2TWJF%2Bl%2FCnhCJTuVx8tDh9nSoBsmMA6hOA6Y82bNjw1V620Tm4P013W1es76jbU2r7HVWyJwoTRIX4feAMzs%2FP%2FwuA8wsA5xX9YOClr2fYSNSLtgvM2IaC5YmqKrdgJandRPI1llOnsUozr%2FKyyXvetZup01WqtEUe78EgZ7dI0qVqKpUGUqoOp0JlGFV7MJXKAwnd6hToUB4z6RWPvMnfN9yFuKI8fV0oAaSvLi8v%2F%2BeJiYk%2FJwIFSU%2Bucy%2Bd77zLWiW%2B84qW0te%2F%2FvXK3r171RGav%2Fx%2F%2F%2FLIr%2F38r%2F3M4MDgvy5XyldYXhrJFrJBQgT4zs4uWAo0aL9F27Rce2UhdedPptbi0ZQWDqW0iCpSX0yFNu8ZYJXHhlJxYjwamtYjIRkXf7mXq3QFVasO0LpkyLcy4YvV1EAnbhaHU3FwUyqMbE1pZHMqDU%2FwzGCuWF4bxiHrRAUFK5RNnWOt7HDPV46Pj78S8fZ%2Frq6u%2Fj%2B%2F%2Fuu%2F%2FhHqsKxJ4NJLLy2%2B5CUvWdPxctTvnL9PdMvvnDKlJxGuvLi4%2BLMMuX%2BF8xKLCftvKaFobRTXAFIAp1gqBXhsoGa9lhrHD6fOwd1pYHFfajanUxngtLurqVgZgmsMc5ZTC%2B5RqFRTYQCOMj5mimaRDxPykascC1YBCDqwEQBUKqZiu5U6zXrqAiwKRZguqOBcLaRydzR1Nl2dCtuuTKWpbak4PGoyQI%2FvLdKy9H3dXkyCUbhYdGg40mP1ev3fj4yMfJgorX5Hego2LIJ%2Fe4911Pr2Zny23BipVK%2B99tqG3xcWFt4yODj4bxlNPd9n1N8mKjRNnCkvA%2BI%2BCRyPRr2eakcOpMajd6fOnjtTdfruVGnPpsEtu1LasTM1BwFJmyojjoJLkVK3TJMq4qqIppERwHQWpgyABEigKcQhOQMoRVWb91EOgba8kDrzc6m8tJhKtenU4Et78OLUveDFqbDrJam0fWeqDGlqEpTAzTr00uNVcCWA5OgM0DfvhSP9H3CnT%2Fq8njY%2Bfycc3zEAoiFKN910UwFDXOvRRx%2B9bMeOHb85MDBwo0RyVMNFlIRcsSELRYCDmJLiK9NH09xD96ba%2FXelyqG70lAR0AxvSNXqEOFKgKQNOLjfsiF1B6uII4BDwxfhQAnABEfhWhgcgCtVM9ch3fVHgCdEm5yD%2BMFxWr0C5SjdeiM1F%2BZSASAXW51UgkOlBkVfXUrdpVk4UzMtTV6ZGlfckAavfmkau%2BDCXAfFpNxNIAWYTgVSq9H6xEOPPPTLz3ve8%2FZgCC2%2F9rWvdYAQutT6Mv5j3H9HAIjGrEKQ4DqMSt4H1%2Fm%2F0AsGGSDTxYMswWJsdIkscGDzaWb%2F42nmrq%2Bn%2Bn1fTZXVE2lotJIAXSoX26nKjMMAA6BShQTgUCWAVBgZTK1tm1JxaDi1ESOhJ5UqmZ8hklIFACHOYBqnH8F94Bq9MlA2QASASN7giqX2Csp4owbroCpNvqGklxqNVKy34CadtLpaT43aaqotNtNieWMqXvm9aeol16XJS3elKmLVtDEp5HLlEmirss4l6gszWv3fR0dH%2F5Of1tMsB%2F3H%2BXsmUn3bSuLEJPNGZUXW7t27L7%2Fooov%2BCwB4jaBpd9Bau0wnWEIIazOVyqXUpFcf370nTX%2F1NjjOg2mg3EyD48U0UGqlKvpNFZtipbjCeL%2BTyoioMnGMV6igs3BtIz7amzcAIkZS8o8SnMdMzKdMdjwHW8mcgJenHjZyHFy9VeEOUQZQOnAewdMVNJSzWIf71ADUcp3XgAcQtTuVULob7SIDwJVUJ3xh14vS5HWvT1PXXEMHqMJxTTuL58ivkJp0gKAFutHNBw8efNfll1%2B%2BW5HG%2FF4LOsqI%2F1GOEAn%2FGDnLiiFAQfCcPHnyHRdffPG9ggfO0KS3QcHkTDmsHS6iqKGkRx7Zk%2B768J%2Blh373T9LyIw%2BlgQ0DqToB12DIXWo3kHEtGjTGSOq4mqijagUkgg3d9tphJDWPnlLjGunC3OBoaLCqRmQLKnoYOTddAnYEIXUaG02a23Xt2FJ8rfAaQIWeU0JaFlMFoA90F5lsW0hDI5U0NLU1dQ8dSAc%2B%2Bv%2BmBz7y%2B%2BnI%2Fd8kPHWBawaXE6XQArp0pY002rlz573STNpJQ2l57rL%2Bw33NFP6HS%2F%2BMKa9TBiu1Wu13EVnvFixYkZs0C0KHfzwrqrD1pLnpY%2Bnxm29J87d9I5UHumlgBLsLEq%2FcrcNx4DqoqtUiQ3FFFqffKsiWMrUrodsw7Ec80SBwIa9ddKO2o66J0VQeHkYHcghEYJXpOHk%2BH2UEmW0bozM4TU9sqQd1EVMFRoGF5moCL3xDEiPSPFt0iGarkIIDyY0ofaswwCzrAHhDtK100sBznp92ft8PpA07Ub6J3jYu%2FxRnpga4Kt4j0j40NDT0Xt45KvWduuK39TgfmZ71wqAgD1xxxRX122677aIXvOAFfwl4XsroCrrC0%2BEFAgf0oI4MpCYNsfeOe9LBz92SBhv02KkqbGkZUQVwivVUgV5FgKOCVGZaqlyk5wIcOQ%2FYg2kBR5VtxZfgQTygWac2oqpN%2Bt0qQBwdQZwNEg5gkfVTBhB5ytU6HfQdh%2BUNzlYz9CCfQ4QxvFeMFTBUdvjeaagLoSsRtN1hdEYJGVZyAqTOCDalwbSKM0BtpZtW69W05bUvS5d873VpcGwstRGLHj0Qyeo6jE7LjdXGHd%2F45jd%2BhDm2g33aRsBv059vK4D6FTxw4MD1W7du%2FSQE2AzXadDM1eA6vdGVIuv440fS%2FZ%2F8Uqo9ciCNbaimKrpOCfFTLawEcAbQcwaC0%2FDeKwAqgZoSgCkpv7TTAApFH%2B5jEB6KVlAjAFF7cDAhC9CJsAE58uLZ0VhwICMQ9rwciOS0CcUAUYkLMAqOuuQWjrzgSKXVzIm6dYzLjMracJ8uehDo4R6O2y6FIbLerqR6d4izmla7I3CkoeBMyycZCGzemna97Ya0%2FapdiENAuE7Jhm4NuGsVveg4x1sYud7%2B6KNdOmjhnD5Lzya2vl0AKgCeqpzn6NGjN05NTf2lzlrYOWS5WdehN5dpYOYn0wNf%2B0ba84mvphG4RnUMULRqPbDAdYo1uA0iC9EFj%2BI5n6E0A54yukPYhbgvIMMK6B2OwgSUFqQuSnILztPFJlQeADhVgKPyXOUEuEAtwHN%2BwkTI4JYCwlFYF71HBbrDaKsIeEoo1QXeFfnOsA99TmARlucm79uIslYHLgQ3aiLOGAakGtqRQGp0B1IHC3djtZSWlzpp2%2Fddl66%2B4RXYkBB55BGcqCfS6IiVJhr67MnZt2%2Fbtu2veh1VlqUE%2FAc9zk%2BnZ579GniOHTv2zs2bN%2F8Bdh2H4WoHzqqjR3RTFc4wP7uU7v7Lr6bjX384jW4eToOKJ0ZWgmQA8VQuOsqqMTRTx%2BEZkvu%2BVOzwrM6D%2BHLIDmhCJFXQh%2BBKHTmRIzHA0lV8YevpVpnDEkgDFcQbz%2BhGASB0oLBxK87OU3eV8zjkQHCGLiJMThR6kDqRijXfSo6qHJWhUBfhUIUQdwIKcca3MAHwvSkQOwwFOFcRZ812NTXRjVplxNqJhTRw6RVpx41vTWPbdgIiwEnmmiIAUwu9yInmNDs7986NG6c%2B8u0C0flodB4SnvfzGnhOnDjx3o0bN%2F4O3ntGQgtgZhrw2EkEz8HdR9Itf%2FzVVJxR14GLhLjqBGAETqUkaOppMK0ArDbAqQcnUg8CG4BLJgPHAUDBeZz4RjBKYLlORy4jh4l7hsqIrBIcqECPdujeiQTK6E8k9HQPwSaXwS7E0IkTUSM30tjIldEBVzQepzy8ogsVYL4Fwhd4liu1VLCDOxGXJBhXQh7KRQvhVEQnGIxh%2F0ppQ5p420%2BnTc95Mco1nEgaRpmxsWMvqtARsOC%2Fl4nZD347QPQPCaA18OB28V7E1u8gq7WgRo3zVBZtjJj6%2BzsfTzf94W1pgvuhUXpUZxG7Tj2NwWmGKotpuDSfhhBZlWILoCDGIK9iLMQWvU4JpY1HnUfcxGhLrsOEQLE8mDoldRyAAkg6EFhFuiNHEmyKLsI6jDchIPh04bMWHuEXoOFP1o9aIkHxBWfqAUnxVVJyqxcBGsUbPkaEB1ByL3Ql0MIZXDoUbiZwEGnoS6VxkiukxflmGv7Bn0hbX%2FaqAJB2o6L9kUiQg1mZSmFmZua9mzZt%2BgcH0bdOrTWynfnmscceG9y1a9dqX2wJHroKp9YWakmF7fQPf%2FmudN%2Bf3ZEmNpdiKD6UFtNocRkAofcU4UaIqMGyOo%2FDehofXcYGN7L2FaV8ATB048QoKKeBozg0a%2BMT77RSFxscHxBVcKCqcQVQGa6GEBI4uQdbrGd2yDo8olzeW124IGCQIwkeuVQB4HQQd4IrRBqcpMikrHpScKdGmDRgXIi4VtaRWgCIIQTj9cFUZ6S2OLOUJl7xurTj9W%2FMHQPghWWdHMi4MDBQKdBxEWcbP9JvC4v2bB%2FPlGRnLE%2BPddYPHz78w%2FgE%2F39ZbOEIQTfXbUc9BRik3Z%2B7KR3625vS5JZyqI8VXGEqcBp1H%2FUbRVa5pG3H0RVxAI1g8ZkFOVluOYENELQoOzwPyzLvur6Xy3DpkF8XIAWAKg7xAZHzlWBH0ORZ8WdACooSXUPAePQBpHjpnVgqEFcaMhFpcJoOIzW5TUkgYS8qqDMpknzfQKQBHk1Mrb6izZBhFX2o2RlI9c4odcUUOVdLI89%2FYbr6LW8KfU7jvXoQhy4wxSo6Hz7hb9u%2Bffsn%2Bm3ix2fzkITP6qGR0NEWqH8Zzux%2F0aS3QU98P7HxOASl1VBhYoj%2B%2BOe%2Flga3yZYhmPIetoE6jMwHIMEOAAwarWCTLhLHeyegbCrbyT%2F66OQrL%2BjFYZsJBRYfHhrLIbRcQI5VRAR4rh2Z4GuP39KNycXJnyhoj6sBVMscrwKtvKc%2BMXmr8iv142o47tXe%2FQ7o8I51oAEtGKlhJ4qzg2KNFtgoDKZaizi4iUz%2F%2Ff509ye%2BmNq1FhKYjiNRYNYMVNot6j41ueEvbAvbxLb5lup3jkjPKoA0qWte%2F%2BIXv7hzy5Ytfz00OIQ9rYuVlIGIDShd%2BXfPp25K%2B%2F%2Fu7jS0aYreRgNnWEhBvqIHhJrUa4x4C2BIJMMGQAZoclr9v7mOAMVQtIZhyZGkyTGG8L326eWSw%2FtXKD7zw7Yn895JngEMykH%2B6leOBnM54IZyxDjpKIpi9LAwaqKbFTFlyCkr6Gwxj8cIs6SpgsEC4zGFGNKbk7yKcJwRnODmHjyY7vyrz%2BMDhYLugABaU60SXKw1ODRQ3Lp1219%2F%2FvOfvNi2ebanPazys3LQwK6OEJAlRgG3jI2NvaS20mzyDjsPDes0AyLlG39zR9r%2FWXSeLWOp3GZIXlI51qrMCAsjYTWMg42w%2Bzg9UcFrIazLNgIKcAlxFQ3Bs%2FqQZ5FG6nBVr0HOcVWUwc1onKL3Dtt5tmHQ2omi%2BKLqADXDh3tvni1qRKIC2Q5BonI9aCBXcWTGTYzKtBmpD8UoDTFWRnxpP3JStstIzeE9U2ChB7VaZf0L4EAD2IqwDyHKtFoj8GOYP7fQSBuec0W67sZXRN11WQmuhmAcHKpWVlZqd4yMDH%2Fva1%2F72jYgUsRRkGd%2BQNFn5Sgwm06rpDqTfL%2FXA4%2Fj9Wp2VcbAR4%2B670vfTLs%2FfV%2Ba2LqRgUmN3tJvwLO1nu%2Bt55NaVg4TAKBhbHv%2BhL9y6EOCQ1ZnnKwwF4fwBaJ3%2BxhTFXC84BikSwcHO%2FyLRj89K96c%2ByBe6D%2B9ImbbkODxhSdl4b8rfwSTg1At4yV0uzAfVPMoLDXhLSjaRazihVWU6uUlrsuhDzlBjGxGD0CkAcYCfIjeQB4mjIcBivbgxFQ6et%2F%2B9A28DF70gy%2FnGyBVtBfwdKk1GsPDQ9ctLCx%2BYHx87OdoK10RbJ9%2Brbn91o5nBUAoaKH3oLD9DHrPu2ordJ9ugXEzPY6WGWC6YPfXd6dvfvwbafICXDvpaQWIuL78QKBXg3zNOpCEE0C0PIdhcq%2BGcBxynq7iCU6j8iz3ocOG7aSIbak0MsY0BeCB83VsOBog2lkAyhFQYMEwB29tcE%2FSVG%2Fpl8av5z0Ur%2BEFAEhsZBsvAJPFVkffLxrbebmcMOlbLbyjFXUOKuSeuoUU9FYcAywTk7iCMDJbWuJcSKXl5TQkl3JwUViCEw3BfepphWmPWnc8rbSGUnnjSDp4x%2B5UnhpLL3j181MbBzYP2qBaX222xsZG382o%2BFbUi76h8RlPeTxjAClTVdBYvnsNPrwfrNN7aBzFmZw6HLwO7sFI%2BLE70vhmnKa01gYd%2BRPAEBw2WL%2FRMjiktCHiJC3B4kHfzV%2FkMmuNDYho8RBTuKWWR3Fyp0HaOIhlTpBjqocQGcJq0KMcODrq4Qp%2FDJDFaM4y0aA5Z%2BOd%2BxDQaltUjDJQB7BipyED6cADeZqHANcGFWXms%2BJXXFkAUigGG%2BNOoql8o%2BR0hlGKNXaOTaUWPkVtwNSpOWpDYcZvYYBJZShDiRfAIg5rSMPqhsF07Au3pIMTw2nH865MLefjqDd6UbGBY9vI8NgHb7311ttoswdtOz1Az13Dc399pgAqMIkHJVLpyiuv%2FH285QaXl2quaSqryDFZnBZmF9IX%2F%2FhWRtSDNBZsG0I76rZhs8rrO04IKA2D2BB%2FTUQTTjBK8C5ELUr4fiPwvg0r7wwAzBGc5MdG8nAWgtF8ZEKaNp7AIeEuukV7qcbwGM4TI0KTovczLOxiM9IfWkNkQDdAdG7i%2BdXmFwkFgMJqNG4BgMZBDYMO2RU5fIu6Wwy4pHmqx6m3qRcWMS10cUaw%2BoLK%2BJZbaIpNxo4YdqAfHaI9ClwBQpvBB3s%2BaKOMEaYGyTI%2BUW10peGx8fTAZ76Whqem0sbtG7EOxNxZkVFdc3hkcPDa5zz398nlhl7bWYXImuvTPp4RgPqia3p6%2Bn8FPK9eWgqeWVFZjDkolMCvfOKe1JhJaXQSzqGhrAcU4WMze40mowrqBlIQ0sYZjQ%2FrD%2FcMHnLPhqwaBhFRHVxUO6MTiCnXZ9EA9jTTsVld9Wx63LbxCmwvLKbuKnoX2ZWCM9C4ggfuE2KQmXHFGc61GaCUQFYpdT2yzpTv1%2F%2FVzJDBo34ikNQ9QAENqp3H2XPG1MFZIg3qEw5ogo3Em4hfvQFK6mkaQalDQTsHtRBvHk5XyJlKpOl7Oa31lVlqD5OLad0uUvkC6RYY9pcA7Tf%2B5vb08h97LSqEk9SCslChgzfHxkdfPT19%2FH1bt27%2Bj8%2FUPvQtA6gvumCH1wwPj%2FzGykqILib0qBS0GaBn3fWVB9Mjdx5LW7YMQkx7AR9sXnQCh%2Bve5yO%2Fdw2WQ9aS81twK9RExv%2F0QDiPluYyDvEJ%2F53uMA5hnOo2ciSxYmsEyRV10DZEHrpWZ3oudXB0rzh9EGWjIWjg0IkAUJeFgnKeDipbKOIGooECexTrbMDpFTy%2B51qQuw0tgLgWBJM2KTpRsAltUdqmos5y1ZxCcZU48%2FNwUrgSE7sJva0AoIruLGM5KI9rKotyX85GnfT9B0BKFM56MAkGjQSattU2xsZ5BpvDaeno%2FvTILbenF%2F7A99JRcrkAb3kF3%2B2RkaHfYLnQpxBlDz0TUfatAqiAJ6HN1rrqqqv%2Bw%2BjoyIDcR4Tbuwa0gD5%2BIt3y13vT5Ea4BMSjnweBM90kge2pBMfrkKtzXGUt0Ng4SsGlaADAUILLpPFRCEs6sPEuc1sxjCdOiAcBAxCKAME0Y%2Bjup9mTqXD4aKqsLEdjxYCkzwl6ItDe3i2LULgZDdglb8FXwLUiJkKjjL6Qy%2FCw7ojHXJnMsXqI0B0lJrDgPKYRk530%2FiLiTLtNwYlUuRNpBfith%2F9dFYui3DkBu5bDjjLYGMfIyqjKKZdQ1qQhHUuvA0ITDdCpnPMuG0vtOGpk6EPoR2NTlTR9z9%2Bn%2FZdcmC6%2B6opY9kQbYVPtNGmzwcsuu%2BI%2FUIwbe225vkevq%2Bm5b78lAGHRrGCUqu%2Fbt%2B%2FtExOTb1lcXCFz%2BCY9QtG1iiT70qfuBxjMeAsGWq%2BL7IieE6RTXDC%2BhAwV3DNK%2BPhU6GVlOE8FQlZwwxiCgJVRwMIIrq2fEL0xRBiNUCw436WiCYb1KkSvCEWRea7ici119x9IaXpa62WINXY6yFyBXuvMtmJUV1fLJMvXRuNEq3hw1lv3CzkIbyN%2Bn1usJ6Vh%2B5iK0ZU6DZOn8U%2FwBOcBC%2BTtnERB8PDekYUWeRucXRhIX%2FQIIBufOpmuixWpRzp6PFaStNFlOuh3RWxYFQGDz3RRLk75mSokXQYLdgoeHOaXmf4YoBPUmTcroog%2F%2FOWvpQ1bNuHZyBSIk7p09KWllfbk5Phb9%2BzZ9%2FbLLrvkL9e5Ga%2Bv5nnvnzaAaMTCe97zHmk3gsvAr3fs2jSKFLBxBhn93HXr3nTwgeW0eRMN71CZb4oE%2FXZksZUSnsBUVjeNUvj36Ci2ksbKK0ioSqrq8wyxVDI1Y%2BtYryhxJCOhcJfBGQxxFiCA6PrzALx06EBqP3IwtVZWgkuFhqWWSRqCoOUQiaNKjw7nLg2NKD6CvsgQGZYRaYYO54y4taRJ5ZPZui3tbeInHRbOxqd8umlEROMCHMVXMQDEfW9aBTKErqZ%2BpDIclRN6klGAkLUg7wKG7uxiKh6fTx3cTtpTDO0nEHFarMlrCBeXgYr0hLsBpJU60x5tlwcZHxDRQcu4tODfkQ58%2Fc50%2BQ03RJWsgYMci8fGDr%2FO49%2FccsstTduWw5I%2F5eNpA%2Bizn%2F1s9UMf%2BlAdt9T3YPN57sLCkoJdCQXnKKXj04vp1r%2Fdn0anGDVAvEqwXNZpaVVGRPgc3AYFehA2O1QCOAPLaWwI%2B%2BqAlmYlI0dvuJ%2FtO7JruRugUuHUi9AhsS4aUuH4kdR87FCqT89QDDiBoole2GQmVV0B1CHtFJQ638OhAD1rDYPzhBsEAGV9DWmRx4Br4K0SZKZOklPfIdAR70K%2FOQ1EhOWd0xBhpkD3yiDiGiDqIwZQkHYbrhcrLngtSHS015GMx%2BhoDiPacFkiI6SkIQBfZoS1eIx6nEjFqfFU2DDK%2Fg7Yfgbg8mXoCK2nAFEDp%2F7leinNt3CPbemUVknlkY1p7pv70sldh9KGXReG7xGJlxaXFluTk2PPPbDvwDt3XLLjd3CJ1cD4tGxDTwtA72cd15ve9Kb2G97whg3YfH655xxGC%2BVDJfKOmx%2BnooBjEsd45L5uGDEdEdin4XRKgNuMl4%2BnTcX5NDKEgxgiy%2BkFh8GogLQFIooGCZ8henfXxtNCy2grpiZQNg1ZPH4i1R6bTrXjc5hGnMLYhD8x2GNUEoY80nBiltLIQ3ANOUmbDMOJ6J1OmdC4jpj0t5GthWKv6PEkDEnlMiAqvRcU%2BW085D9E7R%2BOAh1uxwSuHoPUPZRx0wvuw1XQQKfwj5bDMAKQw7UpZzMmlHXZEGDkqJsr4IG%2FhGmqFGvfGIycACknZ1J1qAKdhxBNg%2FQnOghuL0OFxTQOV9oCUOuNwbSEgbHWmEzziPq9d32T1bBbs9lAMQ27a6CTjU6M%2FzJt%2Bie07YJtzCmWn9LxtAB03XXX2S3qf%2FAHH%2FlpHMR2LsyDlLD50L6w1YO7j6aHbj%2BYNk7RK7BJYPGgB6smwywQXUPl%2BbSxMp2mKifTRGkOUaJZkFAuyIAzCRT1ibAJcd%2BBKG0tyo64EGkOXVU827Dk1b2H0%2BJhLLEtNjGobAvR1mhrp5XToB%2BQbxvfYngez900XJwDuvjS4Caq%2BCxSnjIiLRqS8qmTFSA87CcAJJfqGyGzsQ%2FugJgisYCR1F3P7MWR4BLgZZZRt3AY09cnh1YcCRrT5743UmsD9OBGhAJLAfY6vtBNhlRyIfNSJ28wQmzDUewURcpZxNlOU8TAInnMI%2F4Ha2l8vJzGRll7VrUD6t4r6BoJzyFcP46kC1l5sjx9V%2Bru2ZoK115HNVl2hOxmaRBcaHynbXrRRdv%2FE238tLjQUwZQj%2FuIzMnhweH3NvAPo0J0bHslfryw7Tu%2B8jiNQ8MTqk2PRu1l8DSfJksn00Z6%2F9DAMbjAEpWzgWkMiNlxTkhiSUGIpRiRe3dgzQmLcsn1WwApFtqhpyztPZhm9zbTycaGcBirYLfpMBe0ig4v0dnnhWTUnXBKh%2BCKrwHACsnTanuKv8KLpUG4zGpAbMGBQkfhfVlRxhluppTR6oVcUdcKIxHfQpRBhScdqkxyG%2BkR0yhT2KdwsXAIHguWqJ6H%2BpWg5UJQ%2BWhemdEC7IpZ69Dmqt%2BPTmRyJgWZVDKsbh3d%2BmSAuIQcLpN%2BFWvzSWxd5WPtNDrWTZOjhTQ2iKqAaJPnFwN8qE%2BjzVT%2F5l%2BmlZ1XoBuxHs764sPrUiMmWn%2BR4n0ELrT8dLhQr1pRt3P%2B6Wvpe%2Ffu%2FdlLdu76LwsLy6H7qIwNwB32PTqd%2Fvt%2F%2Fvu0bbIAG11Om0qLaWPpOHoNwGF0JQmqzLiXHXFRLTmSiwBLJa5wFUdSXeX5MCIAJRrrV9hodHiHj6XFk0tp%2BrFWmpnD0bWMDiDh4C8d2HyN0YaENg%2BSxuEKOxE90HmpAXrhYJmJyZ5I0NNxsHwyTRWwlZSWYjSjmB0k78ogDYeSmtiKxYTCKU2OOMqmrXJBuRTlDIV5PeUII3aeeAWIqFN3BvsOo8EyE8dd5rU66FktlOwWHocduQ81U2wJHldhAAeuPtsJGaPyvokPkCv9qVmIMuwOAA%2BggcpGAA7uSQgXGVTKmEAYTJQ6NQYkLQCzmjYM4%2BFZWaae2unIY35vWn7Fr6T0vBtQ%2BFcpt50stcbHR8v7Hn%2F8XZdeeskf9Nv6nIDofXxKHEjtnDXYRqmOjUy8W07sO1%2Boq9Rh1XfetjddPLKQdgwup1E4ziCehfAFejc9KojOEJOwKqPaKRjExqjM%2BI487LXdCQ2EgIeNm8LllW%2FLi%2FV0fH8zHTg8lVZKG5kSoU8xhyVclvHMq0Fo%2BBmkh9UDojrExZwcBBewHQhXU8xh66E5wmTQIUwd7qKIUzdC3U5DMSqxn1NEOQNGPzmjBC4qR%2BCWIbLWyS1BE5zHOJxPHADKFt%2FAhlW1ldSZQVw44esKOAMBEGoPV8wil%2BanBHYHVGY5qZyHb3IcaQa5ecczXKkN2dXh5EoBJO5dU9Zt4kcEJ3FxZRVdaYVNHqZPYCrhfmRgIW0ESBsB0kR5exq%2B%2F7Npedd1oVdCGOrYxcLQSWMjY%2B8mqz8GQNG%2BtI1VPOfxlADkPsdsbtS4%2B%2B57v394ZOR6tmNjxB4bQ7KCtJqm9x1OU488mqY2MHGHDhENgBxSmLjoLygPIdR4lOMluIfiTXKGNXmUBX5YmDWgKeOV3zXmew4fSWnvocm00JziG%2Bu44CgdelcDIjfaYzrAkp72pDZrNfJSGAmuYEBrgJjorhC33VQvIl%2FEZTQOjdGEa3VpkAIjQzlRBy8bGxdmwnvUVuUwTRo9XrGmuOWN%2BotiUuAbQe6Yb42dD0WTOo%2BbVRU3b0qdRfYLUqlWyXY0yDje7y04pWvAYlKHOnVCZLmsJwNLoKtkhwjjSrLUH0AFwIgnqMhfTiY1M9fCJoRIp4YxzK9As7naRDqyrGW%2FlcYZtGw5%2Fkga23t%2FGr72JSGy6QSlxeWVzvDI6PXf%2FOb9r37BC679optaURuHk%2Bc8nhKA2CHMMWyTuZOfxMMt4SAPLVF3oZyW15l7HkYsrFIxejQNKmDC7QKwBJVp3KLA0doMoIoAyI3eqsMonHAcHd0VhSVWn7bhFIcOp7T%2F8OZ0bHFLqhVHiQfXYX2YbhKrLUz05CPrV8tSB6gLKN4Jzo7GNcqA%2FTr0hVV7J4R3KZDWZsnIwDitdHD1EHxwsxFMCZE%2FzwEMFJQADGlHXRjh2SkEvG4b2SVV5dx%2F5zgwFroChLkcRqbLAWh6T2pRxjACwuW6ALnh%2Bi8gL1hC77GpBY4n9xlIcEyBwruw2VIXn12Y6DVARlEElCO4Om6vi9iE7AiD6HOD0E5YLqA%2F7a9Npck7TqaXXU6HDwOt1ewCoGpxy6ZNP0UyX%2By3%2BTlqF5%2FOCyC3m2PKv%2Fnbv%2F3bFzO7%2FuZFCEGvZ8ROgVAuV07Mp9kH9ofFFMFM8QUPFQrw0HLqOYgS11yWIJh9ZZDh58AwvZG5HTpiniSsrqaZxQ3p0cPb0qHZTSjFG1IdPaKKTHcaQEv0EoRegShNuBuqJxXoou%2FoJ0w6nA55nRsaRediyoew8ib8kfgqV1rjPoCUJYmkIQdhBw0aoUXPdiKP4gR4QBQpBgPKlmGG4k6hhP81oWij%2BE6Q0461bySm3aegb88Um1sdhaUSz7Vncq1Y1x%2ByTnFKWSmX2qKKb%2BZGcBgAoyizcyi%2BAiioAXYKKktydtIemIgZ8UkfFStoYlpLEQ8dlO%2FD9IkRRmSH99TTzKGTacuuzWHMZMBQXGJUV6lWf%2Bh3f%2Fd3d9Dmh237822rd14AMWUhnRtvesObvn9iYmrT0uIKZooOM0gSuJBOPHwg1ZlIHRnATA4x1GdM1AYOjuOQmWcJhrRLY8Ms3%2BFq02lEK1cbDK1H0%2B4DF6fdR7enE4UNaRWbkDPLgwBOctZ5Vt%2BpQxUd0TSuyg8WAZLGAkVLm%2FdOKo7Q8OotS9y3SMN5I%2FP2cGSI7ZYGIX1DAbQBrOJOpNqTyUb00BtNwytcjjI6Ugu3U6dMbBmmLPJWmRlwARgbtH%2BQIRCjkQnnCU3ShZgaFhGVTJxCGPQqacWJCNU6zy3lEjAQB9BYc00SdkRB5FXOElcBEqCgLOSlcm8ZyIk0BA%2BAot6kHmkq1nVvWeY6y3WA%2Bmpjevj%2B2bRl5xZLSrqdYh2HobHxsc2ve93rf4CqfJi2t6VUwc56nA9AhTvuuCPaf3Rs4ocdrtuTKTHERwnEMevIQ%2FvRgxgSSkAqpgnepTlVxAJPKLya3LE2D6%2BwSNCpDIjBCKLEKEG6Hl24JN01fVk6uoxzOKOrFdIdR6zg6RuFXmIpy6z5QsSK4inAwEI73i%2BFFSGgAMEYDQb5GJ3Q8KuUA2mRhh2OQ0p7cfgIYUikoHzTkEiM6goczUQBlTUVPADPN7GLHA0XbhJUMGOEv3DamCglAvgyuThsRLLtHT5w%2BgxYumzk0Nl1SSo8%2BACKtVM40BCuI4iK1MvSyfWspyCSk1jmUKS5hp4EweTYoiXEWZQ7c187jeXQlBBKN3Gslzw%2FOpigI4C1UNvrYDf68qMr6Rr8ozYwfWQf8VCET0yMubXgR%2Fptz725nvGQZGc9YGHFn%2FmZn2l%2B%2BMMf3lWpVl61vEIP6rSZH6RxFClH59PSoTlsNeo%2BiHuA45yWVHTU4%2FB9w8CJNDFyFBmMKMJMDDYg3gIW0oF02%2BHr0qf3vSjdt7oz7R3YmE5g7xmAiFVq0wJI06WRtJcNBmow344E4J09c644kI5xqkTXYBuLgDLGZXARr%2FNwimXe2%2FMczam8y3W0oWioC50DcdjB8ChBNdyFe6zoRKcLrmGjUxYNi3hixRRFsAm5hpwWQJFdbjQaRMIjmOLqfRhEHd6TpOFiTnCYDr3jQkpjY%2FO3F4doxGM%2BSPsYJRUsHcraoVyKMvUhlz15qvup78UyH0HiN8OTgMUlZ%2BgbJaFmWrEd%2FDmJ42jNeQpHqpSLqaB9sykdeHyRkRo0ok3RA%2FGcZThSKr%2FaNrftxcBZAcKH83GgEF%2FXX%2F%2BKV4yMjk6xf6EMXJMaR5fR1xFoStNgsCo77AU48B%2BG2gwZqzNpqjRDZSA2uohCTVO7sR9fuDZ9eeaF6bH6VFoaLMB1KmkY5XQDaQyTwRy99STFlqWX7W30UH5ggAoitgDHIqxFLwz1MAlkbx4gXBPCqRnpaIIdDZLRFKTbIE5PaAXHcDSneBhgBSzBEFGM5nTlQKHN68eoBwCxv3qolMfmCTZSiB6aRlsGc19knVu%2FF9Zc80F8WRrfw6mMl07VFGJURifbfwh6McViOUlfsRWA0j5GzZtQGooCIEdimXsoynxn57J0wf1Ml1NxpeVc%2B5f3gt3G9VndMBRunptkGDYy0xlgidWek%2BmFV%2FurC7kiOPa3WRQx9dKXXv8KXu7lPKcYOxeACuykEejDGft1FV0noKp6i8pkA8PY0p5DWDCdsKDIFH4QfWeyeiyNY0Cs0iBam%2B39uh5Uy7Npvr0r3Tl7ffr6yja4zViaQ5rUaYEtsKUxwCBLPwQ4jlN59ZwRG06ikINEnEfpnofbiOoCQ3IBJdFHuSqklujxAmiAxpfp8xFwkD%2FPNqws3Vv1CBuuOKDIANwA2O%2FR9IovvtlAvTd8gjMwWRmeB3ZzDue7ShbSstFANqFPPnuQU3Cf4ESAzjfhSkKdKhdvT108BtpHMeQFAvsxjEt5ScuRZ4Gy48pM55EGxue7ABEUhHLpvfWR9pozpJU5%2Bc5pIe9N0doJKtyoo16CEHKjepTS1x9rpbcu1NPUGGLTclKNMsugxscnX0e0jy4vBwYkTa4eN%2BuPswIIc3bhgx%2F8oGWYKpcqL6%2FVtGSqwtI4NOLiCXZ9P8xeyGO4XzBNsYnJ0bHSLPoPMopGiWEoxHHqwumE%2B%2Be%2FL928%2FIL0IGuZ5gZRjOECdIC0lY4%2FTuXlQo%2FhG7zK%2FQi5gpUgmsy4CTFOwLkWVT6pRpVGbtu7AcgY9zZCDftKjaujMFbK0OBMIUDoGmHkOBLPPsl%2BMtKIcuG%2BQVi5T99eJkez0SSu9eQzNzxgLQ%2F7lnkBIBujyKjMhsp4Ab42OB1G0WZsEo%2B%2F7klk%2FW2bSI80nLKoXHEZPj%2B7U3ER1xNWVtj0hCRs5i4UO2igWcJOEDYfQSFYIm05i9zIegksosY3ykj2WXHOqdoRFNZa5uyMPgsiFx7cv9hO%2B4%2B10ga8J%2FLK4UJR3ZYNGl5OaaY%2B85kP%2BvtoAVKL9%2BTjrAB6zWte46xs83Of%2B9yVTDVcUavF8B36BGnTHENA7MRpyyCm8jSNvgOFeKMJD6EQ8nwQXWemfkW6eenl6bbVLWl2qJxm8eHVlWIrDTHBVVvwERroBHGl%2BChX7mhwehpAbdCARwDPAuHAHf2T7d%2BCXkyZADbJKSGXeKecF4z2YDlTjOH6RI1U5RYkQh00MjqSkQM5SuKWEPxRJuY%2F0SB54EAcR15W0egq5jqPqRs5Cx5NGAmQlmEog2lzb0PGftQAWk01wEnd3YWtcvWFafSevUy8Ah4VAyJYFgHRB5xAir4ilwWIFk8QOHWjb5ScKXQc68C%2FEIfUsW1EC2CdOGw3eZv0Vg%2BxKupmpv3Igdn0%2FCuYASCMSOGXj7xcYdszS3%2FHTTfdJNMPypjW%2BuOsAOq7rF500c7vGRubLC4tzZMAApkCaduoHH8w7Rg%2FgNiyEWjoEC0qgPzcH7oFY5z0teU3py%2FVrkQRxgoEW1mC8KOkshlL6RgKYh1F5jFE3RzEmSA%2BfSDit6iVBrQTtNh%2Biu6oaih6blQQQiAuIYINKntf4GaR5zHSiV5OPvZMFWqljJOTDjJs3CxG6H%2BRR7YCS2zGhXyEu2g8pJUVCRkxXEkjWjSaC9EV1KeZ9bnWj9liGT8C9hRYCkJx8kHGbNyDRVzDIZGVn9AQg0wauXJrat03wxB7wkQ4zI9WpURmI7cJ0whlLKFDtQQRZRc0dhzDCCg7nKNM6%2Bjaf1IP%2FNgp5LiQPF5Yuhg6mA2AuQAxdu%2BRWnojKzwGBSEV52iNj42Xt2%2B%2F6HuIdXsfC9yfdpwNQAV2%2F4zqDA1WX6LHnuAMgFKRDggtHd%2BH3cTRD81pSL67T2EZf5RHG89LN6%2B8MN3d2ZBqWJznERcy6O2MzMa4KyOfjhFlDxGLgIMFG6RiHlkUOOk3Sxd8hHQ168vgtfHYxyywJQt6cL9Iz2XKh%2Ffanxx3CEJm4TKSLFb0OHsdO5eHCOzi3CboI7UoPI0D8XK3V7cyFidxLJMDgfBg9L2KhwfE6DIxGjYjuQH%2FbKyIZDzDcI1i%2BAVF3onhTpsZcuLKmQpMqhY2bUzDu9ppePcM9i48D0IUZqBbDw2ipmxCVcqhIr1KXIFj5wnjKe1jzoZbpX2aVKUMiBT3fhDIcqow8BqOtCyrNi70k3RoBvUAPWh4A75SWs85bPORoZEXe9%2FDQs7CF%2BuOMwLICvKLMQYbZknyc5tsO8KrEF%2F23FVWSraQ3VVWSWjccnLAEc1c%2B6L0tdUb0t92LkjzGKvqjM7s8SPwFubPGWmhqxD%2FONXfy%2FB4HL2H%2FdoBoI2We71DzAO09gM0nPYX5sGDmygYKxBnGKIYXqqskNYMpLEnbqYRw9fZdIBjPRqengoV1YuctrCZwxBpzUiHVybGH8vAMz1cTpUh6A1Eh0PSZuhUNAGgDkevCEU%2BuFEUmzq5yYXpInDR%2FmEDmXL%2BQ3G9wYIaS5uY5%2BuD1E03yxdvTBuWDqba0ZW0yo%2FAFAFNGB%2FJ33iemSNSB7grHlJaGxiA5HQFh3U0x7AjkW2I%2BT6t4ktOQ86kEq6oC32RDrg8303Hj7fTBQzGaCLrgmcuaki1%2FFyCD998883OfVKmqBGvnjjOCCDM10Vm39u%2F%2Bqu%2FupUtiXfpJilrM3XKmVpz89hOAA5KnXaflc5EuqP%2BkvTF5o70IFqMM%2BBLuFFMoPzxI0gADHYM2z5G%2FMcZveyD4FfCZYYgjcqnPa0FOHC6SLv5%2FpiusL1Ks4sJBkJ1InQempYp16i8SvQMyvFJiLFB8FCu4D404hKFVF9Qf5VD%2BEVNRdGh034Qz0YgTXun%2FIvKEUfwRTXjar%2FVPhKciobOS6PJiBJHL8bttsC2dbEg0decUOnMB%2B%2F1L9LrwD2AtFgF6IxHnsO7tqaNyydSY8FdWvM0S4CaRLUF2SkUywZ3kCDQawwqoll4G8AgHbN3qkRlogY4BJ%2BmkAoKj3Gz%2FkOdCCgXlDonaJcDJ1fSc%2BnmvYOf%2B8CDqli69N%2F86q9uRhc%2BzAy9TN9sTzl8edrxi7%2F4i5aj%2FcpXvuYiyLm54eZHvb4ESVN7ZiYsvC3sGN9AXH1o6QfSbzavTvzUSTqBv88SHELOgvs37FSu002HEMK3rLbTXvSe7TSySmzwBApvJadpvJtZFv0YWZWxVGtmkUVrD2nQyu6nDPmDy3ThXIch6gGpwDtn70nC%2FzHaWuGmCXrqEEinEpVria8egHmOtLISGgqnaVI%2Bl8voY6OfTpxQ26kZ3WPdvyhWUnCN9V6ASiYYOhM%2BPkJMMKw%2ForfSKUg4Tp%2B5o1EQSfh0G8dDyLoBuU7yE5eP4rszq7sRZVKzQbBH3bKxMJzLAIKtaOcYhg15zXnwXuD4LMfloshiQgn9UOOqAw1pkg2LOj47yVSjGHXUuD2zuNs432d8UmDPd8XY5teBAZ7bPUzEx%2FV%2FzsiBekteW5umJi%2FBfaNQW6HlVVNMndFEjZ8zerRwVbqpcVX6cmMY7uIk3jJcCW6AwsqPJkFgphvocav0%2BmkWbe%2Bli0wiby%2Bg0GGZojGtbIfedoBG2OOiViysFojtJjNRAIhDbJtGrEhywXOC0cxe8hqBAzpBaD%2By3uoD8EpABM8wMFeoEGn2G1jRoCEu1H0%2By%2FJdiyZ3CoMiQJAjutZcc4RHsG8o4E4j9niNk5EhQEzuBQCwJA8feW9JuI265SLkN7zkm3NU%2Bnd3deKXe%2FHoe42NAyOjadOli2n%2B4eOsWL2Q5TmYH9ARw8xA2mFNBwS5tirDjFrJW50nc1E7CvUQlNS7Eh1FEwdgIYw8yDhUlSOP4AS2iyF2z%2BISg2I%2FmGfnLXIbv%2FfSpk0bL%2BH%2Bq2DijFg548u%2BAZFdNS4JV1L5OEewRjL505OXpo%2B0RhhtWchVhti4S6LzbGZoKkVWOJ0rc5OO3QCjRkXG0farrqSIBqd0dJ1l2uEImwacQCeQu%2FA2Kp8bgTr0iGXmYJQmKiO2UjqI8loGqOoejpjcYFwhhFNGjE5c1isI3A4l1EuIZM4jcg7%2B4ddl10dn4QkADaBXONFqaF7GfYgXymp9tAE5ArIMEdGQyj6e9TCMiVEIL4AMYzB1HLLlNDPeefGe%2FNQjXc7c4Vd7YjWrHI7POnVNbB5JO5ZOMrSehIuiD6G0m6aDhDo0DaU5ElSMRq9m9AlAEFfqe5oPBKU9PsQsVRokzwZlW%2BSDFMDcFtMJhlOGq1s%2BtMh35jqG0RG0%2BlvSWDo0MLjT7PqY8H79cSYAuWEC8dW%2BRy7SnmIPtIZFuvUcS3H%2FCDntcLcGQFZwApuE52qkYvU5DUUhId4x3CWP1aiG81uAx7mmsI1Sah3dl%2BBKB5jIa2PhkzhyhCCyPJlGjAdeWMc4ec8vAKRpPO1C7ocMtE%2BRJ%2BH0MGRhU4R1GUxMJJJU2GMCLfRfRFSTObJYq863GNkBthJzeP7MAOSPtJ1n0s8IwUnuApswcJ8yQLJEGgvDnmSDCSw2L%2Bhi43IgEMpvICdXIQhJCmsHdNBhrTAIkFYRZeqXfDRc1JbG27xjKC0vH0l7jjP%2B5PdZcSoMm40%2FKiM16phF7CARkStJom%2FCmSiPyoadN1xGcgBor2cDIINOS1z5oU%2FqDHC4F8ADJHAPsmwFp7MC3rzBcUnHA4fBi7z2MGExLe7acSYA9T%2BiIxe25cRgd2QkXU4CoAPzjXTRKMogHEfvvBUqbUEcqraQdsfhKjUCl1xJEUK6XyltMzigMYKbh%2F0UkWGy5xAnFo2wrqYI8PBsSe0l9mJ1oDkspI6CXB2h1dUQXtSO%2BEk3JgolFCDgOzwFIrsVk3qBimjWdZxMpO8bKd7JwRzV6TLagfBdNlmIbtBvH2HvdzoFW45EWAJHfMWj6%2Bzd9SN%2BMpN0uxhFafWogyU0n%2F4R3CjKrQ7EJ%2Fy%2F46ehcnF4l%2FOx8Xdc1knz9RNpZR7nfJZtN4J72lmIx9kgTJgCuBfiHtrBrOtCEM1w0JNUzUuQ4X8Z3BecACS7CyDinLJM1G2hRuNqLDAvIjjvVyqULyB6luVm8qSjn%2FfaazTuAr9H5TO%2B5oVNLVgoPYvBDLkKFqd0IdyQwz8yWISYNQq%2BzOsjLMfdv1DTdSxsRMrhMIJRWa%2BrlG96GvCcRH3Tkkuaa6e1pDL5oNpxGy9pL9KHY9FxIYoNmsPKifRLVMZbjphppkYrNDgr4nn2dLibFXCd0uqUw1TlIsYuaBYnvC6uTt7iUQwLzx6CGkO9bzuDT6ZdBxNEVrwFPbREWyjsYr4PZzNoYvHizMW3sNTfNzaZnQaQ2lEY1ruRQuhniNEsNikPc4POs1156Sxr5%2FgFREqmLYqIpIDaQAObQ4NGXkGM10hKPuZAYZAwwwBIa3lsKWO%2BltncuR0g7xE6mCJdv9I5IgkbhsNpZgW%2B2mtnGEf4SbM4wJnWqpgQG9yfcpwGIL%2Fee%2B%2BCSbJCpzxhesGWo%2BIUVn0amkGn0G2c1V6mJDNz6Dr8VJFcqYCuY%2B8wEQ10urOuzNfSzLGTqblCM0MA147nkQ2haMw4JUz85w%2FxJZdEbyIqOxjdYC2RZu5XpM1Xw8xBMC3RDo4FiGxaLzzn1RRCgghIAwJFGx%2Bj1qRF2GgY5%2B5cRqOnIkDSOJrdJHRYQ%2BkGRGHQw8TgEVw5wG9jAybFKgZCa5y3V4lga2Hzkw0p%2FTmpmzuq2hOK7G2EZZVvcnE%2BIaY8tQ8NjRXSVVc9zo6IJxGpih25KMFJQvFjcqjidBjqDDrU7bSJyVUmoJW6TtS3R0u7jDQb4nkYE4CgVrJoFJdQc85s845g8S1EcrGIO2Wq3nvvveR4%2BnGaCGO8X7jzzjsNKZhHYr%2Fi6FQZEEsovHQI2D%2B%2BKazrbrHqQKOTRHB%2FG2sY%2B%2FxE29PTaPiV%2BaXUdtTBPzcyoOpUnlJKcP%2FaNYK4vBdMARMqyDt%2Fe4KW5R1hQj%2FKXy2NCv4i6S3ytUy%2BJbiTxkDmuXnj4fIhymNvJ90avVjbkw0Flmi%2FDKBY7kJHMOe2Lh1OCJsfaYu3Nl4GoWTDNUOMAZqwL1l4w7muXi40NgmeGBCQOD86oKBcdxAu2sdInNQ5tpMBCUU2x%2Bqy%2B7yju6ip8alDB%2B6wYVM9Xb3zcLpz70ZGS4CZ%2BkkqPS21B2kwrCuyqaPgCGBxVXcdI6CjL%2B1isd7OfKmltBug7iNECGpHxbEbrSAAozNDG6rISVhmv2FczIfVXvrSl5rAKQfJn3rwE5SJXTe6b3%2F72xltFwb7DerVtJWf8EZ%2BRLaRWrMM3Vd5gWIqlwoMWFgKFlwCH9smTmedJXonHIduDecxvqWDcBYwuI7lsihe8xk2GsDTdXjfM6%2FHJ0J4qAuY1BzXJgYeXVIVZSfJn9VeYe7XrG%2BvlPtoyFxW8Y5Cqj9wC%2BD4sVaKpaNW5kDx212AyFVniq5OrMtitSijTH%2FLIkBlmW1qL5wxCmP7uRBtcg%2F0IhspPvYuPJxyRDGwB4Ueww4kLO0lvuNAweNhQ%2Be679x2NF259TGs3nQa0I%2B0iUNziK4r1kWPBVZ%2Fof%2BoHwk%2FKEn9J3CaGyKAfkByHNM2b80c%2Bl4N6eEg8qANv%2BuKBIOjyun5ngcFhYG3vOUtVTCRxMaTj9M4UD%2FAhRdeyLdiJSyxAZ7MHRr4P6cTDJhlbBQYdzYuFstHrirC6CvFWea%2FsJGAkEwQSq2S6CFDsAGskHpMbgxLzAfSCEUa7uYPtMVhKQ1GeM88CkKc0ht1hvdQGV9CJwmDI2lqY9KFSb3Aw1GZGbuIMVZW6EQWwkqrk86wNCLF053LMaE%2Bw5EPxXLlqlvK8JNKvO%2FVgTxM0oYOrstS5gI%2FcVnEl8b52GAFvc9eokVyhHgkNvER9XAqgVfklxPdSa1MXqZpA6r2aHsSCNdeujstLU%2Bmh1YuxoHPehMMcjlIcIQlz3RUaSeCH4YYC4WbSunh4He8sQGPopCwIQkIJxc2IWhVB0CRaECsP72UKvyWrS3At9OPaMr1rx944IEgy8TEYGDdpbhUZS1IGz2HNcJBNAknIaRk13XrZj%2B3zDYrJ1MH18jYOUNEy3aJ5o%2Bz2TvDrERZg6utpUxkQBCHs9b4H%2FnTAJG1WdhgUtWD%2FOyrckOHrfZ3FcEaqFHiyRSRNqFYBi%2BQsHQz9YOBB9DqAABAAElEQVQwTEI0gUKzBb10tHdZTVagdWx3WbSgggvBeZzNd9NZfrGUSkBpy2mnsg7SnPsCAOq6Na%2FfsOJqvSa7dUfvgc8eXjzdoVVew%2FZrjMrYVAouZI3IiDNXX%2Fq5Nc4LrronbWOZ9iDLjOBduUXJRA5jaZ0WclZey7PuL3qlO%2FfotA%2BLo1itYsfC0GhR7Kg8U5vgaipW%2FpQfWXHYA3IJCVpkG5%2FASR8bhugfpwGo94F4DPrWKBCp5k%2F0YHK05lEIuUnYHGjwzlGAcxxWHiMsSOA1ugbFUeuWLoLAXuzJrXVZ%2BytI4DqCxx0yiE0YQ0BkyhL4sbHsuYpR0oslwoTRCu6pLiARBJCn7WtKPRWXNDQbyAuzGDNvR2Aq0C7MEzgugMngQbR5HyMxrrjmajGOzkv%2BsUKDxotNvWNUoTJNIxEGdpU7lIXmzKqAVc73Nn9UjcaVa5Fw7JPYZSNNYgRtovDW1xJDx5FqLV1%2F5V3M%2FS3S3nIOzQ8GVpQFEyEu9eIL3Zfpi6z%2FOHDWAKm9Zxz6SHo7HjUgJH8pA9HEFE%2F9Q3pDJ%2BJSH18%2F8akfhCvRznzMLs%2FCLOhfEqB%2FkISKaySl7ERxLtnQM3hnHz6ZivxorKGjV0LQcLiitCFXAzAQzV67lqahKQKVkpfFbhZsY%2BvPHsm%2B4yDPJ0qey2J6%2FMYq8QRTXMjLdJ0tz%2Bk7unBUFtMbcAXNDE5SoOkHq3cIrDFQTtRyYR%2FgacQaM9epqxMxMmtjMeK94HKH%2BDojNd1oLVso%2BNbDk%2FLEoIDVFkWGNM5jQXW%2B9UtujyZSLn5US8L7aNN03bwBVSC2sWGPRBstc1tvJIQgol4oPxsnDqVXXnZnGmDUV0WHK8Vw3XAMz3mGj5EO9CFdRuVpgdMRao3epgKuyJqE3nIeQeRINEoJIflhCsYzlDvahPJYZIjNSmSLesbjbAAqHNh9QDGJ6pAVKgll4zv6ZM0OWUC0BVZpHGJTpzlGIAFV2DaACoXZHuk7iKuiHMpyPEuM%2FpHvJE7qcR7BE8q1n3ocMAAXVcjFdQSUle%2BoIOUCxDaY3THCRXNF29qGTso6iSinzCMyRi2RtpxIjuEwPdt%2FXPkQi%2FkATqxHp1EUae72IchcNpwTtn7mmeup5EILRe9TcAAygOQ%2B1AQIOjikiZFbv%2BqEd1ZLcegotFABrDYm%2B%2FgUBthI1NYDCP0O57Pxu%2FXhtHXTgfR9O%2B5nVw4BQZtQNzfVsml0d1Eotnhvd6ZlYqpJ04bLeeTEVn2MUhq3FuKKQHxnL0Zwqy3IKpIfAVGrm3sP77UHEOv04zQAMYzv8vNAhU9%2B8pMN9B9scCRC5bVO6u5QVX1fQt5Ps0TtGJMXEpC0vQan4aoxKgxSXAWRhQmC9PMnCQ%2BqEmy%2B4Iy2CrecB6CqSzs6sabUMYMi4vCs0hwV9L4HTMsQnIBA5hlxMlgUVasQVx3J1RtaavXoayKCaS%2BA4YJfd%2FNwFWteHeqSJFeKxu4YAkcAwYFck98KAFk%2FEox8%2BNOrc3QcFOHowb7z1xkpl%2FXMijsKsXHsfL2e7oAhmIycnVGZYQv8SrM719txbLU1Gsj9QpyV0uVb7kqvuuhhfluDyWtJBY01AlhH9xZRNLnzqxwYr%2FQ0Cy1VomuEszPJMfXHYvEzHcNCYVblh8MzGW0v2sI26Hbrf%2FOJv2mKCbFBwFOO0wDk1ze%2F%2Bc1esJ63l53D4iBd43bTmOxh9zwNDigpDJSmFbz2Tgvz5NNv8Y5rpGKFyRrO4K%2F1dBFbujREepJM4ETAnKu3PufaEUz%2BbHpyW09BFVfvOWU7EEbyu%2FmYDNjRmZYeo0pAeYNKvzpP3hHDuSy5DiDhjKXGAir0H3QfnLw6bX6amx2%2FIjPyz9KFq1S3sbkU2EI3jKTQJn6JkNBxRBDqGuDhgcNovIi62aBuohUUgjTFYVxcox6GAWRxTyVtWPLuskfAi7bfkr5%2Fw35Gq0U20CJ%2F4mk41JAoiORI%2FGYA9WHAwTlHHgt8kws5CDEvAaQpQ5E7PCBFpEnQHekm8IOJNXqY8PMpx2kAYjkru8uO2wINlKd5E4la%2Bpcch1xKARdSmQw53%2BMyob4Dpv61T9Bo6CAUf2x0m7WXpMP0Nl594S6qRuw38sv%2F%2BtlGnXjgqxULMFIQichF3WcNRAaVKp5xwG1Il2UFtAWNwGkuii%2BjOTOeAUNPVdcJsAAU3suZBE1fjPmthY606o6o5k2a1lEA9E%2BnbhKbmbP7RHyzUyheDRBcBKAHZxYMAQrSobB9nIRHo9v3mSb%2B0h0MjJI3Q0yuYH4SjyM6byVdd%2FHn03Ujh1KxxqS1Io%2FPzheOMVoURJExNBW6zn%2FN8v0kp51KrixDrcr9aNMxTdcAygKYl8bIZqsu42qICbFhkuuP0wD0%2Fve%2FP%2FGb7oZp8nNTbFqsCDM9qsrN0CBRRtgRw%2FGytcN7UB%2BhABOg0mUzPxNJkBmGuEHkyDlqyIJ%2BgOPvhjLkpTutlUn0Gzh68xORokIBwEjL9Pqnwc2DU4B69r6p38iB5ni2lzlC07Co45X6Bo8BFL0DQlxxdWrG55hcBVShRCvOeMcOhNQbv2Xz6B2SPIrZr6fzAnX0INIuwZn92aYcAM7BXWz1S3nkWqfoRL1QBX4chp0z83cUauY6ct2CJqRAPFV%2F9aegFQr763d%2BMT1%2FAJWioc856VJXuexwAInwEpMCuffiCj1njlO3GOQINqOcmva8cTbYin5M6mZTRLlqd5pgwJ1Ztiax8eTjNAARoNsDkIsUpxVhgXw%2BWOBx3BYKMKgTzH%2FFalQIl3%2BxmGsQEdBYihglQby47wPCRGhop0M8tU7LClR6qCyhOH3mJK%2FgJNGloAZB187Qg%2BBTxo34gicDaE25JrIz6BoaBU6sB%2BNe0dWMHkma2k3oqa67ilWfhJPdZ64jaJ4AkztnOOVRZ%2BfTMH5K4SgjZYgyCw7LzHtsYJ3oFNQIQAX3sR4BdJ%2BjlsTP5TYFj%2FDlYTQliFzAWXS%2FJEHU6xyGD%2FFCPnLBACDb15XZge3Nuz6TruXHiR0x4ikSNiHdOyYYdY4qrsjeiWd7zSr2jWVP0giznm1FWHfJDROErWDduOKjdJSbVg8T%2FaJa3DjOBKDEMo6IvbpSO5Sdvwkb9cddApP7q%2FiBXEqABZQGt2ElGgTLBMmEypOC3ueMgmTe2yM5HW0FgNaKRFhVP9Nci5Yr7JcsAghMXv3TBgvASJ04c179vwIyLNAAVH8Ena60kTgrF0q6ogo7j1zHyVNB5Jp0ASR4MtfJV9%2BpG9XQgxRxsdq1B6JozF65gnMyYRx1Q1H2Jx7il5gtFEW3YRTD1sk%2FChde%2BpQP7uOnFxRl0pUd%2BtuxKy3ggbModhHGvbCWg6qzG%2BsoG2n%2BGOLskvYyzm%2FoQOiqLleCB6YJToQhdFU5EExM8ZCP28OzjWM6gk%2FWOPrPJCZtVfG15AlTW149RGbdHiZ6hXzickYA9cb9hcXlpf2uyID7WfTo5O7GetmFsNlZN8%2B19BBJ4pFvKNLBCXrAWkcYCevvhAWAQmwRITgWH6JiAgci8S8AIopIn7eAxLTNC8JzyQDq9cbIO4eJGP08AZS32m1EJFBkRBLkAQje84JD46MrVgVWrLmCwPpHMjgmL2IRXw4WOpHAwjbUQg%2FiQ6531MFm4gwOw6foIMCUesX2eO48D4HsVHKZ8EuJnke5KYsObnmS2RLxHfFaZI%2FIePKRH5TRRhQ%2BV%2BZjGNIJjo%2BaUGTn%2Bg7b%2BG0Y2Jf%2Bp4u%2FkDZjI7LLuBzKMhGaxQ1wJm5k9q4sJtfAuLvyL7Mm7EX8Nscw%2Bm1f2iB5Cg0GOEsry%2FsJXDibLeiMAHrsscdssuKJE0f2r6wsmKg5ghNcBSrNdOkFEHAPhn%2BJECMwh6u54fOIxND87ym8UVFEViHEFsRUb5Lw5zisdNAJFIR5wPD2yLhyv6ZM%2B97GEy2cvcP4Nk5wZ4gu4VQaFWE6jokrC%2BkCxnADkaAq2XzzquO9ey7q2uHehDG5CtDqAMhTvc2O0y9bvspn%2BccWxzhORQOHv5Bur72yBafu6YwWwRIHzSxO%2F%2BBljMjYDU6RVVQv0td0ff165ItfJiSMP%2BTSwc14%2B9Cj6ecu%2BEoaofHZTQefHM0WJEznmSJD9%2Bw2Ti9nLNh85LdWr2TfpgGmMyQvwSxWaWVluXv48KED3Bd7mOD21OOMAMpb2KXSF77w6UPoQcfL%2FpAJdBHN%2BgLv3IZcJpv42SRztAJmTLbBjaKRLQMHlZbz6LUXjicxv2CU3nfDmLhl9l2k5TXHVc5nI9wT74KQErN%2FRlhA5LP39nKvPZDxo61wEfUfQAJbd518WI6D62TOEzoQAHE5dB6FEdbv6BBhXHSIDwobXBvoQaAkipuLHQkGuJ07DJuZP2rHfdhn4LgxoLBpgk4ULgYYXH1F%2BfT%2BCw4mh6HOkiJ0IcAclRlHPUa5zvlZOW57nTYe%2BOMPtrQbA%2BmS4dvSv9785ejcw8R3%2BZVWYQ2MG%2FAadZI11x%2BAWQBE3uVTDDS4kduSML8oRb1bzROf%2B9ynFWGlHib6Wa1dzwSgLr972nnnO99Z%2FMM%2F%2FNgMPj%2F72BvICNYJIrIcdhvbamzDIKXYsgAWiK9RIUMZkD98oRIEwu9X8MSQFgJKxBzGAL0j4nDfixu5ca%2BOk%2FUcwWtPo0cizvqnCnyckSYR%2Bte1pJyIlLvIfbJ7B6UhYYEEIPimnqSLqN%2BtEryS0zjqEOpMxIUJy43cUq%2FdgRuELLWGMmevvdMyc%2Btvk8VolArx09UkYK6kzkf%2FqReF4ZHw%2FOdPj37e%2B4bn%2BO0Ntzsmmgp1AkRWL3OziBWh%2FWNx1AnDp6g5mZ4zdkv6nyfvSXONSpoiAQ2MTYoqYCYBkYsKXYgZ%2BCT%2BDn5VScOjIzZzr7AUm1HUvo997GMnxIKYINipmfLiTABKLCrs8jNOfMbZsF570F9KhkWTMgSm52ycHE2Xv5BNnpbYvFHC2eP5HOcagHinokxPzCMRv1MGqWHPWV8Wi7UWz2yJy6GCqO6TuZpAIp5cpQ8ar%2BbbJ%2F76dCI9Xgg6Gk0DG83IUDwb1ixzgAQAyGlibTnZ%2Bs61VAEiRRhnGN24xnCf%2BKuuduRwWiRX22vP8u2V%2BEXEtXsI2LLqONGJoqzc8%2BxKDwGW9R%2FKSKxQzAMipk5hSEtf65jltK76DblPIEkE%2Bayjh9ceHaKDyR3RiV49%2Bfn0nrFH01F0tik4byzwRFSUuJ8COTbbinFRjrZN0LbKex4ZAQYHQnF%2BgNRXxIKYiLye9OeMADIMi8osZntu4eQ98RNB8jwBhAgaY0u01147xfZWDbZ0sfDrUqVAKoRuPNBlcjFcMpxwhWBZHBE2ikLp8%2F9MACviGYeVywpd5mx%2B8zOE5pTTxWK%2FXhzfR1y%2F91KIlPxjeF7WaYyYlUYEy3F8Z7EVZ3IaxZvACTHHfR6FwXECXE4rKN4ESQVjIruuElfQ0KycXhETcfUeGzCLtbr6TvXKze7iwYWjeHYggKWlOkQb9zlgX4xF6eOVLsJdl5CTkDuqFvnJpvgxGevsYZ1PoX%2B8jPf8TlZ6%2B4aPp3dUH09H2VJ4YyY8dcdajd1nAsYwi6HsezdWuptG4UrqsxKGLtembPMLs%2FfwgDdIYMGETzvOBqDu%2Fv377bClffv2fHNxcYmRH3yIqRLldRVl64XXYGo%2FwY4OIVDN2FrkBnSIzrgP8MD8NaZZWdEdFTVLC8k7acAp%2FXyTD%2Fti7yRNOYycKBRN40eXz88BLp6DdcOpMjcijPn10yRhbjMQooHhIGRI0xGsDxzFGGun0HdClAkon2H12oxCdPGubyNyr32t1A6JFWEOiyklV8EDcCIf7pepf9AFXQjFuouBMcpGrGgoyqxoj%2Fr3ytzX4%2FI7K0zcQWzKijA5Fz9fyY6mmabkazjrR23i2nvgvaNU6ATZ37HhL9LrC8fSDGX2RxKc4lAnGsOHC0Kkl20rMcNAudGFnA2jnUuLCwud3bsfuZegpR4WzOa042wASvfdd1%2F7%2BuvfWH73u9%2B9p9Go7x0YiEJbzWB1l%2B%2BEA9GydbhL%2FGAbBVKmOoTtMALJ%2B%2BcQWAJGo0Pk4JA8B35sWRsxV7xfumwHEgwQzh7B%2FyCqxA7xlYESSrvgMSJp5Gu%2B9zmzCDNS%2FGJxhfh55YJrp3JuWqQbAqXHeZziWNN%2F0AfkKP0z60F%2Bh0vhJuoQ3xGb4qqLITLWr6Ngy6nkTHIrf%2Bw2tvm1PJTB3TwEQZQXVcBGjnfqSFTAf3aGqCcXSyn5wmWYWfr8gkYe58fn4Ex2GMNEfblZE%2BfQztFqAW8AfZiGsTm%2Fb8Mn02Vst%2BySqFHy0qVL53zF4%2FdsRbHGsUoXGFkdm0vxg771vb%2FwC7%2Bw5%2Frrry%2BLBbM503E2AHVxou6%2B8Y3XG2e2tlq7s4qdANERo19Z3fatw%2BlVbxtOx2bY1xCVQD2jgP9y%2FNKev48qUahEVLFHwFxRCmmtrbCnOcQfbzi491HQ5HmjTHDF1hMn30jzyWeAKBIxAeOTAWf4BnHV1bMOwczeo97jOKtkWLczeFKP4D6UQt9iRZq%2B1e645ooPAVZnp1dFnOJLfyK5kPqK1o4AlDUg7S4yM6YyehWNXy1EmY6GJpb1jBUqgImQUWY5rcFDmTUAZSACw3is085ZSUtGSN0JDJp%2B5jHqbRye42%2FM9PuEPYm47e5o2lZ5OP3a5FfY4IJ5MiI4bzYnfcYr3Us208lYZq1RAwnTEUArq0uurJh94xvfmMRCTpi%2FTzrOBiCDdZeWRkRee%2FrY9M1NZTjswYoyR8YP6QykH7iOObNHVtME4OoInnnmgBRbEsTC8d%2B6R6XjIb%2BL5yBOBDGvtcOSRm81jR5IAohwH%2B1KYcWN3kXC9ua4J1bkx7N5mkj%2FanI2NISzN7s6SF3Id8FNaPQYrsez79R%2FuNJwyvA8enNExjCebxJkFVbvnHd2Pqfuch24ka6j6kJyowgLp8q%2FSGg54Th6HGDOcNWKhsV8UpKgGd9UfuM0Z0vYOwSVjliD2U8oaOqiRDYMDzob0MpFXK82K2UM%2BtkGLIBobkjPL38p%2FdbQfek2RpI76BSzKIA%2Ft6WTNo1Q59B9CAsfaMIpj08f%2BzKJ8FP1gQEpesbjnAC6%2F%2F4vWZPy5z%2F%2FmTsW5xfnsQ2g8VgsOV87veR5TroyUnDlBL%2FhZSVsU%2BtC%2FTkJaeX9F7F4Ga3LNw97F%2FFzheMN74xvIsT1nmvk6HPvDLuJ70nfsKeEiWQIG2ycRjMM%2BSiCnEwUHMukS0lDlNWpkRxGnyFHaP3t4lwPtgq7d9mMS2McpcVIjTC6fzC%2FAAAUY3ADr8GF5EByJkdKDJj1K6rlukRZNT42WPKomOofoiEU7CwlMvj5jmqQaRZkkChZ9%2FHnPQPa5DrGBAWrKfL0w3op06erBIS7UPYunv6d7lT6wdG%2FTr9R4decsVMjX9Mrd%2Fj7aSjNgB4yOfoqzS8szP%2FtF%2FjNcNr%2B%2FvtDF15X4H7B8%2FVcAEr8vGX7l37p%2FcUPfOADjy%2FVlm4bdBhpt%2BHPKvJ9%2B46x9OofGU4Hv36S0ZitAlgEjVSgwtpnAgy%2Bg%2FD%2B81DceWQo%2Bs0zH9G7DO8rr4JJ3Sfufc5nX96bVZ%2FtRx48h4sHhCtofgYI0t6NC5yZlwPp6qnlWKOioMn2H7lM5jx5ROY3OVAe0kcYuYxACpDAgYirIh6Ks%2BKLc437mC9hO33zd64eBaFPahOiHNYl6sttTPPYQTjinXXmNHUSJiwfAHlBi3TEhbauiBnXO0Aa9JvSMhHEaL0yCCJQFLDTDfY9E59JN7Tw0hgZ6l6%2BDY7a88UiXts2xgJ9m21u23%2F2sx9Yj8wo3%2Fo%2F%2FVzXv%2BvfRzGrVafcUv3Y0SOfdWjHEa3vkudRhpc3vkouVE8TzKOEj5DA6RHCBKxN7n3ekp2VOeXwuf%2BOyvcBYxqCJZTKfB8913em6ffedY0DGTfiQOjQ1npJmyfBNYJjH45lzx1HWDSww%2FT%2ByEvuoxuELh8u0vSaV6Z6VQxm8eaPu2QQWTydwLKynQ2PWRfyXsNck59h6rCejJrlhraMYVSkIFbBi38Ei4OGOHoKdk8ZjleUJerktEaFDXQIaicq%2BmM1%2FNaZ%2BmHQsUfjzHV6zUv9%2B7pZHX1oc%2FF4%2Bt%2BG%2Fy79mwu7aRO%2FWeIPzmWE0udRHU4cn%2F4ML%2Bq9tjdhS3jG41wAMkL3vvtcIpEqH%2F2TP7ppfn5utlwW9uAZAmnbefELd%2FDI8uaweWSOIwcIVsyXOKj82rV%2F33u1hp14ppyybggTIAxAUH4IGVvcx5V7KpnfEV7AcIaCTRo%2BZhD1uJ%2FPvUMAMW8YzlQtGjeLrAwWvfRiBEa9tBPJaXymNFwhMnpLHqG5hIh3bsIQXMdRl6JLXch36CoMlxXLsQ8RYqylyT7AYFn55KSyQ1JiBXgsNAAKF1jvo3NY%2Fl49AUe%2Fw8S0MGvIQvwLKsqKjw22IWkGeOkQlsUjuGOULYtZvzmh2%2BB3R64ZuDv97MUn7BSRBM52eNEivuZPzn7s4398M9ErGBJtewp09uN8AEKMfaD9K7%2FyK4WPf%2Fzjj2Mb%2BDwbLloZURnI3b5tPL33f9meTu6rpy2gOSpvnhAhQNDPPoATNe4xIV%2F0sgdtPoVYEgxKScCT15XB9SQ2z1l6ci%2BXWwMXGQRq7H89MSnBe2UwhxAJNLp8AEdvfGAcb8hh3E%2Box2koQDYiKqb6upBAAtOIDr%2BRMw0ll3IFh%2BJcbpMbzfVi7jGtLqECLZBCpHHfwG9Z4EQ5varzOBqjnFqigztZSDi8DnmBH%2BvIfXZAC3LHexMqMMnaHWINmQCDNm6b5y88qhuSqISgdpaLlKPeEsGX1oE6tVZTffTybnVyoxozb2QGnc7Q0HDil5w%2F%2F9GPfvRx2xwxZpXPeZwPQDZ%2FZ2FhQR2088juh%2F98ZYXfMeewR1hg1erXfd%2B1fMZUHryJW2N59OrTf7YOcXhDDzdO%2F1W8V%2B5bbYgXXMZngRIUJaSf4wQeASAyWOuxkUIGrbf9vAVkENor3CVEG9wEwjpkz1zoCcDEMJ7oXt0NNcQZvTu4EmnGwjzcW5tdRkR81xaUf45A5dklQ1mXUqmOXfDhRs06DSxXjiKSCKMuNiGk%2BtxbUOpnnXO97fRWMpo%2F1486hJ5nWL8B6ISjWaQnrQyL35CML75Tt8wdKYNko%2Fx6UgSY4LwtRmXL217IJqj8ihjxbUfWhhVX%2BC2UPY888ucm0m%2FzSNxkz3KcD0BG67JLZ%2BNtb3tH5Z3v%2FOnbFhZO3o2iRT8s4K8EgVHALr9iS7rxJy9Khx6up0n34KVAfZbrvRXMLJdYxAkLLsG45T7fGF5dKYsue0R%2Bll4h79WFeBenafKfQPn0Pe%2BiB0YY3isSAJnKcoCwJ1b7wIsRFT1S0WWTmbwanhZq%2B6TKtkPb4Eqk7WoOORMlBHxyJDgQvdwzD%2B%2BzuMtD%2ByzW1JnkSA0Si9UcVDVIQRk7TjBbD49%2BfShrnjcUTAb2tC6ULDqBdYIuinB6a5ef2Iq4vCui%2FBb9vVnTtlyRdu%2B%2BJ1IFfNGZgaHt3dXNV%2BJ4Rj75X3t4cKjI4Ovun37nT932jne8o2KbWzLOcx5PBUCJ5RztK6%2B8QPouHD5y6L9ZOBocQQZROYf5zYkff%2BsVfMY%2BJF3JtkeruAnHfCAnTZ5cong2POl4BpCCoLzsX3vf%2BiIuA0nwZBYe4Qjj1X8a58KRiyCRYVxNG4JFOC3QDt%2F7hkP1HpXnfM2z8%2Bo%2BtB2n1moBF0pxKN9wJwCkmNBDUN0ilNaotcY%2BhvnqQnxTP%2BywgqLuTpaEDABYKPSgjlxIgMQpSBRh5CjoPaw%2FyI5Fkz3u3H8fABt1XkyiWg7AAYDcJMHYil6nWMIpjrII8hZlbzOlsnzh9zAzPwhWsVRLs2jKTjp88PB%2FI%2BrCBRdc0LLNI6%2Fz%2FHkqAKIWqXv77bfXL7zw6sqNN77l0zOzxx9nakOGqSrBnkGNdM1zLkhv%2FfGL08EHa4mfXQhCmXds3SLLdQhqhTijc%2FnNf1Q0ANEXVxLP%2B%2F5pg3MGsHr3Eji4f3%2BkZSE45V5ggpM%2FwZ28kmeEk6I89ojtRhsaFHXtjElWwsmFgvOQmkN%2BTKPBkTRCZm6iFsYpBwIUvo9ZeKcyMBmE%2FkNvj6G8ulBwIHUvuBCrJrLyT8bUIyz1roWznAAnWh1W6yx9%2BE9Rhv4R4gsOlJVq68QXyl1gGXShip%2BQ9bVumFKKiDI7VvZ8VIz2ACWngft0Bjd357deRdmwCwUR2Wyftjw5d2LfjW9%2F46evvvrqysc%2FfrvIjlz6ZTjb9akAyLhObbTe%2BtYfppjp6NHpo%2F%2B1ip8uZfI5esgwv9%2F%2BUz%2F6XJ74leBYHsJnwCJwoHMcXvv3uXz2ED4BiCdElsTgtCf2QBQjrACEVOIMIJF%2BxBU4vfSNSrwOjlWCMw7C6gWYG4l7u6adnMbqGw9V8FzqnI2IeSjfNy6GOCOK30OEca91usZmC2HnoWdTAr5pF5LL%2BCxZ5UzM4KsjOeJrMPVg3ry18T34VRMSyzNza3iXpLjA5tUqhl1f516dIrbfuBnB3TUmtawjwsvJVlQu4ylws%2Bil3hg8%2FZnv1Qtf2m2X9d2w1JF%2Bh58ypVGP%2FFdiHb3hhh%2Fu7Nt3E4lF6lzOfTxlAJFM5557bnY6qfLmN%2F%2Fgx2dOHD84MMBGI7SuQGmw0PD5V29L737vlengQytp2xgE7HEcyXbKIbDipJS9Edba9x54sheinAYCBpgElC3%2FxCmwMpggBrdBtHjnPVkEeAzPQ3yHkHGfh%2BTqODHBymc5j5WTIzlSUQHwm1wpikTYGMH0rqvBaRy65%2BG7ozB%2Bry24jgprfp%2B%2FqZPoxdjEWzAgJJcVRHotqAv5kl7QL1vUHXOGgJCbWK%2B4qgtREWkSjvp8L2CZTkPjEbffkcojgpv0c8IBniJuxM2JS7pz267GcbGn3qAiyX1OzBw%2F%2BEM%2F9IY%2FTWl7pdfGQS0SOO%2FxVAFkQt1bb721%2Bb73vc%2FEjxw4dOBDFXeVCAdbCaV4aqcf%2BeEX8BmdAaNL%2FFY6PVcgnXYILogYw3Fbl%2FsY0srOJRD1VwXMgPE7xJKg%2FTOIaiAIH%2BG5D8D4nMEjgGLJUXAyXnINH2U4lDY7FegYaQECR2NOJ0raUJ4JLh%2BXK2kUDE4UXAhRxfNKDNPzUN0l0YqpmFQFLOoezq%2F1R2GOiFzRsVpHvJASBLFyudwCyDrxIpzmeS9YukxuBmh49Jv1D1pYF%2BuVCcQXYO3SH9yOo%2BK8L6FdFBnMCPysh7EJQ6fZnb%2F45d16iR0Uzd4moe0qAPDI4SO%2Fz9OR973vX3Zs45whf5%2FC8bQARHodPNNqr3%2F969GF3vTfp48dfWRoaNAlV9IUAq2mS3ZMpH%2F3H5%2BfZvg9zh38LidVlavTogDGewN6BAH5E4Dw2pfxEohTAqlASoXemWV9fl6753GNuMTx%2FRPf%2BCilSC7nl6%2BmbV927ULso0hvVYkWJCrQUjAmUbnvgyc28I6kiEt9VrADxY6uKtHkAbwpZu9EHwrdo8edYkhNmrVVDIA2vlThKvALGBljN5IooPW2%2FnAdZ8edZO0flDkGAFqNrSNlkctEp2KWvjvh%2BjGJwcHHCr%2BMTY%2FkFvtUcyXVtjyvu7hhB7%2FD48%2BnSxemLYaGyseOTz%2F8lhvf8HHb1LYldo9akdJ5%2FzwdAJlY9%2BDBg83LLrvMms3s3vPwb7J%2BHkxIDD9D8Ppy%2BsHXPCe96s3b0v4H%2FQVDasp7%2F8cZwXwgAkCJeBJV0ASH4JOACXGVgwWglCUEjiG9kSQ%2B4YOo8Zy%2F9wHZTzfSCmrznTxCoUYXCe7Dqye4TuY8ciCnMxRn7jutMt0Hk5UO1xC%2B13HmdVFigAYghk8QXMd1ZRoRdcBX5JEj8eFK6EH15jicWWuw5gXLw4lo6eg%2FHbSQQ3JabWkRc2YCijfx0ivQl1a8CB2Gv07xFLBOd4acJzMM7%2FAXKsOFup1Vflh4vDt7ycuIR2DiOdCIwQzleOTRh36LxGZsU9s2EubPUz2eNoBIuPN7v%2Fd7tXe9612Vn%2FzJH%2F%2FUkSOHvjg6OsoCjQKdFWLRQQZwEPql93wP3ZQ9LeTsHEImDjmQuUoQ6dA%2FrJTPEgeCPXHff%2BZddD7AGuFMQuDyIEDincQzHRsBjsa3J4uxbAeCG5CV4HFpL463Ibqc%2F%2FK3NRRdUlIOpWhzz2uBlbmRNiC%2Foe%2BwN6SGQ8WXQ3mNh%2Bo7PoeBkXvFt8%2B2nWvKGo2e7QbuFFxImDmctzNYdk5BEFxKBVsnNA%2Ffc4T%2Bo4U6ekh%2BF98Abfw%2BPXkFDQFaZbjM0it%2B4HjHK7u16hQF08oVHLM1MjpSOnrs8Bf%2B1b%2F68U%2FZlrYpqUnFXk69tM9zeboAMjkzaNUOxT4mrb%2F65Cf%2B3ezJGTYKZcdl2kx0rLJz67WXTqZ%2F%2B1vPT9N3raad%2BNvGyAQdwg0OMjh65YxeyD0EjIr3FOVQrgWHgOKagUK46I1cJWB8A1Wy%2FKh7rxGilMYTbMS1cQgi9zFJg7IUD%2FHFjDzvVZxVmOuk7fA%2BfuQFUKpYZy6C2CKMc2nKakFSYy7M4XrMgpOuxYqqRPJ2F0FjGEisVwDhTa%2B2yi%2FikFbW9%2BwUhGWZeMyDWW5iCZLwyJQmAMi6h1i2mjGK5L10Ir04SCLiuIJ1zJWzaI8CtL2QGhe%2FpDOz7QpGAGzSTmDScteN8tzJ2fqnPvHX%2F55XLea8BI9SvZ8it0%2Ft6PGHpxZ4faj7dt%2FX%2Ffmf%2F%2FnBD3zgt4%2B%2B%2BU0%2FVLjwootehRukzQRMJFgrXbFrQzrRXEi3fo5R2c5qWoKQsQOFHGN9WamwLRncgSbLh1fr0z%2BN48GzXKx%2F2AUQD3Hipxl58ze4EuHcvi2bE3jXj0YJJ%2BCS4esjqEyP%2F%2F9%2Fe2cCHVd13vE7i2a0jDRarV0yDg4Y2YbYxYANJsQUSMxioLQYEnpM2pM2h5S0yelpStP6hFNK49AQCC0JzYIptgNZCBASjH2cctqkicE2XiAE4xVZtmXt60iamf7%2B350nC6cLxcIYypXevPvuu%2Bv3%2Fd93v7trsFTMFVE0Z0gUVce6eEZMdB0GKxtosPMVnBE5bB%2BEmupq0nvRqi88yAd37DYuJpoQXm%2BShYcpBaDIlcOkjvJpy6dyklPFxq%2F%2B2BbO28mbn9JnLy1t%2BVKeveFOk3xM55hJ18lLZPfVL6GGY9mFvhzSA4jp4kRReOeunSs%2BdesnHoOHoW9961tsbGmEDyLKxfe%2F31SqN2OU0Nj9998%2FcM2l1%2BRduWTx19sOtm5MJIq0HzYD3WrysicffWd%2FtGyWc2cWuIP9nMxMf4U6w6wlZJKGQhGTDZpac5UHdfoFn7LqdrXmhCVJmfGLcPjx4p53IqAu3HwVlYsXMa4dVm3jbn3F0qMsDuYGob%2BoepK0kR7jm%2FQ84%2BY7F9XByGArQSSVrHVGZv0mlayJAxja8oVXll0p0n78CcDIzdylB6lK8%2FQgx8y9KUCoCIr44N%2BksYBBp6ItA9LHhbtJHMszKetUH%2FOsGCT%2FSEGAMJ4rHmgj%2BkFTzVyMFpdQ7tFsa93V2aFwguNYqQY9eMYSieIoasfGq6669AHxDh5q%2F6k3JX0IR17enAloNJIpyEj8Df7gB9%2B9TVUZXzxVmWQvDKDFUFcRd6tuo4PxJQ6L0xlYKqiR2CdseoBAQggtzxVhvN5CEjDcY0MECy5FDUGIZ7y1JcDZexEzByLiMhrrWRb5UZWn5LFLv9HAqgAiXShFeF06%2BXkQquj8D80Fkz%2Bxj%2B0zzZ8BiucBOua0dzQigQgFHtm9pLDmPHarwpBMqr51qXmvuUSDY6xowcXKrHwp74wpaoNRGX0Y9nHgxwohPYisB2mZH4FGrTSVSVkwR%2BWDedBMGTrceHm2M6%2BeUW%2BGK0gXo%2Bka0Z7eI6nHf%2FjobTwP5nhHJD52efq%2FGpX4uMyvfvWrDEpY%2Fn333du28MKLepobmy5mghLVsCp%2BVeFjrnFKoTvtrHz36L2HXeOpUcem7J4w3Kz1RfVlRYRentEinPxwHbWYH09YnI1vqhCwiEBUAVphoCrSqiwFHXfHn97DRO9GHzGdbZI6Wt5iLRLSEbZk15afQzBWAquQcAZU3hXxTrLDqh7CzgofZk2eP9PLK6fkVlm3assz0%2BzEbe6WBhthcvxOInqYsio%2Fkiq6Uakp%2F%2BpJNrAQxtx5q4zQX6PDbMYljyLEn%2FLiy4adfIeyA643ckZmX2w2hWPEj%2Fe5%2FGcKCmPhF1%2Fadtuf%2FtmtP4FnoVWrVh2X9CF7Vt3rflxm06ZNaUZwE8uXf%2F6Fq65a0lhbWzcrldKsKcVPOQDR9KYyV%2F6%2BqHvi64fd1Ol5LLlFFIvY%2BoJ0eQr7L08UDUxgFzVl7I6j3CGOBwR3rVPRtFqoOj6SbXjx76S8%2B0BiGJEk2CQB5kk6MZPBxuwEKBlFOwzTJHl0MIkJCZijNXBx%2FCgq9Rm1hLpcCccg2BxpY5RC8xIA%2BcFVMVTpKtNEanYBhJ1S462WjsSQPgpfLOJGhwmMz41CQh8Bzd55V%2FMvyUpmtOBQVWgom%2BLwlebMrvBZqjNxENgtttFkSXF0965fP3LVksUr4FUUvYc5rVZ1EcmbN8ctgUjaypKfn5%2BpqKjI%2F9KX%2Fv7n11573cKysrJaFuTTBcIxt5QiTROy5dRyF68acU8%2F2OGmcU55JxuWmwRS%2FnMg8s1TohRh5e4pJdtRM05ZmCNui0c6xsCkjP%2BizZ13fiYARJY%2FjLyancV56dwSAQFO0kcfupgpNWwY1Eh66ChsvVMZCuiYE4AUh6a6zoz2sWXuILqQZ7rPqqorQCfF2nyqCErbPysbOhWoNH4YRVy9TQKZQgoA3NheP6Qt9s2NZzPKFLnwexR4f0K1iGP%2BaMJzvkcqXJ3dHT6b7gLbFgzwSHqy8UsikYeOuu1DF59%2Fy%2BzZ54z29HT0tba2qrfCiubTeHO%2FkwEgS5kMZefPnx%2BmShsbTqV%2BMWvW7KvIOIe1cOoon7%2FKqYWHs2dMcZHSlHvm4W53CtVZl3a915eEB5FZEsHbRRx9HJ5IAZEtMXnUJSNuSvoAHm1AflTS4EFu9g7mWABLwcJmkUBgwaJXNLKbOgGHRfhR0GQj%2B0g1nws21wJATGFXTWm75J8Z6uU4JgGIdMhIMLXVSkK2PRjxzHvpPyqK8qthjURkkHMqjlBU8oyzvwR4mM5uraKBGYuHGC0s7uTN6CIFCmM6D6dGpvJqszvD5wH8HHiIEVoyST4fvaer875%2FvOf3t217oW3%2B%2FHnD69at0%2B6%2Fxw0epT9pAFJZAE966dKlsdWrH%2B6c%2Fv7TtzU2NFwby4tH6HXVgKsJmwiK9JwzGpwrH3TrVrW5qafEqc58I8CqFgONJzosVbT2LwJ7MuvGk%2F4FHnET4KgZb%2BCRR703D9ztvR7lWX65yQ0AyZ%2F4IPCIP4ZdPMiuD16WqADEe%2BVQe%2BsUIW2EyQ78zYZx9eFeqjOqJZBhirIh2kspAUlVmbivOI3cSpt50nnRYVcS28u8JfrI8GMAt3xg8zMdLH0DjoX1%2BQrrRCT8KeO26RRtmFSkOrsrbx56Gwc5EcDiAj3ssBEZGh7MbFi%2FdtmXv7JiM7zRUJQON%2FIEt3iP72cyAWQ52b59e%2Frmm28uWLHizj3z5p27l0NbPgL1VGRjlSagRRC3c2ZWu%2FzKtHt69QHXdErM9TF31H908ioDyY2zuWdxAGtAaDHMNg4XWGCKfbkw20sgiwDP%2Fp0BRXZdxKObBxDMFUb1PG6UDxxwl7NmXdqUCJ7iMKeYaRuCyxGY3sLx5s0cCKed7QWe8fwrPMb3KAm4MrqL3ORRZcFPRXy%2FuVtY3L2yy0t0HUlOtUaPmtx7VXECIXGFM4NMS23M7s4%2Fn4UC%2BXxGQr3KR5cpih13t2nzxk%2Fd%2BulP%2FgSehB966CEdb3tcrS5LYMLPZAMoO9fNdU9tfmps2bJliS98YfmOBQsWdNbXNS7S1FIITKOA0mFRI3fuzBo3pSniHl%2F5mquppxkMkUeoOvQVidFmjBf8SFSY2JbdHP1dfLGqiqJINIhBhhL5hwkmnfCv%2Bgh3vTUhIAkkpVvOPhgWbyx2KUTkM4MfedGj%2BreKiFOyRufDNoeH3elhjrOy5rvCislemhgGyaeUaL%2FBnmL1Cdk71tGX5qMHcUx6hi4BC61ySfTJG%2FqOQsiv7sqELWsi81laZOHMgBssODXzSnw%2BmhTnEEIz%2F52iooOdGDtgbNn6%2FG3Llt24Gl7koTR3OzcX8LRNStWlLMlMNoBcG39kNLtly1NjaPtFy5f%2F9aYLzr9wsK6u%2FkLrHhJNciDSwGDLjCr3%2Fg8UuO89cJjNiNOumpUd%2FUwRDIhmudSPKCnK2mcuauriWcQWgLTZAHcRWsYqEQFETAkuXEnaHrPFzL0VGMw%2FfhS%2F7MQrPyaZlAv72gUEASlDq4sdX7nUd1QDOM9y3VR96Dj41YCqcq5oBCQZPxJPPOPusiMGAFBxrNcVRTvQvZh%2BQSDLCj8GQZ0t7yNSJLnQ8oO8ig65vviczK9j54Q4hdHg56WdVxU4bVvguf2jH%2F3df9b85gcffFDgQWl%2BflLBo3L4Uso2eYZP3zKaWrlyZfdN190UXXrjtV%2Fbun3L7Xl8FfBGaUonghT0%2FI6k3G%2FPb3QPf3cuNI64Q5tTrikhZkA9XSJicJ%2BQR2OJUTjniJ%2FxFp2C6Z2Fs4ecXVKQS35zEmZClONWHxZIIDVVjTB2TlQcVoLm0Ee8OtZc00C6GN8aNtCopaaWl2STB4uRNtexKDcNhwQ6kvUl8653pJJueyBBXKYrmX9AqIlmSkyxkX1dBkhWU4THhrKd%2BR%2FMvJw%2Flw3O1NYzX%2FzyQP0tybN126bbb7zxuq%2BpuS4e8DIAD7yZXDPpEiiXPYrsWf%2FCiy%2Bkb7jhhkL6iDaec855XTXV1R%2BisxreMLkUMIl4Y3QZNVQn3JILp7rOdJd7bm2Xq6tnvg3EVW%2BSBAIU5EcWb%2BRm40%2BSOjyoL8RLC70X1fEgd5hq428mSXKBdbMqTGFz3hW9GUWMRQOw3G33ebmTviSDzljnSAnS9h1%2FF7B1iqaTaUmPYVZeFSkSSPfg8gn5Z4sOwJE79KADpCO%2F3uiuFmeWbomw1kmZ5CPldJ8bi1Vm91Rflj2QN52tCTT5gdglhenzzGNRoD5KJM9fIXm%2BAc2jrO9SX4%2F6CoTGSQcPcU5%2BFaZIJxjRI6P9ZQSi229fvunMs%2BbsqZ5SfSmL2CLsAqEZEqbsaXlQMhFxC%2BbVu1o6HH9EC22EfVcaaqN8qZ68otVRYMCkADzcVYX5%2Bkh08u9EUKHAahMf2LImxtnyEfUd%2FRdGwBGAzCgN%2BceoV1f7LerUQ%2FGkHeZ%2BmNMnCmG4vgYF8%2BDRd6kwqnAkXQDLuJ6Es8iOf53DWhY%2FZP1Bqup8EIFTDQRCqvdZfQuZbjeY%2FEBmz5TFoc5IJfuFAW6loDSZ8K1JfUOcePzcpl%2Fc%2BvGPf2z1DTd8PLpqlUmeNz3Krly%2BEaOSvtUmANEYBSu6887lO6ZNPeX5mtraD5UmS4tGtJeI1FmIMcZgILLJtZxe5RZeXOV2dfS5Xz%2Fb76rq2G2d3bQGNLvL8zKHIxgJsU33UW%2Fs6%2FDAg6SO0EDc8ieGyngAoUSrRWNO%2Bgku3soqxlkwWjtYJF0sbeIUprSMsJV66XL6c0pp2GgvRQOMSRPsgMuexWRiMGApDZMoyoFmQUYYYO5lWEP9QVoP5cNo9F1SKRIecOmCgmx75aXZ3cUoyyCYPhHFYnFDs1EGR%2FN6ejo716778R989rOf%2BokHzze68BBIHnn3QRRsks2JAJCyTAFakERPj15%2F%2FbKCr9yzYm9fX9f6GTNa5lZVVtFjTbcdHIIg1kIb0yDslLhbdF6tq5%2BW53685ogbODTmGprUWmFAUroNjFETe3zZkKowAUVMMHJx17OAw903ffXefDCwxagWzWXjs3e2cLKam9KQX5NAsgkCiktu%2FpSbHqTGxXQk1rDRtzag8gE9WNR3pBC651K093LTJZRm6BLQRk9l8X3oUFTZufIwko4wHc4OVZ6Z3TPlcncgUouWztQ1DUTrgwHe5CVTnGRk%2FeBr2%2B%2F96pdvvu%2B%2Bu7dA29Dq1d8EPC3oPO1BX48viLLxFpgTCKD2rE572bBhLSC6PvbII4%2F0PPjgN350yaWXTcG0oBNJL1LFblXaKNJGsxlbZlS6j1xRw%2BDnsPu3H3W5FBN1GuqYOAUVU7R%2BvPSBoxN1IAOO2MZ7ERypYf7kboZn6UDq8bVmGO7CZA404pBVYXIDQMYBlG%2FJDfsnngIAr6OTFkZQ%2BhnY0FEIaqmpx9kASBQGCJM%2B5MEi8e99NMQG6DSVpITTdqy7gSZ8ZBSpU9KcPTR1cXZfxZmhoXSelgPyPgdg6s4I%2Bk4%2Bmxru2vXy9y657KJbX3xxexs0HVuz5l96oPFIe%2FuOt0zn8fQ7%2BnuiAKQUs%2B3t7SJjhs7GsUWLFoWLi4uzd9991zO%2F9YG57SWlpQuSydIYRyuo8BJG8BM9gZH6ynKONZpT5%2BYtrOQIxx639Zl%2BpoaGXT17%2B0UBx5A4Zj3RSkWh%2FUUUWAEX%2F2Kmr4eMk6xkoMqwwUme%2BTcGAwr9mfEzUgAmgXHz4JI%2BBaAAHSe9cx67c3MiGXc6tYUOdVFYrwthV564DFTkQi0vr7koPeLQe4wGYqvyWjkDvtONFdSwcuKC7P6680Jd0XLpOhRBmVMehKBQuiiRiPb196ZQlv%2Fm966%2F5h9mz543MnPm6UMcEKgeZsDTrqZ6ToHD9habEwkgFUXc0ZXZvXv3GAOumYsuuij%2Bd3f%2B7WZ2jfnXpsbG0yorqxqYT4Q0yoxLI007BUquqSbhzj%2Bn3s07P8kpaMNuKzMdhzj4qqImxuCktuH1zQ0RXOAxwmPXik3PBDFDtEVJZV%2BdkM5q50kwMwBhx%2BpzqDVY8q4qTLqUKUG8wy4QMWhAHvLcLHqjZ4UGbDWHeqwlVdRxKEVY0zMUv4%2FUSzJFL2mjSfb6OFjr54oraHc1z8webFgQOlLUYHPgWD5hoFfepChHOay2qKgofPBg63NrvvPtT37%2B83%2F5DOe4h9va9vdu3LhR0zI0523S%2B3mI8380Ks%2FbYZSuPispNfmI35I1a9bouWj1w99f1tzc%2FCdlZRWx%2Fn5Ot5JUyDVR1IcjvYcFjZqv717a2eHW%2F7TVPfwk9OvnWzgt5upLWIOFnx5IqR02OPTKlGWTJDzDPUs6PIXFeGyYbhLH3HhlEojXQhGtQrNJTwKAJoEkfVDmQ1xJwnTj78rIiLs10qY8qqIBaAKjgMNl0iMHoVwamhVpG05JilUWZGNTS7L5FXmhFLt%2F246uConfHLBtAwvGpCNdzGHeu3f3vUtvvOab5GsQmmWgmYYmAmVZX4ZPTBk%2FQeZES6Bji5Whzs5s2LBhRFXa9OnTQ19cccd%2FMCvzp%2FX1jbXFJcXTWLwY9s19I6wNyjPAz75%2BbM9fU%2BTOOavaLV5U5poBT0fPmNu9bcAN0PsxxsF4NUwF1l7IEaSBpqpaNSYm61IVVkAzGZJbVTeB9CaN9C2rr8aa%2BrmXCiowcQnIWvZTSlwLGdKQZFM1pdaTOgXpY8SNZ9zUcZlhrE9CLVoQyxY3FrnEjDJXOK3EpZOqqVh4HHQbeKBp6Va6kOZ5OJINtx7Yv%2BGRNas%2B%2FRe3feYJ1m9lpk6dqipL%2Bk6KKktIVwYnlICnE2REkrfbSPLo0hhlHLFcwoixPd9zzz99uKVl5i1Tquqmc2YHsxtNP%2FL%2ByblGz5mzyYFrCDKY1TOQdvva%2BtzmHT3uCYD06g56CLRisJqok1FXDagYJkLhpSVXnnBDZazTIg4ej5KfeKy68qoYOQIEqooAixl17iGVpBrRX%2BymM7vgrlgHUz04vhPwSCfXioi0erppcgtCURaDxsoKXbwm7uIlHDjAiXC025gKDkrxZgD2WZAUYZvdeDRGGu0dB1%2FZvmPLV2%2B55Y9%2FjPsotNFouqSO5vKo%2B8P8c3%2FbzMkAIBVe%2BRAw9N3GmFdUWFFRX%2FTEE49KDpSv%2FPaa32lqmrYM%2FahulHnAqWF%2FzIv8S0ewfYHghKZeaKMATZTvoQutrX3IvbK3z73wyoB7bD8f6mG4pVWCgioraF1dOVWRdttX4gKOYuRCYmR1krRypSPOpQeZWOImsKrPibR03AITU91KAFSZHuSZMS38hmk%2BxorzsrEkRyiVxVwE8MoNwLH5hh8WUXym4BMehdrkHYf5RZR%2F1qof2Lvv1W%2FedNPS7%2FG684orrot0dPQM%2FOxnazWPJ9B1BB7l%2BG01JwuARATlRZeAJN0ofuWVVxa1tbXloyRKTNc%2B9NB3rm6sb1haXjGlSS0Zel%2BltUgQiO3GYhvn4oHREvGeCKOcykeLib1CD3H0WVv7oNvVPur2dMdCL0eK3C7WZNnGiZxtYSoowDAJBIDMcI6oOhzNTc18rbTVchOJIAGReWmrkt2ugZXF2lolzJ7LeYzlSU8icVQnHcZNOPKrDKqG0s4g0uyo7tRoi7BtID45ELejfd%2F%2B1tbVH%2FvYdT8g5razzz47yl49w48%2F%2FriW3UjqiA4BcN528JAXY5juJ5MRiHQJFHnJZDK%2BaNHlRevXr6PH9ZC%2B1OoHHlh5ySnN065LlibPLGTb22EOdaF2o9IwPUkANF1Jz%2FqXANEJNTYEgfRQJ3OKqi1FiL50NDsEuPoRaj10DaTY14WqhePNMlk2XkAfthZXVrMrImy6EysIZ4vpQkrEdPwnfTjci6NMdaUPneFWpJBfDWJVngATkBiAKDcYGvySlLGI31K3z3X39rzw2t49j978hzetJe%2BHOJ80smDBxaPr1z850NPTE1RXKjtR2MXt5DBi1MlqlDeBQUCKNjQ05M%2BbN6%2Fw%2Bed35O3d%2B7KIWXLHHSvOntUy84pkafkHkyVlZWHAQfWmc65ovdHrIgAQhxgmFUbUl06S01NN9xCw9Cw9RHqUPnBUXnxFEBGER6RZq0pjvyg4kmiKTNszSAfTKLl0HvXrSNooFYtLNvxhp4a1qKSrReLaDBMEd3d3dHX3dP70xZe2PP65z33uObz3cqxSBMV49Je%2F%2FOUg69SD1pUiDaQO1pPLnMwACij1OiA1NTXFmRheONLbE1v77FoRNnLuuec2LVv2iflNDU0XJxIlcxPFJSU6zkjDbCM6t4vVmGJmzlhPN0%2B%2B7Dlg4Sl47%2B%2F2NnDjIbDqrUegj0D%2BeIeTcKK3gpU8SR%2BKxGJMX5VexvSMXra57e8feI4J7uvvv%2F%2Fuf6dq3o%2FH9CULLwnHSpIjW7f%2BYpCTcYKq6qQGjgoq44no7Sfzb5DPQCJF6ISMzZlzQX4ymcj%2F%2FvdXedGBdnLZZZc3Xn3l1XNq6hvOKy4qOiueX9CcKGIamDruaEdrX0B1AyBlpNPCaaSJBIuIEYiOgBK4GxQAR%2BCke4AUgSZHQgVlhIGecS6OC7C0Bgb62AYxtbe3v3PLgQNtP3%2FqqR9uevLJJwUagSR8zTU3ZKiWh1kWNcyJgIFyHADHktLPyWwCxpzMeTw2b8qzABOAKdrScl7sfe%2Brygclsccee0zvJZmkiJd95jN%2FPnXGjNlnVJZXzSwojL8%2FHitogMkVhSi8bJoOaGhRSWZQrWjLW0mRiRdxCFivu9TSsjE2L3bocxzmeABaYel0B%2FsD7B8aSr3Sfvjw9pde3vriXXd9cQ9RdHIJGOElS5aQVP7Iq6%2FuHd6x4%2BcCjRTjADTK9%2BvAyvNJbd6JAAoIqrwfCybpEDF0Cc2NiO3cuTO8detWMUSXdKmiWbNmlS9efHVNQ21dfWlFWV1RQWktK0eqEFBl6LXFDF0UUMfFAA1zx1CKSAFMobbQf5xl2D2bHQIofaOpTNfwSKp9aHCgraPj0IG2A62tT69be3Dz5o0dpBMsmwnNnj07dOqpp2Y4X2Hk5dfaUjnQCDDHguYdBRzyb%2BadDKBjyzARTCadqOaiM2fOjJWVvwP38wAAAVpJREFU1efF4%2BnooUOHIs8%2B%2B6zCBaCS3ZR07mqUa2a%2F7nkALVqRrDCdWWem57oS1LbXJckR2CU1ZJR%2BaOHChY5WVDqViox1dbWOMnA8QvV0rJSZKGnekcCxEucKHdjfDffggzBmUiABSXaBJFxeXh5hmVGktLQ0WlxcQzM6zRhlIpwe6A9RBYU6BztDhw71OFp5eP9N09x8GuBIuvLC8mxheSFHI0XY1jmWGR4eGevrO5ju7u4eY4FlurOzM5AuugsgAWACsAT330zkHeYSEPwdlu03nN2gfAGgJt4DcMktXFlZGQJYbL6dCJeWUr8wIyDp6K3G9PAnsHQzPT0a7c8AlOyRI0eOBcZEkOhdcCmKdw1gVJiJJiDwRLd3s31ieQP7sXeVP3A7lhYTgRDYj70rTOB2bPh33fN%2FR6h3XUHfYIHeKD3%2B3wDkDdLtPW%2FvUeA9CrxHgbeBAv8JW9MkIVlj4loAAAAASUVORK5CYII%3D%22%20id%3D%22b%22%20width%3D%22144%22%20height%3D%22144%22%20preserveAspectRatio%3D%22none%22%2F%3E%3C%2Fdefs%3E%3C%2Fsvg%3E";export{B as default};
@@ -0,0 +1 @@
1
+ import{u as W,m as U,r as d,c as ce,O as G,s as N,j as e,P as de,B as f,I as q,k as H,Q,aN as _,y as me,z as ue,E as ae,A as B,C as T,e as w,F as ge,q as P,ag as be,t as F,a9 as se,aO as ne,aP as he,a8 as J,T as I,ac as X,n as ie,aF as pe,ap as ve}from"./index-BC-1LZkB.js";import{u as xe,a as je,P as ye}from"./PolicyField-B7_URv8N.js";import{l as ke,d as fe,L as we}from"./limits-DONLLmCg.js";import{D as Y}from"./DataTable-Cizb1YVv.js";import{S as O}from"./SelectField-BCIB_aud.js";import"./PolicyEditor-CxJuR6mU.js";import"./Segmented-DfgcyK0R.js";import"./roving-DkptacxO.js";import"./Switch-GA0Kao4V.js";import"./Disclosure-Ygp-7rwy.js";import"./index-DX_0N6eB.js";const z=(s,t)=>!!s&&!!t&&s.trim().toLowerCase()===t.trim().toLowerCase();function Ce(s,t,o){const n=[],m=Date.now();for(const i of t)z(i.email,s.email)?n.push(`${i.label} already uses ${i.email}.`):z(i.label,s.label)&&n.push(`A member named ${i.label} already exists${i.status==="invited"?" (invited, not joined yet)":""}.`);for(const i of o)i.expiresAt<m||(z(i.email,s.email)?n.push(`A pending invite already goes to ${i.email}.`):z(i.label,s.label)&&n.push(`A pending invite for ${i.label} already exists.`));return[...new Set(n)]}const D=[P.group("members"),P.group("workspaces"),P.group("keys")],K=[...D,P.group("invites")],te=[{value:"member",label:"Member"},{value:"admin",label:"Admin"}];function V(s){return s.status==="disabled"?e.jsx(F,{tone:"danger",children:"Disabled"}):s.status==="invited"?e.jsx(F,{tone:"warning",children:"Invited"}):e.jsx(F,{tone:"success",children:"Active"})}function le(s,t){return s==="owner"?["member","admin","owner"]:t?["member","admin"]:["member"]}function re(s){return s.map(t=>({value:t,label:_[t]}))}function Se({onCreated:s,onCancel:t}){const{me:o,viewer:n,workspace:m}=W(),i=U(n),C=o.workspaces.filter(a=>i||a.role==="admin").map(a=>a.workspace),[c,u]=d.useState(""),[g,p]=d.useState(""),[v,R]=d.useState("member"),[j,E]=d.useState("72"),[y,b]=d.useState({[m.id]:"member"}),S=G(i),M=ne(),x=Ce({label:c,email:g},S.data??[],M.data??[]),h=N({mutationFn:()=>{const a={label:c.trim(),email:g.trim()||null,orgRole:v,workspaces:Object.entries(y).filter(([,k])=>k).map(([k,L])=>({workspaceId:k,role:L})),expiresInHours:Number(j)||72};return w.invites.create(a)},onSuccess:s,invalidate:K}),l=x.length?"Create anyway":"Create invite link";return e.jsxs("form",{className:"gc-stack",onSubmit:a=>{a.preventDefault(),h.mutate()},children:[e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(I,{label:"Name",required:!0,value:c,onChange:a=>u(a.target.value)}),e.jsx(I,{label:"Email (optional)",type:"email",value:g,onChange:a=>p(a.target.value),hint:"Required when they will sign in with your identity provider."})]}),e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(O,{label:"Organization role",value:v,onChange:a=>R(a),options:re(le(o.member.orgRole,i)),hint:v==="member"?"Sees only the workspaces below.":"Can manage every workspace."}),e.jsx(O,{label:"Link expires after",value:j,onChange:E,options:[{value:"24",label:"1 day"},{value:"72",label:"3 days"},{value:"168",label:"7 days"}]})]}),e.jsxs("fieldset",{className:"gc-checks",children:[e.jsx("legend",{className:"as-field__label",children:"Workspaces"}),C.map(a=>e.jsxs("div",{className:"gc-inline gc-inline--between",children:[e.jsx("span",{children:a.name}),e.jsx(O,{"aria-label":`Role in ${a.name}`,value:y[a.id]??"",onChange:k=>b({...y,[a.id]:k}),options:[{value:"",label:"No access"},...te]})]},a.id))]}),x.length>0&&e.jsx(X,{tone:"warning",title:"Possible duplicate",children:e.jsx("ul",{className:"gc-list",children:x.map(a=>e.jsx("li",{children:a},a))})}),h.error?e.jsx(ie,{error:h.error,title:"Could not create the invite"}):null,e.jsxs("div",{className:"gc-actions",children:[e.jsx(f,{variant:"ghost",onClick:t,children:"Cancel"}),e.jsx(f,{type:"submit",disabled:h.isPending||!c.trim(),children:h.isPending?"Creating…":l})]})]})}function Ne({member:s,onDone:t}){const{me:o,viewer:n}=W(),m=U(n),[i,C]=d.useState(s.label),[c,u]=d.useState(s.email??""),[g,p]=d.useState(s.orgRole),[v,R]=d.useState(ke(s.limits)),[j,E]=d.useState(s.maxKeys===null?"":String(s.maxKeys)),y=xe(s.routingPolicy),[b,S]=d.useState(null),[M,x]=d.useState(!1),h=je(),l=N({mutationFn:async()=>{const r=j.trim()===""?null:Number(j);if(r!==null&&(!Number.isInteger(r)||r<0))throw new Error("Key limit must be a whole number.");const ee={label:i.trim(),email:c.trim()||null,limits:fe(v),maxKeys:r,routingPolicy:y.build(),...m?{orgRole:g}:{}};return h.save([ee.routingPolicy],oe=>w.members.update(s.id,ee,oe))},onSuccess:t,invalidate:D,toast:"Member saved"}),a=N({mutationFn:()=>s.status==="disabled"?w.members.enable(s.id):w.members.disable(s.id),onSuccess:()=>{x(!1),t()},invalidate:D}),k=N({mutationFn:r=>w.members.removeCredential(s.id,r),onSuccess:()=>{S(null),t()},invalidate:D}),L=s.id===o.member.id,A=s.status==="disabled",$=m&&(s.orgRole!=="owner"||o.member.orgRole==="owner"),Z=L&&s.credentials.length<=1;return e.jsxs("form",{className:"gc-stack",onSubmit:r=>{r.preventDefault(),l.mutate()},children:[e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(I,{label:"Name",value:i,onChange:r=>C(r.target.value)}),e.jsx(I,{label:"Email",type:"email",value:c,onChange:r=>u(r.target.value)})]}),e.jsxs("div",{className:"gc-grid gc-grid--2",children:[m&&e.jsx(O,{label:"Organization role",value:g,disabled:L||s.orgRole==="owner"&&o.member.orgRole!=="owner",onChange:r=>p(r),options:re(le(o.member.orgRole,!0))}),e.jsx(I,{label:"Keys they may create",inputMode:"numeric",placeholder:"No limit",value:j,onChange:r=>E(r.target.value)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"as-field__label gc-label-row",children:"Spend limits across their keys (USD)"}),e.jsx(we,{idPrefix:"member-limit",value:v,onChange:R})]}),e.jsx(ye,{draft:y.draft,setDraft:y.setDraft}),e.jsxs("div",{children:[e.jsx("div",{className:"as-field__label gc-label-row",children:"Sign-in methods"}),s.credentials.length===0?e.jsx("p",{className:"gc-muted",children:"None yet."}):e.jsx("ul",{className:"gc-list",children:s.credentials.map(r=>e.jsxs("li",{className:"gc-inline gc-inline--between",children:[e.jsxs("span",{children:[e.jsx(F,{children:r.kind})," ",r.label," ",e.jsxs("span",{className:"gc-muted",children:["· last used ",J(r.lastUsedAt)]})]}),$&&e.jsx(f,{variant:"ghost",size:"sm",disabled:Z,title:Z?"Add another sign-in method first":void 0,onClick:()=>S(r),children:"Remove"})]},r.id))})]}),!$&&e.jsx(X,{tone:"info",children:"Only an owner can change an owner's profile, status or sign-in methods."}),l.error?e.jsx(ie,{error:l.error,title:"Could not save"}):null,e.jsxs("div",{className:"gc-actions gc-actions--split",children:[$&&!L?e.jsx(f,{variant:A?"outline":"danger",size:"sm",onClick:()=>x(!0),children:A?"Enable member":"Disable member"}):e.jsx("span",{}),e.jsxs("div",{className:"gc-actions",children:[e.jsx(f,{variant:"ghost",onClick:t,children:"Cancel"}),$&&e.jsx(f,{type:"submit",disabled:l.isPending,children:l.isPending?"Saving…":"Save"})]})]}),e.jsx(T,{isOpen:M,busy:a.isPending,error:a.error,onClose:()=>x(!1),onConfirm:()=>a.mutate(),title:A?"Enable this member?":"Disable this member?",tone:A?"primary":"danger",confirmLabel:A?"Enable":"Disable",body:A?`${s.label} can sign in again. Their revoked keys stay revoked.`:`${s.label} is signed out and all of their keys are revoked.`}),e.jsx(T,{isOpen:b!==null,busy:k.isPending,error:k.error,onClose:()=>S(null),onConfirm:()=>b&&k.mutate(b.id),title:"Remove this sign-in method?",confirmLabel:"Remove",body:`${(b==null?void 0:b.label)??""} can no longer be used to sign in as ${s.label}.`}),h.dialog]})}function Re({member:s,role:t}){const{workspace:o,me:n}=W(),m=ge(),i=N({mutationFn:c=>w.workspaces.setMember(o.id,s.id,c),invalidate:s.id===n.member.id?[P.workspaceMembers(o.id),P.me]:[P.workspaceMembers(o.id)],toast:(c,u)=>`${s.label} is now a workspace ${u}`,onError:c=>m(`Could not change ${s.label}'s role: ${be(c)}`,"danger")}),C=s.orgRole!=="member";return e.jsx("div",{onClick:c=>c.stopPropagation(),children:e.jsx(O,{size:"sm","aria-label":`Workspace role for ${s.label}`,value:t,disabled:i.isPending||C,title:C?"Organization admins administer every workspace":void 0,onChange:c=>i.mutate(c),options:te})})}function Pe({onEdit:s}){const t=G();return e.jsx(H,{flush:!0,title:"Everyone in the organization",children:e.jsx(Q,{query:t,children:o=>e.jsx(Y,{label:"All members",rows:o,rowKey:n=>n.id,onRowClick:s,rowLabel:n=>n.label,actions:n=>[{label:"Edit member",onSelect:()=>s(n)}],columns:[{key:"name",header:"Name",sortValue:n=>n.label,render:n=>e.jsxs("span",{className:"gc-strong",children:[n.label,n.status!=="active"&&e.jsxs("span",{className:"gc-narrow-only",children:[" ",V(n)]})]})},{key:"email",header:"Email",secondary:!0,render:n=>n.email??"—"},{key:"role",header:"Role",render:n=>_[n.orgRole]},{key:"keys",header:"Key limit",secondary:!0,optional:!0,render:n=>n.maxKeys??"No limit"},{key:"since",header:"Joined",secondary:!0,sortValue:n=>n.createdAt,render:n=>n.status==="invited"?e.jsxs("span",{className:"gc-muted",children:["Invited ",se(n.createdAt)]}):se(n.createdAt)},{key:"status",header:"Status",secondary:!0,render:V}]})})})}function Ee(){const s=ne(),[t,o]=d.useState(null),n=N({mutationFn:m=>w.invites.revoke(m.id),onSuccess:()=>o(null),invalidate:K});return e.jsxs(H,{flush:!0,title:"Pending invites",children:[e.jsx(Q,{query:s,children:m=>e.jsx(Y,{label:"Pending invites",rows:m,rowKey:i=>i.id,rowLabel:i=>`invite for ${i.label}`,empty:e.jsx(ae,{icon:e.jsx(q.members,{size:18}),title:"No pending invites"}),actions:i=>[{label:"Revoke invite",tone:"danger",onSelect:()=>o(i)}],columns:[{key:"name",header:"Name",render:i=>e.jsx("span",{className:"gc-strong",children:i.label})},{key:"email",header:"Email",secondary:!0,render:i=>i.email??"—"},{key:"role",header:"Role",render:i=>_[i.orgRole]},{key:"expires",header:"Expires",secondary:!0,render:i=>e.jsx(he,{at:i.expiresAt,format:J})}]})}),e.jsx(T,{isOpen:t!==null,busy:n.isPending,error:n.error,onClose:()=>o(null),onConfirm:()=>t&&n.mutate(t),title:"Revoke this invite?",confirmLabel:"Revoke",body:"The link stops working."})]})}function Ae({invite:s,onClose:t}){return e.jsx(B,{isOpen:s!==null,onClose:t,title:"Invite link",size:"lg",children:s&&e.jsxs("div",{className:"gc-stack",children:[s.url?e.jsxs(e.Fragment,{children:[e.jsxs("p",{children:["Send this link to ",e.jsx("strong",{children:s.label}),". It works once and expires ",J(s.expiresAt),"."]}),e.jsx(pe,{secret:s.url,note:"This link is shown only once. Anyone with it can join as this member."})]}):e.jsx(X,{tone:"warning",children:"The gateway did not return a link for this invite."}),e.jsxs("div",{className:"gc-actions",children:[s.url&&e.jsx(ve,{value:s.url,label:"Copy link",size:"md"}),e.jsx(f,{onClick:t,children:"Done"})]})]})})}function _e(){var h;const{viewer:s,workspace:t,me:o}=W(),n=U(s),[m,i]=d.useState(!1),[C,c]=d.useState(null),[u,g]=d.useState(null),[p,v]=d.useState(null),[R,j]=d.useState(""),E=ce(t.id),y=G(n),b=N({mutationFn:l=>w.workspaces.removeMember(t.id,l.id),onSuccess:()=>v(null),invalidate:K,toast:"Removed from workspace"}),S=N({mutationFn:l=>w.workspaces.setMember(t.id,l,"member"),onSuccess:()=>j(""),invalidate:K,toast:"Added to workspace"}),M=new Set((h=E.data)==null?void 0:h.map(({member:l})=>l.id)),x=(y.data??[]).filter(l=>!M.has(l.id)&&l.status==="active");return e.jsxs("div",{className:"gc-page",children:[e.jsx(de,{title:"Members",description:"Who can use this gateway, their budgets and routing.",actions:e.jsx(f,{variant:"brand",leadingIcon:e.jsx(q.plus,{size:14}),onClick:()=>i(!0),children:"Invite member"})}),e.jsx(H,{flush:!0,title:`${t.name} workspace`,actions:n&&x.length>0?e.jsxs("div",{className:"gc-inline",children:[e.jsx(O,{size:"sm","aria-label":"Add an existing member",value:R,onChange:j,options:[{value:"",label:"Add existing member…"},...x.map(l=>({value:l.id,label:l.label}))]}),e.jsx(f,{size:"sm",variant:"outline",disabled:!R||S.isPending,onClick:()=>S.mutate(R),children:"Add"})]}):void 0,children:e.jsx(Q,{query:E,children:l=>e.jsx(Y,{label:"Workspace members",rows:l,rowKey:a=>a.member.id,onRowClick:n?a=>g(a.member):void 0,rowLabel:a=>a.member.label,actions:a=>[n&&{label:"Edit member",onSelect:()=>g(a.member)},a.member.id!==o.member.id&&{label:"Remove from workspace",tone:"danger",onSelect:()=>v(a.member)}],empty:e.jsx(ae,{icon:e.jsx(q.members,{size:18}),title:"No members in this workspace"}),columns:[{key:"name",header:"Name",sortValue:a=>a.member.label,render:a=>e.jsxs("div",{children:[e.jsx("div",{className:"gc-strong",children:a.member.label}),e.jsx("div",{className:"gc-muted",children:a.member.email??_[a.member.orgRole]})]})},{key:"role",header:"Workspace role",render:a=>e.jsx(Re,{member:a.member,role:a.role})},{key:"limits",header:"Limits",secondary:!0,optional:!0,render:a=>e.jsx("span",{className:"gc-muted",children:me(a.member.limits)})},{key:"policy",header:"Routing",secondary:!0,optional:!0,render:a=>e.jsx("span",{className:"gc-muted",children:ue(a.member.routingPolicy)})},{key:"status",header:"Status",secondary:!0,render:a=>V(a.member)}]})})}),n&&e.jsx(Pe,{onEdit:g}),e.jsx(Ee,{}),e.jsx(B,{isOpen:m,onClose:()=>i(!1),size:"lg",title:"Invite a member",children:m&&e.jsx(Se,{onCancel:()=>i(!1),onCreated:l=>{i(!1),c(l)}})}),e.jsx(Ae,{invite:C,onClose:()=>c(null)}),e.jsx(B,{isOpen:u!==null,onClose:()=>g(null),size:"lg",title:(u==null?void 0:u.label)??"",eyebrow:"Member",children:u&&e.jsx(Ne,{member:u,onDone:()=>g(null)},u.id)}),e.jsx(T,{isOpen:p!==null,busy:b.isPending,error:b.error,onClose:()=>v(null),onConfirm:()=>p&&b.mutate(p),title:"Remove from workspace?",confirmLabel:"Remove",body:`${(p==null?void 0:p.label)??""} loses access to ${t.name}. Their keys in this workspace stop working.`})]})}export{_e as default};
@@ -0,0 +1 @@
1
+ import{u as b,ad as _,r as g,ae as f,af as N,m as k,j as e,ac as p,P as S,I as l,k as x,T as j,W as r,t as y}from"./index-BC-1LZkB.js";const T="https://antseed.com/docs/guides/gateway-server#move-a-local-gateway-to-a-server",C="https://antseed.com/docs/guides/public-tunnels",P={local:"This computer only",lan:"Your network only",public:"Public"};function o({n:s,title:a,children:t}){return e.jsxs("li",{className:"gc-migrate__step",children:[e.jsx("span",{className:"gc-migrate__num","aria-hidden":"true",children:s}),e.jsxs("div",{className:"gc-migrate__body",children:[e.jsx("h3",{className:"gc-migrate__title",children:a}),t]})]})}function d({icon:s,title:a,children:t}){return e.jsxs("div",{className:"gc-migrate__why",children:[e.jsx("span",{className:"gc-migrate__why-icon","aria-hidden":"true",children:s}),e.jsxs("div",{children:[e.jsx("div",{className:"gc-migrate__why-title",children:a}),e.jsx("p",{className:"gc-migrate__why-text",children:t})]})]})}function I({exposure:s}){return e.jsxs("div",{className:"gc-migrate__now",children:[e.jsxs("div",{className:"gc-migrate__now-head",children:[e.jsx("span",{className:"gc-muted",children:"Right now"}),e.jsx(y,{tone:s.mode==="public"?"neutral":"warning",children:P[s.mode]}),s.listenHost&&e.jsx("code",{className:"gc-migrate__addr",children:s.listenHost})]}),s.reasons.length>0&&e.jsx("ul",{className:"gc-migrate__reasons",children:s.reasons.map(a=>e.jsx("li",{children:a},a))})]})}function A(){var u;const{viewer:s}=b(),a=_(),[t,w]=g.useState(""),[h,v]=g.useState(""),m=f(t),n=N({domain:m,server:h}),i=(u=a.data)==null?void 0:u.exposure;return k(s)?e.jsxs("div",{className:"gc-page gc-migrate",children:[e.jsx(S,{title:"Move this gateway to a server",description:"Keep every key, member, workspace, wallet and its usage history. Your apps only need the new base URL."}),i&&e.jsx(I,{exposure:i}),(i==null?void 0:i.mode)==="public"&&e.jsxs(p,{tone:"info",title:"Already public",children:["This gateway has a public address (",i.publicUrl,"). You can still move it to another machine with the same steps."]}),e.jsxs("div",{className:"gc-migrate__whys",children:[e.jsx(d,{icon:e.jsx(l.activity,{size:16}),title:"Always on",children:"Keys keep working when your laptop sleeps, travels or restarts."}),e.jsx(d,{icon:e.jsx(l.shield,{size:16}),title:"HTTPS on your domain",children:"Automatic TLS at an address like https://llm.example.com, with passkeys and single sign-on."}),e.jsx(d,{icon:e.jsx(l.members,{size:16}),title:"Team access",children:"Teammates, CI and hosted tools reach it from anywhere, each with their own key and budget."})]}),e.jsxs(x,{title:e.jsxs("span",{className:"gc-inline",children:["Recommended: a small Linux server ",e.jsx(y,{tone:"neutral",children:"About 10 minutes"})]}),description:"Any VPS with a public IP works (1 vCPU, 1 GB RAM). Point a DNS name at it and open ports 80 and 443.",children:[e.jsxs("div",{className:"gc-migrate__inputs",children:[e.jsx(j,{label:"Domain for the gateway",placeholder:"llm.example.com",value:t,onChange:c=>w(c.target.value),error:t.trim()&&!m?"Enter a host name such as llm.example.com":void 0,spellCheck:!1,autoCapitalize:"off"}),e.jsx(j,{label:"Server SSH login",placeholder:"user@your-server",value:h,onChange:c=>v(c.target.value),spellCheck:!1,autoCapitalize:"off",mono:!0})]}),e.jsxs("ol",{className:"gc-migrate__steps",children:[e.jsxs(o,{n:1,title:"Export it on this computer",children:[e.jsx("p",{children:"Writes a password-protected bundle readable only by you. It holds the wallet keys, so keep the password apart from the file."}),e.jsx(r,{code:n.exportBundle,label:"This computer"})]}),e.jsx(o,{n:2,title:"Copy the bundle to the server",children:e.jsx(r,{code:n.copy,label:"This computer"})}),e.jsxs(o,{n:3,title:"Install the gateway on the server and import the bundle",children:[e.jsx("p",{children:"Installs the CLI, restores the bundle as the service user, starts the buyer and gateway with automatic HTTPS. It asks for the bundle password."}),e.jsx(r,{code:n.install,label:"Server"})]}),e.jsxs(o,{n:4,title:"Point your apps at the new address",children:[e.jsx("p",{children:"API keys stay the same. Only the base URL changes:"}),e.jsx(r,{code:n.baseUrl,label:"New base URL"})]}),e.jsxs(o,{n:5,title:"Stop the gateway on this computer",children:[e.jsxs("p",{children:["Press Ctrl+C where ",e.jsx("code",{children:"antseed gateway start"})," runs, which also stops the buyer it started (stop a buyer you run yourself too, or quit the desktop app's gateway), then delete the bundle on both machines. Never run both gateways: two buyers paying from the same wallet conflict."]}),e.jsx(r,{code:n.stop,label:"Both machines"})]})]}),e.jsxs("div",{className:"gc-migrate__note",children:[e.jsx("strong",{children:"Signing in afterwards."})," Everyone signs in again on the new address. Wallet and single sign-on keep working; passkeys are tied to the domain they were made on, so add a new one with a one-time link from the server:",e.jsx(r,{code:n.recover,label:"Server"})]}),e.jsxs("p",{className:"gc-fineprint",children:[e.jsx(l.shield,{size:12})," Wallet keys never pass through this browser: the console only shows commands. ",e.jsx("a",{className:"gc-link",href:T,target:"_blank",rel:"noreferrer",children:"Full guide"})]})]}),e.jsx(x,{title:"Alternative: keep it here behind a Cloudflare tunnel",description:"Gives this computer a public HTTPS address without moving anything.",children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(r,{code:n.tunnel,label:"This computer, instead of gateway start"}),e.jsxs("ul",{className:"gc-migrate__caveats",children:[e.jsx("li",{children:"Keys still stop working whenever this computer sleeps, loses its connection or restarts."}),e.jsxs("li",{children:["Needs a Cloudflare account and a named tunnel whose public hostname points at ",e.jsx("code",{children:"http://localhost:8379"}),"."]}),e.jsx("li",{children:"Traffic and model responses run through your home or office connection."})]}),e.jsxs("a",{className:"gc-link",href:C,target:"_blank",rel:"noreferrer",children:["Tunnel guide ",e.jsx(l.external,{size:12})]})]})})]}):e.jsx(p,{tone:"warning",title:"Not available",children:"Only organization owners and admins can move the gateway."})}export{A as default};
@@ -0,0 +1 @@
1
+ import{aS as A,r as m,j as e,aT as F,W as B,aU as V,N as w,aV as $,aW as U,aX as R,aY as _,L as z,E as f,I as M,P as O,T as D,x as k,k as K,Q as Y,aZ as q,M as b,g as Q,a_ as v,a$ as S,b0 as I,b1 as W,ap as N,t as u,V as G,B as H,ab as X,v as L,h as Z}from"./index-BC-1LZkB.js";import{T as J,a as ee}from"./Tabs-dykHKE0J.js";import{m as se,f as ae,M as P,S as te,a as ne,C as ie,P as C,b as le,V as re,p as oe}from"./models-B4dUNXf8.js";import{S as T}from"./SelectField-BCIB_aud.js";import{S as ce}from"./Switch-GA0Kao4V.js";import{D as de}from"./DataTable-Cizb1YVv.js";import"./roving-DkptacxO.js";import"./index-DX_0N6eB.js";function ue({model:s,format:i,id:o="gc-api-call",unsupported:l}){const p=A(),[g,r]=m.useState("curl");if(!i)return e.jsx("p",{className:"gc-fineprint",children:l??"The gateway does not serve this model through its API."});const t=F(p,s,i),d=t.find(c=>c.id===g)??t[0];return e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx(J,{id:o,label:"Request examples",value:d.id,onChange:r,className:"gc-connect-tabs",tabs:t.map(c=>({id:c.id,label:c.label}))}),e.jsx(ee,{tabsId:o,tab:d.id,children:e.jsx(B,{code:d.code,label:d.label})}),e.jsxs("p",{className:"gc-fineprint",children:["Set ",e.jsx("code",{children:V})," to one of your API keys first. ",e.jsx(w,{to:"keys",children:"API keys"})]})]})}function he(s){return s===null?"—":String(Math.round(s))}function E(s){return s===null?"—":Z(s)}function pe({model:s}){return e.jsxs("div",{className:"gc-badges",children:[s.free&&e.jsx(u,{tone:"success",children:"Free"}),s.teeSellers>0&&e.jsx(u,{tone:"info",children:"TEE"})]})}function y(s){return s.displayName??L(s.peerId,8,4)}function Me(){const s=$(),i=U(s.rest),o=R(),[l,p]=m.useState({search:"",type:"",free:!1}),g=m.useMemo(()=>se(o.data),[o.data]),r=m.useMemo(()=>i?ae(o.data,i):null,[o.data,i]),t=_(),d=(n,a)=>p(h=>({...h,[n]:a})),c=i===null?null:{eyebrow:"Model",title:(r==null?void 0:r.name)??i,body:o.isLoading?e.jsx(z,{rows:6}):r?e.jsx(ge,{model:r},r.id):e.jsx(f,{icon:e.jsx(M.models,{size:18}),title:"Model not found",body:`No provider on the network offers ${i} right now.`})},j=e.jsx(K,{flush:!0,children:e.jsx(Y,{query:o,rows:8,children:n=>e.jsx(de,{label:"Models",rows:ne(n,l),rowKey:a=>a.id,selectedKey:(r==null?void 0:r.id)??null,onRowClick:a=>k(S("models",a.id)),rowLabel:a=>a.name,actions:a=>[{label:"Copy model id",onSelect:()=>void t(a.id)}],initialSort:{key:"sellers",direction:"desc"},empty:e.jsx(f,{icon:e.jsx(M.models,{size:18}),title:n.length?"No models match these filters":"No models found yet",body:n.length?void 0:"The buyer is still discovering the network. Check back in a minute."}),columns:[{key:"model",header:"Model",sortValue:a=>a.name.toLowerCase(),render:a=>e.jsxs("div",{className:"gc-cell-lines",children:[e.jsx("div",{className:"gc-strong gc-ellipsis",title:a.id,children:a.name}),a.name!==a.id&&e.jsx("div",{className:"gc-muted gc-ellipsis",children:e.jsx(b,{children:a.id})}),e.jsx(pe,{model:a})]}),after:a=>e.jsx(q,{value:a.id,label:`Copy model id ${a.id}`})},{key:"type",header:"Type",secondary:!0,sortValue:a=>a.type,render:a=>e.jsx("span",{className:"gc-muted",children:P[a.type]})},{key:"sellers",header:"Providers",align:"right",sortValue:a=>a.sellers,render:a=>Q(a.sellers)},{key:"input",header:"Input $/M",align:"right",sortValue:a=>{var h;return((h=a.inputUsdPerMillion)==null?void 0:h.min)??null},render:a=>v(a.inputUsdPerMillion)},{key:"output",header:"Output $/M",align:"right",secondary:!0,sortValue:a=>{var h;return((h=a.outputUsdPerMillion)==null?void 0:h.min)??null},render:a=>v(a.outputUsdPerMillion)},{key:"context",header:"Context",align:"right",secondary:!0,optional:!0,sortValue:a=>a.contextLength,render:a=>E(a.contextLength)}]})})});return e.jsxs("div",{className:"gc-page",children:[e.jsx(O,{title:"Models",description:"Every model on the network. Open one to see its providers, copy a model id and get a ready-to-run API call."}),e.jsxs("div",{className:"gc-toolbar",children:[e.jsx(D,{size:"sm",type:"search","aria-label":"Search models",placeholder:"Search model or alias",value:l.search,onChange:n=>d("search",n.target.value)}),g.length>1&&e.jsx(T,{size:"sm","aria-label":"Filter by type",value:l.type,onChange:n=>d("type",n),options:[{value:"",label:"All types"},...g.map(n=>({value:n,label:P[n]}))]}),e.jsx(ce,{checked:l.free,onChange:n=>d("free",n),label:"Free"})]}),e.jsx(te,{list:j,panel:c,onClose:()=>k("models"),closeLabel:"Close model"})]})}function x(s){return`${s.peerId}:${s.serviceId}`}function ge({model:s}){const[i,o]=m.useState(""),l=s.offers.find(t=>x(t)===i)??null,p=l?I(l.peerId,l.serviceId):s.id,g=W(s.type,l),r=s.offers.some(t=>t.usdPerImage!==null);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsxs("span",{className:"gc-seller__meta",children:[e.jsxs("span",{className:"gc-peer-id",children:[e.jsx(b,{title:s.id,children:s.id}),e.jsx(N,{iconOnly:!0,value:s.id,label:"Copy model id"})]}),e.jsx(u,{children:P[s.type]}),s.free&&e.jsx(u,{tone:"success",children:"Free"}),s.teeSellers>0&&e.jsx(u,{tone:"info",children:"TEE"})]}),e.jsx(G,{items:[["Context",E(s.contextLength)],["Capabilities",s.capabilities.length?e.jsx("span",{className:"gc-badges",children:s.capabilities.map(t=>e.jsx(u,{children:ie[t]},t))}):"—"],["Aliases",s.aliases.length?e.jsx(b,{children:s.aliases.join(", ")}):"—"],...r?[]:[["Input $/M",v(s.inputUsdPerMillion)],["Output $/M",v(s.outputUsdPerMillion)]]]})]}),e.jsx(C,{title:`Providers (${s.offers.length})`,children:s.offers.length===0?e.jsx("p",{className:"gc-fineprint",children:"No provider offers this model right now."}):e.jsx("ul",{className:"gc-panel-rows","aria-label":"Providers offering this model",children:s.offers.map(t=>{var j;const d=I(t.peerId,t.serviceId),c=i===x(t);return e.jsx(le,{selected:c,title:e.jsx(w,{to:S("providers",t.peerId),children:y(t)}),meta:e.jsxs(e.Fragment,{children:[e.jsx("span",{children:oe(t)}),e.jsxs("span",{children:["Trust ",he(t.trustScore)]}),t.latencyMsP50!==null&&e.jsx("span",{children:X(t.latencyMsP50)}),t.serviceId!==s.id&&e.jsx(b,{children:t.serviceId})]}),badges:(((j=t.verificationLinks)==null?void 0:j.length)||t.tee||t.free)&&e.jsxs("div",{className:"gc-badges",children:[e.jsx(re,{links:t.verificationLinks}),t.tee&&e.jsx(u,{tone:"info",children:"TEE"}),t.free&&e.jsx(u,{tone:"success",children:"Free"})]}),actions:e.jsxs(e.Fragment,{children:[e.jsx(N,{iconOnly:!0,value:d,label:`Copy ${y(t)}'s model id (peer@model)`}),e.jsx(H,{size:"sm",variant:c?"outline":"ghost","aria-pressed":c,title:"Use this provider in the API call below",onClick:()=>o(c?"":x(t)),children:c?"Pinned":"Pin"})]})},x(t))})})}),e.jsxs(C,{title:"API call",actions:s.offers.length>0&&e.jsx(T,{size:"sm","aria-label":"Route the call",value:i,onChange:o,options:[{value:"",label:"Best provider (automatic)"},...s.offers.map(t=>({value:x(t),label:y(t)}))]}),children:[e.jsx("p",{className:"gc-fineprint",children:l?e.jsxs(e.Fragment,{children:["Pinned to ",y(l)," with ",e.jsx("code",{children:L(p,10,12)}),"."]}):e.jsxs(e.Fragment,{children:["The gateway picks the best provider for ",e.jsx("code",{children:s.id})," under your routing policy."]})}),e.jsx(ue,{id:"gc-model-call",model:p,format:g,unsupported:`${P[s.type]} models are not served through the gateway's /v1 API.`})]})]})}export{Me as default};
@@ -0,0 +1 @@
1
+ var t="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2078%2078%22%3E%3ClinearGradient%20id%3D%22a%22%20x2%3D%221%22%20gradientTransform%3D%22matrix(0%20-54.944%20-54.944%200%2023.62%2079.474)%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23ff1b2d%22%2F%3E%3Cstop%20offset%3D%22.3%22%20stop-color%3D%22%23ff1b2d%22%2F%3E%3Cstop%20offset%3D%22.614%22%20stop-color%3D%22%23ff1b2d%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23a70014%22%2F%3E%3C%2FlinearGradient%3E%3ClinearGradient%20id%3D%22b%22%20x2%3D%221%22%20gradientTransform%3D%22matrix(0%20-48.595%20-48.595%200%2037.854%2076.235)%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%239c0000%22%2F%3E%3Cstop%20offset%3D%22.7%22%20stop-color%3D%22%23ff4b4b%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%22%23ff4b4b%22%2F%3E%3C%2FlinearGradient%3E%3Cpath%20fill%3D%22url(%23a)%22%20d%3D%22M28.346%2080.398C12.691%2080.398%200%2067.707%200%2052.052%200%2036.85%2011.968%2024.443%2026.996%2023.739a28.244%2028.244%200%200%201%2020.241%207.18c-3.322-2.203-7.207-3.47-11.359-3.47-6.75%200-12.796%203.348-16.862%208.629-3.134%203.7-5.164%209.169-5.302%2015.307v1.335c.138%206.137%202.168%2011.608%205.302%2015.307%204.066%205.28%2010.112%208.63%2016.862%208.63%204.152%200%208.038-1.269%2011.36-3.474a28.239%2028.239%200%200%201-18.785%207.215l-.108.001z%22%20transform%3D%22matrix(1.3333%200%200%20-1.3333%200%20107.2)%22%2F%3E%3Cpath%20fill%3D%22url(%23b)%22%20d%3D%22M19.016%2068.025c2.601%203.07%205.96%204.923%209.631%204.923%208.252%200%2014.941-9.356%2014.941-20.897s-6.69-20.897-14.941-20.897c-3.67%200-7.03%201.85-9.63%204.922%204.066-5.281%2010.11-8.63%2016.862-8.63%204.152%200%208.036%201.268%2011.359%203.472%205.802%205.19%209.455%2012.735%209.455%2021.133%200%208.397-3.653%2015.94-9.453%2021.13-3.324%202.206-7.209%203.473-11.361%203.473-6.75%200-12.796-3.348-16.862-8.63%22%20transform%3D%22matrix(1.3333%200%200%20-1.3333%200%20107.2)%22%2F%3E%3C%2Fsvg%3E";export{t as default};
@@ -0,0 +1 @@
1
+ import{j as e,u as te,D as ae,r as C,ak as q,ac as I,as as ne,at as re,v as w,X as se,au as y,B as N,av as ie,T as oe,C as le,aq as M,aw as p,ax as ce,ah as de,ay as he,q as ue,az as we,aA as fe,ag as F,aB as H,aC as R,Y as $}from"./index-BC-1LZkB.js";import{u as K,a as V,T as X,D as k,s as Z}from"./useTx-VVmPNn5M.js";import{a as ge,C as G}from"./ConnectWallet-BgR8VSGh.js";import{W as me,u as J,c as L,b as ye,r as Q}from"./en_US-Y4ZOVFV4-Dx46mx69.js";import"./clsx-B-dksMZM.js";import"./index-DX_0N6eB.js";import"./index-BwpQbdIU.js";async function U(s,i,a){let c=await R.sync(s,i);for(let d=0;d<3&&!y(c.operator??p,a??p);d+=1)await new Promise(n=>setTimeout(n,3500)),c=await R.sync(s,i);return c}function ee(s){const i=L(),a=q(s,"deposits");return async c=>{if(!a)throw new M("The gateway did not report the deposits contract address.",!1);const[d,n]=await Promise.all([Q(i,{address:a,abi:k,functionName:"getOperator",args:[c],chainId:s.chainId}),Q(i,{address:a,abi:k,functionName:"getOperatorNonce",args:[c],chainId:s.chainId})]);return{operator:y(d,p)?null:d,nonce:n}}}function pe({workspaceId:s,state:i,chain:a,onChanged:c,onStale:d}){const{address:n}=J(),W=L(),o=K(a.chainId),{writeContractAsync:B}=V(),{signMessageAsync:D}=ye(),{me:z}=te(),E=ae(),v=ee(a),[x,h]=C.useState(!1),[f,b]=C.useState(!1),[g,u]=C.useState(null),m=q(a,"deposits");if(!m)return e.jsx(I,{tone:"warning",children:"The gateway did not report the deposits contract address."});if(!n)return e.jsx(G,{label:"Connect the wallet to authorize"});const j=ne(i,n);async function A(r){try{const t=await R.authorize(s,r);return h(!1),t}catch(t){return $(t,"reauth_required")?(h("any"),o.setError(null),null):$(t,"reauth_other_credential")?(h("other"),o.setError(null),null):($(t,"operator_already_set")&&d(),o.setError(F(t)),null)}}async function S(r){u(r);let t=await A(r);if(!t)return;const O={depositsContract:m,chainId:a.chainId,operator:r},Y=await o.run([{label:"Authorize wallet",check:async()=>{try{H(t,await v(t.buyer),O)}catch(P){if(!(P instanceof M)||!P.retryAuth)throw P;o.setStatus("The operator nonce changed; getting a fresh authorization…");const _=await R.authorize(s,r);H(_,await v(_.buyer),O),t=_}await Z(W,{account:n,address:m,abi:k,functionName:"setOperator",args:[t.buyer,r,BigInt(t.nonce),t.signature],chainId:a.chainId})},send:()=>B({address:m,abi:k,functionName:"setOperator",args:[t.buyer,r,BigInt(t.nonce),t.signature],chainId:a.chainId})}],{onStale:d});Y&&c(await U(s,Y,r))}async function l(r){b(!0),o.setError(null);try{const t=r==="passkey"?await ce():await de(n,O=>D({message:O}));if(he(t,z.member.id),E.setQueryData(ue.me,t),h(!1),g&&n&&!y(g,n)){o.setError(`Confirmed. Switch back to ${w(g)}, then authorize it.`);return}await S(g??n)}catch(t){o.setError(fe(t)?we:F(t))}finally{b(!1)}}const T=re(i);return e.jsxs("div",{className:"gc-stack",children:[e.jsxs("p",{children:["Authorize ",e.jsx("code",{children:w(n)})," to withdraw this workspace's funds and claim its ANTS rewards. It will be the only wallet able to transfer or remove the role later."]}),T.length>0&&e.jsx("ul",{className:"gc-fineprint",children:T.map(r=>e.jsxs("li",{children:[e.jsx("code",{children:w(r.address)})," ",r.ready?"can be authorized":`can be authorized from ${se(r.eligibleAt)}`,y(r.address,n)?" (connected)":""]},r.address))}),j&&e.jsx(I,{tone:"warning",children:j}),x&&e.jsx(I,{tone:"info",title:"Confirm it is you",children:e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("span",{children:x==="other"?`Confirm with a different sign-in method than ${w(g??n)}, the wallet you are authorizing: a passkey, or another of your wallets (connect it, confirm, then switch back).`:"Authorizing a withdrawal wallet needs a fresh sign-in."}),e.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[e.jsx(N,{size:"sm",disabled:f,onClick:()=>void l("passkey"),children:"Confirm with a passkey"}),e.jsx(N,{size:"sm",variant:"outline",disabled:f,onClick:()=>void l("wallet"),children:f?"Check your wallet…":`Confirm with ${w(n)}`})]})]})}),e.jsx(X,{chain:a,runner:o,done:"Wallet authorized."}),e.jsx(N,{fullWidth:!0,disabled:o.running||f||!!j,onClick:()=>void S(n),children:o.running?"Working…":"Authorize this wallet"}),e.jsxs("p",{className:"gc-fineprint",children:["You will sign in again, then confirm one transaction from this wallet (it pays the network fee in ETH on ",a.name,")."]})]})}function xe({workspaceId:s,state:i,chain:a,onChanged:c,onStale:d}){const{address:n}=J(),W=L(),o=K(a.chainId),{writeContractAsync:B}=V(),D=ee(a),[z,E]=C.useState(""),[v,x]=C.useState(!1),[h,f]=C.useState(null),b=q(a,"deposits"),g=ie(i,n);if(!b)return e.jsx(I,{tone:"warning",children:"The gateway did not report the deposits contract address."});if(!n)return e.jsx(G,{label:`Connect ${w(i.operator)} to manage it`});if(!g.canManage)return e.jsx(I,{tone:"warning",children:g.manageHint??"Only the authorized wallet can transfer or remove the role."});const u=z.trim(),m=/^0x[0-9a-fA-F]{40}$/.test(u)&&!y(u,p),j=i.eligibleWallets.some(l=>y(l.address,u)),A=y(u,i.buyer);async function S(l){f(null);const T=await o.run([{label:l===p?"Remove authorized wallet":"Transfer authorization",check:async()=>{const r=await D(i.buyer);if(!y(r.operator,n))throw new M(`The authorized wallet is now ${r.operator?w(r.operator):"not set"}, not the connected wallet. The panel now shows it.`,!0);await Z(W,{account:n,address:b,abi:k,functionName:"transferOperator",args:[i.buyer,l],chainId:a.chainId})},send:()=>B({address:b,abi:k,functionName:"transferOperator",args:[i.buyer,l],chainId:a.chainId})}],{onStale:d});T&&(E(""),x(!1),c(await U(s,T,l===p?null:l)))}return e.jsxs("div",{className:"gc-stack",children:[e.jsx("p",{children:"The connected wallet is the authorized wallet. You can hand the role to another wallet or remove it. Both are immediate and only the new wallet (or, after removal, the organization owner through the gateway) can change it again."}),e.jsx(oe,{label:"New authorized wallet",placeholder:"0x…",value:z,onChange:l=>{E(l.target.value),x(!1)},error:z&&!m?"Enter a 0x wallet address.":A?"That is the workspace wallet itself; the gateway CLI handles that case.":void 0}),m&&!A&&!j&&e.jsxs("label",{className:"gc-inline",children:[e.jsx("input",{type:"checkbox",checked:v,onChange:l=>x(l.target.checked)}),e.jsxs("span",{children:[w(u)," is not one of your sign-in wallets. I control it, or trust whoever does with this workspace's withdrawals and rewards."]})]}),e.jsx(X,{chain:a,runner:o,done:"Authorized wallet updated."}),e.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[e.jsx(N,{disabled:o.running||!m||A||!j&&!v,onClick:()=>f("transfer"),children:"Transfer authorization"}),e.jsx(N,{variant:"outline",disabled:o.running,onClick:()=>f("clear"),children:"Remove authorized wallet"})]}),e.jsx(le,{isOpen:h!==null,onClose:()=>f(null),tone:"danger",title:h==="clear"?"Remove the authorized wallet?":`Transfer to ${w(u)}?`,confirmLabel:h==="clear"?"Remove":"Transfer",body:h==="clear"?"Nobody will be able to withdraw or claim rewards until the organization owner authorizes a wallet again through the gateway. Requests keep working.":`${w(u)} will receive all future withdrawals and ANTS rewards, and only it can change this again. Your connected wallet loses the role.`,onConfirm:()=>void S(h==="clear"?p:u)})]})}function Te(s){return e.jsx(me,{chain:s.chain,children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(ge,{}),s.mode==="authorize"?e.jsx(pe,{...s}):e.jsx(xe,{...s})]})})}export{Te as default};
@@ -0,0 +1 @@
1
+ import{j as o,ac as l,v as n,B as i,x as s}from"./index-BC-1LZkB.js";import{C as c}from"./ConnectWallet-BgR8VSGh.js";function p({gate:r,state:t,connected:e,onAuthorize:a}){return o.jsxs("div",{className:"gc-stack",children:[o.jsx(l,{tone:r.operator?"warning":"info",title:r.operator?"Use the authorized wallet":"No authorized wallet",children:r.reason}),r.operator&&!e&&o.jsx(c,{label:`Connect ${n(r.operator)}`}),!r.operator&&(t==null?void 0:t.canAuthorize)&&o.jsx(i,{fullWidth:!0,onClick:a??(()=>s("wallet")),children:"Authorize a wallet"})]})}export{p as O};
@@ -0,0 +1 @@
1
+ var fe=s=>{throw TypeError(s)};var ee=(s,t,r)=>t.has(s)||fe("Cannot "+r);var l=(s,t,r)=>(ee(s,t,"read from private field"),r?r.call(s):t.get(s)),v=(s,t,r)=>t.has(s)?fe("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,r),y=(s,t,r,a)=>(ee(s,t,"write to private field"),a?a.call(s,r):t.set(s,r),r),k=(s,t,r)=>(ee(s,t,"access private method"),r);import{bC as $e,bD as oe,bE as Me,bF as Qe,bu as Oe,D as Te,bG as Le,bH as _e,r as E,bI as Pe,bJ as Fe,bK as Ie,bL as ze,bM as we,bN as De,bO as He,a7 as Ke,l as $,u as Ee,bP as ve,j as e,B as se,x as te,I as P,m as Ue,bQ as xe,bR as je,a as We,i as Ge,aK as Ve,bS as Je,ad as Xe,aa as re,e as X,q as Y,d as ae,bT as Ye,b as Ze,P as ke,ac as Z,f as b,N as F,S as qe,g as z,k as I,L as pe,n as ye,bU as A,E as es,t as Ne,bV as ss}from"./index-BC-1LZkB.js";import{U as ts,M as rs,c as as}from"./UsageByModel-BEa6PT2A.js";import{g as is}from"./usage-kR1h5urb.js";import{S as ns}from"./Segmented-DfgcyK0R.js";import{c as os}from"./Charts-ogViQ7jC.js";import"./roving-DkptacxO.js";function Re(s,t){const r=new Set(t);return s.filter(a=>!r.has(a))}function ls(s,t,r){const a=s.slice(0);return a[t]=r,a}var Q,m,T,L,x,q,D,H,K,U,p,le,ce,ue,de,he,Se,cs=(Se=class extends $e{constructor(t,r,a){super();v(this,p);v(this,Q);v(this,m);v(this,T);v(this,L);v(this,x);v(this,q);v(this,D);v(this,H);v(this,K);v(this,U,[]);y(this,Q,t),y(this,L,a),y(this,T,[]),y(this,x,[]),y(this,m,[]),this.setQueries(r)}onSubscribe(){this.listeners.size===1&&l(this,x).forEach(t=>{t.subscribe(r=>{k(this,p,de).call(this,t,r)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,l(this,x).forEach(t=>{t.destroy()})}setQueries(t,r){y(this,T,t),y(this,L,r),oe.batch(()=>{const a=l(this,x),o=k(this,p,ue).call(this,l(this,T));o.forEach(d=>d.observer.setOptions(d.defaultedQueryOptions));const i=o.map(d=>d.observer),n=i.map(d=>d.getCurrentResult()),c=a.length!==i.length,N=i.some((d,S)=>d!==a[S]),R=c||N,_=R?!0:n.some((d,S)=>{const C=l(this,m)[S];return!C||!Me(d,C)});!R&&!_||(R&&(y(this,U,o),y(this,x,i)),y(this,m,n),this.hasListeners()&&(R&&(Re(a,i).forEach(d=>{d.destroy()}),Re(i,a).forEach(d=>{d.subscribe(S=>{k(this,p,de).call(this,d,S)})})),k(this,p,he).call(this)))})}getCurrentResult(){return l(this,m)}getQueries(){return l(this,x).map(t=>t.getCurrentQuery())}getObservers(){return l(this,x)}getOptimisticResult(t,r){const a=k(this,p,ue).call(this,t),o=a.map(n=>n.observer.getOptimisticResult(n.defaultedQueryOptions)),i=a.map(n=>n.defaultedQueryOptions.queryHash);return[o,n=>k(this,p,ce).call(this,n??o,r,i),()=>k(this,p,le).call(this,o,a)]}},Q=new WeakMap,m=new WeakMap,T=new WeakMap,L=new WeakMap,x=new WeakMap,q=new WeakMap,D=new WeakMap,H=new WeakMap,K=new WeakMap,U=new WeakMap,p=new WeakSet,le=function(t,r){return r.map((a,o)=>{const i=t[o];return a.defaultedQueryOptions.notifyOnChangeProps?i:a.observer.trackResult(i,n=>{r.forEach(c=>{c.observer.trackProp(n)})})})},ce=function(t,r,a){if(r){const o=l(this,K),i=a!==void 0&&o!==void 0&&(o.length!==a.length||a.some((n,c)=>n!==o[c]));return(!l(this,q)||l(this,m)!==l(this,H)||i||r!==l(this,D))&&(y(this,D,r),y(this,H,l(this,m)),a!==void 0&&y(this,K,a),y(this,q,Qe(l(this,q),r(t)))),l(this,q)}return t},ue=function(t){const r=new Map;l(this,x).forEach(o=>{const i=o.options.queryHash;if(!i)return;const n=r.get(i);n?n.push(o):r.set(i,[o])});const a=[];return t.forEach(o=>{var N;const i=l(this,Q).defaultQueryOptions(o),c=((N=r.get(i.queryHash))==null?void 0:N.shift())??new Oe(l(this,Q),i);a.push({defaultedQueryOptions:i,observer:c})}),a},de=function(t,r){const a=l(this,x).indexOf(t);a!==-1&&(y(this,m,ls(l(this,m),a,r)),k(this,p,he).call(this))},he=function(){var t;if(this.hasListeners()){const r=l(this,q),a=k(this,p,le).call(this,l(this,m),l(this,U)),o=k(this,p,ce).call(this,a,(t=l(this,L))==null?void 0:t.combine);r!==o&&oe.batch(()=>{this.listeners.forEach(i=>{i(l(this,m))})})}},Se);function us({queries:s,...t},r){const a=Te(),o=Le(),i=_e(),n=E.useMemo(()=>s.map(h=>{const g=a.defaultQueryOptions(h);return g._optimisticResults=o?"isRestoring":"optimistic",g}),[s,a,o]);n.forEach(h=>{Pe(h);const g=a.getQueryCache().get(h.queryHash);Fe(h,i,g)}),Ie(i);const[c]=E.useState(()=>new cs(a,n,t)),[N,R,_]=c.getOptimisticResult(n,t.combine),d=!o&&t.subscribed!==!1;E.useSyncExternalStore(E.useCallback(h=>d?c.subscribe(oe.batchCalls(h)):ze,[c,d]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),E.useEffect(()=>{c.setQueries(n,t)},[n,t,c]);const C=N.some((h,g)=>we(n[g],h))?N.flatMap((h,g)=>{const f=n[g];if(f&&we(f,h)){const W=new Oe(a,f);return De(f,W,i)}return[]}):[];if(C.length>0)throw Promise.all(C);const O=N.find((h,g)=>{const f=n[g];return f&&He({result:h,errorResetBoundary:i,throwOnError:f.throwOnError,query:a.getQueryCache().get(f.queryHash),suspense:f.suspense})});if(O!=null&&O.error)throw O.error;return R(_())}const ds=.8;function hs(s,t){if(!s)return[];const r=[];for(const[a,o]of t){const i=s[a];if(i===null||o===null)continue;const n=$(i),c=n===0?1:o/n;c>=ds&&r.push({period:a,label:Ke[a],spent:o,limit:n,fraction:c,reached:c>=1})}return r}function ps(s,t,r){const a=t/r,o=a>0?s/a:null,i=o===null?s<1:o<7;return{available:s,dailySpend:a,days:o,low:i}}function ie({title:s,body:t,action:r}){return e.jsxs("div",{className:"gc-setup",children:[e.jsxs("div",{className:"gc-setup__text",children:[e.jsx("div",{className:"gc-setup__title",children:s}),e.jsx("div",{className:"gc-setup__body",children:t})]}),r]})}const ys=e.jsxs("svg",{width:"28",height:"24",viewBox:"0 0 28 24","aria-hidden":"true",className:"gc-empty-tile__bars",children:[e.jsx("rect",{x:"2",y:"12",width:"6",height:"12",rx:"1.5"}),e.jsx("rect",{x:"11",y:"6",width:"6",height:"18",rx:"1.5"}),e.jsx("rect",{x:"20",y:"0",width:"6",height:"24",rx:"1.5"})]}),gs=[{id:"keys",title:"API keys",body:"Create keys for apps and people, with budgets and their own routing."},{id:"chat",title:"Chat",body:"Try any model on the network and see which seller answers."},{id:"wallet",title:"Wallet & Funding",body:"Fund the workspace wallet and authorize who can withdraw."},{id:"routing",title:"Routing",body:"Choose which sellers may serve, price caps, TEE only, fallbacks."},{id:"providers",title:"Providers",body:"Every provider this gateway sees, with prices, trust and latency."},{id:"models",title:"Models",body:"Every model on the network, its providers and a ready-to-run API call."},{id:"presets",title:"Presets",body:"Save a model, system prompt and parameters as @preset/<name>."},{id:"members",title:"Members",body:"Invite people and choose what each of them may do."},{id:"activity",title:"Activity",body:"Spend, requests and tokens by model, key and member."},{id:"settings",title:"Settings",body:"Buyer settings every policy starts from, observability and sign-in."}];function ms({hasKeys:s,fundsKnown:t,funded:r}){const{workspace:a,viewer:o}=Ee(),i=gs.filter(n=>ve(n.id,o));return e.jsxs(e.Fragment,{children:[!s&&e.jsx(ie,{title:"No API keys yet",body:"Create your first API key to start using this workspace from your apps.",action:e.jsx(se,{variant:"brand",leadingIcon:e.jsx(P.plus,{size:14}),onClick:()=>te("keys?new=1"),children:"Create API key"})}),t&&!r&&ve("wallet",o)&&e.jsx(ie,{title:"No funds yet",body:e.jsxs(e.Fragment,{children:["Requests to paid sellers are paid in USDC from the ",a.name," wallet. Free sellers work without funds."]}),action:e.jsx(se,{variant:"outline",onClick:()=>te("wallet?fund=1"),children:"Add funds"})}),Ue(o)&&e.jsx(ie,{title:"Review buyer settings",body:"Price caps, minimum trust (60 by default) and verification apply to every key.",action:e.jsx(se,{variant:"ghost",onClick:()=>te("settings"),children:"Open settings"})}),e.jsxs("div",{className:"gc-section-head",children:[e.jsx("h2",{children:"This week's usage"}),e.jsxs("a",{className:"gc-link",href:je("activity"),onClick:xe("activity"),children:["View activity ",e.jsx(P.right,{size:13})]})]}),e.jsx("div",{className:"gc-grid gc-grid--3",children:["No spend this week","No requests this week","No tokens this week"].map(n=>e.jsxs("div",{className:"gc-empty-tile",children:[ys,e.jsx("span",{children:n})]},n))}),e.jsx("div",{className:"gc-grid gc-grid--3",children:i.map(n=>{const c=P[n.id]??P.overview;return e.jsxs("a",{className:"gc-section-card",href:je(n.id),onClick:xe(n.id),children:[e.jsx("span",{className:"gc-section-card__icon",children:e.jsx(c,{size:16})}),e.jsxs("span",{className:"gc-section-card__text",children:[e.jsx("span",{className:"gc-section-card__title",children:n.title}),e.jsx("span",{className:"gc-section-card__body",children:n.body})]}),e.jsx(P.right,{size:14,className:"gc-section-card__chevron"})]},n.id)})})]})}const ne=[{period:"daily",label:"Today"},{period:"weekly",label:"This week"},{period:"monthly",label:"This month"}];function bs(s,t){return t&&s!==null?s/t:t===0?1:null}function fs({label:s,spent:t,limit:r}){const a=r===null?null:$(r);return e.jsx(qe,{label:`Spend ${s.toLowerCase()}`,value:t===null?"…":b(t),sub:a===null?"No budget":`of ${b(a)} budget`,meter:bs(t,a)})}function ws(s){return s?s.days===null?"No recent spend":Ae(s.days):"…"}function vs({wallet:s,funds:t}){return s.isLoading?e.jsx(pe,{rows:1,height:48}):s.error?e.jsx(ye,{error:s.error,onRetry:()=>void s.refetch()}):s.data?e.jsxs("div",{className:"gc-grid gc-grid--4 gc-figures",children:[e.jsx(A,{label:"Available",value:b(s.data.available),strong:!0}),e.jsx(A,{label:"Reserved in channels",value:b(s.data.reserved)}),e.jsx(A,{label:"In wallet, not deposited",value:b(s.data.walletUsdc)}),e.jsx(A,{label:"Runway",value:ws(t)})]}):null}function xs({status:s}){if(s.isLoading)return e.jsx(pe,{rows:1,height:40});if(s.error)return e.jsx(ye,{error:s.error});if(!s.data)return null;const{buyer:t}=s.data;return e.jsxs("div",{className:"gc-grid gc-grid--4 gc-figures",children:[e.jsx(A,{label:"Buyer",value:t.reachable?e.jsx(Ne,{tone:"success",children:"Connected"}):e.jsx(Ne,{tone:"danger",children:"Unreachable"})}),e.jsx(A,{label:"Sellers seen",value:z(t.peers)}),e.jsx(A,{label:"DHT nodes",value:z(t.dhtNodes)}),e.jsx(A,{label:"Buyer uptime",value:t.uptimeMs===null?"—":ss(t.uptimeMs)})]})}function qs(){var me,be;const{workspace:s,viewer:t}=Ee(),r=We(),a=Ge(t),o=Ve(s.id),i=Je(s.id,a),n=Xe(),c=Date.now(),[N]=E.useState(c),[R,_]=E.useState("spend"),d=E.useMemo(()=>({...r}),[r.workspace,r.member]),S=us({queries:ne.map(({period:u})=>{const w=re(u,c);return{queryKey:Y.usage({...r,from:w,groupBy:"day"}),queryFn:()=>X.usage.report({...r,from:w,groupBy:"day"})}})}),C=re("monthly",c),O=ae({queryKey:Y.usage({...r,from:C,groupBy:"key"}),queryFn:()=>X.usage.report({...r,from:C,groupBy:"key"})}),h=ae({queryKey:Y.usage({...r,from:C,groupBy:"model"}),queryFn:()=>X.usage.report({...r,from:C,groupBy:"model"})}),g=re("daily",c),f=g-7*864e5,W=ae({queryKey:Y.usage({workspace:s.id,from:f,to:g,groupBy:"day"}),queryFn:()=>X.usage.report({workspace:s.id,from:f,to:g-1,groupBy:"day"}),enabled:a}),B=Ye(),G=Ze({workspace:s.id}),V=((me=o.data)==null?void 0:me.limits)??null,M=(be=S[2])==null?void 0:be.data,ge=u=>{var J;const w=(J=S[u])==null?void 0:J.data;return w?$(w.totals.spent):null},Be=hs(V,ne.map(({period:u},w)=>[u,ge(w)])),j=i.data&&W.data?ps($(i.data.available),$(W.data.totals.spent),7):null;if(M!==void 0&&M.totals.requests===0&&G.data!==void 0&&G.data.every(u=>u.usage.requests===0)){const u=(G.data??[]).some(w=>w.status==="active"&&!w.label.startsWith("Web chat"));return e.jsxs("div",{className:"gc-page",children:[e.jsx(ke,{title:s.name,description:"Nothing has run through this workspace yet. Here is where to start."}),e.jsx(ms,{hasKeys:G.isLoading||u,fundsKnown:a&&i.data!==void 0,funded:i.data?$(i.data.available)>0:!0})]})}return e.jsxs("div",{className:"gc-page",children:[e.jsx(ke,{title:"Overview",description:`${s.name} workspace${r.member?" · your usage":""}`}),(j==null?void 0:j.low)&&e.jsx(Z,{tone:j.days!==null&&j.days<1?"danger":"warning",title:"Balance is running low",action:e.jsx(F,{to:"wallet",children:"Add funds"}),children:j.days===null?`Only ${b(j.available)} is available.`:`${b(j.available)} available lasts about ${Ae(j.days)} at last week's pace (${b(j.dailySpend)} a day).`}),B.currentMissingOperator&&e.jsx(Z,{tone:"warning",title:"No authorized wallet",action:e.jsx(F,{to:"wallet",children:B.canAuthorize?"Authorize a wallet":"View wallet"}),children:B.canAuthorize?`Nobody can withdraw ${s.name}'s funds or claim its ANTS rewards until you authorize one of your wallets. Requests keep working.`:`Nobody can withdraw ${s.name}'s funds or claim its ANTS rewards until the organization owner authorizes a wallet. Requests keep working.`}),B.withdrawable.count>0&&e.jsxs(Z,{tone:"warning",title:`${B.withdrawable.count} channel${B.withdrawable.count===1?"":"s"} ready to withdraw`,action:e.jsx(F,{to:"wallet",children:"Withdraw"}),children:["About ",b(B.withdrawable.amount)," of unused reserve can return to the balance."]}),Be.map(u=>e.jsx(Z,{tone:u.reached?"danger":"warning",title:u.reached?`${u.label} budget reached`:`${u.label} budget almost used`,children:u.reached?`${s.name} has spent ${b(u.spent)} of its ${b(u.limit)} ${u.label.toLowerCase()} budget. New requests are refused until the period resets.`:`${Math.round(u.fraction*100)}% of the ${b(u.limit)} ${u.label.toLowerCase()} budget is used.`},u.period)),e.jsxs("div",{className:"gc-grid gc-grid--4",children:[ne.map(({period:u,label:w},J)=>e.jsx(fs,{label:w,spent:ge(J),limit:(V==null?void 0:V[u])??null},u)),e.jsx(qe,{label:"Requests this month",value:M?z(M.totals.requests):"…",sub:M?`${z(M.totals.failedRequests)} failed`:void 0})]}),e.jsx(I,{title:"Last 7 days",description:as(R,"7d"),actions:e.jsxs(e.Fragment,{children:[e.jsx(ns,{label:"Chart metric",value:R,onChange:_,options:rs}),e.jsx(F,{to:"activity",children:"All activity"})]}),children:e.jsx(ts,{filter:d,range:"7d",now:N,metric:R,height:200})}),a&&e.jsx(I,{title:"Balance",actions:e.jsx(F,{to:"wallet",children:"Add funds"}),children:e.jsx(vs,{wallet:i,funds:j})}),e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(I,{title:"Top keys this month",children:e.jsx(Ce,{report:O.data,loading:O.isLoading,error:O.error,empty:"No spend this month."})}),e.jsx(I,{title:"Top models this month",children:e.jsx(Ce,{report:h.data,loading:h.isLoading,error:h.error,empty:"No spend this month."})})]}),e.jsx(I,{title:"Gateway",children:e.jsx(xs,{status:n})})]})}function Ae(s){return s<1?"under a day":s<60?`${Math.floor(s)} day${Math.floor(s)===1?"":"s"}`:`${Math.floor(s/30)} months`}function Ce({report:s,loading:t,error:r,empty:a}){if(t)return e.jsx(pe,{rows:4,height:22});if(r)return e.jsx(ye,{error:r});const o=((s==null?void 0:s.groups)??[]).map(i=>({label:is(i),value:$(i.spent),sub:`${z(i.requests)} requests`})).filter(i=>i.value>0).sort((i,n)=>n.value-i.value).slice(0,5);return o.length===0?e.jsx(es,{title:a}):e.jsx(os,{items:o,format:b})}export{qs as default};
@@ -0,0 +1 @@
1
+ import{bh as J,v as Y,r as b,j as e,bi as k,I as P,bj as F,B as y,b3 as X,bk as Z,b7 as ee,bc as K,bl as se,bm as A,bn as le,bo as E,T as D,C as ie,bp as U,bg as ne,bq as ae,ac as te,br as ce,bs as re,bt as oe,b5 as de}from"./index-BC-1LZkB.js";import{S as T}from"./SelectField-BCIB_aud.js";import{S as V}from"./Segmented-DfgcyK0R.js";import{S as L}from"./Switch-GA0Kao4V.js";import{D as R}from"./Disclosure-Ygp-7rwy.js";function C(l,c){const a=l==null?void 0:l.find(o=>J(o.peerId,c));return(a==null?void 0:a.displayName)??Y(c,8,4)}function z({value:l,onChange:c,peers:a,label:o,ordered:d,placeholder:t="Search sellers or paste a peer id"}){const[m,g]=b.useState(""),j=b.useId(),h=b.useId();function r(){const n=m.trim();if(!n)return;const p=a==null?void 0:a.find(x=>{var i;return((i=x.displayName)==null?void 0:i.toLowerCase())===n.toLowerCase()||x.peerId.toLowerCase()===n.toLowerCase()}),N=(p==null?void 0:p.peerId)??n;l.some(x=>x.toLowerCase()===N.toLowerCase())||c([...l,N]),g("")}return e.jsxs("div",{className:"gc-picker",children:[e.jsx("label",{className:"as-field__label",htmlFor:h,children:o}),l.length>0&&e.jsx("ol",{className:d?"gc-chips gc-chips--ordered":"gc-chips",children:l.map((n,p)=>e.jsxs("li",{className:"gc-chip",children:[d&&e.jsx("span",{className:"gc-chip__index",children:p+1}),e.jsx("span",{className:"gc-chip__label",title:n,children:C(a,n)}),d&&e.jsxs(e.Fragment,{children:[e.jsx(k,{label:`Move ${C(a,n)} up`,size:"sm",disabled:p===0,onClick:()=>c(F(l,p,-1)),children:e.jsx(P.up,{size:12})}),e.jsx(k,{label:`Move ${C(a,n)} down`,size:"sm",disabled:p===l.length-1,onClick:()=>c(F(l,p,1)),children:e.jsx(P.down,{size:12})})]}),e.jsx(k,{label:`Remove ${C(a,n)}`,size:"sm",onClick:()=>c(l.filter(N=>N!==n)),children:e.jsx(P.x,{size:12})})]},n))}),e.jsxs("div",{className:"gc-inline",children:[e.jsx("input",{id:h,className:"as-field__input gc-picker__input",list:j,value:m,placeholder:t,onChange:n=>g(n.target.value),onKeyDown:n=>{n.key==="Enter"&&(n.preventDefault(),r())}}),e.jsx("datalist",{id:j,children:a==null?void 0:a.map(n=>e.jsx("option",{value:n.peerId,children:n.displayName??Y(n.peerId)},n.peerId))}),e.jsx(y,{variant:"outline",size:"sm",onClick:r,disabled:!m.trim(),children:"Add"})]})]})}function me({value:l,onChange:c,label:a,suggestions:o,placeholder:d}){const[t,m]=b.useState(""),g=b.useId(),j=b.useId();function h(){const r=t.trim();r&&!l.includes(r)&&c([...l,r]),m("")}return e.jsxs("div",{className:"gc-picker",children:[e.jsx("label",{className:"as-field__label",htmlFor:j,children:a}),l.length>0&&e.jsx("ul",{className:"gc-chips",children:l.map(r=>e.jsxs("li",{className:"gc-chip",children:[e.jsx("span",{className:"gc-chip__label",children:r}),e.jsx(k,{label:`Remove ${r}`,size:"sm",onClick:()=>c(l.filter(n=>n!==r)),children:e.jsx(P.x,{size:12})})]},r))}),e.jsxs("div",{className:"gc-inline",children:[e.jsx("input",{id:j,className:"as-field__input gc-picker__input",list:g,value:t,placeholder:d,onChange:r=>m(r.target.value),onKeyDown:r=>{r.key==="Enter"&&(r.preventDefault(),h())}}),e.jsx("datalist",{id:g,children:o==null?void 0:o.map(r=>e.jsx("option",{value:r},r))}),e.jsx(y,{variant:"outline",size:"sm",onClick:h,disabled:!t.trim(),children:"Add"})]})]})}function he({draft:l,parent:c,above:a,peers:o,lists:d}){const t=b.useMemo(()=>{if(!o||o.length===0)return null;let m;try{m=ne(l,d)}catch{return null}return{matched:ae(K(c,m),o,d).length,total:o.length}},[l,c,o,d]);return t?t.matched===0?e.jsxs(te,{tone:"warning",title:"No seller matches this policy",children:["With ",a?`${a} and `:"","these settings, none of the ",t.total," sellers this gateway sees can serve a request. Requests will fail until you loosen it."]}):e.jsxs("p",{className:"gc-muted","aria-live":"polite",children:["Matches ",t.matched," of ",t.total," sellers",a?` after ${a}`:"","."]}):null}function fe({value:l,onChange:c,peers:a,lists:o,showTemplates:d=!0,parent:t,disabled:m}){const[g,j]=b.useState(""),[h,r]=b.useState(null),n=(s,u)=>c({...l,[s]:u}),p=X(a),N=o.map(s=>({value:s.id,label:`${s.name} (${s.peerIds.length})`})),x=Z(ee().data),i=b.useMemo(()=>x||t?K(x,t):null,[x,t]),Q=x&&t?"the buyer config and the levels above":x?"the buyer config":t?"the levels above":"",$=s=>(x==null?void 0:x[s])!==void 0&&x[s]===(i==null?void 0:i[s])?"The buyer config":"The levels above",G=se(a)||l.minReputation!==""||(i==null?void 0:i.minReputation)!==void 0;function q(s){var O;let u;if(s==="own"){const w=o.find(H=>H.id===g);if(!w)return;u={allowMode:"only",allowedPeerIds:[],allowedListIds:[w.id]}}else u=ce(re(s));const f=oe(l,u),_=((O=A.find(w=>w.id===s))==null?void 0:O.label)??s;f.length>0?r({label:_,template:u,conflicts:f}):c(U(l,u))}function M(s,u){n("routes",l.routes.map((f,_)=>_===s?u:f))}const S=[l.maxInputUsdPerMillion,l.maxOutputUsdPerMillion,l.maxCachedInputUsdPerMillion,l.maxImageUsdPerImage].filter(s=>s.trim()!=="").length,I=(s,u)=>e.jsx(D,{size:"sm",className:"gc-num",label:u,inputMode:"decimal",value:l[s],placeholder:(i==null?void 0:i[s])!==void 0?`≤ ${de(i[s])} above`:"No cap",onChange:f=>n(s,f.target.value)}),v=e.jsxs(e.Fragment,{children:[e.jsx(he,{draft:l,parent:i,above:Q,peers:a,lists:o}),d&&!m&&e.jsxs("div",{className:"gc-policy__templates",children:[e.jsx("span",{className:"gc-muted",children:"Start from"}),A.filter(s=>s.id!=="own").map(s=>e.jsx(y,{size:"sm",variant:"outline",title:s.description,onClick:()=>q(s.id),children:s.label},s.id)),o.length>0&&e.jsxs("span",{className:"gc-inline",children:[e.jsx(T,{size:"sm","aria-label":"Peer list for Own peers only",value:g,onChange:j,options:[{value:"",label:"Own peer list…"},...N]}),e.jsx(y,{size:"sm",variant:"outline",disabled:!g,onClick:()=>q("own"),children:"Use"})]}),e.jsx(y,{size:"sm",variant:"link",className:"gc-policy__clear",onClick:()=>c(le()),children:"Clear policy"})]}),e.jsxs("div",{className:"gc-policy__cols",children:[e.jsxs("section",{className:"gc-policy__section",children:[e.jsx("h3",{children:"Sellers"}),e.jsx(V,{label:"Which sellers may serve",value:l.allowMode,onChange:s=>n("allowMode",s),options:[{value:"any",label:"Any seller"},{value:"only",label:"Only these"}]}),l.allowMode==="only"&&e.jsxs(e.Fragment,{children:[e.jsx(z,{label:"Allowed sellers",value:l.allowedPeerIds,onChange:s=>n("allowedPeerIds",s),peers:a}),e.jsx(W,{label:"Allowed peer lists",lists:o,value:l.allowedListIds,onChange:s=>n("allowedListIds",s)}),l.allowedPeerIds.length===0&&l.allowedListIds.length===0&&e.jsx("p",{className:"gc-warn",children:"An empty allow list means no seller can serve."})]}),e.jsx(z,{label:"Blocked sellers",value:l.blockedPeerIds,onChange:s=>n("blockedPeerIds",s),peers:a}),e.jsx(W,{label:"Blocked peer lists",lists:o,value:l.blockedListIds,onChange:s=>n("blockedListIds",s)})]}),e.jsxs("section",{className:"gc-policy__section",children:[e.jsx("h3",{children:"Quality and ranking"}),e.jsx(B,{label:"Minimum trust score",value:l.minTrustScore,onChange:s=>n("minTrustScore",s),floor:i==null?void 0:i.minTrustScore,floorSource:$("minTrustScore")}),e.jsxs("div",{className:"gc-policy__switches",children:[e.jsx(L,{checked:l.requireTee||!!(i!=null&&i.requireTee),disabled:!!(i!=null&&i.requireTee),onChange:s=>n("requireTee",s),label:"TEE sellers only"}),e.jsx(L,{checked:l.requireVerified||!!(i!=null&&i.requireVerified),disabled:!!(i!=null&&i.requireVerified),onChange:s=>n("requireVerified",s),label:"Verified sellers only"})]}),((i==null?void 0:i.requireTee)||(i==null?void 0:i.requireVerified))&&e.jsxs("span",{className:"as-field__hint",children:[i.requireTee&&i.requireVerified?"TEE and verified sellers are":i.requireTee?"TEE sellers are":"Verified sellers are"," already required above."]}),e.jsxs("div",{className:"gc-policy__pair",children:[e.jsx(T,{size:"sm",label:"Sort by",value:l.sort,onChange:s=>n("sort",s),options:[{value:"",label:"Inherit"},...Object.keys(E).map(s=>({value:s,label:E[s]}))]}),e.jsx(T,{size:"sm",label:"Free sellers first",value:l.preferFreePeers,onChange:s=>n("preferFreePeers",s),options:[{value:"inherit",label:"Inherit"},{value:"yes",label:"Yes"},{value:"no",label:"No"}]})]}),e.jsx(V,{label:"Which models may be used",value:l.modelsMode,onChange:s=>n("modelsMode",s),options:[{value:"any",label:"Any model"},{value:"only",label:"Only these models"}]}),l.modelsMode==="only"&&e.jsx(me,{label:"Allowed models",value:l.allowedModels,onChange:s=>n("allowedModels",s),suggestions:p,placeholder:"Model id"})]})]}),e.jsxs("div",{className:"gc-policy__advanced",children:[e.jsx(R,{title:"Price caps",summary:S?`${S} set`:"None",defaultOpen:m&&S>0,children:e.jsxs("div",{className:"gc-policy__caps",children:[I("maxInputUsdPerMillion","Input $/M"),I("maxOutputUsdPerMillion","Output $/M"),I("maxCachedInputUsdPerMillion","Cached input $/M"),I("maxImageUsdPerImage","$ per image")]})}),e.jsxs(R,{title:"Fallback chains",summary:l.routes.length?`${l.routes.length} chain${l.routes.length===1?"":"s"}`:"None",defaultOpen:m&&l.routes.length>0,children:[e.jsx("p",{className:"gc-fineprint",children:"Sellers to try first for a model, in order. After the chain, normal ranking continues unless the chain is strict."}),l.routes.map((s,u)=>e.jsxs("div",{className:"gc-route",children:[e.jsxs("div",{className:"gc-inline",children:[e.jsx(D,{size:"sm",label:"Model",list:"gc-policy-models",value:s.model,placeholder:"Model id",onChange:f=>M(u,{...s,model:f.target.value})}),e.jsx(L,{checked:s.strict,onChange:f=>M(u,{...s,strict:f}),label:"Strict"}),e.jsx(y,{variant:"ghost",size:"sm",onClick:()=>n("routes",l.routes.filter((f,_)=>_!==u)),children:"Remove"})]}),e.jsx(z,{label:"Sellers, in order",ordered:!0,value:s.peerIds,onChange:f=>M(u,{...s,peerIds:f}),peers:a})]},u)),e.jsx("datalist",{id:"gc-policy-models",children:p.map(s=>e.jsx("option",{value:s},s))}),e.jsx("div",{children:e.jsx(y,{variant:"outline",size:"sm",onClick:()=>n("routes",[...l.routes,{model:"",peerIds:[],strict:!1}]),children:"Add fallback chain"})})]}),G&&e.jsx(R,{title:"Reputation",summary:l.minReputation!==""?`≥ ${l.minReputation}`:(i==null?void 0:i.minReputation)!==void 0?`Inherit (≥ ${i.minReputation})`:"Inherit",defaultOpen:m&&l.minReputation!=="",children:e.jsx(B,{label:"Minimum reputation",value:l.minReputation,onChange:s=>n("minReputation",s),floor:i==null?void 0:i.minReputation,floorSource:$("minReputation")})})]}),e.jsx(ie,{isOpen:h!==null,tone:"primary",title:`Apply “${(h==null?void 0:h.label)??""}”?`,confirmLabel:"Replace and apply",body:e.jsxs(e.Fragment,{children:["This template changes settings you already set: ",e.jsx("strong",{children:h==null?void 0:h.conflicts.join(", ")}),". Your other settings stay."]}),onClose:()=>r(null),onConfirm:()=>{h&&c(U(l,h.template)),r(null)}})]});return m?e.jsx("fieldset",{className:"gc-policy gc-policy--readonly",disabled:!0,children:v}):e.jsx("div",{className:"gc-policy",children:v})}function B({label:l,value:c,onChange:a,clearable:o=!0,hint:d,floor:t,floorSource:m="The levels above"}){const g=b.useId(),j=c!=="",h=t!==void 0&&t>0,r=h&&j&&Number(c)<=t,n=j?c:h?`${t} inherited`:"Inherit";return e.jsxs("div",{className:"gc-slider",children:[e.jsxs("div",{className:"gc-slider__head",children:[e.jsx("span",{className:"as-field__label",id:g,children:l}),e.jsx("span",{className:j?"gc-slider__value":"gc-slider__value gc-slider__value--inherit",children:n})]}),e.jsxs("div",{className:"gc-inline",children:[e.jsx("input",{type:"range",min:0,max:100,step:5,value:j?Number(c):h?t:0,"aria-labelledby":g,onChange:p=>a(p.target.value)}),o&&j&&e.jsx(y,{variant:"ghost",size:"sm",onClick:()=>a(""),children:"Clear"})]}),r?e.jsxs("span",{className:"as-field__hint gc-override",children:[e.jsx("span",{className:"gc-attention","aria-hidden":"true"}),m," already requires ≥ ",t,". No effect."]}):h&&e.jsxs("span",{className:"as-field__hint",children:[m," requires ≥ ",t,". Only a higher value narrows it."]}),d&&e.jsx("span",{className:"as-field__hint",children:d})]})}function W({label:l,lists:c,value:a,onChange:o}){return c.length===0?null:e.jsxs("fieldset",{className:"gc-checks",children:[e.jsx("legend",{className:"as-field__label",children:l}),c.map(d=>e.jsxs("label",{className:"gc-check",children:[e.jsx("input",{type:"checkbox",checked:a.includes(d.id),onChange:t=>o(t.target.checked?[...a,d.id]:a.filter(m=>m!==d.id))}),d.name," ",e.jsxs("span",{className:"gc-muted",children:["(",d.peerIds.length,")"]})]},d.id))]})}export{fe as P,B as S,z as a,C as p};
@@ -0,0 +1 @@
1
+ import{b9 as p,r as d,j as e,C as m,bz as x,bA as b,bB as v,t as j,be as y,bd as w,bg as f,b2 as C,B as h,A as k}from"./index-BC-1LZkB.js";import{P}from"./PolicyEditor-CxJuR6mU.js";function L(){const a=p(),[s,n]=d.useState(null),l=d.useRef(null),r=t=>new Promise(u=>{l.current=u,n(t)}),o=t=>{var u;n(null),(u=l.current)==null||u.call(l,t),l.current=null},i=(t,u)=>x(t.some(g=>b(g,a.data??null)),u,r),c=(s==null?void 0:s.kind)==="narrowed"?e.jsx(m,{isOpen:!0,tone:"primary",title:"The levels above allow less",confirmLabel:"Save anyway",cancelLabel:"Go back",onClose:()=>o(!1),onConfirm:()=>o(!0),body:e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("span",{children:"Part of this change has no effect, because a workspace, member or admin restriction above it is tighter. Saving stores it as you entered it; only what the levels above allow applies."}),s.lines.length>0&&e.jsx("ul",{className:"gc-list",children:s.lines.map(t=>e.jsx("li",{children:t},t))})]})}):e.jsx(m,{isOpen:(s==null?void 0:s.kind)==="empty",tone:"danger",title:"Save an empty allow list?",confirmLabel:"Save anyway",cancelLabel:"Go back",onClose:()=>o(!1),onConfirm:()=>o(!0),body:e.jsxs(e.Fragment,{children:["With this allow list ",e.jsx("strong",{children:"no seller can serve"})," requests here (it names no seller, or none the levels above allow), so they fail until you change it. To let any seller serve, choose “Any seller” instead."]})});return{save:i,dialog:c}}function S({policy:a,invalid:s,empty:n="Inherits everything"}){if(s)return e.jsx("span",{className:"gc-warn",children:"Has an invalid setting; open it to fix."});const l=v(a);return l.length===0?e.jsx("span",{className:"gc-muted",children:n}):e.jsx("span",{className:"gc-chiprow",children:l.map(r=>e.jsx(j,{children:r},r))})}function A(a){const[s,n]=d.useState(()=>y(a)),l=p();return{draft:s,setDraft:n,reset:r=>n(y(r)),build:()=>w(f(s,l.data??null))}}function N(a,s){try{return{policy:f(a,s),error:null}}catch(n){return{policy:null,error:n instanceof Error?n.message:String(n)}}}function D({draft:a,setDraft:s,title:n="Routing policy"}){const l=C(),r=p(),[o,i]=d.useState(null),c=N(a,r.data??null),t=()=>{o&&s(o),i(null)};return e.jsxs("div",{className:"gc-policy-row",children:[e.jsxs("div",{className:"gc-policy-row__text",children:[e.jsx("span",{className:"as-field__label",children:n}),e.jsx(S,{policy:c.policy,invalid:c.error!==null})]}),e.jsx(h,{size:"sm",variant:"outline",onClick:()=>i(a),children:"Edit"}),e.jsx(k,{isOpen:o!==null,onClose:()=>i(null),size:"xl",title:n,subtitle:"Blank settings inherit from the level above, which this can only narrow. Saved with the form.",footer:e.jsxs(e.Fragment,{children:[c.error&&e.jsx("span",{className:"gc-warn gc-footer-note",children:c.error}),e.jsx(h,{variant:"ghost",onClick:t,children:"Cancel"}),e.jsx(h,{onClick:()=>i(null),children:"Done"})]}),children:e.jsx(P,{value:a,onChange:s,peers:l.data,lists:r.data??[]})})]})}export{D as P,L as a,S as b,N as d,A as u};
@@ -0,0 +1,4 @@
1
+ import{u as D,i as J,b4 as B,r as n,s as E,j as e,P as $,B as y,I as f,k as L,Q as R,M as Q,ap as U,t as C,z as V,E as W,m as F,A as G,C as H,b2 as K,T as j,b3 as _,n as X,q as O,e as v}from"./index-BC-1LZkB.js";import{u as Y,a as Z,P as ee}from"./PolicyField-B7_URv8N.js";import{D as se}from"./DataTable-Cizb1YVv.js";import{S as re}from"./SelectField-BCIB_aud.js";import{T as N}from"./TextAreaField-DWl60i8s.js";import"./PolicyEditor-CxJuR6mU.js";import"./Segmented-DfgcyK0R.js";import"./roving-DkptacxO.js";import"./Switch-GA0Kao4V.js";import"./Disclosure-Ygp-7rwy.js";import"./index-DX_0N6eB.js";function A(s){return s.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)}function te(s){return/^[a-z0-9][a-z0-9-]{0,47}$/.test(s)}function ae(s){if(!s.trim())return{};let a;try{a=JSON.parse(s)}catch{throw new Error("Parameters must be valid JSON.")}if(!a||typeof a!="object"||Array.isArray(a))throw new Error('Parameters must be a JSON object, like {"temperature": 0.2}.');return a}function oe({initial:s,prefill:a,onDone:m}){const{workspace:p,viewer:c}=D(),u=K(),[o,g]=n.useState((s==null?void 0:s.name)??(a==null?void 0:a.name)??""),[l,d]=n.useState((s==null?void 0:s.slug)??(a?A(a.name):"")),[t,q]=n.useState(!!s),[h,z]=n.useState((s==null?void 0:s.model)??(a==null?void 0:a.model)??""),[b,I]=n.useState(s?s.workspaceId??"":p.id),[S,M]=n.useState((s==null?void 0:s.systemPrompt)??""),[w,T]=n.useState(s&&Object.keys(s.params).length?JSON.stringify(s.params,null,2):""),x=Y(s==null?void 0:s.routingPolicy),P=Z(),i=E({mutationFn:()=>{if(!te(l))throw new Error("Slug must be lowercase letters, numbers and dashes.");const r={name:o.trim(),slug:l,model:h.trim(),workspaceId:b||null,systemPrompt:S.trim()||null,params:ae(w),routingPolicy:x.build()};return P.save([r.routingPolicy],k=>s?v.presets.update(s.id,r,k):v.presets.create(r,k))},onSuccess:r=>m(r),invalidate:[O.group("presets")],toast:"Preset saved"});return e.jsxs("form",{className:"gc-stack",onSubmit:r=>{r.preventDefault(),i.mutate()},children:[e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(j,{label:"Name",required:!0,value:o,onChange:r=>{g(r.target.value),t||d(A(r.target.value))}}),e.jsx(j,{label:"Slug",required:!0,value:l,onChange:r=>{q(!0),d(r.target.value)},hint:e.jsxs(e.Fragment,{children:["Called as ",e.jsxs("code",{children:["@preset/",l||"slug"]})]})})]}),e.jsxs("div",{className:"gc-grid gc-grid--2",children:[e.jsx(j,{label:"Model",required:!0,list:"gc-preset-models",value:h,onChange:r=>z(r.target.value)}),e.jsx("datalist",{id:"gc-preset-models",children:_(u.data).map(r=>e.jsx("option",{value:r},r))}),e.jsx(re,{label:"Available in",value:b,onChange:I,options:[{value:p.id,label:`${p.name} workspace`},...F(c)?[{value:"",label:"All workspaces"}]:[]]})]}),e.jsx(N,{label:"System prompt",rows:4,value:S,onChange:r=>M(r.target.value),hint:"Added before the client's messages."}),e.jsx(N,{label:"Parameters (JSON)",rows:4,mono:!0,value:w,placeholder:`{
2
+ "temperature": 0.2,
3
+ "max_tokens": 2048
4
+ }`,onChange:r=>T(r.target.value),hint:"Defaults merged under the client's own parameters."}),e.jsx(ee,{draft:x.draft,setDraft:x.setDraft}),i.error?e.jsx(X,{error:i.error,title:"Could not save the preset"}):null,e.jsxs("div",{className:"gc-actions",children:[e.jsx(y,{variant:"ghost",onClick:()=>m(),children:"Cancel"}),e.jsx(y,{type:"submit",disabled:i.isPending||!o.trim()||!h.trim(),children:i.isPending?"Saving…":"Save preset"})]}),P.dialog]})}function je(){const{workspace:s,viewer:a}=D(),m=J(a),p=B(s.id),[c,u]=n.useState(null),[o,g]=n.useState(null),l=E({mutationFn:d=>v.presets.remove(d.id),onSuccess:()=>g(null),invalidate:[O.group("presets")]});return e.jsxs("div",{className:"gc-page",children:[e.jsx($,{title:"Presets",description:e.jsxs(e.Fragment,{children:["A saved model, prompt, parameters and routing. Use one by sending ",e.jsx("code",{children:'"model": "@preset/<slug>"'}),"."]}),actions:m&&e.jsx(y,{variant:"brand",leadingIcon:e.jsx(f.plus,{size:14}),onClick:()=>u("new"),children:"New preset"})}),e.jsx(L,{flush:!0,children:e.jsx(R,{query:p,children:d=>e.jsx(se,{label:"Presets",rows:d,rowKey:t=>t.id,rowLabel:t=>t.name,actions:t=>m&&(t.workspaceId||F(a))?[{label:"Edit",onSelect:()=>u(t)},{label:"Delete",tone:"danger",onSelect:()=>g(t)}]:[],empty:e.jsx(W,{icon:e.jsx(f.presets,{size:18}),title:"No presets yet",body:"Presets let every client share one tuned setup without changing code."}),columns:[{key:"name",header:"Name",render:t=>e.jsx("span",{className:"gc-strong",children:t.name})},{key:"usage",header:"Use as model",render:t=>e.jsxs("span",{className:"gc-inline gc-inline--wrap",children:[e.jsxs(Q,{children:["@preset/",t.slug]}),e.jsx(U,{value:`@preset/${t.slug}`})]})},{key:"model",header:"Model",secondary:!0,render:t=>t.model},{key:"scope",header:"Scope",secondary:!0,render:t=>t.workspaceId?e.jsx(C,{children:"Workspace"}):e.jsx(C,{tone:"info",children:"All workspaces"})},{key:"policy",header:"Routing",secondary:!0,optional:!0,render:t=>e.jsx("span",{className:"gc-muted",children:V(t.routingPolicy)})}]})})}),e.jsx(G,{isOpen:c!==null,onClose:()=>u(null),size:"lg",title:c==="new"?"New preset":"Edit preset",children:c!==null&&e.jsx(oe,{initial:c==="new"?null:c,onDone:()=>u(null)})}),e.jsx(H,{isOpen:o!==null,busy:l.isPending,error:l.error,onClose:()=>g(null),onConfirm:()=>o&&l.mutate(o),title:"Delete this preset?",confirmLabel:"Delete preset",body:e.jsxs(e.Fragment,{children:["Requests that use ",e.jsxs("code",{children:["@preset/",o==null?void 0:o.slug]})," will fail."]})})]})}export{oe as PresetForm,je as default};
@@ -0,0 +1 @@
1
+ import{bW as qe,bh as pe,aI as Ve,u as X,a as fe,D as Ke,F as Ge,m as we,i as ye,r as p,O as Ye,b as ve,d as Qe,bX as We,bf as He,Y as U,bY as Je,bZ as Xe,e as L,ag as Ze,j as s,A as Z,ac as Y,n as ee,B as x,L as be,z as es,b9 as ss,s as xe,q as ke,k as je,Q as Pe,E as J,I as _,C as ts,T as q,v as F,M as Ce,ap as Se,t as N,a8 as ns,bU as $,ab as Ie,g as Ne,X as rs,b0 as $e,b_ as Ae,aS as as,b4 as os,b$ as ls,W as is,aU as cs,N as ds,aV as us,aW as ms,b2 as hs,b3 as gs,bl as ps,aY as fs,aZ as ws,a_ as ce,b6 as ys,x as de,a$ as vs,P as bs}from"./index-BC-1LZkB.js";import{p as Q,a as xs}from"./PolicyEditor-CxJuR6mU.js";import{S as A}from"./SelectField-BCIB_aud.js";import{D as Le}from"./DataTable-Cizb1YVv.js";import{V as Fe,P as Me,b as ks,p as js,S as Ps}from"./models-B4dUNXf8.js";import{f as Cs}from"./ants-B38m9Phv.js";import{PresetForm as Ss}from"./Presets-B1xDCjO5.js";import{T as Is,a as Ns}from"./Tabs-dykHKE0J.js";import{S as W}from"./Switch-GA0Kao4V.js";import"./Segmented-DfgcyK0R.js";import"./roving-DkptacxO.js";import"./Disclosure-Ygp-7rwy.js";import"./index-DX_0N6eB.js";import"./PolicyField-B7_URv8N.js";import"./TextAreaField-DWl60i8s.js";function Te(e,t="admin"){return t==="owner"&&Ve(e)?"ownerRoutingPolicy":"routingPolicy"}async function Ee(e,t){const n=(await e.keys.list({workspace:t.workspaceId})).find(a=>a.id===t.keyId);if(!n)throw new Error("That key no longer exists.");return n}async function De(e,t){switch(t.kind){case"gateway":return e.network.gatewayPolicy();case"workspace-org":return(await e.workspaces.get(t.workspaceId)).orgRoutingPolicy;case"workspace":return(await e.workspaces.get(t.workspaceId)).routingPolicy;case"member":{const n=(await e.members.list()).find(a=>a.id===t.memberId);if(!n)throw new Error("That member no longer exists.");return n.routingPolicy}case"key":{const n=await Ee(e,t);return n[Te(n,t.layer)]??null}}}async function $s(e,t,n,a){const o=a!=null&&a.confirmEmpty||a!=null&&a.acceptNarrowed?[a]:[];switch(t.kind){case"gateway":await e.network.setGatewayPolicy(n??{},...o);return;case"workspace-org":await e.workspaces.update(t.workspaceId,{orgRoutingPolicy:n},...o);return;case"workspace":await e.workspaces.update(t.workspaceId,{routingPolicy:n},...o);return;case"member":await e.members.update(t.memberId,{routingPolicy:n},...o);return;case"key":{const i=t.layer==="owner"?Te(await Ee(e,t),"owner"):"routingPolicy";await e.keys.update(t.keyId,{[i]:n},...o);return}}}const ue=e=>JSON.stringify(e??{},Object.keys(e??{}).sort());async function As(e,t,n,a,o,i){const m=await De(e,t),c=qe(m,n,a,o),g=ue(m)!==ue(c)||JSON.stringify(m??{})!==JSON.stringify(c);return g&&await $s(e,t,c,i),{before:m,after:c,changed:g}}function Ls(e,t,n){return e.kind==="key"?{model:t,key:e.keyId,workspace:e.workspaceId}:e.kind==="member"?{model:t,member:e.memberId,workspace:n}:e.kind==="gateway"?{model:t,workspace:n}:{model:t,workspace:e.workspaceId}}const Fs={allow:"Allowed",block:"Blocked",prefer:"Preferred"};function Ms(e){const{action:t,name:n,scopeLabel:a,changed:o,model:i,preview:m,peerId:c}=e,g=Fs[t],f=t==="prefer"?`already first for ${i}`:`already ${g.toLowerCase()}`,l=o?`${g} ${n} ${t==="prefer"?`for ${i} `:""}on ${a}`:`${n} was ${f} on ${a}; nothing changed`;if(!m)return t==="block"?{tone:o?"success":"info",text:`${l}.`}:{tone:"info",text:`${l}. ${e.previewError?`Could not check whether it can serve: ${e.previewError}`:"Could not check whether it can serve."}`};const u=m.candidates.find(v=>pe(v.peerId,c));if(t==="block")return u!=null&&u.eligible?{tone:"warning",text:`${l}, but the route preview still lists it as eligible for ${i}. Reload and check the policy.`}:{tone:o?"success":"info",text:`${l}.`};if(!m.modelAllowed)return{tone:"warning",text:`${l}, but ${i} is not an allowed model here, so it still cannot serve it.`};if(!u)return{tone:"info",text:`${l}. It does not offer ${i} right now, so the preview cannot show its rank.`};if(!u.eligible){const v=u.reasons.length?u.reasons.join("; "):"another level excludes it";return{tone:"warning",text:`${l}, but it still cannot serve ${i} here: ${v}.`}}return t==="prefer"&&u.rank!==null&&u.rank>1?{tone:"warning",text:`${l}, but it ranks #${u.rank} for ${i}: a fallback chain on another level comes first.`}:{tone:o?"success":"info",text:`${l}.${u.rank?` It ranks #${u.rank} for ${i}.`:""}`}}function Ts(e,t,n,a){return e==="gateway"?{kind:e}:e==="workspace"||e==="workspace-org"?{kind:e,workspaceId:n}:t?e==="member"?{kind:e,memberId:t}:{kind:"key",keyId:t,workspaceId:n,layer:a?"admin":"owner"}:null}function Es(e){return e.canForce?"Not allowed above":e.tone==="warning"?"Check the result":"Done"}function Ds({fetching:e,error:t,ready:n,policy:a}){return e?s.jsx(be,{rows:1}):t?s.jsx(ee,{error:t,title:"Could not load this scope's policy"}):n?s.jsxs("p",{className:"gc-muted",children:["Current policy: ",es(a)]}):null}const me={allow:{title:"Allow seller",verb:"Allow"},block:{title:"Block seller",verb:"Block"},prefer:{title:"Prefer seller",verb:"Prefer"}};function Oe({peer:e,action:t,onClose:n,peers:a}){var te,ne,re,ae;const{viewer:o,workspace:i,me:m}=X(),c=fe(),g=Ke(),f=Ge(),l=we(o),u=ye(o),v=[...l?[{value:"gateway",label:"Gateway default (everyone)"}]:[],...l?[{value:"workspace-org",label:`${i.name}: organization policy`}]:[],...u?[{value:"workspace",label:`${i.name}: workspace policy`}]:[],...l?[{value:"member",label:"A member"}]:[],{value:"key",label:"An API key"}],[y,h]=p.useState(v[0].value),[r,b]=p.useState(""),[k,D]=p.useState(""),O=Ye(y==="member"),R=ve(c,y==="key");p.useEffect(()=>{b("")},[y]),p.useEffect(()=>{var d;D(((d=e==null?void 0:e.services[0])==null?void 0:d.service)??"")},[e]);const w=(R.data??[]).filter(d=>d.status==="active"&&(u||d.ownerMemberId===m.member.id)),j=Ts(y,r,i.id,u),[S,T]=p.useState(null);p.useEffect(()=>{T(null)},[y,r,e]);const B=Qe({queryKey:["routing","scope-policy",j],queryFn:()=>De(L,j),enabled:j!==null&&e!==null,staleTime:0}),z=j!==null&&B.isSuccess&&(t!=="prefer"||k!==""),I=B.data??null,ze=t==="allow"&&z&&!(I!=null&&I.allowedPeerIds)&&!(I!=null&&I.allowedPeerLists),Ue=t==="block"&&z&&e!==null&&We(I,e.peerId);let E=((te=v.find(d=>d.value===y))==null?void 0:te.label.replace(/^A[n]? /,"the "))??"this scope";y==="key"&&(E=`key “${((ne=w.find(d=>d.id===r))==null?void 0:ne.label)??r}”`),y==="member"&&(E=`member “${((ae=(re=O.data)==null?void 0:re.find(d=>d.id===r))==null?void 0:ae.label)??r}”`);const P=He({mutationFn:async(d={})=>{var ie;if(!e||!j)return null;const C=k||((ie=e.services[0])==null?void 0:ie.service)||"",{changed:G}=await As(L,j,t,e.peerId,k||void 0,d);let oe=null,le=null;if(C)try{oe=await L.network.routePreview(Ls(j,C,i.id))}catch(_e){le=Ze(_e)}return Ms({action:t,name:Q(a,e.peerId),scopeLabel:E,changed:G,model:C,preview:oe,peerId:e.peerId,previewError:le})},onSuccess:d=>{for(const C of Xe)g.invalidateQueries({queryKey:[C]});d&&(d.tone==="success"?(f(d.text),n()):T(d))},onError:d=>{const C=e?Q(a,e.peerId):"this seller";if(U(d,"narrowed"))T({tone:"warning",canForce:!0,text:`Nothing changed yet. The levels above ${E} do not allow ${C}, so saving this would not let it serve. ${Je(d.details).join(" ")}`.trim()});else if(U(d,"empty_allow_list")){const G=t==="block"?`Blocking ${C}`:`Allowing only ${C}`;T({tone:"warning",text:`Nothing changed. ${G} on ${E} would leave no seller that the levels above allow, so requests would fail. Change the policy on the Routing page if you really want that.`})}}}),K=e?Q(a,e.peerId):"";return s.jsx(Z,{isOpen:e!==null,onClose:n,title:me[t].title,subtitle:K,children:s.jsxs("div",{className:"gc-stack",children:[s.jsx(A,{label:"Apply to",value:y,onChange:d=>h(d),options:v}),y==="member"&&s.jsx(A,{label:"Member",value:r,onChange:b,options:[{value:"",label:"Choose a member"},...(O.data??[]).filter(d=>d.status!=="disabled").map(d=>({value:d.id,label:d.label}))]}),y==="key"&&s.jsx(A,{label:"Key",value:r,onChange:b,options:[{value:"",label:w.length?"Choose a key":"No keys you can edit"},...w.map(d=>({value:d.id,label:d.label}))]}),t==="prefer"&&e&&s.jsx(A,{label:"For model",value:k,onChange:D,options:e.services.map(d=>({value:d.service,label:d.service})),hint:"The seller goes first in this model's fallback chain."}),s.jsx(Ds,{fetching:B.isFetching,error:B.error,ready:z,policy:I}),ze&&s.jsxs(Y,{tone:"warning",children:["This scope has no allow list yet. Allowing ",K," creates one, so only allowed sellers can serve it."]}),Ue&&s.jsxs(Y,{tone:"warning",title:"This is the only allowed seller",children:["Blocking ",K," empties this scope's allow list, so the allow list is removed: any seller that is not blocked may serve it again."]}),t==="block"&&s.jsx("p",{className:"gc-muted",children:"Blocked sellers never serve this scope or anything under it."}),y==="key"&&!u&&s.jsx("p",{className:"gc-muted",children:"This changes your own restrictions on the key. Restrictions a workspace admin set still apply."}),P.error&&!U(P.error,"narrowed")&&!U(P.error,"empty_allow_list")?s.jsx(ee,{error:P.error,title:"Could not update the policy"}):null,S?s.jsxs(s.Fragment,{children:[s.jsx(Y,{tone:S.tone,title:Es(S),children:S.text}),s.jsxs("div",{className:"gc-actions",children:[S.canForce&&s.jsx(x,{variant:"ghost",disabled:P.isPending,onClick:()=>{T(null),P.mutate({acceptNarrowed:!0})},children:"Save it anyway"}),s.jsx(x,{onClick:n,children:S.canForce?"Cancel":"Done"})]})]}):s.jsxs("div",{className:"gc-actions",children:[s.jsx(x,{variant:"ghost",onClick:n,children:"Cancel"}),s.jsx(x,{variant:t==="block"?"danger":"primary",disabled:!z||P.isPending,onClick:()=>P.mutate({}),children:P.isPending?"Saving…":me[t].verb})]})]})})}function Os({initial:e,peers:t,onDone:n}){const[a,o]=p.useState((e==null?void 0:e.name)??""),[i,m]=p.useState((e==null?void 0:e.description)??""),[c,g]=p.useState((e==null?void 0:e.peerIds)??[]),f=xe({mutationFn:()=>{const l={name:a.trim(),description:i.trim()||null,peerIds:c};return e?L.network.updatePeerList(e.id,l):L.network.createPeerList(l)},onSuccess:n,invalidate:[ke.peerLists]});return s.jsxs("form",{className:"gc-stack",onSubmit:l=>{l.preventDefault(),f.mutate()},children:[s.jsx(q,{label:"Name",required:!0,placeholder:"e.g. Our own sellers",value:a,onChange:l=>o(l.target.value)}),s.jsx(q,{label:"Description",value:i,onChange:l=>m(l.target.value)}),s.jsx(xs,{label:"Sellers",value:c,onChange:g,peers:t}),s.jsx("p",{className:"gc-fineprint",children:"Policies refer to a list by name, so editing it changes every policy that uses it."}),f.error?s.jsx(ee,{error:f.error,title:"Could not save the list"}):null,s.jsxs("div",{className:"gc-actions",children:[s.jsx(x,{variant:"ghost",onClick:n,children:"Cancel"}),s.jsx(x,{type:"submit",disabled:f.isPending||!a.trim(),children:f.isPending?"Saving…":"Save list"})]})]})}function Rs({peers:e}){const{viewer:t}=X(),n=we(t),a=ss(),[o,i]=p.useState(null),[m,c]=p.useState(null),g=xe({mutationFn:f=>L.network.removePeerList(f.id),onSuccess:()=>c(null),invalidate:[ke.peerLists]});return s.jsxs(je,{flush:!0,title:"Peer lists",description:"Named groups of sellers to allow or block in one step.",actions:n&&s.jsx(x,{size:"sm",variant:"outline",leadingIcon:s.jsx(_.plus,{size:14}),onClick:()=>i("new"),children:"New list"}),children:[s.jsx(Pe,{query:a,children:f=>s.jsx(Le,{label:"Peer lists",rows:f,rowKey:l=>l.id,rowLabel:l=>l.name,actions:l=>n?[{label:"Edit",onSelect:()=>i(l)},{label:"Delete",tone:"danger",onSelect:()=>c(l)}]:[],empty:s.jsx(J,{icon:s.jsx(_.network,{size:18}),title:"No peer lists",body:"Group sellers you trust, or ones you run yourself."}),columns:[{key:"name",header:"Name",render:l=>s.jsx("span",{className:"gc-strong",children:l.name})},{key:"desc",header:"Description",secondary:!0,render:l=>s.jsx("span",{className:"gc-muted",children:l.description??"—"})},{key:"count",header:"Sellers",align:"right",render:l=>l.peerIds.length}]})}),s.jsx(Z,{isOpen:o!==null,onClose:()=>i(null),title:o==="new"?"New peer list":"Edit peer list",size:"lg",children:o!==null&&s.jsx(Os,{initial:o==="new"?null:o,peers:e,onDone:()=>i(null)})}),s.jsx(ts,{isOpen:m!==null,busy:g.isPending,error:g.error,onClose:()=>c(null),onConfirm:()=>m&&g.mutate(m),title:"Delete this list?",confirmLabel:"Delete",body:"Policies refer to lists by reference: once deleted, the list adds no sellers to them. An allow list made only of deleted lists lets no seller serve."})]})}function Re(e,t){return t?e.services.filter(n=>n.service===t):e.services}function V(e,t,n=""){const a=Re(e,n).map(o=>o[t]).filter(o=>o!==null);return a.length?{min:Math.min(...a),max:Math.max(...a)}:null}function Bs(e,t=""){var n;return((n=V(e,"inputUsdPerMillion",t))==null?void 0:n.min)??null}function zs(e,t=""){var n;return((n=V(e,"outputUsdPerMillion",t))==null?void 0:n.min)??null}function se(e,t=""){return Re(e,t).some(n=>n.inputUsdPerMillion===0&&(n.outputUsdPerMillion??0)===0)}function Us(e,t){const n=t.search.trim().toLowerCase();return e.filter(a=>{var o;return!(n&&!a.peerId.toLowerCase().includes(n)&&!(a.displayName??"").toLowerCase().includes(n)&&!a.services.some(i=>i.service.toLowerCase().includes(n))||t.model&&!a.services.some(i=>i.service===t.model)||t.tee&&!a.tee||t.linked&&!((o=a.verificationLinks)!=null&&o.length)||t.free&&!se(a,t.model))})}const Be={"openai-chat-completions":"Chat completions","openai-responses":"Responses","anthropic-messages":"Messages","openai-images":"Images"};function he(e){return e===null?"—":String(Math.round(e))}function H(e){return e.displayName??F(e.peerId,8,4)}function M(e){return`${e.provider}:${e.service}`}function _s({peer:e}){const t=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("span",{className:"gc-seller__meta",children:[s.jsxs("span",{className:"gc-peer-id",children:[s.jsx(Ce,{title:e.peerId,children:F(e.peerId,6,4)}),s.jsx(Se,{iconOnly:!0,value:e.peerId,label:"Copy peer id"})]}),s.jsx(Fe,{links:e.verificationLinks}),e.tee&&s.jsx(N,{tone:"info",children:"TEE"}),se(e,"")&&s.jsx(N,{tone:"success",children:"Free"}),e.washFlagged&&s.jsx(N,{tone:"danger",children:"Flagged"}),t&&s.jsx(N,{tone:"warning",children:"Cooling down"}),s.jsxs("span",{className:"gc-muted",children:["Last seen ",ns(e.lastSeen)]})]})}function qs({peer:e,showReputation:t}){const n=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("div",{className:"gc-grid gc-grid--2 gc-figures gc-panel-figures",children:[s.jsx($,{label:"Trust score",value:he(e.trustScore)}),t&&s.jsx($,{label:"Reputation",value:he(e.reputationScore)}),s.jsx($,{label:"Stake",value:e.stakeAnts?Cs(e.stakeAnts):"—"}),s.jsx($,{label:"Network usage share",value:e.usageShareBps===null?"—":`${(e.usageShareBps/100).toFixed(2)}%`}),s.jsx($,{label:"Latency p50 (this gateway)",value:Ie(e.latencyMsP50)}),s.jsx($,{label:"Requests, 24h (this gateway)",value:Ne(e.requests24h)}),s.jsx($,{label:"Failure streak",value:n?`${e.health.failureStreak}, cooling down until ${rs(e.health.coolingDownUntil)}`:String(e.health.failureStreak)})]})}function Vs({peer:e,selected:t,onSelect:n}){const[a,o]=p.useState(""),i=a.trim().toLowerCase(),m=e.services.filter(c=>!i||c.service.toLowerCase().includes(i));return s.jsx(Me,{title:`Models (${e.services.length})`,actions:e.services.length>6&&s.jsx(q,{size:"sm",type:"search","aria-label":"Search this provider's models",placeholder:"Search models",value:a,onChange:c=>o(c.target.value)}),children:m.length===0?s.jsx("p",{className:"gc-fineprint",children:i?"No models match.":"This provider lists no models."}):s.jsx("ul",{className:"gc-panel-rows","aria-label":"Models and prices",children:m.map(c=>{const g=t!==null&&M(t)===M(c);return s.jsx(ks,{selected:g,title:s.jsx("span",{className:"gc-strong",children:c.service}),meta:s.jsxs(s.Fragment,{children:[s.jsx("span",{children:js(c)}),s.jsx("span",{children:Be[Ae(c)]})]}),actions:s.jsxs(s.Fragment,{children:[s.jsx(Se,{iconOnly:!0,value:$e(e.peerId,c.service),label:`Copy ${c.service} pinned to this provider (peer@model)`}),s.jsx(x,{size:"sm",variant:g?"outline":"ghost","aria-pressed":g,title:"Show the API call for this model",onClick:()=>n(c),children:"API call"})]})},M(c))})})})}function Ks({peer:e,service:t,onSelect:n}){var R;const{workspace:a,viewer:o}=X(),i=fe(),m=as(),c=ve(i),g=os(a.id),[f,l]=p.useState("curl"),[u,v]=p.useState(!1),y=Ae(t),h=$e(e.peerId,t.service),r=((R=g.data)==null?void 0:R.find(w=>w.model===h))??null,b=ls(m,e.peerId,t.service,y,r?`@preset/${r.slug}`:null),k=b.find(w=>w.id===f)??b[0],D=(c.data??[]).some(w=>w.status==="active"),O=ye(o);return s.jsxs(Me,{title:"API call",actions:e.services.length>1&&s.jsx(A,{size:"sm","aria-label":"Model",value:M(t),onChange:w=>{const j=e.services.find(S=>M(S)===w);j&&n(j)},options:e.services.map(w=>({value:M(w),label:w.service}))}),children:[s.jsxs("p",{className:"gc-fineprint",children:["Pinned to this provider with ",s.jsx("code",{children:F(h,10,12)}),"."]}),s.jsx(Is,{id:"gc-connect",label:"Ways to connect",value:k.id,onChange:l,className:"gc-connect-tabs",tabs:b.map(w=>({id:w.id,label:w.label}))}),s.jsxs(Ns,{tabsId:"gc-connect",tab:k.id,className:"gc-stack",children:[k.id==="codex"&&s.jsxs("div",{className:"gc-summary-row",children:[s.jsx("p",{className:"gc-fineprint gc-summary-row__text",children:r?s.jsxs(s.Fragment,{children:["Uses the preset ",s.jsxs("code",{children:["@preset/",r.slug]})," for this model. Codex needs a preset: with a raw GPT model name it switches to a tool format some sellers drop."]}):s.jsx(s.Fragment,{children:"Codex needs a preset, not a raw model name: with a GPT model name it switches to a tool format some sellers drop. Create one for this model, then use its slug."})}),!r&&O&&s.jsx(x,{size:"sm",variant:"outline",onClick:()=>v(!0),children:"Create preset for this model"})]}),k.id==="claude-code"&&y!=="anthropic-messages"&&s.jsxs("p",{className:"gc-fineprint",children:["This model speaks ",Be[y],"; the gateway translates Claude Code's requests for it."]}),s.jsx(is,{code:k.code,label:`${t.service} · ${k.label}`})]}),s.jsxs("p",{className:"gc-fineprint",children:["Set ",s.jsx("code",{children:cs})," to one of your API keys first."," ",c.data&&!D&&s.jsx(ds,{to:"keys",children:"Create an API key"})]}),s.jsx(Z,{isOpen:u,onClose:()=>v(!1),size:"lg",title:"New preset",children:u&&s.jsx(Ss,{initial:null,prefill:{name:t.service,model:h},onDone:w=>{v(!1),w&&l("codex")}})})]})}function Gs({peer:e,peers:t,showReputation:n}){const[a,o]=p.useState(null),[i,m]=p.useState(null),c=p.useRef(null),g=i??e.services[0]??null,f=l=>{var u;m(l),(u=c.current)==null||u.scrollIntoView({behavior:"smooth",block:"start"})};return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"gc-stack",children:[s.jsx(_s,{peer:e}),s.jsxs("div",{className:"gc-panel-actions",children:[s.jsx(x,{size:"sm",variant:"outline",onClick:()=>o("allow"),children:"Allow"}),s.jsx(x,{size:"sm",variant:"outline",onClick:()=>o("prefer"),children:"Prefer"}),s.jsx(x,{size:"sm",variant:"danger",onClick:()=>o("block"),children:"Block"})]}),s.jsx(qs,{peer:e,showReputation:n})]}),s.jsx(Vs,{peer:e,selected:g,onSelect:f}),g&&s.jsx("div",{ref:c,className:"gc-scroll-target",children:s.jsx(Ks,{peer:e,service:g,onSelect:m})}),a&&s.jsx(Oe,{peer:e,action:a,peers:t,onClose:()=>o(null)})]})}function ge(e){return e===null?"—":String(Math.round(e))}function Ys({peer:e,model:t}){const n=(e.health.coolingDownUntil??0)>Date.now();return s.jsxs("div",{className:"gc-badges",children:[e.tee&&s.jsx(N,{tone:"info",children:"TEE"}),se(e,t)&&s.jsx(N,{tone:"success",children:"Free"}),e.washFlagged&&s.jsx(N,{tone:"danger",children:"Flagged"}),n&&s.jsx(N,{tone:"warning",children:"Cooling down"})]})}function ct(){const e=us(),t=ms(e.rest),n=hs(),a=p.useMemo(()=>{var h;return t?((h=n.data)==null?void 0:h.find(r=>pe(r.peerId,t)))??null:null},[n.data,t]),[o,i]=p.useState({search:"",model:"",tee:!1,linked:!1,free:!1}),[m,c]=p.useState(null),g=p.useMemo(()=>gs(n.data),[n.data]),f=ps(n.data),l=fs(),u=(h,r)=>i(b=>({...b,[h]:r})),v=t===null?null:{eyebrow:"Provider",title:a?H(a):F(t,8,6),body:n.isLoading?s.jsx(be,{rows:6}):a?s.jsx(Gs,{peer:a,peers:n.data,showReputation:f},a.peerId):s.jsx(J,{icon:s.jsx(_.providers,{size:18}),title:"Provider not found",body:`This gateway does not see ${F(t,8,6)} right now.`})},y=s.jsxs("div",{className:"gc-page",children:[s.jsx(je,{flush:!0,children:s.jsx(Pe,{query:n,rows:8,children:h=>s.jsx(Le,{label:"Providers",rows:Us(h,o),rowKey:r=>r.peerId,selectedKey:(a==null?void 0:a.peerId)??null,onRowClick:r=>de(vs("providers",r.peerId)),rowLabel:r=>H(r),actions:r=>[o.model!==""&&ys(l,r.peerId,o.model),{label:"Allow…",onSelect:()=>c({peer:r,kind:"allow"})},{label:"Prefer…",onSelect:()=>c({peer:r,kind:"prefer"})},{label:"Block…",tone:"danger",onSelect:()=>c({peer:r,kind:"block"})}],initialSort:{key:"trust",direction:"desc"},empty:s.jsx(J,{icon:s.jsx(_.providers,{size:18}),title:h.length?"No providers match these filters":"No providers found yet",body:h.length?void 0:"The buyer is still discovering the network. Check back in a minute."}),columns:[{key:"name",header:"Provider",sortValue:r=>r.displayName??r.peerId,render:r=>s.jsxs("div",{className:"gc-cell-lines",children:[s.jsx("div",{className:"gc-strong gc-ellipsis",title:r.displayName??r.peerId,children:H(r)}),r.displayName&&s.jsx("div",{className:"gc-muted gc-ellipsis",children:s.jsx(Ce,{title:r.peerId,children:F(r.peerId,6,4)})}),s.jsx(Ys,{peer:r,model:o.model})]}),after:r=>s.jsx(ws,{value:r.peerId,label:`Copy peer id ${r.peerId}`})},{key:"identity",header:"Domain / GitHub",secondary:!0,render:r=>{var b;return(b=r.verificationLinks)!=null&&b.length?s.jsx(Fe,{links:r.verificationLinks}):s.jsx("span",{className:"gc-muted",children:"—"})}},{key:"models",header:"Models",secondary:!0,optional:!0,render:r=>s.jsx("span",{className:"gc-muted",children:r.services.length})},{key:"input",header:"Input $/M",align:"right",sortValue:r=>Bs(r,o.model),render:r=>ce(V(r,"inputUsdPerMillion",o.model))},{key:"output",header:"Output $/M",align:"right",secondary:!0,sortValue:r=>zs(r,o.model),render:r=>ce(V(r,"outputUsdPerMillion",o.model))},{key:"trust",header:"Trust",align:"right",sortValue:r=>r.trustScore,render:r=>ge(r.trustScore)},...f?[{key:"reputation",header:"Reputation",align:"right",secondary:!0,optional:!0,sortValue:r=>r.reputationScore,render:r=>ge(r.reputationScore)}]:[],{key:"latency",header:"Latency",align:"right",secondary:!0,optional:!0,sortValue:r=>r.latencyMsP50,render:r=>Ie(r.latencyMsP50)},{key:"usage",header:"Your 24h",align:"right",secondary:!0,sortValue:r=>r.requests24h,render:r=>Ne(r.requests24h)}]})})}),s.jsx(Rs,{peers:n.data})]});return s.jsxs("div",{className:"gc-page",children:[s.jsx(bs,{title:"Providers",description:"Providers on the network this gateway can route to. Open one to copy its models and an API call, or allow, block or prefer it for any scope."}),s.jsxs("div",{className:"gc-toolbar",children:[s.jsx(q,{size:"sm",type:"search","aria-label":"Search providers",placeholder:"Search name, peer id or model",value:o.search,onChange:h=>u("search",h.target.value)}),s.jsx(A,{size:"sm","aria-label":"Filter by model",value:o.model,onChange:h=>u("model",h),options:[{value:"",label:"All models"},...g.map(h=>({value:h,label:h}))]}),s.jsx(W,{checked:o.linked,onChange:h=>u("linked",h),label:"Domain or GitHub"}),s.jsx(W,{checked:o.tee,onChange:h=>u("tee",h),label:"TEE"}),s.jsx(W,{checked:o.free,onChange:h=>u("free",h),label:"Free"})]}),s.jsx(Ps,{list:y,panel:v,onClose:()=>de("providers"),closeLabel:"Close provider"}),m&&s.jsx(Oe,{peer:m.peer,action:m.kind,peers:n.data,onClose:()=>c(null)})]})}export{ct as default};
@@ -0,0 +1 @@
1
+ import{r as R,j as e,L as p,n as x,X as y,M as d,v as I,ab as u,g as o,E as L,I as P,B as v,U as S,e as f,q as j,t as l,f as T,d as C,Y as M,ac as w,V as A,W as D}from"./index-BC-1LZkB.js";import{u as E}from"./useInfiniteQuery-CgC_8jUi.js";import{f as q}from"./usage-kR1h5urb.js";import{D as F}from"./DataTable-Cizb1YVv.js";const K=50;function c(r){return r===null?e.jsx(l,{tone:"info",children:"In flight"}):r<400?e.jsx(l,{tone:"success",children:r}):r<500?e.jsx(l,{tone:"warning",children:r}):e.jsx(l,{tone:"danger",children:r})}function k({entry:r}){const n=q(r,Date.now());return n==="free"?e.jsx("span",{className:"gc-muted",title:"Served by a free seller: $0",children:"Free"}):n==="pending"?e.jsx("span",{className:"gc-muted",title:"The buyer reports spend a moment after the response",children:"pending"}):n==="not-recorded"?e.jsx("span",{className:"gc-muted",title:"No spend was reported for this request: the buyer lost it",children:"not recorded"}):e.jsx(e.Fragment,{children:T(r.spent)})}function O(r){try{return JSON.stringify(JSON.parse(r),null,2)}catch{return r}}function m({title:r,body:n}){return e.jsxs("div",{className:"gc-stack gc-stack--tight",children:[e.jsx("div",{className:"as-field__label",children:r}),e.jsx(D,{code:O(n)})]})}function $({detail:r}){return!r.requestBody&&!r.responseBody?e.jsx("p",{className:"gc-fineprint",children:"Bodies are not stored for this request. Turn on content logging under Settings → Observability to keep them."}):e.jsxs(e.Fragment,{children:[r.requestBody&&e.jsx(m,{title:"Request body",body:r.requestBody}),r.responseBody&&e.jsx(m,{title:"Response body",body:r.responseBody})]})}function U({entry:r}){const n=C({queryKey:j.request(r.tag),queryFn:()=>f.usage.request(r.tag),retry:!1,staleTime:6e4}),t=n.data??r,i=M(n.error)&&n.error.status===404;return e.jsxs(e.Fragment,{children:[t.errorCode||t.errorMessage?e.jsx(w,{tone:"danger",title:t.errorCode??"Request failed",children:t.errorMessage??"No message was returned."}):null,e.jsx(A,{items:[["Status",c(t.status)],["Request",e.jsxs(d,{children:[t.method," ",t.path]},"p")],["Model",t.model??"—"],["Key",t.keyLabel],["End user",t.endUser??"—"],["Seller",t.sellerPeerId?e.jsx(d,{children:t.sellerPeerId},"s"):"—"],["Latency",u(t.latencyMs)],["Duration",t.finishedAt?u(t.finishedAt-t.startedAt):"—"],["Input tokens",o(t.inputTokens)],["Cached input",o(t.cachedInputTokens)],["Output tokens",o(t.outputTokens)],["Cost",e.jsx(k,{entry:t},"c")],["Tag",e.jsx(d,{children:t.tag},"t")]]}),n.isLoading&&e.jsx(p,{rows:2}),n.error&&!i?e.jsx(x,{error:n.error,title:"Could not load the bodies"}):null,n.data&&e.jsx($,{detail:n.data})]})}function V({filter:r,showKey:n=!0}){var g;const[t,i]=R.useState(null),a=E({queryKey:j.requests(r),queryFn:({pageParam:s})=>f.usage.requests({...r,before:s??void 0,limit:K}),initialPageParam:null,getNextPageParam:s=>s.nextBefore,refetchInterval:s=>{var h;return(h=s.state.data)!=null&&h.pages.some(N=>N.requests.some(B=>q(B,Date.now())==="pending"))?5e3:!1}});if(a.isLoading)return e.jsx(p,{rows:8});if(a.error)return e.jsx(x,{error:a.error,onRetry:()=>void a.refetch()});const b=((g=a.data)==null?void 0:g.pages.flatMap(s=>s.requests))??[];return e.jsxs(e.Fragment,{children:[e.jsx(F,{label:"Request log",rows:b,rowKey:s=>s.tag,onRowClick:i,rowLabel:s=>`request ${s.tag}`,empty:e.jsx(L,{icon:e.jsx(P.logs,{size:18}),title:"No requests found",body:"Requests appear here as soon as a key is used. Check the filters if you expected some."}),columns:[{key:"time",header:"Time",render:s=>e.jsx("span",{className:"gc-nowrap",children:y(s.startedAt)})},...n?[{key:"key",header:"Key",secondary:!0,render:s=>s.keyLabel}]:[],{key:"model",header:"Model",render:s=>e.jsxs("span",{className:"gc-ellipsis",children:[s.model??s.path,s.status!==null&&s.status>=400?e.jsxs("span",{className:"gc-narrow-only",children:[" ",c(s.status)]}):null]})},{key:"seller",header:"Seller",secondary:!0,optional:!0,render:s=>s.sellerPeerId?e.jsx(d,{title:s.sellerPeerId,children:I(s.sellerPeerId)}):"—"},{key:"status",header:"Status",secondary:!0,render:s=>e.jsx("span",{title:s.errorMessage??void 0,children:c(s.status)})},{key:"latency",header:"Latency",align:"right",secondary:!0,optional:!0,render:s=>u(s.latencyMs)},{key:"tokens",header:"Tokens",align:"right",secondary:!0,render:s=>`${o(s.inputTokens)} → ${o(s.outputTokens)}`},{key:"cost",header:"Cost",align:"right",render:s=>e.jsx(k,{entry:s})}]}),a.hasNextPage&&e.jsx("div",{className:"gc-load-more",children:e.jsx(v,{variant:"outline",size:"sm",disabled:a.isFetchingNextPage,onClick:()=>void a.fetchNextPage(),children:a.isFetchingNextPage?"Loading…":"Load older requests"})}),e.jsx(S,{isOpen:t!==null,onClose:()=>i(null),title:(t==null?void 0:t.model)??"Request",subtitle:t?y(t.startedAt):void 0,eyebrow:"Request",children:t&&e.jsx(U,{entry:t},t.tag)})]})}export{V as R};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RewardsClaim-BvXAMTsl.js","assets/index-BC-1LZkB.js","assets/index-CTBUSmCv.css","assets/ants-B38m9Phv.js","assets/useTx-VVmPNn5M.js","assets/en_US-Y4ZOVFV4-Dx46mx69.js","assets/clsx-B-dksMZM.js","assets/index-DX_0N6eB.js","assets/index-BwpQbdIU.js","assets/en_US-Y4ZOVFV4-CcVPgXVa.css","assets/ConnectWallet-BgR8VSGh.js","assets/OperatorGateAlert-YOWZD4vB.js"])))=>i.map(i=>d[i]);
2
+ import{u as v,D as b,F as k,d as N,q as m,G as S,H as R,r as c,j as e,P as z,Q as _,J as q,S as l,K as o,M as E,v as d,k as g,N as F,B as P,A as T,L as D,t as w,E as I,I as Q,_ as K,e as L}from"./index-BC-1LZkB.js";import{C as O}from"./ChainGate-DByG6cpi.js";import{f as r,a as $}from"./ants-B38m9Phv.js";import{D as B}from"./DataTable-Cizb1YVv.js";import"./index-DX_0N6eB.js";const H=c.lazy(()=>K(()=>import("./RewardsClaim-BvXAMTsl.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])));function W(){const{workspace:t}=v(),x=b(),y=k(),j=N({queryKey:m.rewards(t.id),queryFn:()=>L.wallet.rewards(t.id)}),h=S(),p=R(t.id),[C,i]=c.useState(!1);return e.jsxs("div",{className:"gc-page",children:[e.jsx(z,{title:"Rewards",description:"ANTS earned by this workspace's usage. Claimed ANTS go to the authorized wallet."}),e.jsx(_,{query:j,rows:3,children:n=>{var u;const A=p.data?p.data.operator:n.operator,a={...n,operator:A};return e.jsxs(e.Fragment,{children:[e.jsx(q,{stale:n.stale}),e.jsxs("div",{className:"gc-grid gc-grid--3",children:[e.jsx(l,{label:"Ready to claim",value:r(a.pendingAnts)}),e.jsx(l,{label:"From the legacy program",value:r(((u=a.legacy)==null?void 0:u.pendingAnts)??"0"),sub:a.legacy?"Claimed together with the rest":void 0}),e.jsx(l,{label:"Authorized wallet",value:o(a.operator)?e.jsx(E,{title:a.operator,children:d(a.operator)}):"Not set"})]}),e.jsx(g,{children:e.jsxs("div",{className:"gc-summary-row",children:[e.jsxs("div",{className:"gc-summary-row__text",children:[e.jsx("span",{className:"gc-strong",children:$(a.pendingAnts)?`${r(a.pendingAnts)} ready to claim`:"Nothing to claim yet"}),e.jsx("span",{className:"gc-fineprint",children:o(a.operator)?e.jsxs(e.Fragment,{children:["Claimed ANTS go to the authorized wallet ",d(a.operator),", which signs the claim."]}):e.jsxs(e.Fragment,{children:["Only the authorized wallet can claim, and none is set. Authorize one on ",e.jsx(F,{to:"wallet",children:"Wallet & Funding"}),"."]})})]}),e.jsx(P,{size:"sm",variant:"outline",disabled:!o(a.operator),onClick:()=>i(!0),children:"Claim rewards"})]})}),e.jsx(T,{isOpen:C,onClose:()=>i(!1),title:"Claim rewards",subtitle:`${r(a.pendingAnts)} ready. Sent to the authorized wallet${o(a.operator)?` ${d(a.operator)}`:""}.`,children:e.jsx(O,{chain:h.data,error:h.error,children:s=>e.jsx(c.Suspense,{fallback:e.jsx(D,{rows:2}),children:e.jsx(H,{rewards:a,chain:s,onDone:()=>{y("Rewards claimed"),i(!1),x.invalidateQueries({queryKey:m.rewards(t.id)})}})})})}),e.jsx(g,{flush:!0,title:"Current program by epoch",description:"Rewards accrue at each epoch boundary from this workspace's paid usage.",children:e.jsx(B,{label:"Reward epochs",rows:[...a.epochs].sort((s,f)=>f.epoch-s.epoch),rowKey:s=>String(s.epoch),empty:e.jsx(I,{icon:e.jsx(Q.rewards,{size:18}),title:"No rewards yet",body:"Rewards accrue per epoch as this workspace's keys are used."}),columns:[{key:"epoch",header:"Epoch",render:s=>s.epoch},{key:"amount",header:"Amount",align:"right",render:s=>r(s.pendingAnts)},{key:"state",header:"Status",render:s=>s.claimed?e.jsx(w,{tone:"success",children:"Claimed"}):e.jsx(w,{tone:"warning",children:"Unclaimed"})}]})})]})}})]})}export{W as default};
@@ -0,0 +1 @@
1
+ import{j as e,u as R,H as B,aj as N,ak as E,ac as b,al as k,v as w,B as v}from"./index-BC-1LZkB.js";import{a as I}from"./ants-B38m9Phv.js";import{u as O,a as S,T,U as x,s as C,L as j}from"./useTx-VVmPNn5M.js";import{a as _}from"./ConnectWallet-BgR8VSGh.js";import{O as W}from"./OperatorGateAlert-YOWZD4vB.js";import{W as G,u as L,c as P}from"./en_US-Y4ZOVFV4-Dx46mx69.js";import"./clsx-B-dksMZM.js";import"./index-DX_0N6eB.js";import"./index-BwpQbdIU.js";function U(a,s){return a?"Claiming…":s===0?"Nothing to claim":s===1?"Claim":`Claim (${s} transactions)`}function Y({rewards:a,chain:s,onDone:A}){const{address:r}=L(),u=P(),{workspace:h}=R(),p=B(h.id),{refresh:y}=N(h.id),i=O(s.chainId),{writeContractAsync:g}=S(),d=E(s,"usageRewards"),f=a.epochs.filter(t=>!t.claimed&&I(t.pendingAnts)),o=a.legacy&&I(a.legacy.pendingAnts)?a.legacy:null,l=f.length+(o?1:0);if(!d)return e.jsx(b,{tone:"warning",children:"The gateway did not report the usage rewards contract address."});const m=k(p.data,r,"claim rewards");return m.ok?e.jsxs("div",{className:"gc-stack",children:[e.jsxs("p",{className:"gc-fineprint",children:["The ANTS go to ",w(m.operator),", the connected authorized wallet."]}),e.jsx(T,{chain:s,runner:i,done:"Rewards claimed."}),e.jsx(v,{disabled:i.running||l===0,onClick:async()=>{const t=f.map(n=>{const c=[a.address,BigInt(n.epoch)];return{label:`Claim epoch ${n.epoch}`,check:()=>C(u,{account:r,address:d,abi:x,functionName:"claimBuyerReward",args:c,chainId:s.chainId}),send:()=>g({address:d,abi:x,functionName:"claimBuyerReward",args:c,chainId:s.chainId})}});if(o){const n=[a.address,o.epochs.map(BigInt)],c=o.contract;t.push({label:"Claim legacy emissions",check:()=>C(u,{account:r,address:c,abi:j,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId}),send:()=>g({address:c,abi:j,functionName:"claimBuyerEmissions",args:n,chainId:s.chainId})})}await i.run(t,{onStale:()=>void y().catch(()=>{})})&&A()},children:U(i.running,l)}),l>1&&e.jsx("p",{className:"gc-fineprint",children:"Each current-program epoch is its own transaction; legacy emissions are one more."})]}):e.jsx(W,{gate:m,state:p.data,connected:r})}function V(a){return e.jsx(G,{chain:a.chain,children:e.jsxs("div",{className:"gc-stack",children:[e.jsx(_,{}),e.jsx(Y,{...a})]})})}export{V as default};
@@ -0,0 +1 @@
1
+ import{u as C,a as se,b2 as O,b3 as ae,m as D,r as u,b as te,c as re,b4 as ie,d as ne,j as e,k as K,T as le,B as b,L as $,n as z,aY as oe,ac as q,z as N,t as A,b5 as G,E as ce,b6 as de,e as T,q as W,P as ue,b7 as pe,b8 as ge,D as V,b9 as H,aK as ye,ba as X,bb as M,bc as _,bd as Q,i as me,F as he,be as R,bf as we,bg as fe,aM as ve,A as xe}from"./index-BC-1LZkB.js";import{b as Z,a as je,d as be}from"./PolicyField-B7_URv8N.js";import{p as Y,P as ke}from"./PolicyEditor-CxJuR6mU.js";import{S as U}from"./SelectField-BCIB_aud.js";import{D as Pe}from"./DataTable-Cizb1YVv.js";import{T as Se,a as Ne}from"./Tabs-dykHKE0J.js";import"./Segmented-DfgcyK0R.js";import"./roving-DkptacxO.js";import"./Switch-GA0Kao4V.js";import"./Disclosure-Ygp-7rwy.js";import"./index-DX_0N6eB.js";function P({level:a,children:t,result:i}){return e.jsxs("div",{className:i?"gc-source gc-source--result":"gc-source",children:[e.jsx("div",{className:"gc-source__level",children:a}),e.jsx("div",{className:"gc-source__policy",children:t})]})}function Ce(a,t,i,n){return a==="key"?(t??[]).filter(r=>r.status==="active").map(r=>({value:r.id,label:r.label})):a==="member"?(i??[]).map(({member:r})=>({value:r.id,label:r.label})):a==="preset"?(n??[]).map(r=>({value:r.slug,label:r.name})):[]}function Le(){const{workspace:a,viewer:t}=C(),i=se(),n=O(),r=ae(n.data),p=D(t),[s,c]=u.useState("workspace"),[l,g]=u.useState(""),[y,w]=u.useState(""),[f,v]=u.useState(null),m=te(i,s==="key"),d=re(a.id,s==="member"),L=ie(a.id,s==="preset"),h=ne({queryKey:W.routePreview(f??{}),queryFn:()=>T.network.routePreview(f),enabled:f!==null}),j=Ce(s,m.data,d.data,L.data);function x(){const o={model:y.trim(),workspace:a.id};s!=="workspace"&&l&&(o[s]=l),v(o)}return e.jsxs(K,{title:"Route preview",description:"See which sellers a request would go to, and why.",children:[e.jsxs("form",{className:"gc-toolbar",onSubmit:o=>{o.preventDefault(),x()},children:[e.jsx(U,{size:"sm","aria-label":"Preview for",value:s,onChange:o=>{c(o),g("")},options:[{value:"workspace",label:`Workspace: ${a.name}`},{value:"key",label:"A key"},...p?[{value:"member",label:"A member"}]:[],{value:"preset",label:"A preset"}]}),s!=="workspace"&&e.jsx(U,{size:"sm","aria-label":`Choose a ${s}`,value:l,onChange:g,options:[{value:"",label:`Choose a ${s}`},...j]}),e.jsx(le,{size:"sm","aria-label":"Model",placeholder:"Model id",list:"gc-preview-models",value:y,onChange:o=>w(o.target.value)}),e.jsx("datalist",{id:"gc-preview-models",children:r.map(o=>e.jsx("option",{value:o},o))}),e.jsx(b,{type:"submit",size:"sm",disabled:!y.trim()||s!=="workspace"&&!l,children:"Preview"})]}),h.isFetching&&e.jsx($,{rows:4}),h.error?e.jsx(z,{error:h.error}):null,h.data&&!h.isFetching&&e.jsx(Re,{preview:h.data})]})}const Ee={buyer:"Buyer",gateway:"Gateway","workspace-org":"Workspace (org policy)",workspace:"Workspace",member:"Member",key:"Key (admin)","key-owner":"Key (owner)",preset:"Preset"};function Me(a){return a.policy!==null?N(a.policy):e.jsx("span",{className:"gc-muted",children:a.level==="buyer"?"No hard limits":"Inherits"})}function Re({preview:a}){const{me:t}=C(),i=O(),n=oe(),r=a.candidates.filter(s=>s.eligible).length,p=s=>{var c;return s.id?s.level==="workspace"||s.level==="workspace-org"?((c=t.workspaces.find(l=>l.workspace.id===s.id))==null?void 0:c.workspace.name)??s.id:s.id:null};return e.jsxs("div",{className:"gc-stack",children:[!a.modelAllowed&&e.jsxs(q,{tone:"danger",title:"Model not allowed",children:["The policy does not allow ",a.model,". Requests for it get a 403."]}),e.jsxs("div",{className:"gc-sources",children:[a.sources.map((s,c)=>e.jsx(P,{level:e.jsxs(e.Fragment,{children:[Ee[s.level],p(s)?e.jsxs("span",{className:"gc-muted",children:[" · ",p(s)]}):null]}),children:Me(s)},`${s.level}-${c}`)),e.jsx(P,{level:"Effective",result:!0,children:N(a.policy)})]}),e.jsxs("p",{className:"gc-muted",children:[r," of ",a.candidates.length," sellers eligible."]}),r===0&&a.candidates.length>0&&e.jsxs(q,{tone:"warning",title:"No eligible seller",children:["Requests for ",a.model," fail with this policy. The reasons below show what excludes each seller."]}),e.jsx(Pe,{label:"Candidates",rows:[...a.candidates].sort((s,c)=>(s.rank??1e9)-(c.rank??1e9)),rowKey:s=>s.peerId,rowLabel:s=>s.displayName??Y(i.data,s.peerId),actions:s=>[de(n,s.peerId,a.model)],empty:e.jsx(ce,{title:"No seller offers this model"}),columns:[{key:"rank",header:"#",render:s=>s.rank??"—",width:"3rem"},{key:"seller",header:"Seller",render:s=>s.displayName??Y(i.data,s.peerId)},{key:"eligible",header:"Eligible",render:s=>s.eligible?e.jsx(A,{tone:"success",children:"Yes"}):e.jsx(A,{tone:"neutral",children:"No"})},{key:"reasons",header:"Why",render:s=>e.jsx("span",{className:"gc-muted",children:s.reasons.join(" · ")||"—"})},{key:"input",header:"Input $/M",align:"right",secondary:!0,render:s=>G(s.inputUsdPerMillion)},{key:"output",header:"Output $/M",align:"right",secondary:!0,render:s=>G(s.outputUsdPerMillion)},{key:"trust",header:"Trust",align:"right",secondary:!0,render:s=>s.trustScore===null?"—":Math.round(s.trustScore)}]})]})}const S={gateway:{title:"Gateway default",description:()=>"Applies to every request through this gateway. Workspaces, members, keys and presets can only narrow it."},org:{title:"Organization policy",description:a=>`Set by organization admins for ${a}. Workspace admins can only narrow it.`},workspace:{title:"Workspace policy",description:a=>`Set by ${a}'s admins, on top of the gateway default and the organization policy.`}},B=(a,t)=>JSON.stringify(a)===JSON.stringify(t);function qe(a,t){if(!a)return e.jsx(A,{children:"Read only"});if(t)return e.jsx(A,{tone:"warning",children:"Unsaved changes"})}function I({layer:a,source:t,parent:i,canEdit:n,onSave:r}){const{workspace:p}=C(),s=he(),c=O(),l=H(),g=je(),[y,w]=u.useState(()=>R(t)),[f,v]=u.useState(()=>R(t)),[m,d]=u.useState(null),[L,h]=u.useState(!1),j=u.useMemo(()=>R(t),[t]),x=!B(y,f);u.useEffect(()=>{B(j,f)||(!x||B(j,y)?(w(j),v(j),d(null)):d(j))},[j]);const o=we({mutationFn:async()=>{const k=fe(y,l.data??null);return await g.save([k],ee=>r(k,ee))===ve?null:k},onSuccess:k=>{if(!k)return;const F=R(k);w(F),v(F),d(null),h(!1),s(`${S[a].title} saved`)}}),E=be(y,l.data??null);return e.jsxs(K,{title:S[a].title,description:S[a].description(p.name),actions:qe(n,x),children:[e.jsxs("div",{className:"gc-policy-row",children:[e.jsxs("div",{className:"gc-policy-row__text",children:[e.jsx(Z,{policy:x?E.policy:t,invalid:x&&E.error!==null}),x&&e.jsx("span",{className:"gc-fineprint",children:"Showing your unsaved edits."})]}),e.jsx(b,{size:"sm",variant:"outline",onClick:()=>h(!0),children:n?"Edit":"View"})]}),m&&n&&!L&&e.jsx(q,{tone:"warning",title:"Changed elsewhere",children:"Someone saved this policy while you were editing it. Open it to reload theirs or keep yours."}),e.jsx(xe,{isOpen:L,onClose:()=>h(!1),size:"xl",title:S[a].title,subtitle:S[a].description(p.name),footer:n?e.jsxs(e.Fragment,{children:[E.error&&e.jsx("span",{className:"gc-warn gc-footer-note",children:E.error}),e.jsx(b,{variant:"ghost",disabled:!x,onClick:()=>{w(f),d(null)},children:"Discard changes"}),e.jsx(b,{disabled:o.isPending||!x,onClick:()=>o.mutate(),children:o.isPending?"Saving…":"Save policy"})]}):e.jsx(b,{variant:"outline",onClick:()=>h(!1),children:"Close"}),children:e.jsxs("div",{className:"gc-stack",children:[m&&n&&e.jsx(q,{tone:"warning",title:"Changed elsewhere",action:e.jsxs("div",{className:"gc-inline gc-inline--wrap",children:[e.jsx(b,{size:"sm",variant:"outline",onClick:()=>{w(m),v(m),d(null)},children:"Reload"}),e.jsx(b,{size:"sm",variant:"ghost",onClick:()=>{v(m),d(null)},children:"Keep editing"})]}),children:"Someone saved this policy while you were editing it. Reload to see their version (your edits are dropped), or keep editing and save to replace it."}),o.error?e.jsx(z,{error:o.error,title:"Could not save"}):null,e.jsx(ke,{value:y,onChange:w,peers:c.data,lists:l.data??[],parent:i,disabled:!n})]})}),g.dialog]})}function Ae(){const a=V(),t=X();return t.isLoading?e.jsx($,{rows:6}):t.error?e.jsx(z,{error:t.error,onRetry:()=>void t.refetch()}):e.jsx(I,{layer:"gateway",source:t.data??null,parent:null,canEdit:!0,onSave:async(i,n)=>{await T.network.setGatewayPolicy(i,n),await a.invalidateQueries({queryKey:W.group("routing")})}})}function J(){var f,v;const{workspace:a,viewer:t}=C(),i=V(),n=H(),r=ye(a.id),p=X(),s=n.data??[],c=p.data?M(p.data,s):null,l=((f=r.data)==null?void 0:f.orgRoutingPolicy)??null,g=((v=r.data)==null?void 0:v.routingPolicy)??null,y=u.useMemo(()=>_(c,l&&M(l,s),g&&M(g,s)),[c,l,g,s]);if(r.isLoading)return e.jsx($,{rows:6});if(r.error)return e.jsx(z,{error:r.error,onRetry:()=>void r.refetch()});const w=async()=>{await i.invalidateQueries({queryKey:W.group("workspaces")}),await i.invalidateQueries({queryKey:W.group("routing")})};return e.jsxs("div",{className:"gc-stack",children:[e.jsx(K,{title:"Effective for this workspace",description:"What keys in this workspace get before member, key and preset policies narrow it further.",children:e.jsxs("div",{className:"gc-sources",children:[e.jsx(P,{level:"Gateway default",children:N(p.data)}),e.jsx(P,{level:"Organization",children:N(l)}),e.jsx(P,{level:"Workspace",children:N(g)}),e.jsx(P,{level:"Effective",result:!0,children:e.jsx(Z,{policy:y})})]})}),e.jsx(I,{layer:"org",source:l,parent:c,canEdit:D(t),onSave:async(m,d)=>{await T.workspaces.update(a.id,{orgRoutingPolicy:Q(m)},d),await w()}}),e.jsx(I,{layer:"workspace",source:g,parent:_(c,l&&M(l,s)),canEdit:me(t),onSave:async(m,d)=>{await T.workspaces.update(a.id,{routingPolicy:Q(m)},d),await w()}})]})}function Te(){const a=pe();if(!a.data)return null;const t=ge(a.data);return e.jsxs("p",{className:"gc-fineprint",children:["Buyer config, which every policy here can only narrow: ",t.length>0?t.join(" · "):"none","."]})}function We(){const{viewer:a}=C(),t=D(a),[i,n]=u.useState(t?"gateway":"workspace");return t?e.jsxs(e.Fragment,{children:[e.jsx(Se,{id:"gc-routing-level",label:"Policy level",value:i,onChange:n,tabs:[{id:"gateway",label:"Gateway default"},{id:"workspace",label:"This workspace"}]}),e.jsx(Ne,{tabsId:"gc-routing-level",tab:i,children:i==="gateway"?e.jsx(Ae,{}):e.jsx(J,{})})]}):e.jsx(J,{})}function Ye(){return e.jsxs("div",{className:"gc-page",children:[e.jsx(ue,{title:"Routing",description:"Which sellers serve your requests and how they are ranked. Each level can only narrow the one above."}),e.jsx(Te,{}),e.jsx(We,{}),e.jsx(Le,{})]})}export{Ye as default};
@@ -0,0 +1 @@
1
+ var a="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2078%2077%22%3E%3Cdefs%3E%3Cmask%20id%3D%22d%22%3E%3Cg%20filter%3D%22url(%23a)%22%3E%3Cpath%20d%3D%22M0%200h78v77H0z%22%20style%3D%22fill%3A%23000%3Bfill-opacity%3A.529412%3Bstroke%3Anone%22%2F%3E%3C%2Fg%3E%3C%2Fmask%3E%3Cmask%20id%3D%22h%22%3E%3Cg%20filter%3D%22url(%23a)%22%3E%3Cpath%20d%3D%22M0%200h78v77H0z%22%20style%3D%22fill%3A%23000%3Bfill-opacity%3A.407843%3Bstroke%3Anone%22%2F%3E%3C%2Fg%3E%3C%2Fmask%3E%3Cmask%20id%3D%22j%22%3E%3Cg%20filter%3D%22url(%23a)%22%3E%3Cpath%20d%3D%22M0%200h78v77H0z%22%20style%3D%22fill%3A%23000%3Bfill-opacity%3A.243137%3Bstroke%3Anone%22%2F%3E%3C%2Fg%3E%3C%2Fmask%3E%3CradialGradient%20id%3D%22f%22%20cx%3D%22413.061%22%20cy%3D%22136.818%22%20r%3D%2282.125%22%20fx%3D%22413.061%22%20fy%3D%22136.818%22%20gradientTransform%3D%22matrix(.4505%200%200%20.44664%20-146.86%20-29.291)%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20style%3D%22stop-color%3A%2306c2e7%3Bstop-opacity%3A1%22%2F%3E%3Cstop%20offset%3D%22.25%22%20style%3D%22stop-color%3A%230db8ec%3Bstop-opacity%3A1%22%2F%3E%3Cstop%20offset%3D%22.5%22%20style%3D%22stop-color%3A%2312aef1%3Bstop-opacity%3A1%22%2F%3E%3Cstop%20offset%3D%22.75%22%20style%3D%22stop-color%3A%231f86f9%3Bstop-opacity%3A1%22%2F%3E%3Cstop%20offset%3D%221%22%20style%3D%22stop-color%3A%23107ddd%3Bstop-opacity%3A1%22%2F%3E%3C%2FradialGradient%3E%3ClinearGradient%20id%3D%22e%22%20x1%3D%22412.975%22%20x2%3D%22412.975%22%20y1%3D%22237.608%22%20y2%3D%2259.392%22%20gradientTransform%3D%22translate(206.79%20159.773)%20scale(.35154)%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20style%3D%22stop-color%3A%23bdbdbd%3Bstop-opacity%3A1%22%2F%3E%3Cstop%20offset%3D%221%22%20style%3D%22stop-color%3A%23fff%3Bstop-opacity%3A1%22%2F%3E%3C%2FlinearGradient%3E%3CclipPath%20id%3D%22b%22%3E%3Cpath%20d%3D%22M0%200h78v77H0z%22%2F%3E%3C%2FclipPath%3E%3Cfilter%20id%3D%22a%22%20width%3D%22100%25%22%20height%3D%22100%25%22%20x%3D%220%25%22%20y%3D%220%25%22%20filterUnits%3D%22objectBoundingBox%22%3E%3CfeColorMatrix%20in%3D%22SourceGraphic%22%20values%3D%220%200%200%200%201%200%200%200%200%201%200%200%200%200%201%200%200%200%201%200%22%2F%3E%3C%2Ffilter%3E%3Cg%20id%3D%22i%22%20clip-path%3D%22url(%23b)%22%3E%3Cpath%20d%3D%22m15.316%2059.238%2027.657-18.445%2019.859-26.54Zm0%200%22%20style%3D%22stroke%3Anone%3Bfill-rule%3Anonzero%3Bfill%3A%23000%3Bfill-opacity%3A1%22%2F%3E%3C%2Fg%3E%3C%2Fdefs%3E%3Cuse%20xlink%3Ahref%3D%22%23c%22%20mask%3D%22url(%23d)%22%2F%3E%3Cpath%20d%3D%22M383.295%20211.976c0%2017.3-14.026%2031.324-31.327%2031.324-17.3%200-31.326-14.024-31.326-31.324%200-17.3%2014.026-31.324%2031.326-31.324s31.327%2014.024%2031.327%2031.324Zm0%200%22%20style%3D%22fill-rule%3Anonzero%3Bfill%3Aurl(%23e)%3Bstroke-width%3A.0930123%3Bstroke-linecap%3Around%3Bstroke-linejoin%3Around%3Bstroke%3A%23cdcdcd%3Bstroke-opacity%3A1%3Bstroke-miterlimit%3A4%22%20transform%3D%22matrix(1.1811%200%200%201.17096%20-376.637%20-211.47)%22%2F%3E%3Cpath%20d%3D%22M73.172%2036.746c0%2018.672-15.266%2033.809-34.098%2033.809S4.977%2055.418%204.977%2036.746c0-18.672%2015.265-33.805%2034.097-33.805s34.098%2015.133%2034.098%2033.805Zm0%200%22%20style%3D%22stroke%3Anone%3Bfill-rule%3Anonzero%3Bfill%3Aurl(%23f)%22%2F%3E%3Cpath%20d%3D%22M39.074%204.703a.493.493%200%200%200-.496.492v5.688c0%20.273.223.492.496.492a.491.491%200%200%200%20.496-.492V5.195a.491.491%200%200%200-.496-.492Zm-3.254.203a.495.495%200%200%200-.543.543l.25%202.38a.5.5%200%200%200%20.547.437.489.489%200%200%200%20.442-.54l-.25-2.378a.495.495%200%200%200-.446-.442Zm6.528.004c-.23.02-.418.2-.446.438l-.25%202.379a.49.49%200%200%200%20.442.543.496.496%200%200%200%20.547-.438l.254-2.379a.496.496%200%200%200-.547-.543Zm-9.868.477a.493.493%200%200%200-.484.598l1.188%205.558c.058.27.32.437.59.383a.492.492%200%200%200%20.382-.586L32.97%205.777a.494.494%200%200%200-.489-.39Zm13.211.004a.502.502%200%200%200-.492.39l-1.191%205.563a.497.497%200%200%200%20.972.207l1.192-5.563a.492.492%200%200%200-.48-.597Zm-16.398.886a.548.548%200%200%200-.195.024.492.492%200%200%200-.32.62l.745%202.274a.493.493%200%200%200%20.625.317.49.49%200%200%200%20.32-.621l-.745-2.274a.5.5%200%200%200-.43-.34Zm19.566.004a.5.5%200%200%200-.43.336l-.745%202.278a.496.496%200%200%200%20.945.304l.746-2.277a.49.49%200%200%200-.516-.64Zm-22.718%201.14a.492.492%200%200%200-.445.695l2.327%205.197a.497.497%200%200%200%20.91-.402l-2.331-5.196a.493.493%200%200%200-.461-.293Zm25.91.02a.494.494%200%200%200-.465.293l-2.336%205.192c-.113.25%200%20.539.25.648.254.114.547%200%20.656-.246l2.336-5.195a.488.488%200%200%200-.25-.649.486.486%200%200%200-.191-.043ZM23.21%208.957a.491.491%200%200%200-.281.066.49.49%200%200%200-.184.672l1.207%202.075a.5.5%200%200%200%20.68.18.494.494%200%200%200%20.183-.677l-1.207-2.07a.5.5%200%200%200-.398-.246Zm31.727%200a.5.5%200%200%200-.399.246l-1.207%202.07a.494.494%200%200%200%20.184.676.5.5%200%200%200%20.68-.18l1.206-2.074a.49.49%200%200%200-.183-.672.524.524%200%200%200-.282-.066ZM20.37%2010.715a.501.501%200%200%200-.273.094.487.487%200%200%200-.114.687l3.368%204.602a.5.5%200%200%200%20.695.113.49.49%200%200%200%20.11-.691l-3.368-4.602a.502.502%200%200%200-.418-.203Zm37.442.027a.488.488%200%200%200-.418.2l-3.375%204.597a.494.494%200%200%200%20.109.691c.223.16.535.11.695-.109l3.375-4.598a.49.49%200%200%200-.11-.687.465.465%200%200%200-.276-.094Zm-39.981%202.086a.496.496%200%200%200-.36.125.487.487%200%200%200-.038.695l1.617%201.778a.495.495%200%201%200%20.738-.66l-1.613-1.774a.495.495%200%200%200-.344-.164Zm42.488.004a.506.506%200%200%200-.343.16l-1.614%201.778a.491.491%200%200%200%20.04.699c.202.18.515.164.699-.04l1.617-1.777a.487.487%200%200%200-.04-.695.496.496%200%200%200-.359-.125Zm-44.925%202.313a.511.511%200%200%200-.344.164.49.49%200%200%200%20.039.695l4.262%203.805a.5.5%200%200%200%20.703-.036.491.491%200%200%200-.04-.699l-4.261-3.8a.5.5%200%200%200-.36-.13Zm47.375.02a.496.496%200%200%200-.36.124l-4.265%203.8a.49.49%200%200%200-.04.696c.188.203.5.219.704.04l4.265-3.802a.49.49%200%200%200-.305-.86ZM13.37%2017.726a.502.502%200%200%200-.418.203.486.486%200%200%200%20.11.687l1.949%201.406c.222.16.535.114.695-.109a.486.486%200%200%200-.11-.687l-1.949-1.407a.525.525%200%200%200-.277-.093Zm51.418.02a.481.481%200%200%200-.273.093l-1.954%201.402a.494.494%200%200%200-.109.692c.16.218.473.27.695.109l1.954-1.406a.49.49%200%200%200%20.109-.688.489.489%200%200%200-.422-.203ZM11.48%2020.48a.49.49%200%200%200-.215.918l4.965%202.844a.5.5%200%200%200%20.68-.18.492.492%200%200%200-.18-.675l-4.968-2.84a.491.491%200%200%200-.282-.067Zm55.188%200a.462.462%200%200%200-.281.067l-4.969%202.84a.492.492%200%200%200-.18.675.5.5%200%200%200%20.68.18l4.965-2.844a.49.49%200%200%200-.215-.918Zm-56.617%202.934a.494.494%200%200%200-.215.945l2.203.973c.254.11.547%200%20.656-.25a.485.485%200%200%200-.25-.648l-2.203-.977a.486.486%200%200%200-.191-.043Zm58.058.02a.545.545%200%200%200-.191.043l-2.207.972a.492.492%200%200%200-.25.653.5.5%200%200%200%20.656.25l2.203-.973a.493.493%200%200%200%20.254-.652.498.498%200%200%200-.465-.293ZM8.773%2026.48a.492.492%200%200%200-.11.96l5.45%201.763a.492.492%200%201%200%20.309-.938l-5.453-1.761a.548.548%200%200%200-.196-.024Zm60.61.024a.415.415%200%200%200-.195.023l-5.458%201.754a.493.493%200%201%200%20.309.938l5.453-1.754a.495.495%200%200%200%20.32-.625.496.496%200%200%200-.43-.336Zm-61.403%203.2a.494.494%200%200%200-.492.39.493.493%200%200%200%20.387.582l2.36.496c.269.058.53-.11.59-.379a.493.493%200%200%200-.387-.582l-2.36-.5a.822.822%200%200%200-.098-.008Zm62.192.003c-.035%200-.067.004-.102.008l-2.36.5a.491.491%200%201%200%20.207.96l2.36-.495a.49.49%200%200%200-.105-.973ZM7.379%2032.941c-.23.02-.422.2-.445.438a.495.495%200%200%200%20.441.543l5.703.598a.499.499%200%200%200%20.547-.442.491.491%200%200%200-.441-.539l-5.704-.598a.441.441%200%200%200-.101%200Zm63.398.04c-.035%200-.07%200-.101.003l-5.703.59a.492.492%200%201%200%20.101.98l5.703-.59a.495.495%200%200%200%200-.984ZM7.281%2036.253a.493.493%200%201%200%200%20.988h2.414a.493.493%200%201%200%200-.988Zm61.172%200a.493.493%200%201%200%200%20.988h2.414a.493.493%200%201%200%200-.988ZM13.176%2038.94a.442.442%200%200%200-.102%200l-5.703.59a.493.493%200%201%200%20.102.98l5.703-.59a.492.492%200%200%200%200-.98Zm51.793.036a.493.493%200%200%200-.004.98l5.703.598a.496.496%200%200%200%20.547-.438.49.49%200%200%200-.442-.543l-5.703-.597a.441.441%200%200%200-.101%200Zm-54.637%203.328a.477.477%200%200%200-.102.011l-2.359.496a.497.497%200%200%200-.383.586c.059.266.32.438.59.38l2.36-.497a.492.492%200%200%200%20.382-.586.5.5%200%200%200-.488-.39Zm57.484.008a.49.49%200%200%200-.488.39.488.488%200%200%200%20.383.582l2.36.5a.499.499%200%200%200%20.59-.383.494.494%200%200%200-.384-.582l-2.359-.5a.93.93%200%200%200-.102-.008Zm-53.511%201.94a.484.484%200%200%200-.196.02L8.656%2046.03a.492.492%200%201%200%20.309.938l5.453-1.758a.491.491%200%200%200-.113-.957Zm49.53.017a.492.492%200%200%200-.11.96l5.455%201.762a.5.5%200%200%200%20.625-.316.487.487%200%200%200-.317-.621l-5.453-1.762c-.066-.023-.133-.027-.2-.023Zm-51.612%203.832a.486.486%200%200%200-.192.043l-2.203.972a.496.496%200%200%200-.254.653.503.503%200%200%200%20.656.25l2.207-.973a.494.494%200%200%200-.215-.945Zm53.695.02a.494.494%200%200%200-.465.292c-.113.25%200%20.54.25.648l2.203.977c.254.11.547%200%20.656-.25a.49.49%200%200%200-.25-.652l-2.203-.973a.486.486%200%200%200-.191-.043Zm-49.402%201.066a.497.497%200%200%200-.286.066l-4.964%202.844a.49.49%200%200%200-.184.672c.14.238.441.316.68.18l4.968-2.84a.492.492%200%200%200%20.18-.676.493.493%200%200%200-.394-.246Zm45.117%200a.493.493%200%200%200-.395.246.492.492%200%200%200%20.18.675l4.969%202.84a.498.498%200%200%200%20.68-.18.49.49%200%200%200-.184-.671l-4.965-2.844a.53.53%200%200%200-.285-.066Zm-46.356%204.171a.524.524%200%200%200-.277.094l-1.95%201.406a.49.49%200%200%200-.113.688.5.5%200%200%200%20.696.11l1.953-1.403a.49.49%200%200%200%20.11-.691.502.502%200%200%200-.419-.204Zm47.582.016a.502.502%200%200%200-.418.203.49.49%200%200%200%20.11.692l1.953%201.406c.223.16.531.11.691-.11a.49.49%200%200%200-.11-.691l-1.948-1.402a.498.498%200%200%200-.278-.098Zm-43.16.172a.496.496%200%200%200-.36.125l-4.265%203.8a.486.486%200%200%200-.035.696.495.495%200%200%200%20.7.039l4.265-3.8a.487.487%200%200%200%20.039-.696.511.511%200%200%200-.344-.164Zm38.739.012a.511.511%200%200%200-.344.164.486.486%200%200%200%20.039.695l4.262%203.805a.5.5%200%200%200%20.703-.035.486.486%200%200%200-.04-.696l-4.261-3.804a.5.5%200%200%200-.36-.13Zm-34.696%203.613a.487.487%200%200%200-.418.203l-3.375%204.598a.49.49%200%200%200%20.11.687c.222.16.535.113.695-.11l3.375-4.597a.49.49%200%200%200-.387-.781Zm30.633.02a.512.512%200%200%200-.273.093.486.486%200%200%200-.11.688l3.367%204.601a.495.495%200%201%200%20.805-.578l-3.367-4.601a.509.509%200%200%200-.422-.204Zm-34.984.71a.496.496%200%200%200-.344.164l-1.613%201.778a.487.487%200%200%200%20.035.695.5.5%200%200%200%20.703-.039l1.613-1.777a.487.487%200%200%200-.039-.696.492.492%200%200%200-.355-.125Zm39.367%200a.5.5%200%200%200-.36.13.487.487%200%200%200-.039.695l1.614%201.777a.5.5%200%200%200%20.703.035.486.486%200%200%200%20.039-.695l-1.613-1.778a.511.511%200%200%200-.344-.164Zm-30.305%201.973a.493.493%200%200%200-.46.293l-2.337%205.191c-.113.25%200%20.54.25.653a.5.5%200%200%200%20.657-.25l2.335-5.192a.492.492%200%200%200-.445-.695Zm21.211.016a.491.491%200%200%200-.45.691l2.333%205.195c.11.25.402.364.656.25a.486.486%200%200%200%20.25-.648l-2.328-5.195a.493.493%200%200%200-.46-.293Zm-25.316%201.59a.499.499%200%200%200-.395.246l-1.207%202.07a.494.494%200%200%200%20.184.676.498.498%200%200%200%20.68-.184l1.206-2.07a.49.49%200%200%200-.183-.672.497.497%200%200%200-.285-.067Zm29.453%200a.497.497%200%200%200-.285.066.485.485%200%200%200-.18.672l1.203%202.07a.5.5%200%200%200%20.68.184.494.494%200%200%200%20.183-.676l-1.207-2.07a.499.499%200%200%200-.394-.247Zm-20.145.074a.497.497%200%200%200-.488.39l-1.191%205.563a.488.488%200%200%200%20.382.582c.27.058.532-.11.59-.38l1.192-5.558a.493.493%200%200%200-.485-.597Zm10.82.004a.45.45%200%200%200-.101.011.488.488%200%200%200-.383.582l1.188%205.563c.054.27.32.437.59.379a.49.49%200%200%200%20.382-.582l-1.187-5.563a.497.497%200%200%200-.488-.39Zm-5.402.562a.493.493%200%200%200-.496.492v5.684c0%20.273.223.492.496.492a.491.491%200%200%200%20.496-.492v-5.684a.491.491%200%200%200-.496-.492Zm-9.125%201.836a.49.49%200%200%200-.43.34l-.746%202.273a.49.49%200%200%200%20.317.621.499.499%200%200%200%20.629-.316l.746-2.273a.49.49%200%200%200-.32-.622.488.488%200%200%200-.196-.023Zm18.246%200a.57.57%200%200%200-.195.023.492.492%200%200%200-.32.622l.746%202.273a.493.493%200%200%200%20.625.316.486.486%200%200%200%20.32-.62l-.746-2.274a.49.49%200%200%200-.43-.34Zm-12.242%201.27a.491.491%200%200%200-.445.437l-.25%202.379a.489.489%200%200%200%20.441.539.493.493%200%200%200%20.547-.437l.25-2.38a.489.489%200%200%200-.543-.538Zm6.223%200a.49.49%200%200%200-.543.543l.25%202.378c.027.27.27.465.543.438a.492.492%200%200%200%20.445-.54l-.25-2.378a.499.499%200%200%200-.445-.441Zm0%200%22%20style%3D%22stroke%3Anone%3Bfill-rule%3Anonzero%3Bfill%3A%23f4f2f3%3Bfill-opacity%3A1%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23g%22%20mask%3D%22url(%23h)%22%2F%3E%3Cpath%20d%3D%22m42.973%2040.793-7.797-8.094%2027.656-18.445Zm0%200%22%20style%3D%22stroke%3Anone%3Bfill-rule%3Anonzero%3Bfill%3A%23ff5150%3Bfill-opacity%3A1%22%2F%3E%3Cpath%20d%3D%22m42.973%2040.793-7.797-8.094-19.86%2026.54Zm0%200%22%20style%3D%22stroke%3Anone%3Bfill-rule%3Anonzero%3Bfill%3A%23f1f1f1%3Bfill-opacity%3A1%22%2F%3E%3Cuse%20xlink%3Ahref%3D%22%23i%22%20mask%3D%22url(%23j)%22%2F%3E%3C%2Fsvg%3E";export{a as default};
@@ -0,0 +1 @@
1
+ import{j as m}from"./index-BC-1LZkB.js";import{r as f,f as g}from"./roving-DkptacxO.js";function _({value:l,onChange:n,options:a,label:u,className:c}){const o=Math.max(0,a.findIndex(e=>e.value===l));return m.jsx("div",{className:["as-segmented",c].filter(Boolean).join(" "),role:"radiogroup","aria-label":u,children:a.map((e,d)=>{const i=e.value===l;return m.jsx("button",{type:"button",role:"radio","aria-checked":i,tabIndex:d===o?0:-1,disabled:e.disabled,className:i?"as-segmented__item as-segmented__item--on":"as-segmented__item",onClick:()=>n(e.value),onKeyDown:t=>{const r=f(t,d,a.length);if(r===null)return;t.preventDefault();const s=a[r];!s||s.disabled||(n(s.value),g(t,r,".as-segmented__item"))},children:e.label},e.value)})})}export{_ as S};
@@ -0,0 +1 @@
1
+ import{r as j,j as e,Z as o,$ as h,a0 as f}from"./index-BC-1LZkB.js";function b({label:a,hint:d,error:t,options:c,onChange:r,className:i,id:n,size:u,...x}){const m=j.useId(),l=n??m;return e.jsxs("label",{className:f(i,u),htmlFor:l,children:[a&&e.jsx("span",{className:"as-field__label",children:a}),e.jsx("select",{id:l,className:o("as-field__select"),onChange:s=>r(s.target.value),...x,children:c.map(s=>e.jsx("option",{value:s.value,disabled:s.disabled,children:s.label},s.value))}),e.jsx(h,{error:t,hint:d})]})}export{b as S};