luckytri 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/docs/en/CHANGELOG.md +4 -0
  4. package/docs/zh/CHANGELOG.md +4 -0
  5. package/package.json +1 -1
  6. package/public/app/assets/{ChatsPage-OQgvV8YR.js → ChatsPage-IfBgNdaD.js} +1 -1
  7. package/public/app/assets/{Empty-DjvoHpAi.js → Empty-DK9nQPCf.js} +1 -1
  8. package/public/app/assets/{Field-BECf8Ykc.js → Field-BzKFhuFd.js} +1 -1
  9. package/public/app/assets/{HeartPage-6s6prdTE.js → HeartPage-CKxrbfFQ.js} +1 -1
  10. package/public/app/assets/{LifePage-g-8hiKC6.js → LifePage-CtxPEi6E.js} +1 -1
  11. package/public/app/assets/{MemoryPage-efIhloIp.js → MemoryPage-B8FLXzLi.js} +1 -1
  12. package/public/app/assets/{NaturePage-cjgIe6wY.js → NaturePage-C7i607ul.js} +1 -1
  13. package/public/app/assets/{PeoplePage-DQZ0uevM.js → PeoplePage-D3yn0HV0.js} +1 -1
  14. package/public/app/assets/{PluginsPage-DZQFEyxq.js → PluginsPage-ojv8zawj.js} +1 -1
  15. package/public/app/assets/{SystemPage-BHHcZb1h.css → SystemPage-CGVTvNZw.css} +1 -1
  16. package/public/app/assets/SystemPage-Cv3rFvyT.js +1 -0
  17. package/public/app/assets/{TimePage-B3oncGqb.js → TimePage-Dyd-FFbq.js} +1 -1
  18. package/public/app/assets/{index-CqRx6L9a.js → index-BJfzfgnm.js} +3 -3
  19. package/public/app/assets/{knowledge-Dj6hHClj.js → knowledge-C-bND0Ub.js} +1 -1
  20. package/public/app/assets/{media-B1i_W5FC.js → media-D7G3Nco6.js} +1 -1
  21. package/public/app/assets/{mind-BY8WSI7v.js → mind-ec-G6iNZ.js} +1 -1
  22. package/public/app/index.html +3 -3
  23. package/public/guide.en.html +3 -3
  24. package/public/guide.html +3 -3
  25. package/server/knowledge/api.js +2 -1
  26. package/server/knowledge/embedding-profile.js +5 -4
  27. package/public/app/assets/SystemPage-DjYS33Sv.js +0 -1
@@ -1,2 +1,2 @@
1
1
  function e(e){let t=Object.create(null);for(let n of e.split(`,`))t[n]=1;return e=>e in t}var t={},n=[],r=()=>{},i=()=>!1,a=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),o=e=>e.startsWith(`onUpdate:`),s=Object.assign,c=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},l=Object.prototype.hasOwnProperty,u=(e,t)=>l.call(e,t),d=Array.isArray,f=e=>S(e)===`[object Map]`,p=e=>S(e)===`[object Set]`,m=e=>S(e)===`[object Date]`,h=e=>S(e)===`[object RegExp]`,g=e=>typeof e==`function`,_=e=>typeof e==`string`,v=e=>typeof e==`symbol`,y=e=>typeof e==`object`&&!!e,b=e=>(y(e)||g(e))&&g(e.then)&&g(e.catch),x=Object.prototype.toString,S=e=>x.call(e),C=e=>S(e).slice(8,-1),w=e=>S(e)===`[object Object]`,ee=e=>_(e)&&e!==`NaN`&&e[0]!==`-`&&``+parseInt(e,10)===e,te=e(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),ne=e=>{let t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},re=/-\w/g,T=ne(e=>e.replace(re,e=>e.slice(1).toUpperCase())),ie=/\B([A-Z])/g,E=ne(e=>e.replace(ie,`-$1`).toLowerCase()),ae=ne(e=>e.charAt(0).toUpperCase()+e.slice(1)),oe=ne(e=>e?`on${ae(e)}`:``),D=(e,t)=>!Object.is(e,t),O=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},se=(e,t,n,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},ce=e=>{let t=parseFloat(e);return isNaN(t)?e:t},le=e=>{let t=_(e)?Number(e):NaN;return isNaN(t)?e:t},ue,de=()=>ue||=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`?window:typeof global<`u`?global:{};function fe(e){if(d(e)){let t={};for(let n=0;n<e.length;n++){let r=e[n],i=_(r)?ge(r):fe(r);if(i)for(let e in i)t[e]=i[e]}return t}if(_(e)||y(e))return e}var pe=/;(?![^(]*\))/g,me=/:([^]+)/,he=/"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;function ge(e){let t={};return e.replace(he,e=>e.startsWith(`/*`)?``:e).split(pe).forEach(e=>{if(e){let n=e.split(me);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function _e(e){let t=``;if(_(e))t=e;else if(d(e))for(let n=0;n<e.length;n++){let r=_e(e[n]);r&&(t+=r+` `)}else if(y(e))for(let n in e)e[n]&&(t+=n+` `);return t.trim()}var ve=`itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`,ye=e(ve);ve+``;function be(e){return!!e||e===``}function xe(e,t,n){if(e.length!==t.length)return!1;let r=!0;for(let i=0;r&&i<e.length;i++)r=k(e[i],t[i],n);return r}function Se(e,t,n){if(e.size!==t.size)return!1;let r=Array.from(t),i=new Uint8Array(r.length);for(let t of e){let e=-1;for(let a=0;a<r.length;a++)if(!i[a]&&k(t,r[a],n)){e=a;break}if(e<0)return!1;i[e]=1}return!0}function Ce(e,t,n){let r=f(e),i=f(t);if(r||i||(r=p(e),i=p(t),r||i))return r&&i?Se(e,t,n):!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let r in e){let i=e.hasOwnProperty(r),a=t.hasOwnProperty(r);if(i&&!a||!i&&a||!k(e[r],t[r],n))return!1}return String(e)===String(t)}function we(e,t,n,r){n||=[new Map,new Map];let[i,a]=n;if(i.has(e)||a.has(t))return i.get(e)===t&&a.get(t)===e;i.set(e,t),a.set(t,e);let o=r(e,t,n);return i.delete(e),a.delete(t),o}function k(e,t,n){if(e===t)return!0;let r=m(e),i=m(t);return r||i?r&&i?e.getTime()===t.getTime():!1:(r=v(e),i=v(t),r||i?e===t:(r=d(e),i=d(t),r||i?r&&i?we(e,t,n,xe):!1:(r=y(e),i=y(t),r||i?!r||!i?!1:we(e,t,n,Ce):String(e)===String(t))))}function Te(e,t){return e.findIndex(e=>k(e,t))}var Ee=e=>!!(e&&e.__v_isRef===!0),De=e=>_(e)?e:e==null?``:d(e)||y(e)&&(e.toString===x||!g(e.toString))?Ee(e)?De(e.value):JSON.stringify(e,Oe,2):String(e),Oe=(e,t)=>Ee(t)?Oe(e,t.value):f(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[ke(t,r)+` =>`]=n,e),{})}:p(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>ke(e))}:v(t)?ke(t):y(t)&&!d(t)&&!w(t)?String(t):t,ke=(e,t=``)=>v(e)?`Symbol(${e.description??t})`:e,A,Ae=class{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&A&&(A.active?(this.parent=A,this.index=(A.scopes||(A.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes){let n=this.scopes.slice();for(e=0,t=n.length;e<t;e++)n[e].pause()}for(e=0,t=this.effects.length;e<t;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let e,t;if(this.scopes){let n=this.scopes.slice();for(e=0,t=n.length;e<t;e++)n[e].resume()}let n=this.effects.slice();for(e=0,t=n.length;e<t;e++)n[e].resume()}}run(e){if(this._active){let t=A;try{return A=this,e()}finally{A=t}}}on(){++this._on===1&&(this.prevScope=A,A=this)}off(){if(this._on>0&&--this._on===0){if(A===this)A=this.prevScope;else{let e=A;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(this.effects.length=0,t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.cleanups.length=0,this.scopes){let e=this.scopes.slice();for(t=0,n=e.length;t<n;t++)e[t].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){let e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0}}};function je(){return A}var j,Me=new WeakSet,Ne=class{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,A&&(A.active?A.effects.push(this):this.flags&=-2)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,Me.has(this)&&(Me.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||Le(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,Xe(this),Be(this);let e=j,t=Ke;j=this,Ke=!0;try{return this.fn()}finally{Ve(this),j=e,Ke=t,this.flags&=-3}}stop(){if(this.flags&1){for(let e=this.deps;e;e=e.nextDep)We(e);this.deps=this.depsTail=void 0,Xe(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?Me.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){He(this)&&this.run()}get dirty(){return He(this)}},Pe=0,Fe,Ie;function Le(e,t=!1){if(e.flags|=8,t){e.next=Ie,Ie=e;return}e.next=Fe,Fe=e}function Re(){Pe++}function ze(){if(--Pe>0)return;if(Ie){let e=Ie;for(Ie=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e;for(;Fe;){let t=Fe;for(Fe=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(t){e||=t}t=n}}if(e)throw e}function Be(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ve(e){let t,n=e.depsTail,r=n;for(;r;){let e=r.prevDep;r.version===-1?(r===n&&(n=e),We(r),Ge(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function He(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ue(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ue(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Ze)||(e.globalVersion=Ze,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!He(e))))return;e.flags|=2;let t=e.dep,n=j,r=Ke;j=e,Ke=!0;try{Be(e);let n=e.fn(e._value);(t.version===0||D(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(e){throw t.version++,e}finally{j=n,Ke=r,Ve(e),e.flags&=-3}}function We(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)We(e,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Ge(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}var Ke=!0,qe=[];function Je(){qe.push(Ke),Ke=!1}function Ye(){let e=qe.pop();Ke=e===void 0||e}function Xe(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=j;j=void 0;try{t()}finally{j=e}}}var Ze=0,Qe=class{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},$e=class{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!j||!Ke||j===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==j)t=this.activeLink=new Qe(j,this),j.deps?(t.prevDep=j.depsTail,j.depsTail.nextDep=t,j.depsTail=t):j.deps=j.depsTail=t,et(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=j.depsTail,t.nextDep=void 0,j.depsTail.nextDep=t,j.depsTail=t,j.deps===t&&(j.deps=e)}return t}trigger(e){this.version++,Ze++,this.notify(e)}notify(e){Re();try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{ze()}}};function et(e){if(e.dep.sc++,e.sub.flags&4){let t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)et(e)}let n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}var tt=new WeakMap,nt=Symbol(``),rt=Symbol(``),it=Symbol(``);function M(e,t,n){if(Ke&&j){let t=tt.get(e);t||tt.set(e,t=new Map);let r=t.get(n);r||(t.set(n,r=new $e),r.map=t,r.key=n),r.track()}}function at(e,t,n,r,i,a){let o=tt.get(e);if(!o){Ze++;return}let s=e=>{e&&e.trigger()};if(Re(),t===`clear`)o.forEach(s);else{let i=d(e),a=i&&ee(n);if(i&&n===`length`){let e=Number(r);o.forEach((t,n)=>{(n===`length`||n===it||!v(n)&&n>=e)&&s(t)})}else switch((n!==void 0||o.has(void 0))&&s(o.get(n)),a&&s(o.get(it)),t){case`add`:i?a&&s(o.get(`length`)):(s(o.get(nt)),f(e)&&s(o.get(rt)));break;case`delete`:i||(s(o.get(nt)),f(e)&&s(o.get(rt)));break;case`set`:f(e)&&s(o.get(nt))}}ze()}function ot(e){let t=P(e);return t===e||(M(t,`iterate`,it),N(e))?t:Wt(e)?Ut(e)?t.map(e=>qt(F(e))):t.map(qt):t.map(F)}function st(e){return M(e=P(e),`iterate`,it),e}function ct(e,t){return Wt(e)?qt(Ut(e)?F(t):t):F(t)}var lt={__proto__:null,[Symbol.iterator](){return ut(this,Symbol.iterator,e=>ct(this,e))},concat(...e){return ot(this).concat(...e.map(e=>d(e)?ot(e):e))},entries(){return ut(this,`entries`,e=>(e[1]=ct(this,e[1]),e))},every(e,t){return ft(this,`every`,e,t,void 0,arguments)},filter(e,t){return ft(this,`filter`,e,t,e=>e.map(e=>ct(this,e)),arguments)},find(e,t){return ft(this,`find`,e,t,e=>ct(this,e),arguments)},findIndex(e,t){return ft(this,`findIndex`,e,t,void 0,arguments)},findLast(e,t){return ft(this,`findLast`,e,t,e=>ct(this,e),arguments)},findLastIndex(e,t){return ft(this,`findLastIndex`,e,t,void 0,arguments)},forEach(e,t){return ft(this,`forEach`,e,t,void 0,arguments)},includes(...e){return mt(this,`includes`,e)},indexOf(...e){return mt(this,`indexOf`,e)},join(e){return ot(this).join(e)},lastIndexOf(...e){return mt(this,`lastIndexOf`,e)},map(e,t){return ft(this,`map`,e,t,void 0,arguments)},pop(){return ht(this,`pop`)},push(...e){return ht(this,`push`,e)},reduce(e,...t){return pt(this,`reduce`,e,t)},reduceRight(e,...t){return pt(this,`reduceRight`,e,t)},shift(){return ht(this,`shift`)},some(e,t){return ft(this,`some`,e,t,void 0,arguments)},splice(...e){return ht(this,`splice`,e)},toReversed(){return ot(this).toReversed()},toSorted(e){return ot(this).toSorted(e)},toSpliced(...e){return ot(this).toSpliced(...e)},unshift(...e){return ht(this,`unshift`,e)},values(){return ut(this,`values`,e=>ct(this,e))}};function ut(e,t,n){let r=st(e),i=r[t]();return r!==e&&!N(e)&&(i._next=i.next,i.next=()=>{let e=i._next();return e.done||(e.value=n(e.value)),e}),i}var dt=Array.prototype;function ft(e,t,n,r,i,a){let o=st(e),s=o!==e&&!N(e),c=o[t];if(c!==dt[t]){let t=c.apply(e,a);return s?F(t):t}let l=n;o!==e&&(s?l=function(t,r){return n.call(this,ct(e,t),r,e)}:n.length>2&&(l=function(t,r){return n.call(this,t,r,e)}));let u=c.call(o,l,r);return s&&i?i(u):u}function pt(e,t,n,r){let i=st(e),a=i!==e&&!N(e),o=n,s=!1;i!==e&&(a?(s=r.length===0,o=function(t,r,i){return s&&(s=!1,t=ct(e,t)),n.call(this,t,ct(e,r),i,e)}):n.length>3&&(o=function(t,r,i){return n.call(this,t,r,i,e)}));let c=i[t](o,...r);return s?ct(e,c):c}function mt(e,t,n){let r=P(e);M(r,`iterate`,it);let i=r[t](...n);return(i===-1||i===!1)&&Gt(n[0])?(n[0]=P(n[0]),r[t](...n)):i}function ht(e,t,n=[]){Je(),Re();let r=P(e)[t].apply(e,n);return ze(),Ye(),r}var gt=e(`__proto__,__v_isRef,__isVue`),_t=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!==`arguments`&&e!==`caller`).map(e=>Symbol[e]).filter(v));function vt(e){v(e)||(e=String(e));let t=P(this);return M(t,`has`,e),t.hasOwnProperty(e)}var yt=class{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if(t===`__v_skip`)return e.__v_skip;let r=this._isReadonly,i=this._isShallow;if(t===`__v_isReactive`)return!r;if(t===`__v_isReadonly`)return r;if(t===`__v_isShallow`)return i;if(t===`__v_raw`)return n===(r?i?Lt:It:i?Ft:Pt).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let a=d(e);if(!r){let e;if(a&&(e=lt[t]))return e;if(t===`hasOwnProperty`)return vt}let o=Reflect.get(e,t,I(e)?e:n);if((v(t)?_t.has(t):gt(t))||(r||M(e,`get`,t),i))return o;if(I(o)){let e=a&&ee(t)?o:o.value;return r&&y(e)?Vt(e):e}return y(o)?r?Vt(o):zt(o):o}},bt=class extends yt{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t],a=d(e)&&ee(t);if(!this._isShallow){let e=Wt(i);if(!N(n)&&!Wt(n)&&(i=P(i),n=P(n)),!a&&I(i)&&!I(n))return e||(i.value=n),!0}let o=a?Number(t)<e.length:u(e,t),s=Reflect.set(e,t,n,I(e)?e:r);return e===P(r)&&s&&(o?D(n,i)&&at(e,`set`,t,n,i):at(e,`add`,t,n)),s}deleteProperty(e,t){let n=u(e,t),r=e[t],i=Reflect.deleteProperty(e,t);return i&&n&&at(e,`delete`,t,void 0,r),i}has(e,t){let n=Reflect.has(e,t);return(!v(t)||!_t.has(t))&&M(e,`has`,t),n}ownKeys(e){return M(e,`iterate`,d(e)?`length`:nt),Reflect.ownKeys(e)}},xt=class extends yt{constructor(e=!1){super(!0,e)}set(e,t){return!0}deleteProperty(e,t){return!0}},St=new bt,Ct=new xt,wt=new bt(!0),Tt=e=>e,Et=e=>Reflect.getPrototypeOf(e);function Dt(e,t,n){return function(...r){let i=this.__v_raw,a=P(i),o=f(a),c=e===`entries`||e===Symbol.iterator&&o,l=e===`keys`&&o,u=i[e](...r),d=n?Tt:t?qt:F;return!t&&M(a,`iterate`,l?rt:nt),s(Object.create(u),{next(){let{value:e,done:t}=u.next();return t?{value:e,done:t}:{value:c?[d(e[0]),d(e[1])]:d(e),done:t}}})}}function Ot(e){return function(...t){return e===`delete`?!1:e===`clear`?void 0:this}}function kt(e,t){let n={get(n){let r=this.__v_raw,i=P(r),a=P(n);e||(D(n,a)&&M(i,`get`,n),M(i,`get`,a));let{has:o}=Et(i),s=t?Tt:e?qt:F;if(o.call(i,n))return s(r.get(n));if(o.call(i,a))return s(r.get(a));r!==i&&r.get(n)},get size(){let t=this.__v_raw;return!e&&M(P(t),`iterate`,nt),t.size},has(t){let n=this.__v_raw,r=P(n),i=P(t);return e||(D(t,i)&&M(r,`has`,t),M(r,`has`,i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,a=i.__v_raw,o=P(a),s=t?Tt:e?qt:F;return!e&&M(o,`iterate`,nt),a.forEach((e,t)=>n.call(r,s(e),s(t),i))}};return s(n,e?{add:Ot(`add`),set:Ot(`set`),delete:Ot(`delete`),clear:Ot(`clear`)}:{add(e){let n=P(this),r=Et(n),i=P(e),a=!t&&!N(e)&&!Wt(e)?i:e;return r.has.call(n,a)||D(e,a)&&r.has.call(n,e)||D(i,a)&&r.has.call(n,i)||(n.add(a),at(n,`add`,a,a)),this},set(e,n){!t&&!N(n)&&!Wt(n)&&(n=P(n));let r=P(this),{has:i,get:a}=Et(r),o=i.call(r,e);o||=(e=P(e),i.call(r,e));let s=a.call(r,e);return r.set(e,n),o?D(n,s)&&at(r,`set`,e,n,s):at(r,`add`,e,n),this},delete(e){let t=P(this),{has:n,get:r}=Et(t),i=n.call(t,e);i||=(e=P(e),n.call(t,e));let a=r?r.call(t,e):void 0,o=t.delete(e);return i&&at(t,`delete`,e,void 0,a),o},clear(){let e=P(this),t=e.size!==0,n=e.clear();return t&&at(e,`clear`,void 0,void 0,void 0),n}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(r=>{n[r]=Dt(r,e,t)}),n}function At(e,t){let n=kt(e,t);return(t,r,i)=>r===`__v_isReactive`?!e:r===`__v_isReadonly`?e:r===`__v_raw`?t:Reflect.get(u(n,r)&&r in t?n:t,r,i)}var jt={get:At(!1,!1)},Mt={get:At(!1,!0)},Nt={get:At(!0,!1)},Pt=new WeakMap,Ft=new WeakMap,It=new WeakMap,Lt=new WeakMap;function Rt(e){switch(e){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function zt(e){return Wt(e)?e:Ht(e,!1,St,jt,Pt)}function Bt(e){return Ht(e,!1,wt,Mt,Ft)}function Vt(e){return Ht(e,!0,Ct,Nt,It)}function Ht(e,t,n,r,i){if(!y(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;let a=i.get(e);if(a)return a;let o=Rt(C(e));if(o===0)return e;let s=new Proxy(e,o===2?r:n);return i.set(e,s),s}function Ut(e){return Wt(e)?Ut(e.__v_raw):!!(e&&e.__v_isReactive)}function Wt(e){return!!(e&&e.__v_isReadonly)}function N(e){return!!(e&&e.__v_isShallow)}function Gt(e){return e?!!e.__v_raw:!1}function P(e){let t=e&&e.__v_raw;return t?P(t):e}function Kt(e){return!u(e,`__v_skip`)&&Object.isExtensible(e)&&se(e,`__v_skip`,!0),e}var F=e=>y(e)?zt(e):e,qt=e=>y(e)?Vt(e):e;function I(e){return e?e.__v_isRef===!0:!1}function Jt(e){return Xt(e,!1)}function Yt(e){return Xt(e,!0)}function Xt(e,t){return I(e)?e:new Zt(e,t)}var Zt=class{constructor(e,t){this.dep=new $e,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:P(e),this._value=t?e:F(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||N(e)||Wt(e);e=n?e:P(e),D(e,t)&&(this._rawValue=e,this._value=n?e:F(e),this.dep.trigger())}};function Qt(e){return I(e)?e.value:e}var $t={get:(e,t,n)=>t===`__v_raw`?e:Qt(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let i=e[t];return I(i)&&!I(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function en(e){return Ut(e)?e:new Proxy(e,$t)}var tn=class{constructor(e){this.__v_isRef=!0,this._value=void 0;let t=this.dep=new $e,{get:n,set:r}=e(t.track.bind(t),t.trigger.bind(t));this._get=n,this._set=r}get value(){return this._value=this._get()}set value(e){this._set(e)}};function nn(e){return new tn(e)}var rn=class{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new $e(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ze-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(this.flags&8)&&j!==this)return Le(this,!0),!0}get value(){let e=this.dep.track();return Ue(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}};function an(e,t,n=!1){let r,i;return g(e)?r=e:(r=e.get,i=e.set),new rn(r,i,n)}var on={},sn=new WeakMap,cn=void 0;function ln(e,t=!1,n=cn){if(n){let t=sn.get(n);t||sn.set(n,t=[]),t.push(e)}}function un(e,n,i=t){let{immediate:a,deep:o,once:s,scheduler:l,augmentJob:u,call:f}=i,p=e=>o?e:N(e)||o===!1||o===0?dn(e,1):dn(e),m,h,_,v,y=!1,b=!1;if(I(e)?(h=()=>e.value,y=N(e)):Ut(e)?(h=()=>p(e),y=!0):d(e)?(b=!0,y=e.some(e=>Ut(e)||N(e)),h=()=>e.map(e=>{if(I(e))return e.value;if(Ut(e))return p(e);if(g(e))return f?f(e,2):e()})):h=g(e)?n?f?()=>f(e,2):e:()=>{if(_){Je();try{_()}finally{Ye()}}let t=cn;cn=m;try{return f?f(e,3,[v]):e(v)}finally{cn=t}}:r,n&&o){let e=h,t=o===!0?1/0:o;h=()=>dn(e(),t)}let x=je(),S=()=>{m.stop(),x&&x.active&&c(x.effects,m)};if(s&&n){let e=n;n=(...t)=>{let n=e(...t);return S(),n}}let C=b?Array(e.length).fill(on):on,w=e=>{if(m.flags&1&&(m.dirty||e)){if(n){let t=m.run();if(e||o||y||(b?t.some((e,t)=>D(e,C[t])):D(t,C))){_&&_();let e=cn;cn=m;try{let e=[t,C===on?void 0:b&&C[0]===on?[]:C,v];C=t,f?f(n,3,e):n(...e)}finally{cn=e}}}else m.run()}};return u&&u(w),m=new Ne(h),m.scheduler=l?()=>l(w,!1):w,v=e=>ln(e,!1,m),_=m.onStop=()=>{let e=sn.get(m);if(e){if(f)f(e,4);else for(let t of e)t();sn.delete(m)}},n?a?w(!0):C=m.run():l?l(w.bind(null,!0),!0):m.run(),S.pause=m.pause.bind(m),S.resume=m.resume.bind(m),S.stop=S,S}function dn(e,t=1/0,n){if(t<=0||!y(e)||e.__v_skip||(n||=new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,I(e))dn(e.value,t,n);else if(d(e))for(let r=0;r<e.length;r++)dn(e[r],t,n);else if(p(e)||f(e))e.forEach(e=>{dn(e,t,n)});else if(w(e)){for(let r in e)dn(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&dn(e[r],t,n)}return e}function fn(e,t,n,r){try{return r?e(...r):e()}catch(e){pn(e,t,n)}}function L(e,t,n,r){if(g(e)){let i=fn(e,t,n,r);return i&&b(i)&&i.catch(e=>{pn(e,t,n)}),i}if(d(e)){let i=[];for(let a=0;a<e.length;a++)i.push(L(e[a],t,n,r));return i}}function pn(e,n,r,i=!0){let a=n?n.vnode:null,{errorHandler:o,throwUnhandledErrorInProduction:s}=n&&n.appContext.config||t;if(n){let t=n.parent,i=n.proxy,a=`https://vuejs.org/error-reference/#runtime-${r}`;for(;t;){let n=t.ec;if(n){for(let t=0;t<n.length;t++)if(n[t](e,i,a)===!1)return}t=t.parent}if(o){Je(),fn(o,null,10,[e,i,a]),Ye();return}}mn(e,r,a,i,s)}function mn(e,t,n,r=!0,i=!1){if(i)throw e;console.error(e)}var R=[],hn=-1,gn=[],_n=null,vn=0,yn=Promise.resolve(),bn=null;function xn(e){let t=bn||yn;return e?t.then(this?e.bind(this):e):t}function Sn(e){let t=hn+1,n=R.length;for(;t<n;){let r=t+n>>>1,i=R[r],a=On(i);a<e||a===e&&i.flags&2?t=r+1:n=r}return t}function Cn(e){if(!(e.flags&1)){let t=On(e),n=R[R.length-1];!n||!(e.flags&2)&&t>=On(n)?R.push(e):R.splice(Sn(t),0,e),e.flags|=1,wn()}}function wn(){bn||=yn.then(kn)}function Tn(e){if(!d(e))_n&&e.id===-1?_n.splice(vn+1,0,e):e.flags&1||(gn.push(e),e.flags|=1);else for(let t=0;t<e.length;t++)gn.push(e[t]);wn()}function En(e,t,n=hn+1){for(;n<R.length;n++){let t=R[n];if(t&&t.flags&2){if(e&&t.id!==e.uid)continue;R.splice(n,1),n--,t.flags&4&&(t.flags&=-2),t(),t.flags&4||(t.flags&=-2)}}}function Dn(e){if(gn.length){let e=[...new Set(gn)].sort((e,t)=>On(e)-On(t));if(gn.length=0,_n){for(let t=0;t<e.length;t++)_n.push(e[t]);return}for(_n=e,vn=0;vn<_n.length;vn++){let e=_n[vn];e.flags&4&&(e.flags&=-2),e.flags&8||e(),e.flags&=-2}_n=null,vn=0}}var On=e=>e.id==null?e.flags&2?-1:1/0:e.id;function kn(e){try{for(hn=0;hn<R.length;hn++){let e=R[hn];e&&!(e.flags&8)&&(e.flags&4&&(e.flags&=-2),fn(e,e.i,e.i?15:14),e.flags&4||(e.flags&=-2))}}finally{for(;hn<R.length;hn++){let e=R[hn];e&&(e.flags&=-2)}hn=-1,R.length=0,Dn(e),bn=null,(R.length||gn.length)&&kn(e)}}var z=null,An=null;function jn(e){let t=z;return z=e,An=e&&e.type.__scopeId||null,t}function Mn(e,t=z,n){if(!t||e._n)return e;let r=(...n)=>{r._d&&wa(-1);let i=jn(t),a=ba.length,o;try{o=e(...n)}finally{for(let e=ba.length;e>a;e--)Sa();jn(i),r._d&&wa(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function Nn(e,n){if(z===null)return e;let r=ao(z),i=e.dirs||=[];for(let e=0;e<n.length;e++){let[a,o,s,c=t]=n[e];a&&(g(a)&&(a={mounted:a,updated:a}),a.deep&&dn(o),i.push({dir:a,instance:r,value:o,oldValue:void 0,arg:s,modifiers:c}))}return e}function Pn(e,t,n,r){let i=e.dirs,a=t&&t.dirs;for(let o=0;o<i.length;o++){let s=i[o];a&&(s.oldValue=a[o].value);let c=s.dir[r];c&&(Je(),L(c,n,8,[e.el,s,e,t]),Ye())}}function Fn(e,t){if(Y){let n=Y.provides,r=Y.parent&&Y.parent.provides;r===n&&(n=Y.provides=Object.create(r)),n[e]=t}}function In(e,t,n=!1){let r=Ka();if(r||Oi){let i=Oi?Oi._context.provides:r?r.parent==null||r.ce?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides:void 0;if(i&&e in i)return i[e];if(arguments.length>1)return n&&g(t)?t.call(r&&r.proxy):t}}var Ln=Symbol.for(`v-scx`),Rn=()=>In(Ln);function zn(e,t){return Hn(e,null,t)}function Bn(e,t){return Hn(e,null,{flush:`sync`})}function Vn(e,t,n){return Hn(e,t,n)}function Hn(e,n,i=t){let{immediate:a,deep:o,flush:c,once:l}=i,u=s({},i),d=n&&a||!n&&c!==`post`,f;if(Qa){if(c===`sync`){let e=Rn();f=e.__watcherHandles||=[]}else if(!d){let e=()=>{};return e.stop=r,e.resume=r,e.pause=r,e}}let p=Y;u.call=(e,t,n)=>L(e,p,t,n);let m=!1;c===`post`?u.scheduler=e=>{U(e,p&&p.suspense)}:c!==`sync`&&(m=!0,u.scheduler=(e,t)=>{t?e():Cn(e)}),u.augmentJob=e=>{n&&(e.flags|=4),m&&(e.flags|=2,p&&(e.id=p.uid,e.i=p))};let h=un(e,n,u);return Qa&&(f?f.push(h):d&&h()),h}function Un(e,t,n){let r=this.proxy,i=_(e)?e.includes(`.`)?Wn(r,e):()=>r[e]:e.bind(r,r),a;g(t)?a=t:(a=t.handler,n=t);let o=Ya(this),s=Hn(i,a.bind(r),n);return o(),s}function Wn(e,t){let n=t.split(`.`);return()=>{let t=e;for(let e=0;e<n.length&&t;e++)t=t[n[e]];return t}}var Gn=new WeakMap,Kn=Symbol(`_vte`),qn=e=>e.__isTeleport,Jn=e=>e&&(e.disabled||e.disabled===``),Yn=e=>e&&(e.defer||e.defer===``),Xn=e=>typeof SVGElement<`u`&&e instanceof SVGElement,Zn=e=>typeof MathMLElement==`function`&&e instanceof MathMLElement,Qn=(e,t)=>{let n=e&&e.to;return _(n)?t?t(n):null:n},$n={name:`Teleport`,__isTeleport:!0,process(e,t,n,r,i,a,o,s,c,l){let{mc:u,pc:d,pbc:f,o:{insert:p,querySelector:m,createText:h,createComment:g,parentNode:_}}=l,v=Jn(t.props),{dynamicChildren:y}=t,b=(e,t,n)=>{e.shapeFlag&16&&u(e.children,t,n,i,a,o,s,c)},x=(e=t)=>{let n=Jn(e.props),r=e.target=Qn(e.props,m),a=ir(r,e,h,p);r&&(o!==`svg`&&Xn(r)?o=`svg`:o!==`mathml`&&Zn(r)&&(o=`mathml`),i&&i.isCE&&(i.ce._teleportTargets||(i.ce._teleportTargets=new Set)).add(r),n||(b(e,r,a),rr(e,!1)))},S=e=>{let t=()=>{if(Gn.get(e)===t){if(Gn.delete(e),Jn(e.props)){let t=_(e.el)||n;b(e,t,e.anchor),rr(e,!0)}x(e)}};Gn.set(e,t),U(t,a)};if(e==null){let e=t.el=h(``),i=t.anchor=h(``);if(p(e,n,r),p(i,n,r),Yn(t.props)||a&&a.pendingBranch){S(t);return}v&&(b(t,n,i),rr(t,!0)),x()}else{t.el=e.el;let r=t.anchor=e.anchor,u=Gn.get(e);if(u){u.flags|=8,Gn.delete(e),S(t);return}t.targetStart=e.targetStart;let p=t.target=e.target,h=t.targetAnchor=e.targetAnchor,g=Jn(e.props),_=g?n:p,b=g?r:h;if(o===`svg`||Xn(p)?o=`svg`:(o===`mathml`||Zn(p))&&(o=`mathml`),y?(f(e.dynamicChildren,y,_,i,a,o,s),da(e,t,!0)):c||d(e,t,_,b,i,a,o,s,!1),v)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):er(t,n,r,l,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){let e=Qn(t.props,m);e&&(t.target=e,er(t,e,null,l,0))}else g&&er(t,p,h,l,1);rr(t,v)}},remove(e,t,n,{um:r,o:{remove:i}},a){let{shapeFlag:o,children:s,anchor:c,targetStart:l,targetAnchor:u,target:d,props:f}=e,p=Jn(f),m=a||!p,h=Gn.get(e);if(h&&(h.flags|=8,Gn.delete(e)),d&&(i(l),i(u)),a&&i(c),!h&&(p||d)&&o&16)for(let e=0;e<s.length;e++){let i=s[e];r(i,t,n,m,!!i.dynamicChildren)}},move:er,hydrate:tr};function er(e,t,n,{o:{insert:r},m:i},a=2){a===0&&r(e.targetAnchor,t,n);let{el:o,anchor:s,shapeFlag:c,children:l,props:u}=e,d=a===2;if(d&&r(o,t,n),!Gn.has(e)&&(!d||Jn(u))&&c&16)for(let e=0;e<l.length;e++)i(l[e],t,n,2);d&&r(s,t,n)}function tr(e,t,n,r,i,a,{o:{nextSibling:o,parentNode:s,querySelector:c,insert:l,createText:u}},d){function f(e,n){let r=n;for(;r;){if(r&&r.nodeType===8){if(r.data===`teleport start anchor`)t.targetStart=r;else if(r.data===`teleport anchor`){t.targetAnchor=r,e._lpa=t.targetAnchor&&o(t.targetAnchor);break}}r=o(r)}}function p(e,t){t.anchor=d(o(e),t,s(e),n,r,i,a)}let m=t.target=Qn(t.props,c),h=Jn(t.props);if(m){let c=m._lpa||m.firstChild;t.shapeFlag&16&&(h?(p(e,t),f(m,c),t.targetAnchor||ir(m,t,u,l,s(e)===m?e:null)):(t.anchor=o(e),f(m,c),t.targetAnchor||ir(m,t,u,l),d(c&&o(c),t,m,n,r,i,a))),rr(t,h)}else h&&t.shapeFlag&16&&(p(e,t),t.targetStart=e,t.targetAnchor=o(e));return t.anchor&&o(t.anchor)}var nr=$n;function rr(e,t){let n=e.ctx;if(n&&n.ut){let r,i;for(t?(r=e.el,i=e.anchor):(r=e.targetStart,i=e.targetAnchor);r&&r!==i;)r.nodeType===1&&r.setAttribute(`data-v-owner`,n.uid),r=r.nextSibling;n.ut()}}function ir(e,t,n,r,i=null){let a=t.targetStart=n(``),o=t.targetAnchor=n(``);return a[Kn]=o,e&&(r(a,e,i),r(o,e,i)),o}var B=Symbol(`_leaveCb`),ar=Symbol(`_enterCb`);function or(){let e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Hr(()=>{e.isMounted=!0}),Gr(()=>{e.isUnmounting=!0}),e}var V=[Function,Array],sr={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:V,onEnter:V,onAfterEnter:V,onEnterCancelled:V,onBeforeLeave:V,onLeave:V,onAfterLeave:V,onLeaveCancelled:V,onBeforeAppear:V,onAppear:V,onAfterAppear:V,onAppearCancelled:V},cr=e=>{let t=e.subTree;return t.component?cr(t.component):t},lr={name:`BaseTransition`,props:sr,setup(e,{slots:t}){let n=Ka(),r=or();return()=>{let i=t.default&&_r(t.default(),!0),a=i&&i.length?ur(i):n.subTree?Ra():void 0;if(!a)return;let o=P(e),{mode:s}=o;if(r.isLeaving)return mr(a);let c=hr(a);if(!c)return mr(a);let l=pr(c,o,r,n,e=>l=e);c.type!==G&&gr(c,l);let u=n.subTree&&hr(n.subTree);if(u&&u.type!==G&&!ka(u,c)&&cr(n).type!==G){let e=pr(u,o,r,n);if(gr(u,e),s===`out-in`&&c.type!==G)return r.isLeaving=!0,e.afterLeave=()=>{r.isLeaving=!1,n.job.flags&8||n.update(),delete e.afterLeave,u=void 0},mr(a);s===`in-out`&&c.type!==G?e.delayLeave=(e,t,n)=>{let i=fr(r,u);i[String(u.key)]=u,e[B]=()=>{t(),e[B]=void 0,delete l.delayedLeave,u=void 0},l.delayedLeave=()=>{n(),delete l.delayedLeave,u=void 0}}:u=void 0}else u&&=void 0;return a}}};function ur(e){let t=e[0];if(e.length>1){for(let n of e)if(n.type!==G){t=n;break}}return t}var dr=lr;function fr(e,t){let{leavingVNodes:n}=e,r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function pr(e,t,n,r,i){let{appear:a,mode:o,persisted:s=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:p,onLeave:m,onAfterLeave:h,onLeaveCancelled:g,onBeforeAppear:_,onAppear:v,onAfterAppear:y,onAppearCancelled:b}=t,x=String(e.key),S=fr(n,e),C=(e,t)=>{e&&L(e,r,9,t)},w=(e,t)=>{let n=t[1];C(e,t),d(e)?e.every(e=>e.length<=1)&&n():e.length<=1&&n()},ee={mode:o,persisted:s,beforeEnter(t){let r=c;if(!n.isMounted){if(a)r=_||c;else return}t[B]&&t[B](!0);let i=S[x];i&&ka(e,i)&&i.el[B]&&i.el[B](),C(r,[t])},enter(t){if(S[x]===e)return;let r=l,i=u,o=f;if(!n.isMounted){if(a)r=v||l,i=y||u,o=b||f;else return}let s=!1;t[ar]=e=>{s||(s=!0,C(e?o:i,[t]),ee.delayedLeave&&ee.delayedLeave(),t[ar]=void 0)};let c=t[ar].bind(null,!1);r?w(r,[t,c]):c()},leave(t,r){let i=String(e.key);if(t[ar]&&t[ar](!0),n.isUnmounting)return r();C(p,[t]);let a=!1;t[B]=n=>{a||(a=!0,r(),C(n?g:h,[t]),t[B]=void 0,S[i]===e&&delete S[i])};let o=t[B].bind(null,!1);S[i]=e,m?w(m,[t,o]):o()},clone(e){let a=pr(e,t,n,r,i);return i&&i(a),a}};return ee}function mr(e){if(Ar(e))return e=Fa(e),e.children=null,e}function hr(e){if(!Ar(e))return qn(e.type)&&e.children?ur(e.children):e;if(e.component)return e.component.subTree;let{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&g(n.default))return n.default()}}function gr(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;let n=e.component.subTree;gr(qn(n.type)&&hr(n)||n,t)}else e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function _r(e,t=!1,n){let r=[],i=0;for(let a=0;a<e.length;a++){let o=e[a],s=n==null?o.key:String(n)+String(o.key==null?a:o.key);o.type===W?(o.patchFlag&128&&i++,r=r.concat(_r(o.children,t,s))):(t||o.type!==G)&&r.push(s==null?o:Fa(o,{key:s}))}if(i>1)for(let e=0;e<r.length;e++)r[e].patchFlag=-2;return r}function vr(e,t){return g(e)?s({name:e.name},t,{setup:e}):e}function yr(){let e=Ka();return e?(e.appContext.config.idPrefix||`v`)+`-`+e.ids[0]+e.ids[1]++:``}function br(e){e.ids=[e.ids[0]+e.ids[2]+++`-`,0,0]}function xr(e,t){let n;return!!((n=Object.getOwnPropertyDescriptor(e,t))&&!n.configurable)}var Sr=new WeakMap;function Cr(e,n,r,a,o=!1){if(d(e)){e.forEach((e,t)=>Cr(e,n&&(d(n)?n[t]:n),r,a,o));return}if(Dr(a)&&!o){a.shapeFlag&512&&a.type.__asyncResolved&&a.component.subTree.component&&Cr(e,n,r,a.component.subTree);return}let s=a.shapeFlag&4?ao(a.component):a.el,l=o?null:s,{i:f,r:p}=e,m=n&&n.r,h=f.refs===t?f.refs={}:f.refs,v=f.setupState,y=P(v),b=v===t?i:e=>!xr(h,e)&&u(y,e),x=(e,t)=>!(t&&xr(h,t));if(m!=null&&m!==p){if(wr(n),_(m))h[m]=null,b(m)&&(v[m]=null);else if(I(m)){let e=n;x(m,e.k)&&(m.value=null),e.k&&(h[e.k]=null)}}if(g(p))fn(p,f,12,[l,h]);else{let t=_(p),n=I(p);if(t||n){let i=()=>{if(e.f){let n=t?b(p)?v[p]:h[p]:x(p)||!e.k?p.value:h[e.k];if(o)d(n)&&c(n,s);else if(d(n))n.includes(s)||n.push(s);else if(t)h[p]=[s],b(p)&&(v[p]=h[p]);else{let t=[s];x(p,e.k)&&(p.value=t),e.k&&(h[e.k]=t)}}else t?(h[p]=l,b(p)&&(v[p]=l)):n&&(x(p,e.k)&&(p.value=l),e.k&&(h[e.k]=l))};if(l){let t=()=>{i(),Sr.delete(e)};t.id=-1,Sr.set(e,t),U(t,r)}else wr(e),i()}}}function wr(e){let t=Sr.get(e);t&&(t.flags|=8,Sr.delete(e))}var Tr=e=>e.nodeType===8;de().requestIdleCallback,de().cancelIdleCallback;function Er(e,t){if(Tr(e)&&e.data===`[`){let n=1,r=e.nextSibling;for(;r;){if(r.nodeType===1){if(t(r)===!1)break}else if(Tr(r)){if(r.data===`]`){if(--n===0)break}else r.data===`[`&&n++}r=r.nextSibling}}else t(e)}var Dr=e=>!!e.type.__asyncLoader;function Or(e){g(e)&&(e={loader:e});let{loader:t,loadingComponent:n,errorComponent:r,delay:i=200,hydrate:a,timeout:o,suspensible:s=!0,onError:c}=e,l=null,u,d=0,f=()=>(d++,l=null,p()),p=()=>{let e;return l||(e=l=t().catch(e=>{if(e=e instanceof Error?e:Error(String(e)),c)return new Promise((t,n)=>{c(e,()=>t(f()),()=>n(e),d+1)});throw e}).then(t=>e!==l&&l?l:(t&&(t.__esModule||t[Symbol.toStringTag]===`Module`)&&(t=t.default),u=t,t)))};return vr({name:`AsyncComponentWrapper`,__asyncLoader:p,__asyncHydrate(e,t,n){let r=e.isConnected,i=!1;(t.bu||=[]).push(()=>i=!0);let o=()=>{i||!e.parentNode||r&&!e.isConnected||n()},s=a?()=>{let n=a(o,t=>Er(e,t));n&&(t.bum||=[]).push(n)}:o;u?s():p().then(()=>!t.isUnmounted&&s())},get __asyncResolved(){return u},setup(){let e=Y;if(br(e),u)return()=>kr(u,e);let t=t=>{l=null,pn(t,e,13,!r)};if(s&&e.suspense||Qa)return p().then(t=>()=>kr(t,e)).catch(e=>(t(e),()=>r?q(r,{error:e}):null));let a=Jt(!1),c=Jt(),d=Jt(!!i),f,m;return Kr(()=>{f!=null&&clearTimeout(f),m!=null&&clearTimeout(m)}),i&&(m=setTimeout(()=>{e.isUnmounted||(d.value=!1)},i)),o!=null&&(f=setTimeout(()=>{if(!e.isUnmounted&&!a.value&&!c.value){let e=Error(`Async component timed out after ${o}ms.`);t(e),c.value=e}},o)),p().then(()=>{e.isUnmounted||(a.value=!0,e.parent&&Ar(e.parent.vnode)&&e.parent.update())}).catch(n=>{if(e.isUnmounted){l=null;return}t(n),c.value=n}),()=>{if(a.value&&u)return kr(u,e);if(c.value&&r)return q(r,{error:c.value});if(n&&!d.value)return kr(n,e)}}})}function kr(e,t){let{ref:n,props:r,children:i,ce:a}=t.vnode,o=q(e,r,i);return o.ref=n,o.ce=a,delete t.vnode.ce,o}var Ar=e=>e.type.__isKeepAlive,jr={name:`KeepAlive`,__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){let n=Ka(),r=n.ctx;if(!r.renderer)return()=>{let e=t.default&&t.default();return e&&e.length===1?e[0]:e};let i=new Map,a=new Set,o=null,s=n.suspense,{renderer:{p:c,m:l,um:u,o:{createElement:d}}}=r,f=d(`div`);r.activate=(e,t,n,r,i)=>{let a=e.component;l(e,t,n,0,s),c(a.vnode,e,t,n,a,s,r,e.slotScopeIds,i),U(()=>{a.isDeactivated=!1,a.a&&O(a.a);let t=e.props&&e.props.onVnodeMounted;t&&J(t,a.parent,e)},s)},r.deactivate=e=>{let t=e.component;ma(t.m),ma(t.a),l(e,f,null,1,s),U(()=>{t.da&&O(t.da);let n=e.props&&e.props.onVnodeUnmounted;n&&J(n,t.parent,e),t.isDeactivated=!0},s)};function p(e){Lr(e),u(e,n,s,!0)}function m(e){i.forEach((t,n)=>{let r=oo(Dr(t)?t.type.__asyncResolved||{}:t.type);r&&!e(r)&&h(n)})}function h(e){let t=i.get(e);t&&(!o||!ka(t,o))?p(t):o&&Lr(o),i.delete(e),a.delete(e)}Vn(()=>[e.include,e.exclude],([e,t])=>{e&&m(t=>Mr(e,t)),t&&m(e=>!Mr(t,e))},{flush:`post`,deep:!0});let g=null,_=()=>{g!=null&&(ga(n.subTree.type)?U(()=>{let e=Rr(n.subTree);e.component&&i.set(g,e)},n.subTree.suspense):i.set(g,Rr(n.subTree)))};return Hr(_),Wr(_),Gr(()=>{i.forEach(e=>{let{subTree:t,suspense:r}=n,i=Rr(t);if(e.type===i.type&&e.key===i.key){Lr(i);let e=i.component.da;e&&U(e,r);return}p(e)})}),()=>{if(g=null,!t.default)return o=null;let n=t.default(),r=n[0];if(n.length>1)return o=null,n;if(!Oa(r)||!(r.shapeFlag&4)&&!(r.shapeFlag&128))return o=null,r;let s=Rr(r);if(s.type===G)return o=null,s;let c=s.type,l=oo(Dr(s)?s.type.__asyncResolved||{}:c),{include:u,exclude:d,max:f}=e;if(u&&(!l||!Mr(u,l))||d&&l&&Mr(d,l))return s.shapeFlag&=-257,o=s,r;let p=s.key==null?c:s.key,m=i.get(p);return s.el&&(s=Fa(s),r.shapeFlag&128&&(r.ssContent=s)),g=p,m?(s.el=m.el,s.component=m.component,s.transition&&gr(s,s.transition),s.shapeFlag|=512,a.delete(p),a.add(p)):(a.add(p),f&&a.size>parseInt(f,10)&&h(a.values().next().value)),s.shapeFlag|=256,o=s,ga(r.type)?r:s}}};function Mr(e,t){return d(e)?e.some(e=>Mr(e,t)):_(e)?e.split(`,`).includes(t):h(e)?(e.lastIndex=0,e.test(t)):!1}function Nr(e,t){Fr(e,`a`,t)}function Pr(e,t){Fr(e,`da`,t)}function Fr(e,t,n=Y){let r=e.__wdc||=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()};if(zr(t,r,n),n){let e=n.parent;for(;e&&e.parent;)Ar(e.parent.vnode)&&Ir(r,t,n,e),e=e.parent}}function Ir(e,t,n,r){let i=zr(t,e,r,!0);Kr(()=>{c(r[t],i)},n)}function Lr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function Rr(e){return e.shapeFlag&128?e.ssContent:e}function zr(e,t,n=Y,r=!1){if(n){let i=n[e]||(n[e]=[]),a=t.__weh||=(...r)=>{Je();let i=Ya(n),a=L(t,n,e,r);return i(),Ye(),a};return r?i.unshift(a):i.push(a),a}}var Br=e=>(t,n=Y)=>{(!Qa||e===`sp`)&&zr(e,(...e)=>t(...e),n)},Vr=Br(`bm`),Hr=Br(`m`),Ur=Br(`bu`),Wr=Br(`u`),Gr=Br(`bum`),Kr=Br(`um`),qr=Br(`sp`),Jr=Br(`rtg`),Yr=Br(`rtc`);function Xr(e,t=Y){zr(`ec`,e,t)}var Zr=`components`,Qr=Symbol.for(`v-ndc`);function $r(e){return _(e)?ei(Zr,e,!1)||e:e||Qr}function ei(e,t,n=!0,r=!1){let i=z||Y;if(i){let n=i.type;if(e===Zr){let e=oo(n,!1);if(e&&(e===t||e===T(t)||e===ae(T(t))))return n}let a=ti(i[e]||n[e],t)||ti(i.appContext[e],t);return!a&&r?n:a}}function ti(e,t){return e&&(e[t]||e[T(t)]||e[ae(T(t))])}function ni(e,t,n,r){let i,a=n&&n[r],o=d(e);if(o||_(e)){let n=o&&Ut(e),r=!1,s=!1;n&&(r=!N(e),s=Wt(e),e=st(e)),i=Array(e.length);for(let n=0,o=e.length;n<o;n++)i[n]=t(r?s?qt(F(e[n])):F(e[n]):e[n],n,void 0,a&&a[n])}else if(typeof e==`number`){i=Array(e);for(let n=0;n<e;n++)i[n]=t(n+1,n,void 0,a&&a[n])}else if(y(e)){if(e[Symbol.iterator])i=Array.from(e,(e,n)=>t(e,n,void 0,a&&a[n]));else{let n=Object.keys(e);i=Array(n.length);for(let r=0,o=n.length;r<o;r++){let o=n[r];i[r]=t(e[o],o,r,a&&a[r])}}}else i=[];return n&&(n[r]=i),i}function ri(e,t,n,r,i,a){if(n??={},z.ce||z.parent&&Dr(z.parent)&&z.parent.ce){let e=a!=null&&n.key==null?s({},n,{key:a}):n,i=Object.keys(e).length>0;return t!=="default"&&(e.name=t),xa(),Da(W,null,[q(`slot`,e,r&&r())],i?-2:64)}let o=e[t];o&&o._c&&(o._d=!1);let c=ba.length;xa();let l;try{let i=o&&ii(o(n)),s=n.key||a||i&&i.key;l=Da(W,{key:(s&&!v(s)?s:`_${t}`)+(!i&&r?`_fb`:``)},i||(r?r():[]),i&&e._===1?64:-2)}catch(e){for(let e=ba.length;e>c;e--)Sa();throw e}finally{o&&o._c&&(o._d=!0)}return!i&&l.scopeId&&(l.slotScopeIds=[l.scopeId+`-s`]),l}function ii(e){return e.some(e=>!Oa(e)||!(e.type===G||e.type===W&&!ii(e.children)))?e:null}var ai=e=>e?Za(e)?ao(e):ai(e.parent):null,oi=s(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ai(e.parent),$root:e=>ai(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>gi(e),$forceUpdate:e=>e.f||=()=>{Cn(e.update)},$nextTick:e=>e.n||=xn.bind(e.proxy),$watch:e=>Un.bind(e)}),si=(e,n)=>e!==t&&!e.__isScriptSetup&&u(e,n),ci={get({_:e},n){if(n===`__v_skip`)return!0;let{ctx:r,setupState:i,data:a,props:o,accessCache:s,type:c,appContext:l}=e;if(n[0]!==`$`){let e=s[n];if(e!==void 0)switch(e){case 1:return i[n];case 2:return a[n];case 4:return r[n];case 3:return o[n]}else if(si(i,n))return s[n]=1,i[n];else if(a!==t&&u(a,n))return s[n]=2,a[n];else if(u(o,n))return s[n]=3,o[n];else if(r!==t&&u(r,n))return s[n]=4,r[n];else di&&(s[n]=0)}let d=oi[n],f,p;if(d)return n===`$attrs`&&M(e.attrs,`get`,``),d(e);if((f=c.__cssModules)&&(f=f[n]))return f;if(r!==t&&u(r,n))return s[n]=4,r[n];if(p=l.config.globalProperties,u(p,n))return p[n]},set({_:e},n,r){let{data:i,setupState:a,ctx:o}=e;return si(a,n)?(a[n]=r,!0):i!==t&&u(i,n)?(i[n]=r,!0):u(e.props,n)||n[0]===`$`&&n.slice(1)in e?!1:(o[n]=r,!0)},has({_:{data:e,setupState:n,accessCache:r,ctx:i,appContext:a,props:o,type:s}},c){let l;return!!(r[c]||e!==t&&c[0]!==`$`&&u(e,c)||si(n,c)||u(o,c)||u(i,c)||u(oi,c)||u(a.config.globalProperties,c)||(l=s.__cssModules)&&l[c])},defineProperty(e,t,n){return n.get==null?u(n,`value`)&&this.set(e,t,n.value,null):e._.accessCache[t]=0,Reflect.defineProperty(e,t,n)}};function li(e){return d(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}function ui(e,t){return!e||!t?e||t:d(e)&&d(t)?e.concat(t):s({},li(e),li(t))}var di=!0;function fi(e){let t=gi(e),n=e.proxy,i=e.ctx;di=!1,t.beforeCreate&&mi(t.beforeCreate,e,`bc`);let{data:a,computed:o,methods:s,watch:c,provide:l,inject:u,created:f,beforeMount:p,mounted:m,beforeUpdate:h,updated:_,activated:v,deactivated:b,beforeDestroy:x,beforeUnmount:S,destroyed:C,unmounted:w,render:ee,renderTracked:te,renderTriggered:ne,errorCaptured:re,serverPrefetch:T,expose:ie,inheritAttrs:E,components:ae,directives:oe,filters:D}=t;if(u&&pi(u,i,null),s)for(let e in s){let t=s[e];g(t)&&(i[e]=t.bind(n))}if(a){let t=a.call(n,n);y(t)&&(e.data=zt(t))}if(di=!0,o)for(let e in o){let t=o[e],a=co({get:g(t)?t.bind(n,n):g(t.get)?t.get.bind(n,n):r,set:!g(t)&&g(t.set)?t.set.bind(n):r});Object.defineProperty(i,e,{enumerable:!0,configurable:!0,get:()=>a.value,set:e=>a.value=e})}if(c)for(let e in c)hi(c[e],i,n,e);if(l){let e=g(l)?l.call(n):l;Reflect.ownKeys(e).forEach(t=>{Fn(t,e[t])})}f&&mi(f,e,`c`);function O(e,t){d(t)?t.forEach(t=>e(t.bind(n))):t&&e(t.bind(n))}if(O(Vr,p),O(Hr,m),O(Ur,h),O(Wr,_),O(Nr,v),O(Pr,b),O(Xr,re),O(Yr,te),O(Jr,ne),O(Gr,S),O(Kr,w),O(qr,T),d(ie)){if(ie.length){let t=e.exposed||={};ie.forEach(e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t,enumerable:!0})})}else e.exposed||={}}ee&&e.render===r&&(e.render=ee),E!=null&&(e.inheritAttrs=E),ae&&(e.components=ae),oe&&(e.directives=oe),T&&br(e)}function pi(e,t,n=r){d(e)&&(e=xi(e));for(let n in e){let r=e[n],i;i=y(r)?`default`in r?In(r.from||n,r.default,!0):In(r.from||n):In(r),I(i)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>i.value,set:e=>i.value=e}):t[n]=i}}function mi(e,t,n){L(d(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}function hi(e,t,n,r){let i=r.includes(`.`)?Wn(n,r):()=>n[r];if(_(e)){let n=t[e];g(n)&&Vn(i,n)}else if(g(e))Vn(i,e.bind(n));else if(y(e)){if(d(e))e.forEach(e=>hi(e,t,n,r));else{let r=g(e.handler)?e.handler.bind(n):t[e.handler];g(r)&&Vn(i,r,e)}}}function gi(e){let t=e.type,{mixins:n,extends:r}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t),c;return s?c=s:!i.length&&!n&&!r?c=t:(c={},i.length&&i.forEach(e=>_i(c,e,o,!0)),_i(c,t,o)),y(t)&&a.set(t,c),c}function _i(e,t,n,r=!1){let{mixins:i,extends:a}=t;a&&_i(e,a,n,!0),i&&i.forEach(t=>_i(e,t,n,!0));for(let i in t)if(!(r&&i===`expose`)){let r=vi[i]||n&&n[i];e[i]=r?r(e[i],t[i]):t[i]}return e}var vi={data:yi,props:Ci,emits:Ci,methods:Si,computed:Si,beforeCreate:H,created:H,beforeMount:H,mounted:H,beforeUpdate:H,updated:H,beforeDestroy:H,beforeUnmount:H,destroyed:H,unmounted:H,activated:H,deactivated:H,errorCaptured:H,serverPrefetch:H,components:Si,directives:Si,watch:wi,provide:yi,inject:bi};function yi(e,t){return t?e?function(){return s(g(e)?e.call(this,this):e,g(t)?t.call(this,this):t)}:t:e}function bi(e,t){return Si(xi(e),xi(t))}function xi(e){if(d(e)){let t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n];return t}return e}function H(e,t){return e?[...new Set([].concat(e,t))]:t}function Si(e,t){return e?s(Object.create(null),e,t):t}function Ci(e,t){return e?d(e)&&d(t)?[...new Set([...e,...t])]:s(Object.create(null),li(e),li(t??{})):t}function wi(e,t){if(!e)return t;if(!t)return e;let n=s(Object.create(null),e);for(let r in t)n[r]=H(e[r],t[r]);return n}function Ti(){return{app:null,config:{isNativeTag:i,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}var Ei=0;function Di(e,t){return function(n,r=null){g(n)||(n=s({},n)),r!=null&&!y(r)&&(r=null);let i=Ti(),a=new WeakSet,o=[],c=!1,l=i.app={_uid:Ei++,_component:n,_props:r,_container:null,_context:i,_instance:null,version:uo,get config(){return i.config},set config(e){},use(e,...t){return a.has(e)||(e&&g(e.install)?(a.add(e),e.install(l,...t)):g(e)&&(a.add(e),e(l,...t))),l},mixin(e){return i.mixins.includes(e)||i.mixins.push(e),l},component(e,t){return t?(i.components[e]=t,l):i.components[e]},directive(e,t){return t?(i.directives[e]=t,l):i.directives[e]},mount(a,o,s){if(!c){let u=l._ceVNode||q(n,r);return u.appContext=i,s===!0?s=`svg`:s===!1&&(s=void 0),o&&t?t(u,a):e(u,a,s),c=!0,l._container=a,a.__vue_app__=l,ao(u.component)}},onUnmount(e){o.push(e)},unmount(){c&&(L(o,l._instance,16),e(null,l._container),delete l._container.__vue_app__)},provide(e,t){return i.provides[e]=t,l},runWithContext(e){let t=Oi;Oi=l;try{return e()}finally{Oi=t}}};return l}}var Oi=null;function ki(e,n,r=t){let i=Ka(),a=T(n),o=E(n),s=Ai(e,a),c=nn((s,c)=>{let l,u=t,d;return Bn(()=>{let t=e[a];D(l,t)&&(l=t,c())}),{get(){return s(),r.get?r.get(l):l},set(e){let s=r.set?r.set(e):e;if(!D(s,l)&&!(u!==t&&D(e,u)))return;let f=i.vnode.props,p=!!(f&&(n in f||a in f||o in f)&&(`onUpdate:${n}`in f||`onUpdate:${a}`in f||`onUpdate:${o}`in f));p||(l=e,c()),i.emit(`update:${n}`,s),D(e,u)&&(D(e,s)&&!D(s,d)||p&&u!==t&&!D(s,l))&&c(),u=e,d=s}}});return c[Symbol.iterator]=()=>{let e=0;return{next(){return e<2?{value:e++?s||t:c,done:!1}:{done:!0}}}},c}var Ai=(e,t)=>t===`modelValue`||t===`model-value`?e.modelModifiers:e[`${t}Modifiers`]||e[`${T(t)}Modifiers`]||e[`${E(t)}Modifiers`];function ji(e,n,...r){if(e.isUnmounted)return;let i=e.vnode.props||t,a=r,o=n.startsWith(`update:`),s=o&&Ai(i,n.slice(7));s&&(s.trim&&(a=r.map(e=>_(e)?e.trim():e)),s.number&&(a=a.map(ce)));let c,l=i[c=oe(n)]||i[c=oe(T(n))];!l&&o&&(l=i[c=oe(E(n))]),l&&L(l,e,6,a);let u=i[c+`Once`];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[c])return;e.emitted[c]=!0,L(u,e,6,a)}}var Mi=new WeakMap;function Ni(e,t,n=!1){let r=n?Mi:t.emitsCache,i=r.get(e);if(i!==void 0)return i;let a=e.emits,o={},c=!1;if(!g(e)){let r=e=>{let n=Ni(e,t,!0);n&&(c=!0,s(o,n))};!n&&t.mixins.length&&t.mixins.forEach(r),e.extends&&r(e.extends),e.mixins&&e.mixins.forEach(r)}return!a&&!c?(y(e)&&r.set(e,null),null):(d(a)?a.forEach(e=>o[e]=null):s(o,a),y(e)&&r.set(e,o),o)}function Pi(e,t){return!e||!a(t)?!1:(t=t.slice(2),t=t===`Once`?t:t.replace(/Once$/,``),u(e,t[0].toLowerCase()+t.slice(1))||u(e,E(t))||u(e,t))}function Fi(e){let{type:t,vnode:n,proxy:r,withProxy:i,propsOptions:[a],slots:s,attrs:c,emit:l,render:u,renderCache:d,props:f,data:p,setupState:m,ctx:h,inheritAttrs:g}=e,_=jn(e),v,y;try{if(n.shapeFlag&4){let e=i||r,t=e;v=za(u.call(t,e,d,f,m,p,h)),y=c}else{let e=t;v=za(e.length>1?e(f,{attrs:c,slots:s,emit:l}):e(f,null)),y=t.props?c:Ii(c)}}catch(t){ba.length=0,pn(t,e,1),v=q(G)}let b=v;if(y&&g!==!1){let e=Object.keys(y),{shapeFlag:t}=b;e.length&&t&7&&(a&&e.some(o)&&(y=Li(y,a)),b=Fa(b,y,!1,!0))}return n.dirs&&(b=Fa(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&gr(qn(b.type)&&hr(b)||b,n.transition),v=b,jn(_),v}var Ii=e=>{let t;for(let n in e)(n===`class`||n===`style`||a(n))&&((t||={})[n]=e[n]);return t},Li=(e,t)=>{let n={};for(let r in e)(!o(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ri(e,t,n){let{props:r,children:i,component:a}=e,{props:o,children:s,patchFlag:c}=t,l=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?zi(r,o,l):!!o;if(c&8){let e=t.dynamicProps;for(let t=0;t<e.length;t++){let n=e[t];if(Bi(o,r,n)&&!Pi(l,n))return!0}}}else return(i||s)&&(!s||!s.$stable)?!0:r===o?!1:r?!o||zi(r,o,l):!!o;return!1}function zi(e,t,n){let r=Object.keys(t);if(r.length!==Object.keys(e).length)return!0;for(let i=0;i<r.length;i++){let a=r[i];if(Bi(t,e,a)&&!Pi(n,a))return!0}return!1}function Bi(e,t,n){let r=e[n],i=t[n];return n===`style`&&y(r)&&y(i)?!k(r,i):r!==i}function Vi({vnode:e,parent:t,suspense:n},r){for(;t;){let n=t.subTree;if(n.suspense&&n.suspense.activeBranch===e&&(n.suspense.vnode.el=n.el=r,e=n),n===e)(e=t.vnode).el=r,t=t.parent;else break}n&&n.activeBranch===e&&(n.vnode.el=r)}var Hi={},Ui=()=>Object.create(Hi),Wi=e=>Object.getPrototypeOf(e)===Hi;function Gi(e,t,n,r=!1){let i={},a=Ui();e.propsDefaults=Object.create(null),qi(e,t,i,a);for(let t in e.propsOptions[0])t in i||(i[t]=void 0);e.props=n?r?i:Bt(i):e.type.props?i:a,e.attrs=a}function Ki(e,t,n,r){let{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=P(i),[c]=e.propsOptions,l=!1;if((r||o>0)&&!(o&16)){if(o&8){let n=e.vnode.dynamicProps;for(let r=0;r<n.length;r++){let o=n[r];if(Pi(e.emitsOptions,o))continue;let d=t[o];if(c){if(u(a,o))d!==a[o]&&(a[o]=d,l=!0);else{let t=T(o);i[t]=Ji(c,s,t,d,e,!1)}}else d!==a[o]&&(a[o]=d,l=!0)}}}else{qi(e,t,i,a)&&(l=!0);let r;for(let a in s)(!t||!u(t,a)&&((r=E(a))===a||!u(t,r)))&&(c?n&&(n[a]!==void 0||n[r]!==void 0)&&(i[a]=Ji(c,s,a,void 0,e,!0)):delete i[a]);if(a!==s)for(let e in a)(!t||!u(t,e))&&(delete a[e],l=!0)}l&&at(e.attrs,`set`,``)}function qi(e,n,r,i){let[a,o]=e.propsOptions,s=!1,c;if(n)for(let t in n){if(te(t))continue;let l=n[t],d;a&&u(a,d=T(t))?!o||!o.includes(d)?r[d]=l:(c||={})[d]=l:Pi(e.emitsOptions,t)||(!(t in i)||l!==i[t])&&(i[t]=l,s=!0)}if(o){let n=P(r),i=c||t;for(let t=0;t<o.length;t++){let s=o[t];r[s]=Ji(a,n,s,i[s],e,!u(i,s))}}return s}function Ji(e,t,n,r,i,a){let o=e[n];if(o!=null){let e=u(o,`default`);if(e&&r===void 0){let e=o.default;if(o.type!==Function&&!o.skipFactory&&g(e)){let{propsDefaults:a}=i;if(n in a)r=a[n];else{let o=Ya(i);r=a[n]=e.call(null,t),o()}}else r=e;i.ce&&i.ce._setProp(n,r)}o[0]&&(a&&!e?r=!1:o[1]&&(r===``||r===E(n))&&(r=!0))}return r}var Yi=new WeakMap;function Xi(e,r,i=!1){let a=i?Yi:r.propsCache,o=a.get(e);if(o)return o;let c=e.props,l={},f=[],p=!1;if(!g(e)){let t=e=>{p=!0;let[t,n]=Xi(e,r,!0);s(l,t),n&&f.push(...n)};!i&&r.mixins.length&&r.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!c&&!p)return y(e)&&a.set(e,n),n;if(d(c))for(let e=0;e<c.length;e++){let n=T(c[e]);Zi(n)&&(l[n]=t)}else if(c)for(let e in c){let t=T(e);if(Zi(t)){let n=c[e],r=l[t]=d(n)||g(n)?{type:n}:s({},n),i=r.type,a=!1,o=!0;if(d(i))for(let e=0;e<i.length;++e){let t=i[e],n=g(t)&&t.name;if(n===`Boolean`){a=!0;break}n===`String`&&(o=!1)}else a=g(i)&&i.name===`Boolean`;r[0]=a,r[1]=o,(a||u(r,`default`))&&f.push(t)}}let m=[l,f];return y(e)&&a.set(e,m),m}function Zi(e){return e[0]!==`$`&&!te(e)}var Qi=e=>e===`_`||e===`_ctx`||e===`$stable`,$i=e=>d(e)?e.map(za):[za(e)],ea=(e,t,n)=>{if(t._n)return t;let r=Mn((...e)=>$i(t(...e)),n);return r._c=!1,r},ta=(e,t,n)=>{let r=e._ctx;for(let n in e){if(Qi(n))continue;let i=e[n];if(g(i))t[n]=ea(n,i,r);else if(i!=null){let e=$i(i);t[n]=()=>e}}},na=(e,t)=>{let n=$i(t);e.slots.default=()=>n},ra=(e,t,n)=>{for(let r in t)(n||!Qi(r))&&(e[r]=t[r])},ia=(e,t,n)=>{let r=e.slots=Ui();if(e.vnode.shapeFlag&32){let e=t._;e?(ra(r,t,n),n&&se(r,`_`,e,!0)):ta(t,r)}else t&&na(e,t)},aa=(e,n,r)=>{let{vnode:i,slots:a}=e,o=!0,s=t;if(i.shapeFlag&32){let e=n._;e?r&&e===1?o=!1:ra(a,n,r):(o=!n.$stable,ta(n,a)),s=n}else n&&(na(e,n),s={default:1});if(o)for(let e in a)!Qi(e)&&s[e]==null&&delete a[e]},U=_a;function oa(e){return sa(e)}function sa(e,i){let a=de();a.__VUE__=!0;let{insert:o,remove:s,patchProp:c,createElement:l,createText:u,createComment:d,setText:f,setElementText:p,parentNode:m,nextSibling:h,setScopeId:g=r,insertStaticContent:_}=e,v=(e,t,r,i=null,a=null,o=null,s=void 0,c=null,l=!!t.dynamicChildren)=>{if(e===t)return;e&&!ka(e,t)&&(i=be(e),he(e,a,o,!0),e=null),t.patchFlag===-2&&(l=!1,t.dynamicChildren=null),t.dynamicChildren&&e&&e.dynamicChildren&&e.dynamicChildren.hasOnce&&(t.dynamicChildren===n&&(t.dynamicChildren=[]),t.dynamicChildren.hasOnce=!0);let{type:u,ref:d,shapeFlag:f}=t;switch(u){case va:y(e,t,r,i);break;case G:b(e,t,r,i);break;case ya:e??x(t,r,i,s);break;case W:ae(e,t,r,i,a,o,s,c,l);break;default:f&1?w(e,t,r,i,a,o,s,c,l):f&6?oe(e,t,r,i,a,o,s,c,l):(f&64||f&128)&&u.process(e,t,r,i,a,o,s,c,l,Ce)}d!=null&&a?Cr(d,e&&e.ref,o,t||e,!t):d==null&&e&&e.ref!=null&&Cr(e.ref,null,o,e,!0)},y=(e,t,n,r)=>{if(e==null)o(t.el=u(t.children),n,r);else{let n=t.el=e.el;t.children!==e.children&&f(n,t.children)}},b=(e,t,n,r)=>{e==null?o(t.el=d(t.children||``),n,r):t.el=e.el},x=(e,t,n,r)=>{[e.el,e.anchor]=_(e.children,t,n,r,e.el,e.anchor)},S=({el:e,anchor:t},n,r)=>{let i;for(;e&&e!==t;)i=h(e),o(e,n,r),e=i;o(t,n,r)},C=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=h(e),s(e),e=n;s(t)},w=(e,t,n,r,i,a,o,s,c)=>{if(t.type===`svg`?o=`svg`:t.type===`math`&&(o=`mathml`),e==null)ee(t,n,r,i,a,o,s,c);else{let n=e.el&&e.el._isVueCE?e.el:null;try{n&&n._beginPatch(),T(e,t,i,a,o,s,c)}finally{n&&n._endPatch()}}},ee=(e,t,n,r,i,a,s,u)=>{let d,f,{props:m,shapeFlag:h,transition:g,dirs:_}=e;if(d=e.el=l(e.type,a,m&&m.is,m),h&8?p(d,e.children):h&16&&re(e.children,d,null,r,i,ca(e,a),s,u),_&&Pn(e,null,r,`created`),ne(d,e,e.scopeId,s,r),m){for(let e in m)e!==`value`&&!te(e)&&c(d,e,null,m[e],a,r);`value`in m&&c(d,`value`,null,m.value,a),(f=m.onVnodeBeforeMount)&&J(f,r,e)}_&&Pn(e,null,r,`beforeMount`);let v=ua(i,g);v&&g.beforeEnter(d),o(d,t,n),((f=m&&m.onVnodeMounted)||v||_)&&U(()=>{try{f&&J(f,r,e),v&&g.enter(d),_&&Pn(e,null,r,`mounted`)}finally{}},i)},ne=(e,t,n,r,i)=>{if(n&&g(e,n),r)for(let t=0;t<r.length;t++)g(e,r[t]);if(i){let n=i.subTree;if(t===n||ga(n.type)&&(n.ssContent===t||n.ssFallback===t)){let t=i.vnode;ne(e,t,t.scopeId,t.slotScopeIds,i.parent)}}},re=(e,t,n,r,i,a,o,s,c=0)=>{for(let l=c;l<e.length;l++){let c=e[l]=s?Ba(e[l]):za(e[l]);v(null,c,t,n,r,i,a,o,s)}},T=(e,n,r,i,a,o,s)=>{let l=n.el=e.el,{patchFlag:u,dynamicChildren:d,dirs:f}=n;u|=e.patchFlag&16;let m=e.props||t,h=n.props||t,g;if(r&&la(r,!1),(g=h.onVnodeBeforeUpdate)&&J(g,r,n,e),f&&Pn(n,e,r,`beforeUpdate`),r&&la(r,!0),d&&(!e.dynamicChildren||e.dynamicChildren.length!==d.length)&&(u=0,s=!1,d=null),(m.innerHTML&&h.innerHTML==null||m.textContent&&h.textContent==null)&&p(l,``),d?ie(e.dynamicChildren,d,l,r,i,ca(n,a),o):s||ue(e,n,l,null,r,i,ca(n,a),o,!1),u>0){if(u&16)E(l,m,h,r,a);else if(u&2&&m.class!==h.class&&c(l,`class`,null,h.class,a),u&4&&c(l,`style`,m.style,h.style,a),u&8){let e=n.dynamicProps;for(let t=0;t<e.length;t++){let n=e[t],i=m[n],o=h[n];(o!==i||n===`value`)&&c(l,n,i,o,a,r)}}u&1&&e.children!==n.children&&p(l,n.children)}else!s&&d==null&&E(l,m,h,r,a);((g=h.onVnodeUpdated)||f)&&U(()=>{g&&J(g,r,n,e),f&&Pn(n,e,r,`updated`)},i)},ie=(e,t,n,r,i,a,o)=>{for(let s=0;s<t.length;s++){let c=e[s],l=t[s],u=c.el&&(c.type===W||!ka(c,l)||c.shapeFlag&198)?m(c.el):n;v(c,l,u,null,r,i,a,o,!0)}},E=(e,n,r,i,a)=>{if(n!==r){if(n!==t)for(let t in n)!te(t)&&!(t in r)&&c(e,t,n[t],null,a,i);for(let t in r){if(te(t))continue;let o=r[t],s=n[t];o!==s&&t!==`value`&&c(e,t,s,o,a,i)}`value`in r&&c(e,`value`,n.value,r.value,a)}},ae=(e,t,n,r,i,a,s,c,l)=>{let d=t.el=e?e.el:u(``),f=t.anchor=e?e.anchor:u(``),{patchFlag:p,dynamicChildren:m,slotScopeIds:h}=t;h&&(c=c?c.concat(h):h),e==null?(o(d,n,r),o(f,n,r),re(t.children||[],n,f,i,a,s,c,l)):p>0&&p&64&&m&&e.dynamicChildren&&e.dynamicChildren.length===m.length?(ie(e.dynamicChildren,m,n,i,a,s,c),(t.key!=null||i&&t===i.subTree)&&da(e,t,!0)):ue(e,t,n,f,i,a,s,c,l)},oe=(e,t,n,r,i,a,o,s,c)=>{t.slotScopeIds=s,e==null?t.shapeFlag&512?i.ctx.activate(t,n,r,o,c):D(t,n,r,i,a,o,c):se(e,t,c)},D=(e,t,n,r,i,a,o)=>{let s=e.component=Ga(e,r,i);if(Ar(e)&&(s.ctx.renderer=Ce),$a(s,!1,o),s.asyncDep){if(i&&i.registerDep(s,ce,o),!e.el){let r=s.subTree=q(G);b(null,r,t,n),e.placeholder=r.el}}else ce(s,e,t,n,i,a,o)},se=(e,t,n)=>{let r=t.component=e.component;if(Ri(e,t,n)){if(r.asyncDep&&!r.asyncResolved){t.el=e.el,le(r,t,n);return}r.next=t,r.update()}else t.el=e.el,r.vnode=t},ce=(e,t,n,r,i,a,o)=>{let s=()=>{if(e.isMounted){let{next:t,bu:n,u:r,parent:s,vnode:c}=e;{let n=pa(e);if(n){t&&(t.el=c.el,le(e,t,o)),n.asyncDep.then(()=>{U(()=>{e.isUnmounted||l()},i)});return}}let u=t,d;la(e,!1),t?(t.el=c.el,le(e,t,o)):t=c,n&&O(n),(d=t.props&&t.props.onVnodeBeforeUpdate)&&J(d,s,t,c),la(e,!0);let f=Fi(e),p=e.subTree;e.subTree=f,v(p,f,m(p.el),be(p),e,i,a),t.el=f.el,u===null&&Vi(e,f.el),r&&U(r,i),(d=t.props&&t.props.onVnodeUpdated)&&U(()=>J(d,s,t,c),i)}else{let o,{el:s,props:c}=t,{bm:l,m:u,parent:d,root:f,type:p}=e,m=Dr(t);if(la(e,!1),l&&O(l),!m&&(o=c&&c.onVnodeBeforeMount)&&J(o,d,t),la(e,!0),s&&k){let t=()=>{e.subTree=Fi(e),k(s,e.subTree,e,i,null)};m&&p.__asyncHydrate?p.__asyncHydrate(s,e,t):t()}else{f.ce&&f.ce._hasShadowRoot()&&f.ce._injectChildStyle(p,e.parent?e.parent.type:void 0);let o=e.subTree=Fi(e);v(null,o,n,r,e,i,a),t.el=o.el}if(u&&U(u,i),!m&&(o=c&&c.onVnodeMounted)){let e=t;U(()=>J(o,d,e),i)}(t.shapeFlag&256||d&&Dr(d.vnode)&&d.vnode.shapeFlag&256)&&e.a&&U(e.a,i),e.isMounted=!0,t=n=r=null}};e.scope.on();let c=e.effect=new Ne(s);e.scope.off();let l=e.update=c.run.bind(c),u=e.job=c.runIfDirty.bind(c);u.i=e,u.id=e.uid,c.scheduler=()=>Cn(u),la(e,!0),l()},le=(e,t,n)=>{t.component=e;let r=e.vnode.props;e.vnode=t,e.next=null,Ki(e,t.props,r,n),aa(e,t.children,n),Je(),En(e),Ye()},ue=(e,t,n,r,i,a,o,s,c=!1)=>{let l=e&&e.children,u=e?e.shapeFlag:0,d=t.children,{patchFlag:f,shapeFlag:m}=t;if(f>0){if(f&128){pe(l,d,n,r,i,a,o,s,c);return}if(f&256){fe(l,d,n,r,i,a,o,s,c);return}}m&8?(u&16&&ye(l,i,a),d!==l&&p(n,d)):u&16?m&16?pe(l,d,n,r,i,a,o,s,c):ye(l,i,a,!0):(u&8&&p(n,``),m&16&&re(d,n,r,i,a,o,s,c))},fe=(e,t,r,i,a,o,s,c,l)=>{e||=n,t||=n;let u=e.length,d=t.length,f=Math.min(u,d),p=0;for(;p<f;p++){let n=t[p]=l?Ba(t[p]):za(t[p]);v(e[p],n,r,null,a,o,s,c,l)}u>d?ye(e,a,o,!0,!1,f):re(t,r,i,a,o,s,c,l,f)},pe=(e,t,r,i,a,o,s,c,l)=>{let u=0,d=t.length,f=e.length-1,p=d-1;for(;u<=f&&u<=p;){let n=e[u],i=t[u]=l?Ba(t[u]):za(t[u]);if(ka(n,i))v(n,i,r,null,a,o,s,c,l);else break;u++}for(;u<=f&&u<=p;){let n=e[f],i=t[p]=l?Ba(t[p]):za(t[p]);if(ka(n,i))v(n,i,r,null,a,o,s,c,l);else break;f--,p--}if(u>f){if(u<=p){let e=p+1,n=e<d?t[e].el:i;for(;u<=p;)v(null,t[u]=l?Ba(t[u]):za(t[u]),r,n,a,o,s,c,l),u++}}else if(u>p)for(;u<=f;)he(e[u],a,o,!0),u++;else{let m=u,h=u,g=new Map;for(u=h;u<=p;u++){let e=t[u]=l?Ba(t[u]):za(t[u]);e.key!=null&&g.set(e.key,u)}let _,y=0,b=p-h+1,x=!1,S=0,C=Array(b);for(u=0;u<b;u++)C[u]=0;for(u=m;u<=f;u++){let n=e[u];if(y>=b){he(n,a,o,!0);continue}let i;if(n.key!=null)i=g.get(n.key);else for(_=h;_<=p;_++)if(C[_-h]===0&&ka(n,t[_])){i=_;break}i===void 0?he(n,a,o,!0):(C[i-h]=u+1,i>=S?S=i:x=!0,v(n,t[i],r,null,a,o,s,c,l),y++)}let w=x?fa(C):n;for(_=w.length-1,u=b-1;u>=0;u--){let e=h+u,n=t[e],f=t[e+1],p=e+1<d?f.el||ha(f):i;C[u]===0?v(null,n,r,p,a,o,s,c,l):x&&(_<0||u!==w[_]?me(n,r,p,2):_--)}}},me=(e,t,n,r,i=null)=>{let{el:a,type:c,transition:l,children:u,shapeFlag:d}=e;if(d&6){me(e.component.subTree,t,n,r);return}if(d&128){e.suspense.move(t,n,r);return}if(d&64){c.move(e,t,n,Ce);return}if(c===W){o(a,t,n);for(let e=0;e<u.length;e++)me(u[e],t,n,r);o(e.anchor,t,n);return}if(c===ya){S(e,t,n);return}if(r!==2&&d&1&&l){if(r===0)l.persisted&&!a[B]?o(a,t,n):(l.beforeEnter(a),o(a,t,n),U(()=>l.enter(a),i));else{let{leave:r,delayLeave:i,afterLeave:c}=l,u=()=>{e.ctx.isUnmounted?s(a):o(a,t,n)},d=()=>{let e=a._isLeaving||!!a[B];a._isLeaving&&a[B](!0),l.persisted&&!e?u():r(a,()=>{u(),c&&c()})};i?i(a,u,d):d()}}else o(a,t,n)},he=(e,t,n,r=!1,i=!1)=>{let{type:a,props:o,ref:s,children:c,dynamicChildren:l,shapeFlag:u,patchFlag:d,dirs:f,cacheIndex:p,memo:m}=e;if((d===-2||l&&l.hasOnce)&&(i=!1),s!=null&&(Je(),Cr(s,null,n,e,!0),Ye()),p!=null&&(!e.ctx||e.ctx===t)&&(t.renderCache[p]=void 0),u&256){t.ctx.deactivate(e);return}let h=u&1&&f,g=!Dr(e),_;if(g&&(_=o&&o.onVnodeBeforeUnmount)&&J(_,t,e),u&6)ve(e.component,n,r);else{if(u&128){e.suspense.unmount(n,r);return}h&&Pn(e,null,t,`beforeUnmount`),u&64?e.type.remove(e,t,n,Ce,r):l&&!l.hasOnce&&(a!==W||d>0&&d&64)?ye(l,t,n,!1,!0):(a===W&&d&384||!i&&u&16)&&ye(c,t,n),r&&ge(e)}let v=m!=null&&p==null;(g&&(_=o&&o.onVnodeUnmounted)||h||v)&&U(()=>{_&&J(_,t,e),h&&Pn(e,null,t,`unmounted`),v&&(e.el=null)},n)},ge=e=>{let{type:t,el:n,anchor:r,transition:i}=e;if(t===W){_e(n,r);return}if(t===ya){C(e),i&&!i.persisted&&i.afterLeave&&i.afterLeave();return}let a=()=>{s(n),i&&!i.persisted&&i.afterLeave&&i.afterLeave()};if(e.shapeFlag&1&&i&&!i.persisted){let{leave:t,delayLeave:r}=i,o=()=>t(n,a);r?r(e.el,a,o):o()}else a()},_e=(e,t)=>{let n;for(;e!==t;)n=h(e),s(e),e=n;s(t)},ve=(e,t,n)=>{let{bum:r,scope:i,job:a,subTree:o,um:s,m:c,a:l}=e;ma(c),ma(l),r&&O(r),i.stop(),a?(a.flags|=8,he(o,e,t,n)):e.vnode.el&&o&&(o.transition=e.vnode.transition,he(o,e,t,n)),s&&U(s,t),U(()=>{e.isUnmounted=!0},t)},ye=(e,t,n,r=!1,i=!1,a=0)=>{for(let o=a;o<e.length;o++)he(e[o],t,n,r,i)},be=e=>{if(e.shapeFlag&6)return be(e.component.subTree);if(e.shapeFlag&128)return e.suspense.next();let t=h(e.anchor||e.el),n=t&&t[Kn];return n?h(n):t},xe=!1,Se=(e,t,n)=>{let r;e==null?t._vnode&&(he(t._vnode,null,null,!0),r=t._vnode.component):v(t._vnode||null,e,t,null,null,null,n),t._vnode=e,xe||=(xe=!0,En(r),Dn(),!1)},Ce={p:v,um:he,m:me,r:ge,mt:D,mc:re,pc:ue,pbc:ie,n:be,o:e},we,k;return i&&([we,k]=i(Ce)),{render:Se,hydrate:we,createApp:Di(Se,we)}}function ca({type:e,props:t},n){return n===`svg`&&e===`foreignObject`||n===`mathml`&&e===`annotation-xml`&&t&&t.encoding&&t.encoding.includes(`html`)?void 0:n}function la({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function ua(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function da(e,t,n=!1){let r=e.children,i=t.children;if(d(r)&&d(i))for(let e=0;e<r.length;e++){let t=r[e],a=i[e];a.shapeFlag&1&&!a.dynamicChildren&&((a.patchFlag<=0||a.patchFlag===32)&&(a=i[e]=Ba(i[e]),a.el=t.el),!n&&a.patchFlag!==-2&&da(t,a)),a.type===va&&(a.patchFlag===-1&&(a=i[e]=Ba(a)),a.el=t.el),a.type===G&&!a.el&&(a.el=t.el)}}function fa(e){let t=e.slice(),n=[0],r,i,a,o,s,c=e.length;for(r=0;r<c;r++){let c=e[r];if(c!==0){if(i=n[n.length-1],e[i]<c){t[r]=i,n.push(r);continue}for(a=0,o=n.length-1;a<o;)s=a+o>>1,e[n[s]]<c?a=s+1:o=s;c<e[n[a]]&&(a>0&&(t[r]=n[a-1]),n[a]=r)}}for(a=n.length,o=n[a-1];a-->0;)n[a]=o,o=t[o];return n}function pa(e){let t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:pa(t)}function ma(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}function ha(e){if(e.placeholder)return e.placeholder;let t=e.component;return t?ha(t.subTree):null}var ga=e=>e.__isSuspense;function _a(e,t){t&&t.pendingBranch?d(e)?t.effects.push(...e):t.effects.push(e):Tn(e)}var W=Symbol.for(`v-fgt`),va=Symbol.for(`v-txt`),G=Symbol.for(`v-cmt`),ya=Symbol.for(`v-stc`),ba=[],K=null;function xa(e=!1){ba.push(K=e?null:[])}function Sa(){ba.pop(),K=ba[ba.length-1]||null}var Ca=1;function wa(e,t=!1){Ca+=e,e<0&&K&&t&&(K.hasOnce=!0)}function Ta(e){return e.dynamicChildren=Ca>0?K||n:null,Sa(),Ca>0&&K&&K.push(e),e}function Ea(e,t,n,r,i,a){return Ta(Ma(e,t,n,r,i,a,!0))}function Da(e,t,n,r,i){return Ta(q(e,t,n,r,i,!0))}function Oa(e){return e?e.__v_isVNode===!0:!1}function ka(e,t){return e.type===t.type&&e.key===t.key}var Aa=({key:e})=>e??null,ja=({ref:e,ref_key:t,ref_for:n})=>(typeof e==`number`&&(e=``+e),e==null?null:_(e)||I(e)||g(e)?{i:z,r:e,k:t,f:!!n}:e);function Ma(e,t=null,n=null,r=0,i=null,a=e===W?0:1,o=!1,s=!1){let c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Aa(t),ref:t&&ja(t),scopeId:An,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:r,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:z};return s?(Va(c,n),a&128&&e.normalize(c)):n&&(c.shapeFlag|=_(n)?8:16),Ca>0&&!o&&K&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&K.push(c),c}var q=Na;function Na(e,t=null,n=null,r=0,i=null,a=!1){if((!e||e===Qr)&&(e=G),Oa(e)){let r=Fa(e,t,!0);return n&&Va(r,n),Ca>0&&!a&&K&&(r.shapeFlag&6?K[K.indexOf(e)]=r:K.push(r)),r.patchFlag=-2,r}if(so(e)&&(e=e.__vccOpts),t){t=Pa(t);let{class:e,style:n}=t;e&&!_(e)&&(t.class=_e(e)),y(n)&&(Gt(n)&&!d(n)&&(n=s({},n)),t.style=fe(n))}let o=_(e)?1:ga(e)?128:qn(e)?64:y(e)?4:g(e)?2:0;return Ma(e,t,n,r,i,o,a,!0)}function Pa(e){return e?Gt(e)||Wi(e)?s({},e):e:null}function Fa(e,t,n=!1,r=!1){let{props:i,ref:a,patchFlag:o,children:s,transition:c}=e,l=t?Ha(i||{},t):i,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Aa(l),ref:t&&t.ref?n&&a?d(a)?a.concat(ja(t)):[a,ja(t)]:ja(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:s,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==W?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Fa(e.ssContent),ssFallback:e.ssFallback&&Fa(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return c&&r&&gr(u,c.clone(u)),u}function Ia(e=` `,t=0){return q(va,null,e,t)}function La(e,t){let n=q(ya,null,e);return n.staticCount=t,n}function Ra(e=``,t=!1){return t?(xa(),Da(G,null,e)):q(G,null,e)}function za(e){return e==null||typeof e==`boolean`?q(G):d(e)?q(W,null,e.slice()):Oa(e)?Ba(e):q(va,null,String(e))}function Ba(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Fa(e)}function Va(e,t){let n=0,{shapeFlag:r}=e;if(t==null)t=null;else if(d(t))n=16;else if(typeof t==`object`){if(r&65){let n=t.default;n&&(n._c&&(n._d=!1),Va(e,n()),n._c&&(n._d=!0));return}{n=32;let r=t._;!r&&!Wi(t)?t._ctx=z:r===3&&z&&(z.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}}else if(g(t)){if(r&65){Va(e,{default:t});return}t={default:t,_ctx:z},n=32}else t=String(t),r&64?(n=16,t=[Ia(t)]):n=8;e.children=t,e.shapeFlag|=n}function Ha(...e){let t={};for(let n=0;n<e.length;n++){let r=e[n];for(let e in r)if(e===`class`)t.class!==r.class&&(t.class=_e([t.class,r.class]));else if(e===`style`)t.style=fe([t.style,r.style]);else if(a(e)){let n=t[e],i=r[e];i&&n!==i&&!(d(n)&&n.includes(i))?t[e]=n?[].concat(n,i):i:i==null&&n==null&&!o(e)&&(t[e]=i)}else e!==``&&(t[e]=r[e])}return t}function J(e,t,n,r=null){L(e,t,7,[n,r])}var Ua=Ti(),Wa=0;function Ga(e,n,r){let i=e.type,a=(n?n.appContext:e.appContext)||Ua,o={uid:Wa++,vnode:e,type:i,parent:n,appContext:a,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new Ae(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(a.provides),ids:n?n.ids:[``,0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Xi(i,a),emitsOptions:Ni(i,a),emit:null,emitted:null,propsDefaults:t,inheritAttrs:i.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,suspense:r,suspenseId:r?r.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return o.ctx={_:o},o.root=n?n.root:o,o.emit=ji.bind(null,o),e.ce&&e.ce(o),o}var Y=null,Ka=()=>Y||z,qa,Ja;{let e=de(),t=(t,n)=>{let r;return(r=e[t])||(r=e[t]=[]),r.push(n),e=>{r.length>1?r.forEach(t=>t(e)):r[0](e)}};qa=t(`__VUE_INSTANCE_SETTERS__`,e=>Y=e),Ja=t(`__VUE_SSR_SETTERS__`,e=>Qa=e)}var Ya=e=>{let t=Y;return qa(e),e.scope.on(),()=>{e.scope.off(),qa(t)}},Xa=()=>{Y&&Y.scope.off(),qa(null)};function Za(e){return e.vnode.shapeFlag&4}var Qa=!1;function $a(e,t=!1,n=!1){t&&Ja(t);let{props:r,children:i}=e.vnode,a=Za(e);Gi(e,r,a,t),ia(e,i,n||t);let o=a?eo(e,t):void 0;return t&&Ja(!1),o}function eo(e,t){let n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ci);let{setup:r}=n;if(r){Je();let n=e.setupContext=r.length>1?io(e):null,i=Ya(e),a=fn(r,e,0,[e.props,n]),o=b(a);if(Ye(),i(),(o||e.sp)&&!Dr(e)&&br(e),o){if(a.then(Xa,Xa),t)return a.then(n=>{Ja(!0);try{to(e,n,t)}finally{Ja(!1)}}).catch(t=>{pn(t,e,0)});e.asyncDep=a}else to(e,a,t)}else no(e,t)}function to(e,t,n){g(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:y(t)&&(e.setupState=en(t)),no(e,n)}function no(e,t,n){let i=e.type;e.render||=i.render||r;{let t=Ya(e);Je();try{fi(e)}finally{Ye(),t()}}}var ro={get(e,t){return M(e,`get`,``),e[t]}};function io(e){return{attrs:new Proxy(e.attrs,ro),slots:e.slots,emit:e.emit,expose:t=>{e.exposed=t||{}}}}function ao(e){return e.exposed?e.exposeProxy||=new Proxy(en(Kt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in oi)return oi[n](e)},has(e,t){return t in e||t in oi}}):e.proxy}function oo(e,t=!0){return g(e)?e.displayName||e.name:e.name||t&&e.__name}function so(e){return g(e)&&`__vccOpts`in e}var co=(e,t)=>an(e,t,Qa);function lo(e,t,n){try{wa(-1);let r=arguments.length;return r===2?y(t)&&!d(t)?Oa(t)?q(e,null,[t]):q(e,t):q(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Oa(n)&&(n=[n]),q(e,t,n))}finally{wa(1)}}var uo=`3.5.43`,fo=void 0,po=typeof window<`u`&&window.trustedTypes;if(po)try{fo=po.createPolicy(`vue`,{createHTML:e=>e})}catch{}var mo=fo?e=>fo.createHTML(e):e=>e,ho=`http://www.w3.org/2000/svg`,go=`http://www.w3.org/1998/Math/MathML`,_o=typeof document<`u`?document:null,vo=_o&&_o.createElement(`template`),yo={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{let t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{let i=t===`svg`?_o.createElementNS(ho,e):t===`mathml`?_o.createElementNS(go,e):n?_o.createElement(e,{is:n}):_o.createElement(e);return e===`select`&&r&&r.multiple!=null&&i.setAttribute(`multiple`,r.multiple),i},createText:e=>_o.createTextNode(e),createComment:e=>_o.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>_o.querySelector(e),setScopeId(e,t){e.setAttribute(t,``)},insertStaticContent(e,t,n,r,i,a){let o=n?n.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),i!==a&&(i=i.nextSibling););else{vo.innerHTML=mo(r===`svg`?`<svg>${e}</svg>`:r===`mathml`?`<math>${e}</math>`:e);let i=vo.content;if(r===`svg`||r===`mathml`){let e=i.firstChild;for(;e.firstChild;)i.appendChild(e.firstChild);i.removeChild(e)}t.insertBefore(i,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},bo=`transition`,xo=`animation`,So=Symbol(`_vtc`),Co={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},wo=s({},sr,Co),To=(e=>(e.displayName=`Transition`,e.props=wo,e))((e,{slots:t})=>lo(dr,Oo(e),t)),Eo=(e,t=[])=>{d(e)?e.forEach(e=>e(...t)):e&&e(...t)},Do=e=>e?d(e)?e.some(e=>e.length>1):e.length>1:!1;function Oo(e){let t={};for(let n in e)n in Co||(t[n]=e[n]);if(e.css===!1)return t;let{name:n=`v`,type:r,duration:i,enterFromClass:a=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:l=a,appearActiveClass:u=o,appearToClass:d=c,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,h=ko(i),g=h&&h[0],_=h&&h[1],{onBeforeEnter:v,onEnter:y,onEnterCancelled:b,onLeave:x,onLeaveCancelled:S,onBeforeAppear:C=v,onAppear:w=y,onAppearCancelled:ee=b}=t,te=(e,t,n,r)=>{e._enterCancelled=r,Mo(e,t?d:c),Mo(e,t?u:o),n&&n()},ne=(e,t)=>{e._isLeaving=!1,Mo(e,f),Mo(e,m),Mo(e,p),t&&t()},re=e=>(t,n)=>{let i=e?w:y,o=()=>te(t,e,n);Eo(i,[t,o]),No(()=>{Mo(t,e?l:a),jo(t,e?d:c),Do(i)||Fo(t,r,g,o)})};return s(t,{onBeforeEnter(e){Eo(v,[e]),jo(e,a),jo(e,o)},onBeforeAppear(e){Eo(C,[e]),jo(e,l),jo(e,u)},onEnter:re(!1),onAppear:re(!0),onLeave(e,t){e._isLeaving=!0;let n=()=>ne(e,t);jo(e,f),e._enterCancelled?(jo(e,p),zo(e)):(zo(e),jo(e,p)),No(()=>{e._isLeaving&&(Mo(e,f),jo(e,m),Do(x)||Fo(e,r,_,n))}),Eo(x,[e,n])},onEnterCancelled(e){te(e,!1,void 0,!0),Eo(b,[e])},onAppearCancelled(e){te(e,!0,void 0,!0),Eo(ee,[e])},onLeaveCancelled(e){ne(e),Eo(S,[e])}})}function ko(e){if(e==null)return null;if(y(e))return[Ao(e.enter),Ao(e.leave)];{let t=Ao(e);return[t,t]}}function Ao(e){return le(e)}function jo(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[So]||(e[So]=new Set)).add(t)}function Mo(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let n=e[So];n&&(n.delete(t),n.size||(e[So]=void 0))}function No(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}var Po=0;function Fo(e,t,n,r){let i=e._endId=++Po,a=()=>{i===e._endId&&r()};if(n!=null)return setTimeout(a,n);let{type:o,timeout:s,propCount:c}=Io(e,t);if(!o)return r();let l=o+`end`,u=0,d=()=>{e.removeEventListener(l,f),a()},f=t=>{t.target===e&&++u>=c&&d()};setTimeout(()=>{u<c&&d()},s+1),e.addEventListener(l,f)}function Io(e,t){let n=window.getComputedStyle(e),r=e=>(n[e]||``).split(`, `),i=r(`${bo}Delay`),a=r(`${bo}Duration`),o=Lo(i,a),s=r(`${xo}Delay`),c=r(`${xo}Duration`),l=Lo(s,c),u=null,d=0,f=0;t===bo?o>0&&(u=bo,d=o,f=a.length):t===xo?l>0&&(u=xo,d=l,f=c.length):(d=Math.max(o,l),u=d>0?o>l?bo:xo:null,f=u?u===bo?a.length:c.length:0);let p=u===bo&&/\b(?:transform|all)(?:,|$)/.test(r(`${bo}Property`).toString());return{type:u,timeout:d,propCount:f,hasTransform:p}}function Lo(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(...t.map((t,n)=>Ro(t)+Ro(e[n])))}function Ro(e){return e===`auto`?0:Number(e.slice(0,-1).replace(`,`,`.`))*1e3}function zo(e){return(e?e.ownerDocument:document).body.offsetHeight}function Bo(e,t,n){let r=e[So];r&&(t=(t?[t,...r]:[...r]).join(` `)),t==null?e.removeAttribute(`class`):n?e.setAttribute(`class`,t):e.className=t}var Vo=Symbol(`_vod`),Ho=Symbol(`_vsh`),Uo=Symbol(``),Wo=/(?:^|;)\s*display\s*:/;function Go(e,t,n){let r=e.style,i=_(n),a=!1;if(n&&!i){if(t){if(_(t))for(let e of t.split(`;`)){let t=e.slice(0,e.indexOf(`:`)).trim();n[t]??qo(r,t,``)}else for(let e in t)n[e]??qo(r,e,``)}for(let i in n){i===`display`&&(a=!0);let o=n[i];o==null?qo(r,i,``):Zo(e,i,!_(t)&&t?t[i]:void 0,o)||qo(r,i,o)}}else if(i){if(t!==n){let e=r[Uo];e&&(n+=`;`+e),r.cssText=n,a=Wo.test(n)}}else t&&e.removeAttribute(`style`);Vo in e&&(e[Vo]=a?r.display:``,e[Ho]&&(r.display=`none`))}var Ko=/\s*!important$/;function qo(e,t,n){if(d(n))n.forEach(n=>qo(e,t,n));else if(n??=``,t.startsWith(`--`))Ko.test(n)?e.setProperty(t,n.replace(Ko,``),`important`):e.setProperty(t,n);else{let r=Xo(e,t);Ko.test(n)?e.setProperty(E(r),n.replace(Ko,``),`important`):e[r]=n}}var Jo=[`Webkit`,`Moz`,`ms`],Yo={};function Xo(e,t){let n=Yo[t];if(n)return n;let r=T(t);if(r!==`filter`&&r in e)return Yo[t]=r;r=ae(r);for(let n=0;n<Jo.length;n++){let i=Jo[n]+r;if(i in e)return Yo[t]=i}return t}function Zo(e,t,n,r){return e.tagName===`TEXTAREA`&&(t===`width`||t===`height`)&&_(r)&&n===r}var Qo=`http://www.w3.org/1999/xlink`;function $o(e,t,n,r,i,a=ye(t)){r&&t.startsWith(`xlink:`)?n==null?e.removeAttributeNS(Qo,t.slice(6,t.length)):e.setAttributeNS(Qo,t,n):n==null||a&&!be(n)?e.removeAttribute(t):e.setAttribute(t,a?``:v(n)?String(n):n)}function es(e,t,n,r,i){if(t===`innerHTML`||t===`textContent`){n!=null&&(e[t]=t===`innerHTML`?mo(n):n);return}let a=e.tagName;if(t===`value`&&a!==`PROGRESS`&&!a.includes(`-`)){let r=a===`OPTION`?e.getAttribute(`value`)||``:e.value,i=n==null?e.type===`checkbox`?`on`:``:String(n);(r!==i||!(`_value`in e))&&(e.value=i),n??e.removeAttribute(t),e._value=n;return}let o=!1;if(n===``||n==null){let r=typeof e[t];r===`boolean`?n=be(n):n==null&&r===`string`?(n=``,o=!0):r===`number`&&(n=0,o=!0)}try{e[t]=n}catch{}o&&e.removeAttribute(i||t)}function ts(e,t,n,r){e.addEventListener(t,n,r)}function ns(e,t,n,r){e.removeEventListener(t,n,r)}var rs=Symbol(`_vei`);function is(e,t,n,r,i=null){let a=e[rs]||(e[rs]={}),o=a[t];if(r&&o)o.value=r;else{let[n,s]=ss(t);r?ts(e,n,a[t]=ds(r,i),s):o&&(ns(e,n,o,s),a[t]=void 0)}}var as=/(Once|Passive|Capture)$/,os=/^on:?(?:Once|Passive|Capture)$/;function ss(e){let t,n;for(;(n=e.match(as))&&!os.test(e);)t||={},e=e.slice(0,e.length-n[1].length),t[n[1].toLowerCase()]=!0;return[e[2]===`:`?e.slice(3):E(e.slice(2)),t]}var cs=0,ls=Promise.resolve(),us=()=>cs||=(ls.then(()=>cs=0),Date.now());function ds(e,t){let n=e=>{if(!e._vts)e._vts=Date.now();else if(e._vts<=n.attached)return;let r=n.value;if(d(r)){let n=e.stopImmediatePropagation;e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0};let i=r.slice(),a=[e];for(let n=0;n<i.length&&!e._stopped;n++){let e=i[n];e&&L(e,t,5,a)}}else L(r,t,5,[e])};return n.value=e,n.attached=us(),n}var fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ps=(e,t,n,r,i,s)=>{let c=i===`svg`;t===`class`?Bo(e,r,c):t===`style`?Go(e,n,r):a(t)?o(t)||is(e,t,n,r,s):(t[0]===`.`?(t=t.slice(1),1):t[0]===`^`?(t=t.slice(1),0):ms(e,t,r,c))?(es(e,t,r),!e.tagName.includes(`-`)&&(t===`value`||t===`checked`||t===`selected`)&&$o(e,t,r,c,s,t!==`value`)):e._isVueCE&&(hs(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!_(r)))?es(e,T(t),r,s,t):(t===`true-value`?e._trueValue=r:t===`false-value`&&(e._falseValue=r),$o(e,t,r,c))};function ms(e,t,n,r){if(r)return!!(t===`innerHTML`||t===`textContent`||t in e&&fs(t)&&g(n));if(t===`spellcheck`||t===`draggable`||t===`translate`||t===`autocorrect`||t===`sandbox`&&e.tagName===`IFRAME`||t===`form`||t===`list`&&e.tagName===`INPUT`||t===`type`&&e.tagName===`TEXTAREA`)return!1;if(t===`width`||t===`height`){let t=e.tagName;if(t===`IMG`||t===`VIDEO`||t===`CANVAS`||t===`SOURCE`)return!1}return fs(t)&&_(n)?!1:t in e}function hs(e,t){let n=e._def.props;if(!n)return!1;let r=T(t);return Array.isArray(n)?n.some(e=>T(e)===r):Object.keys(n).some(e=>T(e)===r)}var gs=e=>{let t=e.props[`onUpdate:modelValue`]||!1;return d(t)?e=>O(t,e):t};function _s(e){e.target.composing=!0}function vs(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event(`input`)))}var X=Symbol(`_assign`),ys=Symbol(`_initialValue`);function bs(e,t,n){return t&&(e=e.trim()),n&&(e=ce(e)),e}var xs={created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e.parentNode&&(e.type===`text`?e[ys]=e.defaultValue.replace(/[\r\n]/g,``):e.type===`textarea`&&(e[ys]=e.defaultValue.replace(/\r\n?/g,`
2
- `))),e[X]=gs(i);let a=r||i.props&&i.props.type===`number`;ts(e,t?`change`:`input`,t=>{t.target.composing||e[X](bs(e.value,n,a))}),(n||a)&&ts(e,`change`,()=>{e.value=bs(e.value,n,a)}),t||(ts(e,`compositionstart`,_s),ts(e,`compositionend`,vs),ts(e,`change`,vs))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let i=t??``,a=e[ys];delete e[ys],a!==void 0&&(e.type===`text`||e.type===`textarea`)&&e.value!==a?e[X](bs(e.value,n,r)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},o){if(e[X]=gs(o),e.composing)return;let s=(a||e.type===`number`)&&!/^0\d/.test(e.value)?ce(e.value):e.value,c=t??``;if(s===c)return;let l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!==`range`&&(r&&t===n||i&&e.value.trim()===c)||(e.value=c)}},Ss={deep:!0,created(e,t,n){e[X]=gs(n),ts(e,`change`,()=>{let t=e._modelValue,n=Os(e),r=e.checked,i=e[X];if(d(t)){let e=Te(t,n),a=e!==-1;if(r&&!a)i(t.concat(n));else if(!r&&a){let n=[...t];n.splice(e,1),i(n)}}else if(p(t)){let e=new Set(t);r?e.add(n):e.delete(n),i(e)}else i(ks(e,r))})},mounted:Cs,beforeUpdate(e,t,n){e[X]=gs(n),Cs(e,t,n)}};function Cs(e,{value:t,oldValue:n},r){e._modelValue=t;let i;if(d(t))i=Te(t,r.props.value)>-1;else if(p(t))i=t.has(r.props.value);else{if(t===n)return;i=k(t,ks(e,!0))}e.checked!==i&&(e.checked=i)}var ws={created(e,{value:t},n){e.checked=k(t,n.props.value),e[X]=gs(n),ts(e,`change`,()=>{e[X](Os(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[X]=gs(r),t!==n&&(e.checked=k(t,r.props.value))}},Ts={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,ts(e,`change`,()=>{let t=Array.prototype.filter.call(e.options,e=>e.selected).map(e=>n?ce(Os(e)):Os(e)),r=e.multiple,i=r?p(e._modelValue)?new Set(t):t:t[0],a=e._pendingValue=[r,r?d(i)?t.slice():t:i];try{e[X](i)}finally{xn(()=>{e._pendingValue===a&&(e._pendingValue=void 0)})}}),e[X]=gs(r)},mounted(e,{value:t}){Ds(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[X]=gs(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Es(t,n[1],n[0]))&&Ds(e,t)}};function Es(e,t,n){if(!n||d(e))return k(e,t);if(p(e)){if(e.size!==t.length)return!1;for(let n of t)if(!e.has(n))return!1;return!0}return!1}function Ds(e,t){let n=e.multiple,r=d(t);if(!n||r||p(t)){for(let i=0,a=e.options.length;i<a;i++){let a=e.options[i],o=Os(a);if(n){if(r){let e=typeof o;a.selected=e===`string`||e===`number`?t.some(e=>String(e)===String(o)):Te(t,o)>-1}else a.selected=t.has(o)}else if(k(Os(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Os(e){return`_value`in e?e._value:e.value}function ks(e,t){let n=t?`_trueValue`:`_falseValue`;return n in e?e[n]:t}var As={created(e,t,n){Ms(e,t,n,null,`created`)},mounted(e,t,n){Ms(e,t,n,null,`mounted`)},beforeUpdate(e,t,n,r){Ms(e,t,n,r,`beforeUpdate`)},updated(e,t,n,r){Ms(e,t,n,r,`updated`)}};function js(e,t){switch(e){case`SELECT`:return Ts;case`TEXTAREA`:return xs;default:switch(t){case`checkbox`:return Ss;case`radio`:return ws;default:return xs}}}function Ms(e,t,n,r,i){let a=js(e.tagName,n.props&&n.props.type)[i];a&&a(e,t,n,r)}var Ns=[`ctrl`,`shift`,`alt`,`meta`],Ps={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>`button`in e&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>Ns.some(n=>e[`${n}Key`]&&!t.includes(n))},Fs=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e<t.length;e++){let r=Ps[t[e]];if(r&&r(n,t))return}return e(n,...r)}))},Is={esc:`escape`,space:` `,up:`arrow-up`,left:`arrow-left`,right:`arrow-right`,down:`arrow-down`,delete:`backspace`},Ls=(e,t)=>{let n=e._withKeys||={},r=t.join(`.`);return n[r]||(n[r]=(n=>{if(!(`key`in n))return;let r=E(n.key);if(t.some(e=>e===r||Is[e]===r))return e(n)}))},Rs=s({patchProp:ps},yo),zs;function Bs(){return zs||=oa(Rs)}var Vs=((...e)=>{let t=Bs().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=Us(e);if(!r)return;let i=t._component;!g(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,Hs(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t});function Hs(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function Us(e){return _(e)?document.querySelector(e):e}var Ws={"请稍候…":`Please wait…`,为这个小世界设置密码:`Set a password for this little world`,欢迎回来:`Welcome back`,"正在连接小世界…":`Connecting to your little world…`,"只需设置一个管理密码,以后用它登录。":`Set one management password and use it to sign in from now on.`,"输入管理密码,继续陪伴 TA。":`Enter your management password to return to TA.`,管理密码:`Management password`,确认密码:`Confirm password`,"至少 8 个字符。密码只保存在本机的加密校验记录中。":`At least 8 characters. Only a password verification record is stored locally.`,设置密码并进入:`Set password and enter`,登录:`Sign in`,"暂时无法连接,请重试":`Cannot connect right now. Please try again.`,两次输入的密码不一致:`The passwords do not match`,管理密码已更新:`Management password updated`,"一个密码管理这个小世界。修改后,其他浏览器需要重新登录。":`One password manages this little world. Other browsers must sign in again after a change.`,当前密码:`Current password`,新密码:`New password`,修改密码:`Change password`,退出登录:`Sign out`,请求失败:`Request failed`,请先保存草稿:`Save the draft first`,暂未连接:`Not connected`,"TA 在等你回来":`TA is waiting for you to come back`,重新连接:`Reconnect`,跳到主要内容:`Skip to main content`,主要功能:`Main sections`,"{name}:回到此刻":`{name}: back to Now`,开启灵动效果:`Turn on lively effects`,减少动画:`Reduce motion`,使用教程:`Guide`,"使用教程 ↗":`Guide ↗`,"去连接 QQ":`Connect QQ`,"QQ 未连接":`QQ not connected`,刷新当前数据:`Refresh the current data`,刷新:`Refresh`,"草稿还没保存,保存后才会生效":`The draft is not saved yet; it takes effect once saved`,更多:`More`,"正在进入 TA 的小世界":`Entering TA's little world`,"连接会话与记忆…":`Connecting sessions and memory…`,闲着:`Idle`,界面主题:`Theme`,语言:`Language`,"LuckyTri · TA 的小世界":`LuckyTri · TA's little world`,想确认一下:`Just checking`,请填写:`Please fill in`,确定:`OK`,取消:`Cancel`,"{month} 月 {date} 日":`{month}/{date}`,刚刚:`just now`,"{minutes} 分钟前":`{minutes} min ago`,"{hours} 小时前":`{hours} h ago`,"{days} 天前":`{days} d ago`,"{months} 个月前":`{months} mo ago`,"{v} 年前":`{v} y ago`,未命名的人:`Unnamed person`,未命名的群:`Unnamed group`,"操作失败,请重试":`That did not work. Please try again.`,刚说完话:`just finished talking`,在想怎么回:`thinking how to reply`,在独处:`spending time alone`,在读资料:`reading`,在写日记:`writing in her diary`,在回顾这段日子:`looking back on these days`,在夜里整理今天:`sorting through today in the night`,在忙自己的事:`busy with her own things`,"睡着了,呼吸很轻":`asleep, breathing softly`,睡着了:`asleep`,"{line},因为{cause}":`{line}, because {cause}`,平静:`Calm`,像一杯温水:`like a cup of warm water`,甜甜:`Sweet`,心里软软的:`soft inside`,雀跃:`Elated`,想蹦起来:`wants to bounce`,低落:`Low`,有点灰灰的:`a little grey`,烦躁:`Irritable`,心里起风了:`a wind is rising inside`,困倦:`Drowsy`,眼皮在打架:`eyelids drooping`,夜晚:`Night`,想做的事:`Things she wants to do`,别人的安排:`Others' plans`,每年的日子:`Yearly days`,还在等:`Still waiting`,悄悄错过了:`Quietly missed`,做到了:`Done`,错过了:`Missed`,不再惦记:`No longer on her mind`,聊天时:`While chatting`,独处时:`While alone`,回顾时:`While reflecting`,"从 TA 说过的话里":`From things TA said`,旧版本:`Older version`,做自己的事:`Doing her own things`,写日记:`Diary writing`,回顾这段日子:`Looking back`,进行中:`In progress`,留下了东西:`Left something behind`,心情变了:`Mood changed`,没什么新的:`Nothing new`,出了点问题:`Something went wrong`,跳过了:`Skipped`,作废了:`Voided`,重启中断:`Interrupted by restart`,"已经是 TA 的一部分":`Already part of TA`,刚开始有这种感觉:`Just starting to feel this`,已经放下:`Let go`,更亲近了一点:`A little closer`,走近了:`Came closer`,更信任了:`Trust grew`,有点失望:`A bit disappointed`,有了别扭:`Some friction`,和好了:`Made up`,疏远了一点:`Drifted a little`,印象:`Impression`,熟悉:`Familiar`,亲近:`Close`,信任:`Trusted`,别扭:`Awkward`,私下知道:`Known privately`,"要 TA 保密":`TA keeps it secret`,"TA 这样认为":`TA thinks so`,已被新的取代:`Replaced by a newer one`,旧版待确认:`Older, to be confirmed`,有争议:`Disputed`,已过期:`Expired`,等合适的时候:`Waiting for the right moment`,正在发:`Sending`,说出口了:`Said`,"TA 后来决定不说":`TA later decided not to say it`,时机不合适:`Not the right moment`,没有发:`Not sent`,投递未确认:`Delivery unconfirmed`,开口:`Speak up`,简短反应:`Brief reaction`,说不想聊:`Said she did not want to talk`,放在心上:`Keeping it in mind`,此刻:`Now`,"TA 此刻的样子。":`How TA is right now.`,内心:`Inner life`,"从经历里长出来的 TA。":`The TA that grows out of experience.`,人际:`People`,"TA 认识的人,和 TA 对每个人的感觉。":`The people TA knows, and how she feels about each of them.`,一生:`Lifetime`,"记得昨天的自己,也成为今天的自己。":`Remembers who she was yesterday, and becomes who she is today.`,时间:`Time`,"带着自己的安排、作品与经历走过时间。":`Moves through time with her own plans, works, and experiences.`,"TA 在哪里说话,又为什么这样说。":`Where TA speaks, and why she says what she says.`,记忆:`Memory`,"TA 记得的事,和 TA 读过的资料。":`What TA remembers, and what she has read.`,"塑造 TA:只有这里由你来写。":`Shaping TA: the only place where you write.`,系统:`System`,"连接、模型和运行开关。":`Connection, models, and run switches.`,日常:`Daily life`,设置:`Settings`,"有尚未保存的修改,离开这一页吗?":`You have unsaved changes. Leave this page?`,离开:`Leave`,请选择一张图片:`Please choose an image`,"图片太大了,请换一张 20MB 以内的":`That image is too large. Please pick one under 20 MB.`,无法处理这张图片:`This image could not be processed`,"和 TA 聊聊":`Talk with TA`,没出声:`Said nothing`,"没有留下理由。":`No reason was left.`,"TA 在想…":`TA is thinking…`,清空:`Clear`,收起:`Collapse`,关闭:`Close`,删除:`Delete`,失败:`Failed`,完成:`Done`,记忆整理:`Memory sorting`,模式:`Mode`,私:`DM`,群:`Group`,恢复:`Restore`,"还没有形成在这里的样子。":`She has not taken shape here yet.`,有未保存的修改:`Unsaved changes`,撤销:`Undo`,已撤销:`Undone`,原因:`Reason`,放下:`Let go`,说不清为什么:`Hard to say why`,"撤销「{content}」?TA 不再惦记这件事,之后整理记忆时也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will stop keeping it in mind, and sorting memory later will not write it back. You can note a reason (optional):`,撤销这个约定:`Undo this promise`,日记:`Diary`,约定与期待:`Promises and anticipation`,"撤销「{content}」?TA 之后不会再这样认为,整理记忆时也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will no longer think this, and sorting memory will not write it back. You can note a reason (optional):`,撤销这条记忆:`Undo this memory`,公开:`Open`,"分寸:":`Discretion: `,解锁:`Unlock`,锁定:`Lock`,自己的念头:`Her own thoughts`,图片理解:`Image understanding`,独处:`Alone`,天性:`Nature`,夜里整理:`Night sorting`,对话:`Chat`,出了声:`Spoke up`,全部:`All`,"处理中…":`Processing…`,写日记时:`While writing diary`,低:`Low`,高:`High`,草稿还没保存:`Draft not saved`,留下:`Keep`,答应的事:`Promises`,完成了:`Finished`,"TA 的此刻状态":`TA's state right now`,"第 {v} 天":`Day {v}`,"没有特别牵动 TA 的事,心情慢慢回到平常。":`Nothing in particular is tugging at TA; her mood is slowly settling back to normal.`,"这阵子 · {v}":`Lately · {v}`,"精力 · {energyLabel}":`Energy · {energyLabel}`,"{wake} 醒 / {sleep} 睡":`Wakes {wake} / sleeps {sleep}`,看看进度:`See progress`,"TA 正在想…":`TA is thinking…`,"让 TA 独处一会儿":`Let TA have some time alone`,写下今天的日记:`Write today's diary`,"安静下来时,TA 会自己独处。":`When things quiet down, TA spends time alone.`,最近说:`Recently said`,在等:`Waiting`,"主题固定为「{v}」":`Theme fixed to “{v}”`,"主题跟随 TA 的心情":`Theme follows TA's mood`,"固定:{v}":`Fixed: {v}`,"跟随 TA · {v}":`Following TA · {v}`,"跟随 TA 的心情":`Follow TA's mood`,"现在是「{v}」":`Now “{v}”`,"嗯?":`Hm?`,"我在这儿。":`I'm here.`,"有什么事吗?":`Is something up?`,戳我做什么呀:`Why poke me?`,"在呢~":`Here~`,被你发现啦:`You found me!`,"嘿嘿,找我呀":`Hehe, looking for me?`,今天心情不错哦:`I'm in a good mood today`,"哇!干嘛呀~":`Whoa! What was that for~`,"今天超开心的!":`I'm so happy today!`,再戳我也还是好开心:`Poke me again, I'm still happy`,嘿嘿嘿:`Hehehe`,"……嗯":`...mm`,"我没事,就是有点低落":`I'm fine, just a little down`,陪我待一会儿就好:`Just stay with me for a while`,"唔……":`Mm...`,"别戳啦!":`Stop poking!`,"我现在有点烦……":`I'm a bit irritated right now...`,让我静一静嘛:`Let me be quiet for a moment`,哼:`Hmph`,"唔……好困":`Mm... so sleepy`,再让我眯一会儿:`Let me doze a little longer`,"嗯……?":`Mm...?`,"哈——欠":`Yaaawn`,"呼……呼……":`Zzz... zzz...`,"(翻了个身)":`(rolls over)`,"(嘟囔了一句梦话)":`(mumbles something in her sleep)`,"……有点痒":`...that tickles a little`,"嗯,这样挺好":`Mm, this is nice`,谢谢你:`Thank you`,"嘿嘿,好舒服":`Hehe, that feels nice`,再摸一下嘛:`Pet me once more~`,"脸要红了……":`I'm going to blush...`,"哈哈哈好痒!":`Hahaha, that tickles!`,"最喜欢这样了!":`I love this the most!`,"嘿嘿,开心加倍":`Hehe, double the happiness`,"……谢谢你":`...thank you`,好像好一点了:`I think I feel a little better`,"嗯,别走开":`Mm, don't go away`,"……好吧,就一下":`...fine, just once`,"哼,勉强接受":`Hmph, I'll let it slide`,"嗯……好像没那么烦了":`Mm... I'm not as irritated now`,"呼……要睡着了":`Whew... falling asleep`,"好温暖……":`So warm...`,"嗯……":`Mm...`,"(在梦里笑了一下)":`(smiles in her dream)`,"(蹭了蹭)":`(nuzzles)`,"等等,我在想怎么回……":`Wait, I'm thinking how to reply...`,"嘘,我在看大家聊什么":`Shh, I'm reading what everyone's saying`,刚刚在说话来着:`I was just talking`,你看到我说的了吗:`Did you see what I said?`,"我在想事情,一会儿就好":`I'm thinking, give me a moment`,让我安静一下下:`Let me be quiet for a bit`,我在看书呢:`I'm reading`,这一页好有意思:`This page is really interesting`,"我在写日记,不许偷看":`I'm writing my diary, no peeking`,"今天的事,写下来":`Today's things, written down`,在翻以前的日记呢:`Looking through my old diary`,原来那时候我是这样想的:`So that's what I was thinking back then`,"在整理今天的事……":`Sorting through today...`,"嘘,快整理完了":`Shh, almost done sorting`,"(TA 没有出声)":`(TA said nothing)`,"{v} · 心情{v2} · {latency} ms":`{v} · mood {v2} · {latency} ms`,真实模型:`Real model`,"本地样例(没有模型档案)":`Local sample (no model profile)`,"试聊走真实链路:读取 TA 此刻的心智和记忆,但不写入,也不发 QQ。配置了模型时会消耗 Token。":`Trial chat uses the real pipeline: it reads TA's current mind and memory but writes nothing and sends nothing to QQ. It uses tokens when a model is configured.`,"TA 会先理解,再决定说不说":`TA understands first, then decides whether to speak`,"回应会显示 TA 的选择和当时的想法。":`Replies show what TA chose and what she was thinking.`,为什么:`Why`,"TA 在想":`TA is thinking`,想象在这里:`Imagine here`,一段新的私聊:`A new private chat`,"说一句试试…":`Say something…`,说:`Say`,收起聊天:`Collapse chat`,"和 {name} 聊聊(试聊)":`Chat with {name} (trial)`,"和 {name} 聊聊":`Chat with {name}`,"试聊 · 什么都不写入":`Trial chat · nothing is written`,聊聊:`Chat`,"TA:轻触互动,按住摸摸头,双击和 TA 聊聊":`TA: tap to interact, press and hold to pet her head, double-click to chat`,请选择:`Select`,没有可选项:`No options`},Gs={"NEW PLACE":`NEW PLACE`,"实时同步 · ":`Live · `,"同步失败:":`Sync failed: `,会话已添加:`Session added`,"永久删除这个会话?它的消息和设置都会消失。":`Delete this session for good? Its messages and settings will be gone.`,会话配置已保存:`Session settings saved`,"确定清空这个会话的消息上下文吗?长期记忆不会删除。":`Clear this session's message context? Long-term memory is kept.`,已发送:`Sent`,反馈已保存:`Feedback saved`,请选择会话:`Select a session`,永久删除:`Delete for good`,清空上下文:`Clear context`,全部会话:`All sessions`,开口了:`Spoke up`,扫了一眼:`Glanced`,处理中:`Processing`,旧稿作废:`Draft voided`,已取消:`Cancelled`,已中断:`Interrupted`,真实聊天:`Real chat`,模拟预览:`Simulated preview`,测试回放:`Test replay`,语境压缩:`Context compression`,回放正在运行:`Replay is running`,回放结束:`Replay finished`,"输入 {v}(缓存读 {v2} / 写 {v3})· 输出 {v4}":`Input {v} (cache read {v2} / write {v3}) · output {v4}`,历史消息:`Message history`,"↻ 加载":`↻ Load`,序号:`No.`,发送者:`Sender`,消息:`Message`,"当前会话暂无历史消息。":`This session has no message history yet.`,起始序号:`From No.`,截止序号:`To No.`,"正在回放…":`Replaying…`,回放这段对话:`Replay this conversation`,"隔离回放:只测试回复,不发送 QQ,不修改真实记忆和 TA 的心智。":`Isolated replay: it only tests replies. Nothing is sent to QQ, and neither real memory nor TA's mind is changed.`,处理记录:`Processing log`,查看处理详情:`View processing details`,"有新的消息处理记录后会显示在这里。":`New message processing records will show up here.`,运行详情:`Run details`,耗时:`Duration`,模型调用:`Model calls`,"{v} 次":`{v} calls`,"展开下方查看上下文、模型输入与原始输出。":`Expand below to see the context, model input, and raw output.`,"选择一条处理记录,查看最终上下文、Prompt、原始输出、Token 与耗时。":`Pick a record to see the final context, prompt, raw output, tokens, and duration.`,回到那一刻:`Back to that moment`,会话:`Sessions`,"+ 添加会话":`+ Add session`,搜索名称或号码:`Search name or number`,搜索会话:`Search sessions`,参与中:`Taking part`,已暂停:`Paused`,"{v} 条没细看":`{v} not read closely`,"参与:{v}":`Taking part: {v}`,"暂无匹配的会话。":`No matching sessions.`,"已归档 · {length}":`Archived · {length}`,暂停参与:`Pause`,开启参与:`Resume`,近期细摘要:`Recent detailed summary`,中期摘要:`Mid-term summary`,较早摘要:`Earlier summary`,远期摘要:`Distant summary`,这个会话:`This session`,反馈:`Feedback`,还没有选中会话:`No session selected`,"从左边选一个群聊或私聊。":`Pick a group or private chat on the left.`,"TA 在这里的样子":`How TA is here`,展开完整内容:`Show everything`,"想成为:{aspiration}":`Wants to be: {aspiration}`,"这段私聊给 TA 的感觉":`How this private chat feels to TA`,"这个群给 TA 的感觉":`How this group feels to TA`,刚来这里不久:`Only just arrived here`,"在这里开不开口由 TA 自己决定:没有参与概率和冷却。TA 对这里每个人的感觉在「人际」里看。":`Whether to speak here is TA's own call: there is no participation probability or cooldown. How she feels about each person here is under People.`,归档:`Archive`,会话设置:`Session settings`,"所有会话和独处都用模型库里的默认模型;其余已启用的模型按列表顺序做备用。她在这个聊天窗里用什么样子,由她自己从经历里决定。":`Every session and her time alone use the default model in the model library; other enabled models serve as backups in list order. How she presents herself in this chat is up to her, shaped by her experience.`,"节能看图:只在被 @ 或明确要求时,看这一条和附近的图":`Save tokens on images: only look at this one and nearby ones when @-mentioned or asked directly`,高级策略:`Advanced policy`,"聚合窗口 ms":`Batching window (ms)`,"最长等待 ms":`Longest wait (ms)`,"近期原文条数(10–500)":`Recent raw messages (10–500)`,一轮总字数:`Characters per turn`,"上下文压缩:更早的聊天定期整理成分层摘要,越近越详细":`Context compression: older chat is periodically folded into layered summaries, more detailed the more recent`,长期记忆:`Long-term memory`,"倾诉、纠正和危机时额外复审一次回复":`Review the reply once more when someone confides, corrects her, or is in crisis`,保存会话设置:`Save session settings`,保存后下一轮生效:`Takes effect next turn after saving`,"语境摘要 · {length} 段":`Context summaries · {length}`,"还没有摘要。聊天超过近期原文条数后,更早的内容会自动整理到这里。":`No summaries yet. Once the chat passes the recent raw message count, older content is folded in here automatically.`,摘要:`Summary`,"{period} · {messages} 条消息":`{period} · {messages} messages`,"未完:":`Unfinished: `,"针对具体回复评价口吻;这是 TA 在这个会话里听到的话,不会改写天性。":`Rate the tone of a specific reply. This is something TA hears in this session; it does not rewrite her nature.`,"这句回复怎么样?":`How was this reply?`,"还没有可以评价的回复。":`No replies to rate yet.`,选择评价:`Choose a rating`,"TA 扫了一眼":`TA glanced over it`,"TA 看了,没出声":`TA looked but stayed quiet`,"TA 睡着了,醒来再看":`TA is asleep and will look when she wakes`,选择一段对话:`Pick a conversation`,模拟消息:`Simulated message`,模拟:`Simulated`,为什么这么说:`Why she said that`,"正在翻当时的记录…":`Looking through the record from then…`,"TA 当时的理解:":`What TA understood then: `,"理由:":`Reason: `,"引用的资料:":`Sources cited: `,"这句怎么样?":`How was this one?`,等待新的消息:`Waiting for new messages`,"群聊与私聊消息会在这里实时出现;TA 扫一眼、没出声也会留下一条分隔线。":`Group and private messages appear here live. When TA glances and says nothing, a divider is left too.`,"作为一条模拟消息走完整流程,写进模拟会话;不会发到 QQ,也不进入真实记忆。":`Runs the full pipeline as a simulated message and is written into the simulated session. It is not sent to QQ and does not enter real memory.`,"体验用户 ID":`Trial user ID`,"以这位群友的身份说一句…":`Say something as this group member…`,"视为 @":`Count as @-mention`,发送模拟消息:`Send simulated message`,"真实模式下不能模拟消息。想看看 TA 会怎么回,可以「和 TA 聊聊」——那是试聊,什么都不写入。":`Messages cannot be simulated in real mode. To see how TA would reply, use “Talk with TA”: that is a trial chat and nothing is written.`},Ks={"连接 QQ":`Connect QQ`,"两种连接方式二选一,同一时间只使用一种。她的记忆、心情和行为完全一致,区别只在消息怎么到达。":`Pick one of two ways to connect; only one is used at a time. Her memory, moods and behavior are the same either way. Only the way messages arrive differs.`,"QQ 已连接":`QQ connected`,等待连接:`Waiting for a connection`,连接方式:`Connection method`,使用中:`In use`,改用这种方式:`Use this method`,"已切换为 {name}":`Switched to {name}`,切换连接方式:`Switch connection method`,"切换后会断开当前连接。原来方式下的会话仍可查看,但不能再向它们发送消息。":`Switching drops the current connection. Chats from the previous method stay readable, but nothing can be sent into them.`,切换:`Switch`,先不切换:`Not now`,"连接方式由环境变量 LUCKYTRI_CHANNEL 指定,在这里不能更改。去掉该变量后即可在此选择。":`The connection method is set by the LUCKYTRI_CHANNEL environment variable and cannot be changed here. Remove it to choose here.`,"OneBot 11":`OneBot 11`,"自备接入端,通过反向 WebSocket 连接。能看到全部群消息。":`Bring your own client and connect over a reverse WebSocket. Sees every group message.`,"反向 WebSocket 地址":`Reverse WebSocket address`,"同一台电脑上的接入端无需单独配置连接令牌。":`Clients on the same computer need no separate connection token.`,"在接入端启用反向 WebSocket 客户端,填写上方地址,消息格式选择数组。已有的地址配置可以继续使用。":`Enable a reverse WebSocket client, use the address above, and choose array messages. Existing address settings can stay as they are.`,"远程接入时,连接密码使用管理密码;已有的远程连接令牌仍兼容。":`Remote clients can use the management password. Existing remote access tokens remain supported.`,"在接入端完成 QQ 登录。连接成功后,本页状态会更新;新会话仍需在「对话」中开启参与。":`Sign in to QQ in that client. This page updates once it connects; new chats still need to be switched on under Chats.`,"LuckyTri 只负责接收,不提供、不安装也不管理接入端。":`LuckyTri only receives. It does not provide, install or manage the client.`,"QQ 官方机器人":`QQ official bot`,"只需 AppID 与 AppSecret,无需额外软件。群里默认只收到 @ 她的消息。":`Needs only an AppID and AppSecret, no extra software. In groups it receives only messages that @ her by default.`,AppID:`AppID`,"机器人的 AppID":`The bot's AppID`,AppSecret:`AppSecret`,"已保存,留空保留":`Saved, leave blank to keep`,"机器人的 AppSecret":`The bot's AppSecret`,"由环境变量指定,在这里不能修改":`Set by an environment variable and cannot be changed here`,保存:`Save`,保存并使用:`Save and use`,已保存:`Saved`,"请填写 AppID 和 AppSecret":`Enter both the AppID and the AppSecret`,有尚未保存的修改:`Unsaved changes`,连接状态:`Connection`,机器人:`Bot`,最近收到消息:`Last message received`,还没有:`None yet`,群消息范围:`Group messages`,全部群消息:`All group messages`,"只有 @ 她的消息":`Only messages that @ her`,尚未收到群消息:`None received yet`,未启用:`Not in use`,"尚未填写 AppID 与 AppSecret":`AppID and AppSecret not entered yet`,正在连接开放平台:`Connecting to the open platform`,已连接:`Connected`,"连接已断开,正在重连":`Disconnected, reconnecting`,连接出错:`Connection error`,"目前只收到 @ 她的群消息。想让她看到群里的全部消息,请在开放平台的机器人设置里开启「接收所有消息」。":`Only group messages that @ her have arrived so far. To let her see everything said in a group, turn on “Receive all messages” in the bot settings on the open platform.`,"在 QQ 开放平台创建机器人,取得 AppID 与 AppSecret。":`Create a bot on the QQ open platform and get its AppID and AppSecret.`,"把运行 LuckyTri 的这台机器的出口 IP 加入机器人的 IP 白名单。":`Add the outbound IP of the machine running LuckyTri to the bot's IP allowlist.`,"可选:开启「接收所有消息」,她才能看到群里没有 @ 她的话;不开启时只会收到 @ 她的消息。":`Optional: turn on “Receive all messages” so she can see group talk that does not @ her. Without it she only receives messages that @ her.`,"填写上方的 AppID 与 AppSecret 并保存。状态变为「已连接」后,在群里 @ 她或私聊她,新会话会出现在「对话」中。":`Enter the AppID and AppSecret above and save. Once the status says Connected, @ her in a group or message her privately, and the new chat appears under Chats.`,"官方平台不提供群名称:新会话以占位名出现,可以在「对话」中为它改名。":`The official platform does not provide group names. New chats show a placeholder name that you can change under Chats.`,"官方平台上,同一个人在不同的群里标识不同。像只在不同的房间见过对方一样,平台给出统一身份之前,她不会把两处的人当成同一个人。":`On the official platform the same person has a different ID in each group. As if she had only met them in separate rooms, she will not treat them as one person until the platform provides a unified identity.`,"对方关闭了机器人的主动消息时,她不会去打扰,会等对方来找她。":`When someone has turned off the bot's proactive messages she will not intrude. She waits for them to come to her.`,就绪检查:`Readiness`,还差哪一步:`What is left`,查看:`View`,去处理:`Fix`,"添加群聊 / 私聊":`Add a group or private chat`,"添加之后再决定要不要让 TA 参与;开不开口仍由 TA 自己决定。":`Add it first, then decide whether she takes part. Whether she speaks is still up to her.`,类型:`Type`,群聊:`Group`,私聊:`Private`,"群号 / QQ 号":`Group number / QQ number`,"4–20 位数字":`4–20 digits`,"群 openid / 用户 openid":`Group openid / user openid`,"8–64 位字母、数字、下划线或短横线。官方平台的会话通常会在有人 @ 她或私聊她时自动出现,这里只用于提前登记。":`8–64 letters, digits, underscores or hyphens. On the official platform a chat usually appears by itself once someone @s her or messages her privately; this is only for adding one ahead of time.`,显示名称:`Display name`,添加会话:`Add chat`,"请先在「连接 QQ」里填写机器人的 AppID":`Enter the bot's AppID under Connect QQ first`,会话名称:`Chat name`,"官方机器人平台不提供群名称,可以在这里自己起一个":`The official bot platform does not provide group names, so you can name it yourself here`},qs={"TA 最核心的部分":`The core of TA`,"在远方:很久没被触及":`Far away: untouched for a long time`,慢慢淡出:`Slowly fading`,"撤销「{content}」?撤销后 TA 不会再这样认为,之后的独处也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will no longer think this, and her time alone will not write it back. You can note a reason (optional):`,撤销这条线索:`Undo this strand`,内心的分区:`Inner life sections`,心灵星图:`Star map`,线索清单:`Strand list`,"她从真实经历里慢慢认识自己。点开一条线索,可以看到它如何变化。":`She gets to know herself slowly, from real experience. Open a strand to see how it changed.`,"TA 还没有长出关于自己的东西":`TA has not grown anything about herself yet`,"聊得多了、独处过、写过日记,TA 会慢慢发现自己喜欢什么、怎么看事情、想做什么。天性只是种子。":`After enough conversations, time alone, and diary entries, TA slowly finds out what she likes, how she sees things, and what she wants to do. Nature is only the seed.`,"强度 {v}":`Strength {v}`,"· 此刻的分量 {v}":`· weight right now {v}`,"再看 {v} 条线索":`See {v} more strands`,"天性只是种子,其余的都从经历里来。":`Nature is only the seed; everything else comes from experience.`,"TA 自己放下的 · {length}":`Let go by TA · {length}`,"没有。":`None.`,"你撤销过的 · {length}":`Undone by you · {length}`,一颗星:`A star`,强度:`Strength`,此刻的分量:`Weight right now`,经历的天数:`Days of experience`,"{length} 天":`{length} days`,来源:`Sources`,"{length} 处":`{length} places`,最近一次被触及:`Last touched`,"怎么变成现在这样的 · {versions} 个版本":`How it came to be · {versions} versions`,"撤销后 TA 不会再这样认为;这只是拿走一段理解,不会改写发生过的事。":`After undoing, TA will no longer think this. It only takes away one understanding and does not rewrite what happened.`,收起线索:`Collapse strands`,"MOOD / 此刻的天气":`MOOD / the weather right now`,"心情有自己的潮汐。":`Mood has tides of its own.`,"最近 {length} 次被经历牵动;有起伏,也会慢慢平静。":`Moved by experience {length} times lately; it rises and falls, then settles.`,刚刚留下的心情:`The mood just left behind`,暂时说不清缘由:`No clear reason for now`,最近的心情曲线:`Recent mood curve`,"心情还没有被什么事牵动过。每一次经历都可能推动 TA 的心情,随后又会慢慢回到平常。":`Nothing has moved her mood yet. Every experience can nudge TA's mood, and it slowly returns to normal afterwards.`,最近的心情:`Recent moods`,"删除这张便签?有后续修正的便签只能隐藏。":`Delete this note? A note that has later corrections can only be hidden.`,删除便签:`Delete note`,"THOUGHTS / 留给自己的话":`THOUGHTS / notes to herself`,"有些念头,先放在心上。":`Some thoughts are kept in mind first.`,"有些是聊天之后的理解,有些是还没想好要告诉谁的念头。可以分享,也可以先留给自己。":`Some are understandings after a chat, some are thoughts she has not decided who to tell. They can be shared, or kept for herself first.`,"搜索某件事、某个人":`Search for a matter or a person`,搜索便签:`Search notes`,"· 修正了以前的想法":`· corrected an earlier thought`,放下了:`Let go`,"放下了:{resolution}":`Let go: {resolution}`,"想主动说:{outreach} · {v}":`Wants to say: {outreach} · {v}`,"因为:{outreach_reason}":`Because: {outreach_reason}`,"{outreach_wait_reason};稍后重新决定。":`{outreach_wait_reason}; she will decide again later.`,放下这件事:`Let this go`,重新关注:`Pay attention again`,"不再参与 TA 的思考":`Leave out of TA's thinking`,这面墙还空着:`This wall is still empty`,"独处时有了新的理解、放不下的事或久别想起的人,TA 会写一张便签贴在这里。":`When she has a new understanding while alone, something she cannot let go of, or someone she remembers after a long time, TA writes a note and sticks it here.`,暂时放远:`Set aside for now`,慢慢笃定:`Growing certain`,还在生长:`Still growing`,"心灵星图:TA 关于自己的线索":`Star map: TA's strands about herself`,"SELF / 正在形成的自己":`SELF / still taking shape`,"不是一张固定的画像,":`Not a fixed portrait,`,"而是一直在生长。":`but something that keeps growing.`,"一件经历可能留下一点痕迹。点开一枚光片,可以看到它从哪里来、后来又怎么改变。":`An experience can leave a small trace. Open a shard of light to see where it came from and how it changed afterwards.`,枚线索:`strands`,枚此刻贴近:`close right now`,她留下的光片:`The shards she keeps`,"越亮的线索,越贴近此刻。淡去的仍然保留在这里。":`The brighter a strand, the closer it is to now. Faded ones are still kept here.`,"{length} 枚正在留存":`{length} kept`,"再看 {v} 枚光片":`See {v} more shards`},Js={"AHEAD · 向前看":`AHEAD`,"让未来有值得期待的事。":`Let the future hold things worth looking forward to.`,"约定、想做的事与每年都会回来的日子,都安静地留在这里。":`Promises, things she wants to do, and the days that return every year all rest quietly here.`,约定的视图:`Promise views`,日历:`Calendar`,清单:`List`,上个月:`Previous month`,"{year} 年 {month} 月":`{month}/{year}`,下个月:`Next month`,"{n} 日{v}":`{n}{v}`,",{length} 件事":`, {length} items`," · 每年":` · yearly`,"这一天没有 TA 在等的事。":`Nothing TA is waiting for on this day.`," · 私下知道的":` · known privately`,"还没有 TA 在等的事":`Nothing TA is waiting for yet`,"有人说起之后的安排、TA 答应了别人什么,整理记忆时会记下来。":`When someone mentions plans, or TA promises something, it is noted while she sorts her memory.`,日记的日子:`Diary days`,那天的心情:`Mood that day`,"和昨天的自己比:{compare}":`Compared with yesterday's self: {compare}`,前一天:`Previous day`,"‹ 前一天":`‹ Previous day`,"合上那天的 TA":`Close that day's TA`,"那天的 TA":`TA that day`,后一天:`Next day`,"后一天 ›":`Next day ›`,"那天的 TA,和前一天比":`TA that day, compared with the day before`,"多了:":`Added: `,"变了:":`Changed: `,"放下了:":`Let go of: `,"正在过的:":`Living through: `,"心情:":`Mood: `,"这是 TA 留下快照的第一天,还没有可以对照的昨天。":`This is the first day TA left a snapshot, so there is no yesterday to compare with yet.`,还没有日记:`No diary yet`,"每天睡前(或凌晨),如果这一天真的有过经历,TA 会写下来,并和昨天的自己对照。":`Each day before sleep (or in the small hours), if the day held real experience, TA writes it down and compares it with yesterday's self.`,"LIFE · 一生":`LIFE`,"日子经过,":`Days pass by,`,"留下自己的形状。":`and leave their own shape.`,"写下今天,回望从前,也给明天留一点期待。":`Write today, look back on the past, and leave a little anticipation for tomorrow.`,"时间、任务与作品 →":`Time, tasks and works →`,一生的分区:`Lifetime sections`,日记本:`Diary`,回顾:`Reflections`,我的来路:`My Journey`,书架:`Bookshelf`,"来到这里的第 {dayOfLife} 天":`Day {dayOfLife} since arriving here`,"TA 的回顾":`TA's reflections`,"每隔一段时间,TA 在夜里重新看看这段日子:留下了什么、自己怎样在变。":`Every so often, TA looks back over these days at night: what was left behind and how she is changing.`,"和上次回顾比:{compare}":`Compared with the last reflection: {compare}`,还没有回顾过:`No reflection yet`,"日记攒到两篇以后,TA 会在睡着的时候第一次回顾。":`Once there are two diary entries, TA will make her first reflection while she sleeps.`,前言:`Preface`,"我的来路 · 第 {dayOfLife} 天":`My Journey · day {dayOfLife}`,收起旧版本:`Hide older versions`,"重写过 {v} 次":`Rewritten {v} times`,"第 {chapter} 章":`Chapter {chapter}`,自传还没开始写:`The autobiography has not been started`,"有了两篇日记之后,TA 会在夜里第一次回顾,写下「我的来路」和第一章。旧的版本都会留着。":`After two diary entries, TA will reflect for the first time at night and write “My Journey” and its first chapter. Older versions are all kept.`,"独处时,TA 会从共享资料里挑自己感兴趣的读,一段一段地读下去,读后的想法可以改变 TA。还有 {v} 段没读。":`When alone, TA picks things she is interested in from the shared material and reads them passage by passage. What she thinks afterwards can change her. {v} passages are still unread.`,去资料书架放点书:`Put something on the bookshelf`,"第 {v} / {total} 段 · {v2}":`Passage {v} / {total} · {v2}`,读完没说什么:`Read it and said nothing`,还没读过什么:`Has not read anything yet`,"把文章放进「记忆 → 资料书架」的共享集合,TA 独处时会去读。":`Put articles into a shared collection in Memory → Bookshelf, and TA will read them when she is alone.`,"独处时留下的东西 · {v}":`Left behind while alone · {v}`,"阅读草稿、篇章和旧版本 →":`Reading drafts, chapters and older versions →`,自己的作品:`Her own works`,留在私下:`Kept private`,还没有独处作品:`No works from time alone yet`,"她会按自己留下的计划,阅读、写东西或整理想法。":`She will read, write or sort her thoughts according to the plans she left herself.`,独处的时候:`When alone`,"独处、日记与夜里的记录 · {length}":`Time alone, diary and night records · {length}`,未调用模型:`No model was called`,"安静本身不会留下记录;TA 真正独处、写日记或在夜里整理时才会记下。":`Quiet itself leaves no record; it is noted only when TA actually spends time alone, writes a diary, or sorts things at night.`},Ys={"已重建 {chunks} 段向量":`Rebuilt vectors for {chunks} passages`,文档已切分入库:`Document split and stored`,"给 TA 留一点可以读的东西":`Leave TA something to read`,"存放可供聊天参考的资料,和自动记录的会话记忆分开管理。共享集合里的文章,TA 独处时也会挑着读。":`Holds reference material for chats, managed separately from the memory recorded automatically from sessions. Articles in a shared collection are also something TA picks from to read when alone.`,文档集合:`Document collections`,"资料书架,{length} 份资料":`Bookshelf, {length} documents`,"正在重建…":`Rebuilding…`,重建向量:`Rebuild vectors`,书架还空着:`The bookshelf is still empty`,"在下面放一份资料,TA 就能在聊天里查到,独处时也可能去读。":`Add a document below and TA can look it up in chat, and may read it when alone.`,"+ 添加一份资料":`+ Add a document`,标题:`Title`,粘贴正文:`Paste the text`,保存到书架:`Save to bookshelf`,"保存之后,TA 才能在聊天和独处时读到":`TA can read it in chat and when alone only after you save`,检索测试:`Search test`,试着搜索一个关键词:`Try searching a keyword`,检索:`Search`,"没有找到相关资料。":`No related material found.`,资料书架:`Bookshelf`,记忆已写入:`Memory saved`,"确定删除已选的 {length} 条记忆吗?":`Delete the {length} selected memories?`,删除记忆:`Delete memories`,"已删除 {v} 条记忆":`Deleted {v} memories`,"确定清空本会话的 {count} 条可删除记忆吗?":`Clear the {count} deletable memories of this session?`,清空本会话记忆:`Clear this session's memories`,记忆已整理:`Memory sorted`,在哪里知道的:`Where she learned it`,选择会话:`Choose a session`,关于谁:`About whom`,按人筛选:`Filter by person`,所有人:`Everyone`,"搜索记忆、人物或关键词":`Search memories, people or keywords`,搜索记忆:`Search memories`,"+ 手动记忆":`+ Add memory`,最近发生了什么:`What happened recently`,记忆档案:`Memory archive`,刷新总结:`Refresh summary`,"整理中…":`Sorting…`,立即整理:`Sort now`,"请选择会话以查看最近的记忆总结。":`Choose a session to see its recent memory summary.`,尚未整理:`Not sorted yet`,展开:`Expand`,全选:`Select all`,取消选择:`Clear selection`,"删除已选 {v}":`Delete selected {v}`,清空本会话:`Clear this session`,"选择记忆:":`Select memory: `,已锁定:`Locked`,"关于 {v} · {v2} · 把握 {v3}%":`About {v} · {v2} · confidence {v3}%`,在这里知道的:`Learned here`,别处知道的:`Learned elsewhere`,"编辑记忆:":`Edit memory: `,保存修改:`Save changes`,编辑后要点保存:`Save after editing`,"再显示 20 条":`Show 20 more`,这里还有空白:`Nothing here yet`,"别人说「记住……」、聊天积累后的自动整理,或你手动添加的事会出现在这里。TA 对所有会话只有一份记忆:别处知道的事只在相关时想起,私下知道的不当众说,要 TA 保密的不离开原处。":`Things people ask her to remember, what is sorted automatically as chats pile up, and what you add by hand will appear here. TA has a single memory across all sessions: what she learned elsewhere comes up only when relevant, what she knows privately is not said in public, and what she was asked to keep secret does not leave where it was told.`,"共 {length} 条记忆":`{length} memories in total`,共享与锁定的记忆不会被批量选中:`Shared and locked memories are not picked up by bulk selection`,手动记住一件事:`Remember something by hand`,所属会话:`Session`,"用户 ID":`User ID`,"选择昵称,或填写用户 ID":`Choose a nickname, or enter a user ID`,已确认的事实:`A confirmed fact`,新增人工记忆:`Add a manual memory`,"MEMORY · 记忆":`MEMORY`,"见过的人与事,":`The people and things she has met`,"会慢慢有了重量。":`slowly gain weight.`,"记住重要的,也允许改变看法。":`Remember what matters, and allow views to change.`,记忆的分区:`Memory sections`,"TA 记得的事":`What TA remembers`,"先在「对话」里添加一个会话,TA 才有地方认识人、记住事。":`Add a session under Chats first, so TA has somewhere to meet people and remember things.`},Xs={"可用更改次数已用完。之后的性格、兴趣和想法,由 TA 自己从经历里生长。":`No edits remain. TA's personality, interests and thoughts will continue growing from experience.`,温柔:`Gentle`,"颜色偏冷,表情淡淡的":`Cooler colours, a faint expression`,"颜色更暖,嘴角上扬":`Warmer colours, the corners of her mouth turned up`,毒舌:`Sharp-tongued`,不挖苦人:`No digs at anyone`,"嘴角一歪,会吐槽":`A crooked smile, ready to tease`,幽默:`Humorous`,认真:`Serious`,"眯眼笑,爱开玩笑":`Squinting smile, loves a joke`,活泼:`Lively`,安安静静:`Quiet and still`,跳得更快:`Bounces faster`,主动:`Proactive`,更喜欢独处:`Prefers being alone`,更愿意分享:`More willing to share`,系统指令:`System prompt`,看见与开口:`Seeing and speaking up`,分享与发起:`Sharing and initiating`,重新措辞:`Rewording`,回复检查:`Reply check`,上下文压缩:`Context compression`,摘要合并:`Summary merging`,"天性已保存,下一次开口时生效":`Nature saved; it takes effect the next time she speaks`,"TA 的日子已按新设置安排":`TA's days are arranged by the new settings`,"指令已保存,下一轮生效":`Prompt saved; it takes effect next turn`,天性预览:`Nature preview`,"THE WAY SHE GROWS · 天性":`THE WAY SHE GROWS`,"她的底色,":`Her undertone`,"慢慢长成她自己。":`slowly grows into herself.`,"一些与生俱来的倾向,会在每一次相遇里长出新的模样。":`Some inborn tendencies take on a new shape in every encounter.`,"调节刻度,看看此刻的她":`Adjust the scales and see her as she is now`,成长中的性格:`Character in growth`,"BECOMING · 正在成为":`BECOMING`,此刻的她:`Her right now`,"天性是起点。下方是她从真实经历里长出的刻度,下一次对话会使用这些值。":`Nature is the starting point. Below are the scales she grew from real experience; the next conversation uses these values.`,"起点 {v}":`Start {v}`,"INNER VOICE · 自己的样子":`INNER VOICE`,"她还没有为现在的自己留下一段新的描述。底色和已有的自我线索仍会陪着她。":`She has not left a new description of who she is now. Her undertone and existing self strands still stay with her.`,"看看她怎么走到这里 · {length} 版":`See how she got here · {length} versions`,"看看她为何改变 · {length} 次":`See why she changed · {length} times`,"她还没有从经历里改变这些刻度。独处或日记里形成了有来源的新选择后,会留在这里。":`She has not changed these scales through experience yet. Once a new choice with a source forms during time alone or in the diary, it will be kept here.`,"天性还可以改 {left} 次,包括性格刻度。用完后由她自己生长。":`Nature can still be changed {left} more times, character scales included. After that she grows by herself.`,"塑造 TA":`Shape TA`,"TA 生来是什么样的?":`What is TA like by birth?`,"天性是种子:性格、兴趣和底线。TA 的自我、在各群的样子、对每个人的感觉都会从经历里长出来——你能看到、能撤销,但不在这里改写。":`Nature is a seed: character, interests and boundaries. TA's self, how she is in each group, and how she feels about each person all grow from experience. You can see them and undo them, but not rewrite them here.`,名字:`Name`,性别:`Gender`,女:`Female`,男:`Male`,不指定:`Unspecified`,"人称会进入 TA 对自己的理解。女是「她」,男是「他」。":`The pronoun becomes part of how TA understands herself. Female is “she”, male is “he”.`,"别人会怎么叫 TA":`What others call TA`,用逗号分隔:`Separate with commas`,"群友叫 TA 的称呼,保存时一并写进全局设置":`The names group members call TA; saved into the global settings together`,"TA 的背景、性格、兴趣和社交方式…":`TA's background, character, interests and way of socializing…`,性格刻度:`Character scales`,"{label}刻度":`{label} scale`,说话长度:`Speech length`,作息:`Daily rhythm`,"TA 会睡觉:睡着时不看群,被私聊或 @ 会等醒来再看(危机消息除外)":`TA sleeps: while asleep she does not read groups, and a private message or @-mention waits until she wakes (crisis messages excepted)`,"拖动月亮和太阳,或直接输入时间。":`Drag the moon and sun, or type a time.`,"兴趣、边界与底线":`Interests, limits and bottom lines`,兴趣:`Interests`,社交边界:`Social limits`,"底线(每行一条)":`Bottom lines (one per line)`,"不想用的说法(每行一个)":`Phrases to avoid (one per line)`,"凭据(密码、密钥、验证码)永远不会进入 TA 的心智,这一条写死在代码里。":`Credentials (passwords, keys, verification codes) never enter TA's mind; this is hard-coded.`,"天性的版本 · {length}":`Nature versions · {length}`,"第 {version} 版":`Version {version}`,修改:`Change`,"已交给 TA":`Given to TA`,"保存中…":`Saving…`,保存天性:`Save nature`,更改次数已用完:`No changes left`,天性有未保存的修改:`Nature has unsaved changes`,"还可以改 {left} 次":`{left} changes left`,"调色盘 · 即时反馈":`Palette · instant feedback`,"微小的倾向,也会改变表达":`Even small tendencies change how she expresses herself`,用草稿天性试聊:`Trial chat with the draft nature`,今天真的好累啊:`I'm so tired today`,用左边还没保存的天性:`Uses the unsaved nature on the left`,"TA 的日子":`TA's days`,"TA 怎样度过没人说话的时间":`How TA spends the time when no one is talking`,"聊天安静下来后,TA 会重新看看最近的事,改变对自己、对人的理解。":`When chat goes quiet, TA looks over recent events again and may change how she understands herself and people.`,独处时读资料:`Read while alone`,"从共享资料里按自己的兴趣挑着读,一段一段读下去;读过的内容聊天时可以自然提起。":`She picks from shared material by her own interest and reads on passage by passage; what she has read can come up naturally in chat.`,睡前写日记:`Diary before sleep`,"一天结束时写下这一天,和昨天的自己对照;隔一段时间在夜里回顾,改写自传、翻开新的一章。":`At the end of the day she writes it down and compares it with yesterday's self; every so often she looks back at night, rewrites her autobiography and opens a new chapter.`,"睡着以后,把白天没整理的聊天记进记忆和约定里,再按回顾间隔回顾这段日子。":`After falling asleep, she records the day's unsorted chats into memory and promises, then looks back over these days on the reflection interval.`,"允许 TA 主动说话":`Let TA speak first`,"安静的时候,也能从自己的兴趣、念头和对人的感觉决定要不要先开口。不必等人提问,不催同一句话;对方没回应,也不等于以后不能分享新的事。关掉后停止主动联系。":`In quiet moments she can decide whether to speak first, from her own interests, thoughts and feelings about people. She does not need to wait to be asked and does not push the same line; no reply does not mean she can never share something new later. Turning this off stops proactive contact.`,"安静多久才独处(分钟)":`Quiet for how long before time alone (minutes)`,"两次独处至少间隔(分钟)":`Minimum gap between times alone (minutes)`,"攒够多少条新消息(条)":`New messages to pile up (count)`,"回顾间隔(天)":`Reflection interval (days)`,"安静时多久看看想不想聊(分钟)":`How often to check whether she wants to talk when quiet (minutes)`,"两次主动联系至少间隔(小时)":`Minimum gap between proactive contacts (hours)`,"主动联系间隔只在实际发出后计算,可设为 0;沉默不会占用发送间隔。想说的话会保留,临时忙碌后重新决定。没有新消息时也可独处,不需要攒够消息才能产生念头。":`The proactive-contact gap is counted only after something is actually sent and can be 0; silence does not use up the gap. What she wants to say is kept and she decides again after being busy. She can also spend time alone with no new messages; she does not need a pile of messages to have a thought.`,"独处、日记和夜里整理也使用模型库里的默认模型,不再单独指定。":`Time alone, the diary and night sorting also use the default model in the model library; they are no longer set separately.`,时区:`Time zone`,每日注意力:`Daily attention`,"TA 一天能花多少 Token":`How many tokens TA can spend in a day`,"每日 Token 上限(0 = 不限)":`Daily token limit (0 = unlimited)`,"滚动 24 小时计算。快用完时,TA 在群里只在被叫到时细看;用完后后台独处和整理暂停。":`Counted over a rolling 24 hours. When nearly used up, TA reads groups closely only when called on; once used up, background time alone and sorting pause.`,独处与日记最多占:`Time alone and diary use at most`,记忆整理与压缩最多占:`Memory sorting and compression use at most`,"扫一眼群聊不花 Token;TA 细看时一次调用同时完成理解、心情和回复。私聊和 @ 永远优先。":`Glancing over a group costs no tokens; when TA reads closely, one call does understanding, mood and reply together. Private chats and @-mentions always come first.`,"保存 TA 的日子":`Save TA's days`,日常安排有未保存的修改:`Daily arrangements have unsaved changes`,日常安排已保存:`Daily arrangements saved`,高级:`Advanced`,"指令(Prompt)":`Prompts`,要编辑的指令:`Prompt to edit`,指令正文:`Prompt text`,保存指令:`Save prompt`,指令有未保存的修改:`The prompt has unsaved changes`,指令已保存:`Prompt saved`,几点睡:`Bedtime`,几点醒:`Wake time`,"{h} 小时":`{h} h`,"{h} 小时 {m} 分":`{h} h {m} min`,"睡 {hours}":`Sleeps {hours}`},Zs={独处与日记:`Alone & diary`,整理记忆:`Sorting memory`,拖动调整首页壁纸构图:`Drag to adjust the wallpaper framing`,"按住并拖动图片,调整人物位置":`Press and drag the image to adjust where she stands`,拖动背景调整构图:`Drag the background to adjust the framing`,调整构图:`Adjust framing`,"TA 最近说":`What TA said lately`,"TA 还没在哪里开过口。":`TA has not spoken anywhere yet.`,"心里暂时没有挂着的事。":`Nothing is weighing on her mind for now.`,"正在为自己而活:{content}":`Living for herself: {content}`,"被别人的话碰到过 {touched} 次,上次{v}":`Touched by others' words {touched} times, last {v}`,"上次相遇:{text}":`Last encounter: {text}`,"(没出声)":`(said nothing)`,"看看 TA 的便签":`See TA's notes`,在等的事:`Things she is waiting for`,"这几天没有 TA 特别在等的事。":`Nothing in particular TA is waiting for these days.`,"今天的 TA":`TA today`,"{v},按时间排在一起":`{v}, in time order`,筛选今天的事:`Filter today's events`,开口与沉默:`Speaking and silence`,心情:`Mood`,"扫了 {count} 眼":`Glanced ×{count}`,"心情 · {feeling}":`Mood · {feeling}`,"约定 · {v}":`Promise · {v}`,"没什么需要 TA 细看的":`Nothing needs a close look from TA`,今天还很安静:`Today is still quiet`,"TA 扫一眼、开口、没出声、心情变化、独处、写日记,都会按时间排在这里。":`When TA glances over a chat, speaks, stays silent, changes mood, spends time alone or writes her diary, it all shows up here in time order.`,今天的注意力:`Today's attention`,这一天:`This day`,"共 {v} 次调用、{v2} Token,缓存命中 {v3}。 {v4}":`{v} calls, {v2} tokens, cache hit {v3}. {v4}`,"每日上限 {v}。":`Daily limit {v}.`,"没有设置每日上限。":`No daily limit set.`,还没细看的消息:`Messages not read closely yet`,留意:`Watch`,"{unread} 条未读":`{unread} unread`,"被叫到、聊到 TA 在意的事、熟人说话或攒了不少消息时,TA 才会细看。":`TA reads closely only when she is called on, the talk reaches something she cares about, someone familiar speaks, or enough messages pile up.`,"TA 的这一生":`TA's life so far`,到现在:`Up to now`,自我线索:`Self strands`,认识的人:`People known`,天日记:`days of diary`,件在等的事:`things waiting`,恢复默认:`Restore default`,换壁纸:`Change wallpaper`,浏览器没有保存这次构图:`The browser did not save this framing`,首页壁纸构图已记住:`Wallpaper framing remembered`,中间这张已换上:`The middle one is now set`,后面的壁纸已换上:`The background wallpaper is now set`,已恢复原来的壁纸:`Original wallpaper restored`,中间这张:`The middle one`,选择图片:`Choose an image`,后面的大壁纸:`The large background wallpaper`,"透明度 {v}%":`Opacity {v}%`,后面壁纸的透明度:`Background wallpaper opacity`,"越透明,心情的颜色越清楚。":`The more transparent it is, the clearer the mood colour shows.`},Qs={年长手足:`Older sibling`,年幼手足:`Younger sibling`,妹妹:`Younger sister`,姐姐:`Older sister`,弟弟:`Younger brother`,哥哥:`Older brother`,朋友:`Friend`,伙伴:`Companion`,其他关系:`Other relationship`,关系已保存:`Relationship saved`,"解除这份关系?相处留下的记忆和感受仍会保留。":`End this relationship? Memories and feelings from encounters will remain.`,解除关系:`End relationship`,解除:`End`,彼此的关系:`Relationships`,绑定关系:`Bind a relationship`,"按账号认出人或另一位机器人;关系融入关心、打算与交流,感情仍随着相处生长。":`Recognise people or other robots by account. Relationships inform care, plans and conversation, while feelings grow through encounters.`,另一位机器人:`Another robot`,人:`Person`,"还没有绑定关系,可以从一个准确的账号开始。":`No relationships bound yet. Start with an exact account.`,平台:`Platform`,对方账号:`Their account`,"QQ 号或平台用户 ID":`QQ number or platform user ID`,对象类型:`Account type`,对方名字:`Their name`,"可选,未填写时使用已认识的名字":`Optional. Otherwise use their known name.`,对方是我的:`They are my`,我是对方的:`I am their`,留空时按当前身份生成对应称呼:`Leave blank to infer the reciprocal role from the current identity`,关系称呼:`Relationship label`,应用账号:`Application account`,关系公开范围:`Relationship visibility`,这份关系的缘由:`Reason for this relationship`,"可选,写下真实的安排或缘由":`Optional. Describe the actual arrangement or reason.`,"绑定称呼不会凭空增加相处经历、信任或对方的同意。私下关系只在与对方的私聊中使用。":`A label does not invent shared experiences, trust or their consent. Private relationships are used only in private chats with that account.`,保存关系:`Save relationship`,修改关系:`Edit relationship`,"对方是我的 {peer},我是对方的 {self}":`They are my {peer}; I am their {self}`,关系变化记录:`Relationship history`,设置关系:`Set relationship`,新增:`Added`,在这里的想法:`Thoughts about this place`,"同一个她,在不同的地方留下自己的想法。":`The same person, with her own thoughts about different places.`,"她根据相处留下印象、愿望或疑问,选择什么时候新增、修改或放下。每次更新保留理由和来源。":`She leaves impressions, wishes or questions from her encounters, choosing when to add, revise or let them go. Each update retains its reasons and sources.`,"还没有特别想留在这里的想法,之后由她自己选择。":`No particular thoughts to keep here yet. She will choose in her own time.`,"查看想法与变化 ↗":`See thoughts and changes ↗`,"PLACE NOTES / 在这里的想法":`PLACE NOTES / thoughts about this place`,"旧人格记录,仅保留历史":`Previous persona record, kept only as history`,"撤销这次想法更新?会恢复上一次保留的想法。":`Undo this update? The previous set of thoughts will be restored.`,撤销想法更新:`Undo a thought update`,印象:`Impression`,偏好:`Preference`,想法:`Thought`,还在想的问题:`An open question`,相处的分寸:`Boundaries here`,"{n} 处来源":`{n} sources`,"相遇之间:TA 认识的人":`Between encounters: the people TA knows`,"PEOPLE / 相遇之间":`PEOPLE / between encounters`,"每一次相遇,":`Every encounter`,"都留下一点温度。":`leaves a little warmth.`,"越熟悉离 TA 越近。这里先放着最近亲近的 {length} 个人,其他人也仍然在名单里。":`The more familiar, the closer to TA. The {length} people closest lately are shown here; everyone else is still on the list.`,个相遇过的人:`people met`,最近靠近的人:`Recently closer`,"点开一张光片,看看她记得什么":`Open a card to see what she remembers`,还在慢慢认识:`Still getting to know`,"在名单里看看另外 {hidden} 个人":`See {hidden} more people on the list`,变化历史:`History of changes`,"已撤销 ·":`Undone ·`,"旧版 ·":`Older ·`,"没有记录。":`No records.`,人际的视图:`People views`,相遇之间:`Between encounters`,列表:`List`,找一个人:`Find a person`,"她记得相遇,也记得关系会随着时间改变。":`She remembers encounters, and remembers that relationships change over time.`,"在 {length} 个地方见过 · 上次说上话 {v}":`Met in {length} places · last spoke {v}`,"TA 还没有认识谁":`TA has not met anyone yet`,"有人和 TA 说话、TA 细看过群聊之后,这里会出现 TA 对每个人的感觉。":`Once someone talks to TA or she has read a group chat closely, her feeling about each person shows up here.`,"认识 {v} 天":`Known for {v} days`,"撤销这次「{v}」?TA 对这个人的感觉会重新计算。":`Undo this “{v}”? TA's feeling about this person will be recalculated.`,撤销一次关系变化:`Undo a change in the relationship`,"撤销这次相遇留下的意思?「{meant}」之后不会再回到 TA 心里,也不会再被当成变化的来源。":`Undo what this encounter left behind? “{meant}” will not come back to TA, and will no longer count as a source of change.`,撤销这次相遇:`Undo this encounter`,"正在想起…":`Remembering…`,"TA 认识的人":`A person TA knows`,"上次说上话 {v}":`Last spoke {v}`,还没说上过话:`Has not spoken yet`,"上次见到 {v}":`Last seen {v}`,"印象:{impression}":`Impression: {impression}`,"在这些地方见过:":`Met in these places: `,这份感觉是怎么来的:`How this feeling came about`,没有写原因:`No reason was written`,"{v} · {v2} · {length} 处来源":`{v} · {v2} · {length} sources`,"只是一起聊过天,还没有特别的变化。":`Only chatted together so far, with no particular change.`,"和{name}的相遇留下了什么":`What the encounters with {name} left behind`,私下:`Privately`,"当时:{why}":`Then: {why}`,"TA 记得关于{name}的事":`What TA remembers about {name}`,"{v} · 在「{v2}」知道的 · {when}":`{v} · learned in “{v2}” · {when}`,改完即生效:`Takes effect as soon as you change it`,"还没有记住关于这个人的事。":`Nothing remembered about this person yet.`,"和{name}有关的约定":`Promises involving {name}`,"没有和这个人有关的约定。":`No promises involving this person.`},$s={"THE WORLD SHE CAN TOUCH · 插件":`THE WORLD SHE CAN TOUCH · Plugins`,"核心是她。":`The core is her.`,"插件是世界。":`Plugins are the world.`,"插件只能经她同意接触世界。它们读不到她的数据库,也不能替她开口。":`A plugin touches the world only with her leave. It cannot read her database, and it cannot speak for her.`,插件的分区:`Plugin sections`,插件列表:`Plugin list`,"内置,未启用":`Built in, not enabled`,"已安装,未启用":`Installed, not enabled`,出错:`Error`,正在启动:`Starting`,"天气随 LuckyTri 附带,默认关闭。启用前会先列出它要的权限。":`Weather ships with LuckyTri and stays off. Enabling lists the permissions first.`,"插件市场的索引还没有发布,或现在连不上。随程序附带的插件在「插件列表」里,默认关闭。":`The market index is not published yet, or it cannot be reached. The plugins that ship with the app are in the plugin list, and they stay off.`,插件市场:`Plugin market`,她想做的事:`What she wants to do`,导入与开发:`Import and develop`,还没有接上插件:`No plugin is connected yet`,"内置的天气可以在这里启用,也可以从市场安装。":`The built-in weather can be enabled here, or you can install from the market.`,运行中:`Running`,查看权限并启用:`Review permissions and enable`,停用:`Disable`,详情:`Details`,正在查看市场:`Looking at the market`,"连不上的话,这里会说明,不会再显示一串英文错误。":`If it cannot be reached, this page says so, instead of an English error.`,市场暂时没有条目:`The market has no entries right now`,"索引仓库还是空的,或者现在连不上。你仍然可以导入一个插件包。":`The index repository is empty, or it cannot be reached. You can still import a package.`,安装:`Install`,没有等待同意的事:`Nothing is waiting for a yes`,"高风险的行动会先停在这里,等你点头。过一天就不再算数。":`A high-risk action waits here for you. After a day it no longer counts.`,同意:`Allow`,拒绝:`Refuse`,从链接导入:`Import from a link`,插件包地址:`Package address`,"校验值,可留空":`Checksum, optional`,检查这个包:`Check this package`,"从 GitHub 导入":`Import from GitHub`,仓库地址:`Repository address`,检查这个仓库:`Check this repository`,"本机目录(开发)":`Local folder (development)`,目录:`Folder`,按开发插件接上:`Connect as a development plugin`,索引源:`Index source`,索引地址:`Index address`,添加索引:`Add index`,先看清它要什么:`See what it asks for first`,校验通过:`Checksum matches`,未登记来源:`Unlisted source`,同意这些权限并安装:`Accept these permissions and install`,同意这些权限并启用:`Accept these permissions and enable`,高风险:`High risk`,中风险:`Medium risk`,低风险:`Low risk`,已保存的不会回显:`A saved value is not shown again`,一行一个地址:`One address per line`,保存设置:`Save settings`,卸载:`Remove`,插件:`Plugins`,"她能接触的世界,由这里接上。":`What she can touch of the world is connected here.`},ec={更新已开始:`Update started`,"正在下载新版本…":`Downloading the new version...`,"正在检查新程序…":`Checking the new program...`,"正在保存当下并停止实例…":`Saving the current state and stopping...`,"正在保留更新前的校验备份…":`Saving a verified backup before updating...`,"正在切换版本并重启…":`Switching versions and restarting...`,"正在确认新实例就绪…":`Checking that the new instance is ready...`,"正在恢复原版本和数据…":`Restoring the previous version and data...`,更新与重启已完成:`Update and restart completed`,更新未完成:`Update did not complete`,"更新到 {version} 并重启当前实例?先下载校验,再保留数据恢复点;启动失败时尝试恢复原版本。":`Update to {version} and restart this instance? The program is downloaded and checked first, then a data restore point is saved. If startup fails, recovery of the previous version is attempted.`,更新并重启:`Update and restart`,开始更新:`Start update`,"下载期间继续运行,切换前保留数据恢复点。更新完成后此页面会自动重新连接。":`The instance keeps running during download. A data restore point is saved before switching. This page reconnects after the update.`,"正在更新…":`Updating...`,"已恢复原版本和更新前的数据。":`The previous version and pre-update data were restored.`,版本与更新:`Version and updates`,检查更新:`Check for updates`,"正在检查…":`Checking…`,尚未检查更新:`Not checked yet`,有新版本可用:`An update is available`,已是最新发布版本:`Up to date with the latest release`,"当前版本领先于 npm 发布版本":`This version is ahead of the npm release`,暂时无法检查更新:`Unable to check for updates right now`,当前版本:`Current version`,"npm 最新版本":`Latest on npm`,上次成功检查:`Last successful check`,"暂时无法连接 npm 或读取版本信息,请稍后重试。":`Unable to reach npm or read version information. Please try again later.`,"点击时才检查,五分钟内复用结果。检查更新不会自动安装或重启。":`Checks only when clicked and reuses results for five minutes. Checking does not install updates or restart the instance.`,发布说明:`Release notes`,"DATA · 导入与导出":`DATA · Import and export`,"带上记忆,继续生活。":`Carry her memories forward.`,"导出数据库内的聊天、记忆、待办、作品、知识与设置。插件文件、知识库原始文件和本机 .env 不在数据包中。":`Export chats, memories, tasks, works, knowledge and settings stored in the database. Plugin files, original knowledge files and the local .env are outside the package.`,"数据包包含私聊内容和模型设置中的密钥,请存放在你信任的位置。导入前会校验,确认后才替换当前数据。":`The package includes private chats and keys saved in model settings. Store it somewhere you trust. Imports are checked first and replace current data only after confirmation.`,导出数据包:`Export data package`,选择导入文件:`Choose import file`,导入数据文件:`Import data file`,"支持 .luckytri 数据包和已有 SQLite 备份,单个文件最多 {size} GiB。":`Accepts .luckytri packages and existing SQLite backups, up to {size} GiB per file.`,"正在保留快照并重启加载,请等待…":`Saving the snapshot and restarting. Please wait...`,"正在上传数据文件…":`Uploading the data file...`,"正在生成完整数据包…":`Preparing the complete data package...`,"正在校验数据文件…":`Checking the data file...`,"上次数据导入已完成,自动回复在导入时关闭。请检查连接、模型和待办后再开启;插件需重新安装或确认权限。":`The last import completed with automatic replies turned off. Check connections, models and tasks before enabling them. Plugins need reinstalling or permission review.`,"校验通过 · 尚未导入":`Verified · Not yet imported`,"数据库版本 {from} → {to}":`Database version {from} -> {to}`,导入并重启:`Import and restart`,取消导入:`Cancel import`,"用这份数据替换当前数据,并保留导入前快照。实例将重启,导入后自动回复关闭。本机管理密码与 QQ 连接配置保持不变。":`Replace current data with this file and retain a snapshot first. The instance will restart with automatic replies off. The local management password and QQ connection settings are preserved.`,确认导入数据:`Confirm data import`,"数据包已生成,浏览器将开始下载":`Data package ready. Your browser will begin downloading it.`,数据处理失败:`Data processing failed`,"数据文件已过期,请重新选择":`The data file expired. Choose it again.`,"等待数据处理超时,请检查实例运行状态":`Timed out waiting for data processing. Check the instance status.`,数据文件超过导入大小限制:`The data file exceeds the import size limit`,数据上传失败:`Data upload failed`,导入前快照:`Pre-import snapshot`,聊天记录:`Chat records`,请先登录管理台:`Sign in to the studio first`,QQ:`QQ`,知识向量:`Knowledge vectors`,"API 地址":`API URL`,模型名称:`Model name`,知识向量模型已保存:`Knowledge vector model saved`,"连接成功,向量维度 {dimensions}":`Connected. Vector dimensions: {dimensions}`,知识向量模型:`Knowledge vector model`,"填写向量服务的请求地址和密钥。模型名可以留空:火山方舟地址会用 doubao-embedding-vision,维度和接口有默认值。不启用或连不上时,对话和关键词回忆照常进行。":`Enter the vector service address and key. The model name can be left empty: a Volcengine Ark address uses doubao-embedding-vision, and dimensions and the request format have defaults. Without it, or if it cannot be reached, conversation and keyword recall still run.`,请求地址:`Request address`,"可留空,按地址选择":`Optional; chosen from the address`,向量服务密钥:`Vector service key`,自动选择的细节:`Details chosen automatically`,"当前兼容旧配置,跟随默认模型。保存后改用独立配置。":`Currently using the old configuration and following the default model. Saving switches to a separate configuration.`,启用知识向量:`Enable knowledge vectors`,填写向量服务密钥:`Enter the vector service key`,"向量维度(0 表示自动)":`Vector dimensions (0 = automatic)`,每批段落数:`Passages per batch`,保存向量模型:`Save vector model`,测试向量连接:`Test vector connection`,配置已载入:`Configuration loaded`,请求格式:`Request format`,"OpenAI 兼容(可批量)":`OpenAI-compatible (batched)`,"多模态接口(逐条)":`Multimodal endpoint (one at a time)`,回忆索引:`Recall index`,"她的事实、情景、自我线索和近一个月的原话都在同一个索引里,按意思、字词和相关的人一起检索。向量还没覆盖的部分先按字词找。":`Her facts, episodes, self threads and the last month of messages share one index, searched by meaning, words and the people involved. Whatever vectors do not cover yet is found by words.`,事实:`Facts`,情景:`Episodes`,相遇:`Encounters`,自我线索:`Self threads`,念头:`Thoughts`,日记:`Diary`,回顾:`Reviews`,约定:`Plans`,原话:`Messages`,意思相关:`Related in meaning`,说到了:`Mentioned`,关于这个人:`About this person`,已有向量:`With vectors`,向量延迟:`Vector latency`,等待重试:`Waiting to retry`,暂时停用的备用模型:`Backup model paused`,选择会话:`Choose a conversation`,"输入一句话,看她会想起什么":`Type a line to see what she recalls`,试试回忆:`Try recall`,意思与字词一起:`Meaning and words`,仅字词:`Words only`,候选:`Candidates`,突出度:`Stands out`,共有字词:`Shared words`,没有想起什么:`Nothing came to mind`,极低:`Minimal`,中:`Medium`,极高:`Extra high`,最深:`Deepest`,"已保存 {value}":`Saved {value}`,"火山方舟 Coding Plan":`Volcengine Ark Coding Plan`,"亚马逊 Bedrock":`Amazon Bedrock`,通义千问:`Qwen`,"智谱 GLM":`Zhipu GLM`,"小米 MiMo":`Xiaomi MiMo`,自定义供应商:`Custom provider`,按所选模型填写上下文和输出参数:`Fill in context and output parameters for the chosen model`,"填写模型 ID 和对应参数":`Enter the model ID and its parameters`,"上下文 {context} · 输出 {v}":`Context {context} · output {v}`,开启:`On`,"放弃当前模型草稿?":`Discard the current model draft?`,放弃:`Discard`,"确定删除这个模型?":`Delete this model?`,删除模型:`Delete model`,"正在测试「{v}」…":`Testing “{v}”…`,"✓ {v} 连接成功 · {latency} ms":`✓ {v} connected · {latency} ms`,"+ 新增模型":`+ Add model`,"群聊、私聊和独处都使用默认模型。其余已启用的模型按这里的顺序作为备用。关掉的模型不会被调用。":`Group chats, private chats and time alone all use the default model. Other enabled models serve as backups in this order. Models that are switched off are never called.`,"还没有模型。":`No models yet.`,"{length} 个模型":`{length} models`,默认模型:`Default model`,备用模型:`Backup model`,模型档案:`Model profile`,新模型:`New model`,"默认模型 · ":`Default model · `,密钥已保存:`Key saved`,待填写密钥:`Key needed`,连接:`Connection`,同厂商模型:`Models from the same vendor`,供应商:`Provider`,"例如 deepseek、openai":`e.g. deepseek, openai`,"已保存,留空则保留":`Saved; leave empty to keep it`,填写供应商提供的密钥:`Enter the key from the provider`,容量与思考:`Capacity and thinking`,"官方按输入长度分档计价的模型可以在标准和百万之间切换;输出上限默认是官方最大值,思考强度只列出这个模型支持的档位。":`For models the vendor prices by input length, you can switch between standard and million-token tiers. The output limit defaults to the vendor's maximum, and thinking effort lists only the levels this model supports.`,上下文容量:`Context capacity`,"最大输入 Token":`Max input tokens`,"最大输出 Token":`Max output tokens`,思考强度:`Thinking effort`,高级参数与模型能力:`Advanced parameters and model abilities`,"随机程度 Temperature":`Randomness (temperature)`,"采样范围 Top P":`Sampling range (top P)`,知识检索模型:`Knowledge retrieval model`,留空跟随对话模型:`Leave empty to follow the chat model`,"打开图片理解后,聊天里的图片会先在本机读取,再连同画面交给这个模型。主模型不能看图时,到会话设置另选一个打开了图片理解的视觉兼容模型。":`With image understanding on, images in chat are read locally first, then handed to this model together with the picture. If the main model cannot see images, pick another vision-capable model with image understanding on in the session settings.`,"JSON 输出":`JSON output`,工具调用:`Tool calls`,"正在保存…":`Saving…`,保存模型:`Save model`,已保存的模型才会用来测试和回复:`Only a saved model is used for tests and replies`,启用这个备用模型:`Enable this backup model`,设为默认模型:`Set as default model`,"正在测试…":`Testing…`,保存后测试此模型:`Save, then test this model`,测试此模型连接:`Test this model's connection`,还没有模型:`No models yet`,"常见厂商会预填模型参数;OpenRouter 可选 GPT-6 预设,也可用自选模型手动填写模型 ID 和参数。":`Common vendors come with parameters prefilled. On OpenRouter you can pick a GPT-6 preset, or choose your own model and enter its ID and parameters by hand.`,"TOKEN LEDGER · 累计用量":`TOKEN LEDGER`,一路聊到现在:`All the way up to now`,"统计本机账本记录的模型调用;缓存 Token 已包含在输入量里。":`Counts the model calls recorded in this machine's ledger; cached tokens are already included in the input.`,"累计 Token":`Total tokens`,输入:`Input`,输出:`Output`,缓存命中:`Cache hits`,"(输入子项)":`(part of input)`,调用次数:`Calls`,"从 {v} 开始记录 · {v2} 为模型返回用量":`Recorded since {v} · {v2} reported by the model`,"· {v} 次调用按文本估算":`· {v} calls estimated from text`,"还没有模型调用记录。":`No model calls recorded yet.`,"更新中…":`Updating…`,"刷新统计 ↻":`Refresh stats ↻`,选择模型:`Choose a model`,"先选供应商,再挑具体模型;支持搜索。火山方舟 Coding Plan 已预填套餐专用接口与型号参数,请勿换成普通推理 API 地址。":`Pick a provider first, then a specific model; search is supported. Volcengine Ark Coding Plan comes prefilled with the plan's dedicated endpoint and model parameters; do not swap in a regular inference API URL.`,搜索模型或供应商:`Search models or providers`,"例如:火山方舟、Kimi K3、DeepSeek":`e.g. Volcengine Ark, Kimi K3, DeepSeek`,"{length} 个预设":`{length} presets`,"填写你在 OpenRouter 选择的模型 ID":`Enter the model ID you chose on OpenRouter`,"没有找到匹配的模型预设。":`No matching model presets found.`,已保存并应用:`Saved and applied`,模型库:`Model library`,已关闭:`Off`,"超时(毫秒)":`Timeout (ms)`,自动备份:`Automatic backup`,"自动备份出错,稍后重试":`Automatic backup failed; it will retry later`,"自动备份,运行一阵后会做第一份":`Automatic backup; the first one is made after running a while`,"上次自动备份 · {mb} MB · 已留 {count}/{keep} 份":`Last automatic backup · {mb} MB · {count}/{keep} kept`,"TA 现在可以说话吗":`Can TA speak right now?`,允许参与聊天:`Allow taking part in chats`,"总开关。关掉后 TA 不看也不回任何会话,心智照常保存。":`Master switch. When off, TA neither reads nor replies in any session, and her mind is still saved as usual.`,"仅模拟运行,不向 QQ 发送":`Simulation only; nothing is sent to QQ`,"模拟模式下,「对话」里可以发模拟消息走完整流程;它们写进模拟会话,不进入真实记忆。":`In simulation mode you can send simulated messages through the full pipeline from Chats; they are written to simulated sessions and never enter real memory.`,保存运行状态:`Save run state`,"已保存,立刻生效":`Saved; takes effect immediately`,参与中的会话:`Sessions taking part`,可用模型:`Models available`,在线:`Online`,离线:`Offline`,"QQ 连接":`QQ connection`,运行开关:`Run switches`,数据与备份:`Data and backups`,完整备份:`Full backup`,迁移快照:`Migration snapshot`,旧版本备份:`Older-version backup`,升级前快照:`Pre-upgrade snapshot`,备份整理规则已保存:`Backup cleanup rules saved`,"将清理选中的 {count} 份备份,释放约 {size}。这些历史恢复点清理后无法从本机找回。":`Remove {count} selected backups and free about {size}? These restore points cannot be recovered from this computer afterwards.`,清理所选备份:`Remove selected backups`,清理所选:`Remove selected`,"已清理 {count} 份备份,释放 {size}":`Removed {count} backups and freed {size}`,"DATA · 数据与备份":`DATA · BACKUPS`,"留住重要的,整理重复的。":`Keep what matters. Clear the repeats.`,"这里管理历史备份。聊天、记忆和作品仍在正在运行的数据库里,不会被列入清理。":`Manage historical backups here. Chats, memories, and works in the live database are never listed for cleanup.`,可管理的历史备份:`Historical backups`,份数据库副本:`Database copies`,按当前规则可定时整理:`Eligible under current rules`,定时整理:`Scheduled cleanup`,每天给备份留一点空间:`Make room for backups each day`,启用定时整理:`Enable scheduled cleanup`,每天执行时间:`Daily cleanup time`,完整备份保留天数:`Keep full backups for days`,完整备份最多保留份数:`Maximum full backups to keep`,"时间按服务器本地时区 {zone}。完整备份超过保留天数或数量上限便会定时整理;数量填 0 表示不保留完整备份。手动清理可选择完整备份和迁移快照,执行前会校验同一实例的近期自动恢复点。":`Times use the server's local time zone ({zone}). Full backups beyond either the age or count limit are scheduled for cleanup. Set the count to 0 to retain no full backups. Full and migration snapshots can be selected manually; a recent restore point from this instance is verified first.`,"上次整理未执行:{error}":`Last cleanup could not run: {error}`,"上次整理:{time} · {count} 份 · {size}":`Last cleanup: {time} · {count} copies · {size}`,"处理中…":`Working…`,保存整理规则:`Save cleanup rules`,手动整理:`Manual cleanup`,挑选历史恢复点:`Choose historical restore points`,"自动备份已有自己的轮换规则。迁移、旧版本和升级前快照只由你手动挑选;清理前会再次核对文件和恢复点。":`Automatic backups already rotate on their own. Migration, older-version, and pre-upgrade snapshots are removed only when you select them. Files and restore points are checked again before cleanup.`,选中规则建议:`Select suggested`,选中完整备份:`Select full backups`,取消选择:`Clear selection`,有校验清单:`Has manifest`,";部分未清理,详情见列表":`; some were not removed, see the list for details`,"部分备份未清理,请刷新列表后重试":`Some backups were not removed. Refresh the list and try again.`,旧备份无清单:`No manifest`,保留恢复点:`Protected restore point`,"已选 {count} 份 · 约 {size}":`Selected {count} · about {size}`,不限:`Unlimited`,搜索配置已保存并生效:`Search settings saved and active`,"{provider} 联网检索":`{provider} web search`,"{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度;当前填写的配置尚未保存。":`{source} test passed and returned {count} results. Tests do not use the daily query allowance; the settings you entered are not saved yet.`,"{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度。":`{source} test passed and returned {count} results. Tests do not use the daily query allowance.`,"{error}。本次测试不占用每日查询额度。":`{error}. This test did not use the daily query allowance.`,"SEARCH · 独立搜索":`SEARCH`,接触世界的资料:`Material from the world`,"配置后优先联网检索。未配置密钥或关闭独立搜索时,使用当前模型整理已有知识。":`Once configured, web search comes first. Without a key, or with standalone search off, the current model organizes what it already knows.`,"当前生效:{v}。表单修改保存后生效。":`Active now: {v}. Changes in the form take effect once saved.`,"{provider} · 联网检索资料":`{provider} · web search material`,启用独立搜索:`Enable standalone search`,提供方:`Provider`,搜索提供方:`Search provider`,搜索地址:`Search URL`,独立密钥:`Separate key`,填写该提供方的搜索密钥:`Enter this provider's search key`,每次结果数:`Results per search`,每日查询上限:`Daily query limit`,"可手动调整;0 表示不限。保存后立即生效。":`Adjustable by hand; 0 means unlimited. Takes effect as soon as saved.`,"今日有效查询 {v} / {limitLabel}":`Valid queries today {v} / {limitLabel}`,"{v} 次进行中 · {v2} 次失败 · {v3} 次测试":`{v} in progress · {v2} failed · {v3} tests`,"测试当前填写的配置,不会自动保存。失败与连接测试不占本地每日额度;提供方的账户额度由提供方管理。":`Tests the settings as entered without saving them. Failed and connection tests do not use the local daily allowance; the provider manages its own account quota.`,保存搜索:`Save search`,测试连接:`Test connection`,"当前设置还没保存,离开这个分区吗?":`These settings are not saved. Leave this section?`,未保存的修改:`Unsaved changes`,放弃修改:`Discard changes`,继续编辑:`Keep editing`,"THE WORLD AROUND HER · 系统":`THE WORLD AROUND HER`,"让她与世界,":`Let her and the world`,"温柔相连。":`connect gently.`,"连接、模型与运行方式都在这里。每一处改变,都可以看见结果。":`Connection, models and the way she runs are all here. Every change shows its result.`,"正在与 QQ 相连":`Connecting to QQ`,"等待 QQ 连接":`Waiting for QQ to connect`,系统的分区:`System sections`,独立搜索:`Standalone search`},tc={休息建议:`Rest suggestion`,自由安排:`Free time`,作息安排:`Daily rhythm`,已发生:`Happened`,此前时长未单独记录:`Earlier duration was not recorded separately`,"实际投入 {v} 分钟":`Actually spent {v} min`,今日时间表:`Today's timetable`,时间表显示范围:`Timetable range`,此刻附近:`Around now`,全天:`All day`,实际时段:`Actual spans`,选定的安排:`Chosen plans`,"作息 / 空白":`Rhythm / open time`,"● 伴随交流":`● with chat`," · 伴随交流":` · with chat`,现在:`Now`,接下来:`Next`,"已经走过的时段 · {length} 段":`Spans already past · {length}`,"今天还没有活动记录,实际开始后会显示在上方。":`No activity recorded today yet; once something actually starts it will show above.`,她定下的安排:`Plans she set`,"还没有选定活动时间,留白由她再决定,不按待办队列填满。":`No time chosen for an activity yet. She will decide what to do with the open time; it is not filled from the to-do queue.`,"{label} · {v} · {durationMinutes} 分钟 · {scope}":`{label} · {v} · {durationMinutes} min · {scope}`,自己的安排:`Her own plans`,"可以想自己的事,也可以歇着;不算已做过":`She can think her own thoughts or just rest; it does not count as done`,"预计,做完眼前这段再调整":`Estimated; adjust after the current span is done`,"进入睡眠安排,醒来后再选择续接时间。":`Goes into the sleep schedule; she picks a time to resume after waking.`,"有更高优先级安排,届时先让位,之后再选续接时间。":`A higher-priority plan comes first then; she picks a time to resume afterwards.`,"睡眠安排:{v}":`Sleep plan: {v}`,"已记下,还没选时间 · {length} 件":`Noted, no time chosen yet · {length}`,"暂时停下来,进度保留 · {length} 件":`Paused for now, progress kept · {length}`,"需要条件或调整约定 · {length} 件":`Needs a condition or a changed agreement · {length}`,外部建议:`Outside suggestion`,体验记录:`Experience log`,"EXPERIENCES · 留下的经历":`EXPERIENCES`,最近做过的事:`What she did lately`,"故事写到哪里,玩过什么,又留下了哪些想法。":`Where the story got to, what she played, and the thoughts it left behind.`,"{label}记录":`{label} record`,"{v} · {characters} 字 · 版本 {version}":`{v} · {characters} chars · version {version}`,已保存成果:`Finished work saved`,已保存草稿:`Draft saved`,"这条旧记录没有保存摘要。":`This older record has no saved summary.`,"来自 {title}":`From {title}`,阅读这一稿:`Read this draft`,阅读完整记录:`Read the full record`,查看项目:`View project`,"接触的内容 · {length} 份":`Material met · {length}`,未命名资料:`Untitled material`,这里还没有经历记录:`No experience records here yet`,"做过的事与保存的成果,会逐渐出现在这里。":`What she did and the works she saved will gradually appear here.`,游戏客户端连接:`Game client connection`,开发中:`In development`,"客户端控制尚未接入。已有的游玩记录可以在上方阅读。":`Client control is not connected yet. Existing play records can be read above.`,"ToDo · 待办":`To do`,"Scheduled · 已安排":`Scheduled`,"Doing · 正在做":`Doing`,"Paused · 暂停":`Paused`,"Waiting · 等待":`Waiting`,"Done · 已完成":`Done`,"Abandoned · 已放下":`Abandoned`,"完成,尚未交付":`Finished, not yet delivered`,暂缓交付:`Delivery postponed`,暂不分享:`Not sharing for now`,待继续交付:`Delivery to continue`,已完整交付:`Fully delivered`,已整理并汇报:`Sorted and reported`,"送达不确定,等待核对":`Delivery uncertain, awaiting check`,正在交付:`Being delivered`,普通:`Normal`,最高:`Highest`,需要调整约定:`Needs a changed agreement`,待想具体:`Needs thinking through`,"Waiting · 等条件":`Waiting for a condition`,"ToDo · 待选时间":`To do · needs a time`,"Scheduled · 已选时间":`Scheduled · time chosen`,"Paused · 进度保留":`Paused · progress kept`,"{v} 分钟":`{v} min`,"最早开始时间(YYYY-MM-DD HH:mm)。截止时间保留原安排。":`Earliest start time (YYYY-MM-DD HH:mm). The deadline keeps its original plan.`,安排时间:`Schedule time`,继续:`Continue`,"这次安排投入多少分钟(5 至 240)?":`How many minutes for this session (5 to 240)?`,投入时间:`Time to spend`,"留下放下这件事的原因。":`Leave the reason for letting this go.`,"留下这次调整的原因。":`Leave the reason for this change.`,调整安排:`Adjust plan`,管理台调整:`Adjusted from the console`,"提出选题、续写方向或修改想法。她会自行决定是否采纳。":`Suggest a topic, a direction to continue, or an edit. She decides for herself whether to take it.`,给她一个建议:`Give her a suggestion`,留下建议:`Leave a suggestion`,这个项目已有待处理事项:`This project already has something pending`,"建议已保存,等待她的选择":`Suggestion saved; it waits for her choice`,专注安排已保存:`Focus plan saved`,"已记下,空下来时回看说过的话":`Noted; she will look back at what was said when free`,"已记下,让她重新想具体时间与投入时长":`Noted; she will rethink the exact time and duration`,"TIME · 时间":`TIME`,"日子在走,":`Days keep moving,`,"我也有自己的事。":`and I have things of my own.`,"想做的事,正在留下的作品,与世界相遇的每一段。":`The things she wants to do, the works she is leaving behind, and every stretch spent meeting the world.`,留一点时间给自己:`Leave some time for herself`,时间的分区:`Time sections`,今日:`Today`,待办:`To do`,作品库:`Works`,持续项目:`Ongoing projects`,重试:`Retry`,"正在取回这段生活…":`Fetching this stretch of life…`,此刻的主活动:`Main activity right now`,正在准备:`Preparing`,刚开始这一段:`Just started this span`,"本次已投入 ":`Spent so far: `,"她安排 {v} 开始,这次想投入 {durationMinutes} 分钟。":`She planned to start at {v} and wants to spend {durationMinutes} min this time.`,"本段预计 {v} · 还需约 {v2}":`This span ends around {v} · about {v2} left`,"从自己的打算接着做。":`Continuing from her own intentions.`,"正在推进当前步骤。":`Working on the current step.`,"查看安排 →":`See plans →`,这会儿没有主活动:`No main activity right now`,"自己选择接下来做什么,也可以歇着。":`She chooses what to do next, or simply rests.`,"下一项:{title} · {v} 开始 · {durationMinutes} 分钟":`Next: {title} · starts {v} · {durationMinutes} min`,让她重新想想安排:`Let her rethink the plan`,今天:`Today`,"实际活动投入 · {energyLabel} · {mood}":`Time actually spent · {energyLabel} · {mood}`,"普通交流可以伴随进行,短消息不会自动暂停。":`Ordinary chat can go on alongside; short messages do not pause it automatically.`,"翻开日记 →":`Open the diary →`,独处时理一理:`Sorting things out while alone`,"自己的打算,说过的约定":`Her own intentions and what she has promised`,"空下来时,她会想一件自己愿意做的小事,也会回看有没有漏下答应别人的事。可以选择歇着。":`When free, she thinks of a small thing she would like to do, and checks whether she missed anything she promised others. She may choose to rest.`,"最近:{reason}":`Lately: {reason}`,"还有 {pendingReplies} 条已说过的话等着分批回看。":`{pendingReplies} things already said are waiting to be reviewed in batches.`,正在整理自己的生活:`Sorting out her own life`,"已记下,空下来时整理":`Noted; she will sort it when free`,空下来整理一下约定:`Sort out promises when free`,专注与休息安排:`Focus and rest plans`,"默认专注段(分钟)":`Default focus span (minutes)`,"没有另行选择时使用;她自己的安排优先。":`Used when nothing else is chosen; her own plans come first.`,"休息建议(分钟)":`Rest suggestion (minutes)`,"保存步骤间隔(分钟)":`Step save interval (minutes)`,活动节奏:`Activity pace`,"默认 1.25 倍,所有活动按现实时间逐段推进。":`Default 1.25×; every activity advances span by span in real time.`,"想自己的安排(间隔分钟)":`Thinking about her own plans (interval, minutes)`,"有空才考虑,可以决定休息。":`Only considered when free; she may decide to rest.`,"回看说过的话(间隔分钟)":`Reviewing what was said (interval, minutes)`,"分批整理约定,保留去重与原来的选择。":`Sorts promises in batches, keeping deduplication and the original choices.`,正在保存:`Saving`,保存安排:`Save plan`,查看全部待办:`See all to-dos`,搜索标题:`Search titles`,搜索标题或项目:`Search titles or projects`,搜索:`Search`,任务状态:`Task status`,自己的计划:`Her own plans`,优先级:`Priority`,"优先级:":`Priority: `,"{v} {v2} — {v3} · 这次 {durationMinutes} 分钟":`{v} {v2} — {v3} · {durationMinutes} min this time`,管理台安排:`Set from the console`,她选定:`She chose`,"本段开始 {v}":`This span began {v}`,条件满足后建议:`Suggested once the condition is met`,已安排:`Scheduled`,"需要解决上面的条件,再选择时间":`Resolve the conditions above, then choose a time`,"进度已保存,之后再安排续接时间":`Progress saved; a time to resume is arranged later`,"已记下,等她选择具体时间":`Noted; waiting for her to choose an exact time`,"· 本段预计 {v} · 本段已投入 {v2}":`· this span ends around {v} · spent this span {v2}`,"· 还需约 {v}":`· about {v} left`,"· 此前时长未单独记录":`· earlier duration was not recorded separately`,正在准备这一段:`Preparing this span`,尚未开始本段投入:`Has not started spending time on this span`,"本段目标:{outcome}":`Goal for this span: {outcome}`,"下一步:{next}":`Next step: {next}`,"来源与原安排 · {length} 条":`Sources and original plans · {length}`,"原话日期参考 {v},不作为逾期判断。":`Date mentioned originally: {v}. Not used to judge lateness.`,"已合并到唯一事项,保留这条原记录。":`Merged into a single item; this original record is kept.`,阅读已有正文:`Read the existing text`,暂停:`Pause`,重新安排:`Reschedule`,"{v} · 第 {ordinal} 篇":`{v} · piece {ordinal}`,完成稿:`Finished piece`,草稿:`Draft`,"{characters} 字 · 版本 {version}":`{characters} chars · version {version}`,独处留下的东西:`What time alone left behind`,游戏:`Game`,连载:`Serial`,在继续:`Continuing`,已完结:`Finished`,暂时放下:`Set aside for now`,打开项目:`Open project`,作品还在等待第一笔:`The work is still waiting for its first stroke`,这里还没有记录:`No records here yet`,"实际发生并保存之后,这里才会出现内容。":`Content shows up here only after something actually happens and is saved.`,上一页:`Previous page`,下一页:`Next page`,作品:`Work`,她留下的正文:`The text she left`,"{v} · {length} 字":`{v} · {length} chars`,版本:`Version`,作品版本:`Work version`,导出正文:`Export text`,查看项目与设定:`View project and settings`,她自己的方向:`Her own direction`,设定与未解决线索:`Settings and unresolved threads`,人物:`Characters`,世界:`World`,未解决线索:`Unresolved threads`,资料主题:`Material topic`,建议续写:`Suggest continuing`,建议修改:`Suggest an edit`,建议方向:`Suggest a direction`,已经留下的篇章:`Pieces already left`,"第 {ordinal} 篇 · {title}":`Piece {ordinal} · {title}`,接触的资料:`Material met`,资料:`Material`,"模型知识整理 · 未经联网核验":`Organized from model knowledge · not verified online`,实际返回的摘录:`Excerpts actually returned`,打开来源:`Open source`,"基于模型已有知识,具体剧情与章节仍需核验。":`Based on what the model already knows; specific plot and chapters still need verification.`},nc={...Ws,...Gs,...Ks,...qs,...Js,...Ys,...Xs,...Zs,...Qs,...$s,...ec,...tc},rc=[{code:`zh`,label:`中文`,short:`中`},{code:`en`,label:`English`,short:`EN`}],ic=`luckyLocale`,ac={zh:`zh-CN`,en:`en`};function oc(){try{let e=localStorage.getItem(ic);if(e===`en`||e===`zh`)return e}catch{}return`zh`}var sc=Jt(oc());function cc(e){typeof document<`u`&&(document.documentElement.lang=ac[e],document.title=Z(`LuckyTri · TA 的小世界`))}function lc(e){if(e===`zh`||e===`en`){sc.value=e;try{localStorage.setItem(ic,e)}catch{}cc(e)}}function uc(){return sc.value===`en`?`en-US`:`zh-CN`}function dc(e){if(sc.value!==`en`)return e;let t=nc[e];return t===void 0?e:t}function fc(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]??``):e):e}function Z(e,t){return fc(dc(e),t)}function Q(e){return e}var pc=new WeakMap;function mc(e){let t=pc.get(e);if(t)return t;let n=new Proxy(e,{get(e,t,n){let r=Reflect.get(e,t,n);return typeof r==`string`?Z(r):r&&typeof r==`object`?mc(r):r}});return pc.set(e,n),n}cc(sc.value);var hc=zt({queue:[]});function gc(e,t,n){return new Promise(r=>hc.queue.push({kind:e,message:t,title:n.title??Z(e===`confirm`?`想确认一下`:`请填写`),confirmText:n.confirmText??Z(`确定`),cancelText:n.cancelText??Z(`取消`),danger:!!n.danger,secret:!!n.secret,placeholder:n.placeholder??``,value:n.value??``,resolve:r}))}async function _c(e,t={}){return await gc(`confirm`,e,t)!==null}function vc(e,t={}){return gc(`prompt`,e,t)}function yc(e){hc.queue.shift()?.resolve(e)}var bc=zt({phase:`checking`,revision:0}),xc,Sc;function Cc(){xc=new Promise(e=>{Sc=e})}Cc();function wc(){return bc.phase===`ready`?Promise.resolve():xc}function Tc(){bc.phase===`ready`&&(Cc(),bc.phase=`login`,bc.revision++)}async function Ec(e,t){let n=await fetch(`/api/auth/`+e,{method:t===void 0?`GET`:`POST`,credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-LuckyTri-Locale":sc.value},body:t===void 0?void 0:JSON.stringify(t)}),r=await n.json();if(!n.ok)throw Error(r.error||Z(`操作失败,请重试`));return r}function Dc(){bc.phase=`ready`,bc.revision++,Sc()}async function Oc(){let e=await Ec(`status`);e.authenticated?Dc():bc.phase=e.configured?`login`:`setup`}async function kc(e){await Ec(bc.phase===`setup`?`setup`:`login`,{password:e}),Dc()}async function Ac(){await Ec(`logout`,{}),Tc()}var jc=new class{version=0;entries=new Map;constructor(e){this.clock=e||Date.now}clock;snapshot(e){let t=this.entries.get(e)?.value;return t===void 0?void 0:structuredClone(t)}get(e,t,n=15e3){let r=this.entries.get(e);if(r?.value!==void 0&&r.expires>this.clock())return Promise.resolve(this.snapshot(e));if(r||(r={expires:0},this.entries.set(e,r),this.entries.size>48&&this.entries.delete(this.entries.keys().next().value)),!r.pending){let i=r,a=Promise.resolve().then(t).then(t=>(this.entries.get(e)===i&&i.pending===a&&(i.value=structuredClone(t),i.expires=this.clock()+n),t)).finally(()=>{i.pending===a&&(i.pending=void 0)});r.pending=a}return r.pending.then(e=>structuredClone(e))}expire(){this.version++;for(let e of this.entries.values())e.expires=0,e.pending=void 0}clear(){this.version++,this.entries.clear()}},Mc=new Set([`/mind`,`/mind/mood`,`/mind/today`,`/mind/self`,`/mind/bonds`,`/mind/nature`,`/core/state`,`/state`]),Nc=``;function Pc(){Nc!==String(bc.revision)&&(jc.clear(),Nc=String(bc.revision))}function Fc(e){return Pc(),jc.snapshot(e)}function Ic(){jc.expire()}function Lc(){jc.clear()}function Rc(){return jc.version}function zc(e){return Pc(),Vc(e,`GET`)}function Bc(e,t=`GET`,n){return Pc(),t===`GET`&&(Mc.has(e)||e.startsWith(`/core/memories?`)||e.startsWith(`/core/memory-summary?`)||e.startsWith(`/mind/thoughts?`)||e.startsWith(`/mind/life?`)||e.startsWith(`/mind/people/`))||t===`GET`&&e.startsWith(`/mind/time`)&&!e.startsWith(`/mind/time/search`)?jc.get(e,()=>Vc(e,t,n),[`/mind/time`,`/state`,`/core/state`].includes(e)?2e3:15e3):Vc(e,t,n)}async function Vc(e,t,n){await wc();let r=await fetch(`/api`+e,{method:t,credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-LuckyTri-Locale":sc.value},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json().catch(()=>({}));if(r.status===401&&i.error===`请先登录管理台`)return Tc(),await wc(),Lc(),Vc(e,t,n);if(!r.ok)throw Error(i.error||Z(`请求失败`));return t!==`GET`&&Lc(),i}var Hc;function Uc(e,t=!1){let n=document.querySelector(`#toast`);n&&(n.textContent=e,n.className=t?`show error`:`show`,clearTimeout(Hc),Hc=setTimeout(()=>n.className=``,4500))}async function Wc(){let[e,t]=await Promise.all([Bc(`/core/state`),Bc(`/state`)]);return{core:e,health:t}}async function Gc(e){return Bc(`/settings`,`PATCH`,e)}async function Kc(){return zc(`/state`)}var qc=mc({now:{label:Q(`此刻`),en:`NOW`,tagline:Q(`TA 此刻的样子。`)},heart:{label:Q(`内心`),en:`HEART`,tagline:Q(`从经历里长出来的 TA。`)},people:{label:Q(`人际`),en:`PEOPLE`,tagline:Q(`TA 认识的人,和 TA 对每个人的感觉。`)},life:{label:Q(`一生`),en:`LIFE`,tagline:Q(`记得昨天的自己,也成为今天的自己。`)},time:{label:Q(`时间`),en:`TIME`,tagline:Q(`带着自己的安排、作品与经历走过时间。`)},chats:{label:Q(`对话`),en:`CHATS`,tagline:Q(`TA 在哪里说话,又为什么这样说。`)},memory:{label:Q(`记忆`),en:`MEMORY`,tagline:Q(`TA 记得的事,和 TA 读过的资料。`)},nature:{label:Q(`天性`),en:`NATURE`,tagline:Q(`塑造 TA:只有这里由你来写。`)},system:{label:Q(`系统`),en:`SYSTEM`,tagline:Q(`连接、模型和运行开关。`)},plugins:{label:Q(`插件`),en:`PLUGINS`,tagline:Q(`她能接触的世界,由这里接上。`)}}),Jc=mc([{label:`TA`,pages:[`now`,`heart`,`people`,`life`]},{label:Q(`日常`),pages:[`time`,`chats`,`memory`]},{label:Q(`设置`),pages:[`nature`,`system`,`plugins`]}]),Yc=[`now`,`chats`,`heart`,`life`],Xc=[`time`,`people`,`memory`,`nature`,`system`,`plugins`],Zc={overview:`now`,her:`now`,character:`now`,live:`chats`,spaces:`chats/settings`,lab:`chats/replay`,knowledge:`memory`,models:`system/models`,connect:`system/connect`};function Qc(e=location.hash.slice(1)){let t=e;try{t=decodeURIComponent(e)}catch{}let n=Zc[t]??t,[r,...i]=n.split(`/`);return Object.hasOwn(qc,r)?{page:r,sub:i.join(`/`),moved:n!==t}:null}function $c(e,t=``){return`#`+e+(t?`/`+t:``)}var el=Qc(),$=zt({page:el?.page??`now`,sub:el?.sub??``,dirty:!1,core:null,health:null,error:``,chatOpen:!1,moreOpen:!1,tick:0,pulse:0}),tl=null,nl=-1;function rl(){let e=Rc();if(tl&&nl===e)return tl;let t=Wc().then(({core:e,health:n})=>{tl===t&&($.core=e,$.health=n)}).finally(()=>{tl===t&&(tl=null)});return tl=t,nl=e,tl}async function il(e,t=``){let n=Qc(t?`${e}/${t}`:e)??{page:`now`,sub:``};if($.moreOpen=!1,$.page===n.page&&$.sub===n.sub)return!0;if($.page!==n.page&&$.dirty&&!await _c(Z(`有尚未保存的修改,离开这一页吗?`),{title:Z(`草稿还没保存`),confirmText:Z(`离开`),cancelText:Z(`留下`)}))return!1;$.page!==n.page&&($.dirty=!1),$.page=n.page,$.sub=n.sub;let r=$c(n.page,n.sub);return location.hash!==r&&history.pushState(null,``,r),!0}function al(e){$.sub=e,history.replaceState(null,``,$c($.page,e))}function ol(){let e=Qc();if(!e){history.replaceState(null,``,$c($.page,$.sub));return}e.page!==$.page&&($.dirty=!1),$.page=e.page,$.sub=e.sub,e.moved&&history.replaceState(null,``,$c(e.page,e.sub))}var sl=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},cl={class:`empty`},ll={key:0},ul=sl(vr({__name:`Empty`,props:{title:{},text:{}},setup(e){return(t,n)=>(xa(),Ea(`div`,cl,[n[0]||=Ma(`span`,{class:`empty-blob`,"aria-hidden":`true`},[Ma(`i`),Ma(`i`)],-1),Ma(`b`,null,De(e.title),1),e.text?(xa(),Ea(`span`,ll,De(e.text),1)):Ra(``,!0),ri(t.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-c4ea9250`]]);export{La as $,rc as A,As as B,kc as C,Yt as Ct,vc as D,De as Dt,_c as E,fe as Et,lc as F,W as G,xs as H,Z as I,co as J,jr as K,To as L,uc as M,sc as N,hc as O,mc as P,Ea as Q,Vs as R,Tc as S,Jt as St,wc as T,_e as Tt,Ls as U,Ts as V,Fs as W,Da as X,Ma as Y,Ra as Z,Fc as _,Vn as _t,rl as a,xn as at,Ec as b,Nn as bt,qc as c,Pr as ct,Jc as d,xa as dt,Ia as et,Kc as f,ni as ft,Ic as g,ki as gt,Lc as h,yr as ht,il as i,ui as it,Q as j,yc as k,Xc as l,Hr as lt,Bc as m,$r as mt,sl as n,Or as nt,al as o,Nr as ot,Gc as p,ri as pt,nr as q,ol as r,vr as rt,$ as s,Gr as st,ul as t,q as tt,Yc as u,Kr as ut,Uc as v,zn as vt,Ac as w,Qt as wt,Oc as x,zt as xt,bc as y,Mn as yt,Ss as z};
2
+ `))),e[X]=gs(i);let a=r||i.props&&i.props.type===`number`;ts(e,t?`change`:`input`,t=>{t.target.composing||e[X](bs(e.value,n,a))}),(n||a)&&ts(e,`change`,()=>{e.value=bs(e.value,n,a)}),t||(ts(e,`compositionstart`,_s),ts(e,`compositionend`,vs),ts(e,`change`,vs))},mounted(e,{value:t,modifiers:{trim:n,number:r}}){let i=t??``,a=e[ys];delete e[ys],a!==void 0&&(e.type===`text`||e.type===`textarea`)&&e.value!==a?e[X](bs(e.value,n,r)):e.value=i},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:a}},o){if(e[X]=gs(o),e.composing)return;let s=(a||e.type===`number`)&&!/^0\d/.test(e.value)?ce(e.value):e.value,c=t??``;if(s===c)return;let l=e.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===e&&e.type!==`range`&&(r&&t===n||i&&e.value.trim()===c)||(e.value=c)}},Ss={deep:!0,created(e,t,n){e[X]=gs(n),ts(e,`change`,()=>{let t=e._modelValue,n=Os(e),r=e.checked,i=e[X];if(d(t)){let e=Te(t,n),a=e!==-1;if(r&&!a)i(t.concat(n));else if(!r&&a){let n=[...t];n.splice(e,1),i(n)}}else if(p(t)){let e=new Set(t);r?e.add(n):e.delete(n),i(e)}else i(ks(e,r))})},mounted:Cs,beforeUpdate(e,t,n){e[X]=gs(n),Cs(e,t,n)}};function Cs(e,{value:t,oldValue:n},r){e._modelValue=t;let i;if(d(t))i=Te(t,r.props.value)>-1;else if(p(t))i=t.has(r.props.value);else{if(t===n)return;i=k(t,ks(e,!0))}e.checked!==i&&(e.checked=i)}var ws={created(e,{value:t},n){e.checked=k(t,n.props.value),e[X]=gs(n),ts(e,`change`,()=>{e[X](Os(e))})},beforeUpdate(e,{value:t,oldValue:n},r){e[X]=gs(r),t!==n&&(e.checked=k(t,r.props.value))}},Ts={deep:!0,created(e,{value:t,modifiers:{number:n}},r){e._modelValue=t,ts(e,`change`,()=>{let t=Array.prototype.filter.call(e.options,e=>e.selected).map(e=>n?ce(Os(e)):Os(e)),r=e.multiple,i=r?p(e._modelValue)?new Set(t):t:t[0],a=e._pendingValue=[r,r?d(i)?t.slice():t:i];try{e[X](i)}finally{xn(()=>{e._pendingValue===a&&(e._pendingValue=void 0)})}}),e[X]=gs(r)},mounted(e,{value:t}){Ds(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[X]=gs(n)},updated(e,{value:t}){let n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Es(t,n[1],n[0]))&&Ds(e,t)}};function Es(e,t,n){if(!n||d(e))return k(e,t);if(p(e)){if(e.size!==t.length)return!1;for(let n of t)if(!e.has(n))return!1;return!0}return!1}function Ds(e,t){let n=e.multiple,r=d(t);if(!n||r||p(t)){for(let i=0,a=e.options.length;i<a;i++){let a=e.options[i],o=Os(a);if(n){if(r){let e=typeof o;a.selected=e===`string`||e===`number`?t.some(e=>String(e)===String(o)):Te(t,o)>-1}else a.selected=t.has(o)}else if(k(Os(a),t)){e.selectedIndex!==i&&(e.selectedIndex=i);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Os(e){return`_value`in e?e._value:e.value}function ks(e,t){let n=t?`_trueValue`:`_falseValue`;return n in e?e[n]:t}var As={created(e,t,n){Ms(e,t,n,null,`created`)},mounted(e,t,n){Ms(e,t,n,null,`mounted`)},beforeUpdate(e,t,n,r){Ms(e,t,n,r,`beforeUpdate`)},updated(e,t,n,r){Ms(e,t,n,r,`updated`)}};function js(e,t){switch(e){case`SELECT`:return Ts;case`TEXTAREA`:return xs;default:switch(t){case`checkbox`:return Ss;case`radio`:return ws;default:return xs}}}function Ms(e,t,n,r,i){let a=js(e.tagName,n.props&&n.props.type)[i];a&&a(e,t,n,r)}var Ns=[`ctrl`,`shift`,`alt`,`meta`],Ps={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>`button`in e&&e.button!==0,middle:e=>`button`in e&&e.button!==1,right:e=>`button`in e&&e.button!==2,exact:(e,t)=>Ns.some(n=>e[`${n}Key`]&&!t.includes(n))},Fs=(e,t)=>{if(!e)return e;let n=e._withMods||={},r=t.join(`.`);return n[r]||(n[r]=((n,...r)=>{for(let e=0;e<t.length;e++){let r=Ps[t[e]];if(r&&r(n,t))return}return e(n,...r)}))},Is={esc:`escape`,space:` `,up:`arrow-up`,left:`arrow-left`,right:`arrow-right`,down:`arrow-down`,delete:`backspace`},Ls=(e,t)=>{let n=e._withKeys||={},r=t.join(`.`);return n[r]||(n[r]=(n=>{if(!(`key`in n))return;let r=E(n.key);if(t.some(e=>e===r||Is[e]===r))return e(n)}))},Rs=s({patchProp:ps},yo),zs;function Bs(){return zs||=oa(Rs)}var Vs=((...e)=>{let t=Bs().createApp(...e),{mount:n}=t;return t.mount=e=>{let r=Us(e);if(!r)return;let i=t._component;!g(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent=``);let a=n(r,!1,Hs(r));return r instanceof Element&&(r.removeAttribute(`v-cloak`),r.setAttribute(`data-v-app`,``)),a},t});function Hs(e){if(e instanceof SVGElement)return`svg`;if(typeof MathMLElement==`function`&&e instanceof MathMLElement)return`mathml`}function Us(e){return _(e)?document.querySelector(e):e}var Ws={"请稍候…":`Please wait…`,为这个小世界设置密码:`Set a password for this little world`,欢迎回来:`Welcome back`,"正在连接小世界…":`Connecting to your little world…`,"只需设置一个管理密码,以后用它登录。":`Set one management password and use it to sign in from now on.`,"输入管理密码,继续陪伴 TA。":`Enter your management password to return to TA.`,管理密码:`Management password`,确认密码:`Confirm password`,"至少 8 个字符。密码只保存在本机的加密校验记录中。":`At least 8 characters. Only a password verification record is stored locally.`,设置密码并进入:`Set password and enter`,登录:`Sign in`,"暂时无法连接,请重试":`Cannot connect right now. Please try again.`,两次输入的密码不一致:`The passwords do not match`,管理密码已更新:`Management password updated`,"一个密码管理这个小世界。修改后,其他浏览器需要重新登录。":`One password manages this little world. Other browsers must sign in again after a change.`,当前密码:`Current password`,新密码:`New password`,修改密码:`Change password`,退出登录:`Sign out`,请求失败:`Request failed`,请先保存草稿:`Save the draft first`,暂未连接:`Not connected`,"TA 在等你回来":`TA is waiting for you to come back`,重新连接:`Reconnect`,跳到主要内容:`Skip to main content`,主要功能:`Main sections`,"{name}:回到此刻":`{name}: back to Now`,开启灵动效果:`Turn on lively effects`,减少动画:`Reduce motion`,使用教程:`Guide`,"使用教程 ↗":`Guide ↗`,"去连接 QQ":`Connect QQ`,"QQ 未连接":`QQ not connected`,刷新当前数据:`Refresh the current data`,刷新:`Refresh`,"草稿还没保存,保存后才会生效":`The draft is not saved yet; it takes effect once saved`,更多:`More`,"正在进入 TA 的小世界":`Entering TA's little world`,"连接会话与记忆…":`Connecting sessions and memory…`,闲着:`Idle`,界面主题:`Theme`,语言:`Language`,"LuckyTri · TA 的小世界":`LuckyTri · TA's little world`,想确认一下:`Just checking`,请填写:`Please fill in`,确定:`OK`,取消:`Cancel`,"{month} 月 {date} 日":`{month}/{date}`,刚刚:`just now`,"{minutes} 分钟前":`{minutes} min ago`,"{hours} 小时前":`{hours} h ago`,"{days} 天前":`{days} d ago`,"{months} 个月前":`{months} mo ago`,"{v} 年前":`{v} y ago`,未命名的人:`Unnamed person`,未命名的群:`Unnamed group`,"操作失败,请重试":`That did not work. Please try again.`,刚说完话:`just finished talking`,在想怎么回:`thinking how to reply`,在独处:`spending time alone`,在读资料:`reading`,在写日记:`writing in her diary`,在回顾这段日子:`looking back on these days`,在夜里整理今天:`sorting through today in the night`,在忙自己的事:`busy with her own things`,"睡着了,呼吸很轻":`asleep, breathing softly`,睡着了:`asleep`,"{line},因为{cause}":`{line}, because {cause}`,平静:`Calm`,像一杯温水:`like a cup of warm water`,甜甜:`Sweet`,心里软软的:`soft inside`,雀跃:`Elated`,想蹦起来:`wants to bounce`,低落:`Low`,有点灰灰的:`a little grey`,烦躁:`Irritable`,心里起风了:`a wind is rising inside`,困倦:`Drowsy`,眼皮在打架:`eyelids drooping`,夜晚:`Night`,想做的事:`Things she wants to do`,别人的安排:`Others' plans`,每年的日子:`Yearly days`,还在等:`Still waiting`,悄悄错过了:`Quietly missed`,做到了:`Done`,错过了:`Missed`,不再惦记:`No longer on her mind`,聊天时:`While chatting`,独处时:`While alone`,回顾时:`While reflecting`,"从 TA 说过的话里":`From things TA said`,旧版本:`Older version`,做自己的事:`Doing her own things`,写日记:`Diary writing`,回顾这段日子:`Looking back`,进行中:`In progress`,留下了东西:`Left something behind`,心情变了:`Mood changed`,没什么新的:`Nothing new`,出了点问题:`Something went wrong`,跳过了:`Skipped`,作废了:`Voided`,重启中断:`Interrupted by restart`,"已经是 TA 的一部分":`Already part of TA`,刚开始有这种感觉:`Just starting to feel this`,已经放下:`Let go`,更亲近了一点:`A little closer`,走近了:`Came closer`,更信任了:`Trust grew`,有点失望:`A bit disappointed`,有了别扭:`Some friction`,和好了:`Made up`,疏远了一点:`Drifted a little`,印象:`Impression`,熟悉:`Familiar`,亲近:`Close`,信任:`Trusted`,别扭:`Awkward`,私下知道:`Known privately`,"要 TA 保密":`TA keeps it secret`,"TA 这样认为":`TA thinks so`,已被新的取代:`Replaced by a newer one`,旧版待确认:`Older, to be confirmed`,有争议:`Disputed`,已过期:`Expired`,等合适的时候:`Waiting for the right moment`,正在发:`Sending`,说出口了:`Said`,"TA 后来决定不说":`TA later decided not to say it`,时机不合适:`Not the right moment`,没有发:`Not sent`,投递未确认:`Delivery unconfirmed`,开口:`Speak up`,简短反应:`Brief reaction`,说不想聊:`Said she did not want to talk`,放在心上:`Keeping it in mind`,此刻:`Now`,"TA 此刻的样子。":`How TA is right now.`,内心:`Inner life`,"从经历里长出来的 TA。":`The TA that grows out of experience.`,人际:`People`,"TA 认识的人,和 TA 对每个人的感觉。":`The people TA knows, and how she feels about each of them.`,一生:`Lifetime`,"记得昨天的自己,也成为今天的自己。":`Remembers who she was yesterday, and becomes who she is today.`,时间:`Time`,"带着自己的安排、作品与经历走过时间。":`Moves through time with her own plans, works, and experiences.`,"TA 在哪里说话,又为什么这样说。":`Where TA speaks, and why she says what she says.`,记忆:`Memory`,"TA 记得的事,和 TA 读过的资料。":`What TA remembers, and what she has read.`,"塑造 TA:只有这里由你来写。":`Shaping TA: the only place where you write.`,系统:`System`,"连接、模型和运行开关。":`Connection, models, and run switches.`,日常:`Daily life`,设置:`Settings`,"有尚未保存的修改,离开这一页吗?":`You have unsaved changes. Leave this page?`,离开:`Leave`,请选择一张图片:`Please choose an image`,"图片太大了,请换一张 20MB 以内的":`That image is too large. Please pick one under 20 MB.`,无法处理这张图片:`This image could not be processed`,"和 TA 聊聊":`Talk with TA`,没出声:`Said nothing`,"没有留下理由。":`No reason was left.`,"TA 在想…":`TA is thinking…`,清空:`Clear`,收起:`Collapse`,关闭:`Close`,删除:`Delete`,失败:`Failed`,完成:`Done`,记忆整理:`Memory sorting`,模式:`Mode`,私:`DM`,群:`Group`,恢复:`Restore`,"还没有形成在这里的样子。":`She has not taken shape here yet.`,有未保存的修改:`Unsaved changes`,撤销:`Undo`,已撤销:`Undone`,原因:`Reason`,放下:`Let go`,说不清为什么:`Hard to say why`,"撤销「{content}」?TA 不再惦记这件事,之后整理记忆时也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will stop keeping it in mind, and sorting memory later will not write it back. You can note a reason (optional):`,撤销这个约定:`Undo this promise`,日记:`Diary`,约定与期待:`Promises and anticipation`,"撤销「{content}」?TA 之后不会再这样认为,整理记忆时也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will no longer think this, and sorting memory will not write it back. You can note a reason (optional):`,撤销这条记忆:`Undo this memory`,公开:`Open`,"分寸:":`Discretion: `,解锁:`Unlock`,锁定:`Lock`,自己的念头:`Her own thoughts`,图片理解:`Image understanding`,独处:`Alone`,天性:`Nature`,夜里整理:`Night sorting`,对话:`Chat`,出了声:`Spoke up`,全部:`All`,"处理中…":`Processing…`,写日记时:`While writing diary`,低:`Low`,高:`High`,草稿还没保存:`Draft not saved`,留下:`Keep`,答应的事:`Promises`,完成了:`Finished`,"TA 的此刻状态":`TA's state right now`,"第 {v} 天":`Day {v}`,"没有特别牵动 TA 的事,心情慢慢回到平常。":`Nothing in particular is tugging at TA; her mood is slowly settling back to normal.`,"这阵子 · {v}":`Lately · {v}`,"精力 · {energyLabel}":`Energy · {energyLabel}`,"{wake} 醒 / {sleep} 睡":`Wakes {wake} / sleeps {sleep}`,看看进度:`See progress`,"TA 正在想…":`TA is thinking…`,"让 TA 独处一会儿":`Let TA have some time alone`,写下今天的日记:`Write today's diary`,"安静下来时,TA 会自己独处。":`When things quiet down, TA spends time alone.`,最近说:`Recently said`,在等:`Waiting`,"主题固定为「{v}」":`Theme fixed to “{v}”`,"主题跟随 TA 的心情":`Theme follows TA's mood`,"固定:{v}":`Fixed: {v}`,"跟随 TA · {v}":`Following TA · {v}`,"跟随 TA 的心情":`Follow TA's mood`,"现在是「{v}」":`Now “{v}”`,"嗯?":`Hm?`,"我在这儿。":`I'm here.`,"有什么事吗?":`Is something up?`,戳我做什么呀:`Why poke me?`,"在呢~":`Here~`,被你发现啦:`You found me!`,"嘿嘿,找我呀":`Hehe, looking for me?`,今天心情不错哦:`I'm in a good mood today`,"哇!干嘛呀~":`Whoa! What was that for~`,"今天超开心的!":`I'm so happy today!`,再戳我也还是好开心:`Poke me again, I'm still happy`,嘿嘿嘿:`Hehehe`,"……嗯":`...mm`,"我没事,就是有点低落":`I'm fine, just a little down`,陪我待一会儿就好:`Just stay with me for a while`,"唔……":`Mm...`,"别戳啦!":`Stop poking!`,"我现在有点烦……":`I'm a bit irritated right now...`,让我静一静嘛:`Let me be quiet for a moment`,哼:`Hmph`,"唔……好困":`Mm... so sleepy`,再让我眯一会儿:`Let me doze a little longer`,"嗯……?":`Mm...?`,"哈——欠":`Yaaawn`,"呼……呼……":`Zzz... zzz...`,"(翻了个身)":`(rolls over)`,"(嘟囔了一句梦话)":`(mumbles something in her sleep)`,"……有点痒":`...that tickles a little`,"嗯,这样挺好":`Mm, this is nice`,谢谢你:`Thank you`,"嘿嘿,好舒服":`Hehe, that feels nice`,再摸一下嘛:`Pet me once more~`,"脸要红了……":`I'm going to blush...`,"哈哈哈好痒!":`Hahaha, that tickles!`,"最喜欢这样了!":`I love this the most!`,"嘿嘿,开心加倍":`Hehe, double the happiness`,"……谢谢你":`...thank you`,好像好一点了:`I think I feel a little better`,"嗯,别走开":`Mm, don't go away`,"……好吧,就一下":`...fine, just once`,"哼,勉强接受":`Hmph, I'll let it slide`,"嗯……好像没那么烦了":`Mm... I'm not as irritated now`,"呼……要睡着了":`Whew... falling asleep`,"好温暖……":`So warm...`,"嗯……":`Mm...`,"(在梦里笑了一下)":`(smiles in her dream)`,"(蹭了蹭)":`(nuzzles)`,"等等,我在想怎么回……":`Wait, I'm thinking how to reply...`,"嘘,我在看大家聊什么":`Shh, I'm reading what everyone's saying`,刚刚在说话来着:`I was just talking`,你看到我说的了吗:`Did you see what I said?`,"我在想事情,一会儿就好":`I'm thinking, give me a moment`,让我安静一下下:`Let me be quiet for a bit`,我在看书呢:`I'm reading`,这一页好有意思:`This page is really interesting`,"我在写日记,不许偷看":`I'm writing my diary, no peeking`,"今天的事,写下来":`Today's things, written down`,在翻以前的日记呢:`Looking through my old diary`,原来那时候我是这样想的:`So that's what I was thinking back then`,"在整理今天的事……":`Sorting through today...`,"嘘,快整理完了":`Shh, almost done sorting`,"(TA 没有出声)":`(TA said nothing)`,"{v} · 心情{v2} · {latency} ms":`{v} · mood {v2} · {latency} ms`,真实模型:`Real model`,"本地样例(没有模型档案)":`Local sample (no model profile)`,"试聊走真实链路:读取 TA 此刻的心智和记忆,但不写入,也不发 QQ。配置了模型时会消耗 Token。":`Trial chat uses the real pipeline: it reads TA's current mind and memory but writes nothing and sends nothing to QQ. It uses tokens when a model is configured.`,"TA 会先理解,再决定说不说":`TA understands first, then decides whether to speak`,"回应会显示 TA 的选择和当时的想法。":`Replies show what TA chose and what she was thinking.`,为什么:`Why`,"TA 在想":`TA is thinking`,想象在这里:`Imagine here`,一段新的私聊:`A new private chat`,"说一句试试…":`Say something…`,说:`Say`,收起聊天:`Collapse chat`,"和 {name} 聊聊(试聊)":`Chat with {name} (trial)`,"和 {name} 聊聊":`Chat with {name}`,"试聊 · 什么都不写入":`Trial chat · nothing is written`,聊聊:`Chat`,"TA:轻触互动,按住摸摸头,双击和 TA 聊聊":`TA: tap to interact, press and hold to pet her head, double-click to chat`,请选择:`Select`,没有可选项:`No options`},Gs={"NEW PLACE":`NEW PLACE`,"实时同步 · ":`Live · `,"同步失败:":`Sync failed: `,会话已添加:`Session added`,"永久删除这个会话?它的消息和设置都会消失。":`Delete this session for good? Its messages and settings will be gone.`,会话配置已保存:`Session settings saved`,"确定清空这个会话的消息上下文吗?长期记忆不会删除。":`Clear this session's message context? Long-term memory is kept.`,已发送:`Sent`,反馈已保存:`Feedback saved`,请选择会话:`Select a session`,永久删除:`Delete for good`,清空上下文:`Clear context`,全部会话:`All sessions`,开口了:`Spoke up`,扫了一眼:`Glanced`,处理中:`Processing`,旧稿作废:`Draft voided`,已取消:`Cancelled`,已中断:`Interrupted`,真实聊天:`Real chat`,模拟预览:`Simulated preview`,测试回放:`Test replay`,语境压缩:`Context compression`,回放正在运行:`Replay is running`,回放结束:`Replay finished`,"输入 {v}(缓存读 {v2} / 写 {v3})· 输出 {v4}":`Input {v} (cache read {v2} / write {v3}) · output {v4}`,历史消息:`Message history`,"↻ 加载":`↻ Load`,序号:`No.`,发送者:`Sender`,消息:`Message`,"当前会话暂无历史消息。":`This session has no message history yet.`,起始序号:`From No.`,截止序号:`To No.`,"正在回放…":`Replaying…`,回放这段对话:`Replay this conversation`,"隔离回放:只测试回复,不发送 QQ,不修改真实记忆和 TA 的心智。":`Isolated replay: it only tests replies. Nothing is sent to QQ, and neither real memory nor TA's mind is changed.`,处理记录:`Processing log`,查看处理详情:`View processing details`,"有新的消息处理记录后会显示在这里。":`New message processing records will show up here.`,运行详情:`Run details`,耗时:`Duration`,模型调用:`Model calls`,"{v} 次":`{v} calls`,"展开下方查看上下文、模型输入与原始输出。":`Expand below to see the context, model input, and raw output.`,"选择一条处理记录,查看最终上下文、Prompt、原始输出、Token 与耗时。":`Pick a record to see the final context, prompt, raw output, tokens, and duration.`,回到那一刻:`Back to that moment`,会话:`Sessions`,"+ 添加会话":`+ Add session`,搜索名称或号码:`Search name or number`,搜索会话:`Search sessions`,参与中:`Taking part`,已暂停:`Paused`,"{v} 条没细看":`{v} not read closely`,"参与:{v}":`Taking part: {v}`,"暂无匹配的会话。":`No matching sessions.`,"已归档 · {length}":`Archived · {length}`,暂停参与:`Pause`,开启参与:`Resume`,近期细摘要:`Recent detailed summary`,中期摘要:`Mid-term summary`,较早摘要:`Earlier summary`,远期摘要:`Distant summary`,这个会话:`This session`,反馈:`Feedback`,还没有选中会话:`No session selected`,"从左边选一个群聊或私聊。":`Pick a group or private chat on the left.`,"TA 在这里的样子":`How TA is here`,展开完整内容:`Show everything`,"想成为:{aspiration}":`Wants to be: {aspiration}`,"这段私聊给 TA 的感觉":`How this private chat feels to TA`,"这个群给 TA 的感觉":`How this group feels to TA`,刚来这里不久:`Only just arrived here`,"在这里开不开口由 TA 自己决定:没有参与概率和冷却。TA 对这里每个人的感觉在「人际」里看。":`Whether to speak here is TA's own call: there is no participation probability or cooldown. How she feels about each person here is under People.`,归档:`Archive`,会话设置:`Session settings`,"所有会话和独处都用模型库里的默认模型;其余已启用的模型按列表顺序做备用。她在这个聊天窗里用什么样子,由她自己从经历里决定。":`Every session and her time alone use the default model in the model library; other enabled models serve as backups in list order. How she presents herself in this chat is up to her, shaped by her experience.`,"节能看图:只在被 @ 或明确要求时,看这一条和附近的图":`Save tokens on images: only look at this one and nearby ones when @-mentioned or asked directly`,高级策略:`Advanced policy`,"聚合窗口 ms":`Batching window (ms)`,"最长等待 ms":`Longest wait (ms)`,"近期原文条数(10–500)":`Recent raw messages (10–500)`,一轮总字数:`Characters per turn`,"上下文压缩:更早的聊天定期整理成分层摘要,越近越详细":`Context compression: older chat is periodically folded into layered summaries, more detailed the more recent`,长期记忆:`Long-term memory`,"倾诉、纠正和危机时额外复审一次回复":`Review the reply once more when someone confides, corrects her, or is in crisis`,保存会话设置:`Save session settings`,保存后下一轮生效:`Takes effect next turn after saving`,"语境摘要 · {length} 段":`Context summaries · {length}`,"还没有摘要。聊天超过近期原文条数后,更早的内容会自动整理到这里。":`No summaries yet. Once the chat passes the recent raw message count, older content is folded in here automatically.`,摘要:`Summary`,"{period} · {messages} 条消息":`{period} · {messages} messages`,"未完:":`Unfinished: `,"针对具体回复评价口吻;这是 TA 在这个会话里听到的话,不会改写天性。":`Rate the tone of a specific reply. This is something TA hears in this session; it does not rewrite her nature.`,"这句回复怎么样?":`How was this reply?`,"还没有可以评价的回复。":`No replies to rate yet.`,选择评价:`Choose a rating`,"TA 扫了一眼":`TA glanced over it`,"TA 看了,没出声":`TA looked but stayed quiet`,"TA 睡着了,醒来再看":`TA is asleep and will look when she wakes`,选择一段对话:`Pick a conversation`,模拟消息:`Simulated message`,模拟:`Simulated`,为什么这么说:`Why she said that`,"正在翻当时的记录…":`Looking through the record from then…`,"TA 当时的理解:":`What TA understood then: `,"理由:":`Reason: `,"引用的资料:":`Sources cited: `,"这句怎么样?":`How was this one?`,等待新的消息:`Waiting for new messages`,"群聊与私聊消息会在这里实时出现;TA 扫一眼、没出声也会留下一条分隔线。":`Group and private messages appear here live. When TA glances and says nothing, a divider is left too.`,"作为一条模拟消息走完整流程,写进模拟会话;不会发到 QQ,也不进入真实记忆。":`Runs the full pipeline as a simulated message and is written into the simulated session. It is not sent to QQ and does not enter real memory.`,"体验用户 ID":`Trial user ID`,"以这位群友的身份说一句…":`Say something as this group member…`,"视为 @":`Count as @-mention`,发送模拟消息:`Send simulated message`,"真实模式下不能模拟消息。想看看 TA 会怎么回,可以「和 TA 聊聊」——那是试聊,什么都不写入。":`Messages cannot be simulated in real mode. To see how TA would reply, use “Talk with TA”: that is a trial chat and nothing is written.`},Ks={"连接 QQ":`Connect QQ`,"两种连接方式二选一,同一时间只使用一种。她的记忆、心情和行为完全一致,区别只在消息怎么到达。":`Pick one of two ways to connect; only one is used at a time. Her memory, moods and behavior are the same either way. Only the way messages arrive differs.`,"QQ 已连接":`QQ connected`,等待连接:`Waiting for a connection`,连接方式:`Connection method`,使用中:`In use`,改用这种方式:`Use this method`,"已切换为 {name}":`Switched to {name}`,切换连接方式:`Switch connection method`,"切换后会断开当前连接。原来方式下的会话仍可查看,但不能再向它们发送消息。":`Switching drops the current connection. Chats from the previous method stay readable, but nothing can be sent into them.`,切换:`Switch`,先不切换:`Not now`,"连接方式由环境变量 LUCKYTRI_CHANNEL 指定,在这里不能更改。去掉该变量后即可在此选择。":`The connection method is set by the LUCKYTRI_CHANNEL environment variable and cannot be changed here. Remove it to choose here.`,"OneBot 11":`OneBot 11`,"自备接入端,通过反向 WebSocket 连接。能看到全部群消息。":`Bring your own client and connect over a reverse WebSocket. Sees every group message.`,"反向 WebSocket 地址":`Reverse WebSocket address`,"同一台电脑上的接入端无需单独配置连接令牌。":`Clients on the same computer need no separate connection token.`,"在接入端启用反向 WebSocket 客户端,填写上方地址,消息格式选择数组。已有的地址配置可以继续使用。":`Enable a reverse WebSocket client, use the address above, and choose array messages. Existing address settings can stay as they are.`,"远程接入时,连接密码使用管理密码;已有的远程连接令牌仍兼容。":`Remote clients can use the management password. Existing remote access tokens remain supported.`,"在接入端完成 QQ 登录。连接成功后,本页状态会更新;新会话仍需在「对话」中开启参与。":`Sign in to QQ in that client. This page updates once it connects; new chats still need to be switched on under Chats.`,"LuckyTri 只负责接收,不提供、不安装也不管理接入端。":`LuckyTri only receives. It does not provide, install or manage the client.`,"QQ 官方机器人":`QQ official bot`,"只需 AppID 与 AppSecret,无需额外软件。群里默认只收到 @ 她的消息。":`Needs only an AppID and AppSecret, no extra software. In groups it receives only messages that @ her by default.`,AppID:`AppID`,"机器人的 AppID":`The bot's AppID`,AppSecret:`AppSecret`,"已保存,留空保留":`Saved, leave blank to keep`,"机器人的 AppSecret":`The bot's AppSecret`,"由环境变量指定,在这里不能修改":`Set by an environment variable and cannot be changed here`,保存:`Save`,保存并使用:`Save and use`,已保存:`Saved`,"请填写 AppID 和 AppSecret":`Enter both the AppID and the AppSecret`,有尚未保存的修改:`Unsaved changes`,连接状态:`Connection`,机器人:`Bot`,最近收到消息:`Last message received`,还没有:`None yet`,群消息范围:`Group messages`,全部群消息:`All group messages`,"只有 @ 她的消息":`Only messages that @ her`,尚未收到群消息:`None received yet`,未启用:`Not in use`,"尚未填写 AppID 与 AppSecret":`AppID and AppSecret not entered yet`,正在连接开放平台:`Connecting to the open platform`,已连接:`Connected`,"连接已断开,正在重连":`Disconnected, reconnecting`,连接出错:`Connection error`,"目前只收到 @ 她的群消息。想让她看到群里的全部消息,请在开放平台的机器人设置里开启「接收所有消息」。":`Only group messages that @ her have arrived so far. To let her see everything said in a group, turn on “Receive all messages” in the bot settings on the open platform.`,"在 QQ 开放平台创建机器人,取得 AppID 与 AppSecret。":`Create a bot on the QQ open platform and get its AppID and AppSecret.`,"把运行 LuckyTri 的这台机器的出口 IP 加入机器人的 IP 白名单。":`Add the outbound IP of the machine running LuckyTri to the bot's IP allowlist.`,"可选:开启「接收所有消息」,她才能看到群里没有 @ 她的话;不开启时只会收到 @ 她的消息。":`Optional: turn on “Receive all messages” so she can see group talk that does not @ her. Without it she only receives messages that @ her.`,"填写上方的 AppID 与 AppSecret 并保存。状态变为「已连接」后,在群里 @ 她或私聊她,新会话会出现在「对话」中。":`Enter the AppID and AppSecret above and save. Once the status says Connected, @ her in a group or message her privately, and the new chat appears under Chats.`,"官方平台不提供群名称:新会话以占位名出现,可以在「对话」中为它改名。":`The official platform does not provide group names. New chats show a placeholder name that you can change under Chats.`,"官方平台上,同一个人在不同的群里标识不同。像只在不同的房间见过对方一样,平台给出统一身份之前,她不会把两处的人当成同一个人。":`On the official platform the same person has a different ID in each group. As if she had only met them in separate rooms, she will not treat them as one person until the platform provides a unified identity.`,"对方关闭了机器人的主动消息时,她不会去打扰,会等对方来找她。":`When someone has turned off the bot's proactive messages she will not intrude. She waits for them to come to her.`,就绪检查:`Readiness`,还差哪一步:`What is left`,查看:`View`,去处理:`Fix`,"添加群聊 / 私聊":`Add a group or private chat`,"添加之后再决定要不要让 TA 参与;开不开口仍由 TA 自己决定。":`Add it first, then decide whether she takes part. Whether she speaks is still up to her.`,类型:`Type`,群聊:`Group`,私聊:`Private`,"群号 / QQ 号":`Group number / QQ number`,"4–20 位数字":`4–20 digits`,"群 openid / 用户 openid":`Group openid / user openid`,"8–64 位字母、数字、下划线或短横线。官方平台的会话通常会在有人 @ 她或私聊她时自动出现,这里只用于提前登记。":`8–64 letters, digits, underscores or hyphens. On the official platform a chat usually appears by itself once someone @s her or messages her privately; this is only for adding one ahead of time.`,显示名称:`Display name`,添加会话:`Add chat`,"请先在「连接 QQ」里填写机器人的 AppID":`Enter the bot's AppID under Connect QQ first`,会话名称:`Chat name`,"官方机器人平台不提供群名称,可以在这里自己起一个":`The official bot platform does not provide group names, so you can name it yourself here`},qs={"TA 最核心的部分":`The core of TA`,"在远方:很久没被触及":`Far away: untouched for a long time`,慢慢淡出:`Slowly fading`,"撤销「{content}」?撤销后 TA 不会再这样认为,之后的独处也不会把它写回来。可以写下原因(可不填):":`Undo “{content}”? TA will no longer think this, and her time alone will not write it back. You can note a reason (optional):`,撤销这条线索:`Undo this strand`,内心的分区:`Inner life sections`,心灵星图:`Star map`,线索清单:`Strand list`,"她从真实经历里慢慢认识自己。点开一条线索,可以看到它如何变化。":`She gets to know herself slowly, from real experience. Open a strand to see how it changed.`,"TA 还没有长出关于自己的东西":`TA has not grown anything about herself yet`,"聊得多了、独处过、写过日记,TA 会慢慢发现自己喜欢什么、怎么看事情、想做什么。天性只是种子。":`After enough conversations, time alone, and diary entries, TA slowly finds out what she likes, how she sees things, and what she wants to do. Nature is only the seed.`,"强度 {v}":`Strength {v}`,"· 此刻的分量 {v}":`· weight right now {v}`,"再看 {v} 条线索":`See {v} more strands`,"天性只是种子,其余的都从经历里来。":`Nature is only the seed; everything else comes from experience.`,"TA 自己放下的 · {length}":`Let go by TA · {length}`,"没有。":`None.`,"你撤销过的 · {length}":`Undone by you · {length}`,一颗星:`A star`,强度:`Strength`,此刻的分量:`Weight right now`,经历的天数:`Days of experience`,"{length} 天":`{length} days`,来源:`Sources`,"{length} 处":`{length} places`,最近一次被触及:`Last touched`,"怎么变成现在这样的 · {versions} 个版本":`How it came to be · {versions} versions`,"撤销后 TA 不会再这样认为;这只是拿走一段理解,不会改写发生过的事。":`After undoing, TA will no longer think this. It only takes away one understanding and does not rewrite what happened.`,收起线索:`Collapse strands`,"MOOD / 此刻的天气":`MOOD / the weather right now`,"心情有自己的潮汐。":`Mood has tides of its own.`,"最近 {length} 次被经历牵动;有起伏,也会慢慢平静。":`Moved by experience {length} times lately; it rises and falls, then settles.`,刚刚留下的心情:`The mood just left behind`,暂时说不清缘由:`No clear reason for now`,最近的心情曲线:`Recent mood curve`,"心情还没有被什么事牵动过。每一次经历都可能推动 TA 的心情,随后又会慢慢回到平常。":`Nothing has moved her mood yet. Every experience can nudge TA's mood, and it slowly returns to normal afterwards.`,最近的心情:`Recent moods`,"删除这张便签?有后续修正的便签只能隐藏。":`Delete this note? A note that has later corrections can only be hidden.`,删除便签:`Delete note`,"THOUGHTS / 留给自己的话":`THOUGHTS / notes to herself`,"有些念头,先放在心上。":`Some thoughts are kept in mind first.`,"有些是聊天之后的理解,有些是还没想好要告诉谁的念头。可以分享,也可以先留给自己。":`Some are understandings after a chat, some are thoughts she has not decided who to tell. They can be shared, or kept for herself first.`,"搜索某件事、某个人":`Search for a matter or a person`,搜索便签:`Search notes`,"· 修正了以前的想法":`· corrected an earlier thought`,放下了:`Let go`,"放下了:{resolution}":`Let go: {resolution}`,"想主动说:{outreach} · {v}":`Wants to say: {outreach} · {v}`,"因为:{outreach_reason}":`Because: {outreach_reason}`,"{outreach_wait_reason};稍后重新决定。":`{outreach_wait_reason}; she will decide again later.`,放下这件事:`Let this go`,重新关注:`Pay attention again`,"不再参与 TA 的思考":`Leave out of TA's thinking`,这面墙还空着:`This wall is still empty`,"独处时有了新的理解、放不下的事或久别想起的人,TA 会写一张便签贴在这里。":`When she has a new understanding while alone, something she cannot let go of, or someone she remembers after a long time, TA writes a note and sticks it here.`,暂时放远:`Set aside for now`,慢慢笃定:`Growing certain`,还在生长:`Still growing`,"心灵星图:TA 关于自己的线索":`Star map: TA's strands about herself`,"SELF / 正在形成的自己":`SELF / still taking shape`,"不是一张固定的画像,":`Not a fixed portrait,`,"而是一直在生长。":`but something that keeps growing.`,"一件经历可能留下一点痕迹。点开一枚光片,可以看到它从哪里来、后来又怎么改变。":`An experience can leave a small trace. Open a shard of light to see where it came from and how it changed afterwards.`,枚线索:`strands`,枚此刻贴近:`close right now`,她留下的光片:`The shards she keeps`,"越亮的线索,越贴近此刻。淡去的仍然保留在这里。":`The brighter a strand, the closer it is to now. Faded ones are still kept here.`,"{length} 枚正在留存":`{length} kept`,"再看 {v} 枚光片":`See {v} more shards`},Js={"AHEAD · 向前看":`AHEAD`,"让未来有值得期待的事。":`Let the future hold things worth looking forward to.`,"约定、想做的事与每年都会回来的日子,都安静地留在这里。":`Promises, things she wants to do, and the days that return every year all rest quietly here.`,约定的视图:`Promise views`,日历:`Calendar`,清单:`List`,上个月:`Previous month`,"{year} 年 {month} 月":`{month}/{year}`,下个月:`Next month`,"{n} 日{v}":`{n}{v}`,",{length} 件事":`, {length} items`," · 每年":` · yearly`,"这一天没有 TA 在等的事。":`Nothing TA is waiting for on this day.`," · 私下知道的":` · known privately`,"还没有 TA 在等的事":`Nothing TA is waiting for yet`,"有人说起之后的安排、TA 答应了别人什么,整理记忆时会记下来。":`When someone mentions plans, or TA promises something, it is noted while she sorts her memory.`,日记的日子:`Diary days`,那天的心情:`Mood that day`,"和昨天的自己比:{compare}":`Compared with yesterday's self: {compare}`,前一天:`Previous day`,"‹ 前一天":`‹ Previous day`,"合上那天的 TA":`Close that day's TA`,"那天的 TA":`TA that day`,后一天:`Next day`,"后一天 ›":`Next day ›`,"那天的 TA,和前一天比":`TA that day, compared with the day before`,"多了:":`Added: `,"变了:":`Changed: `,"放下了:":`Let go of: `,"正在过的:":`Living through: `,"心情:":`Mood: `,"这是 TA 留下快照的第一天,还没有可以对照的昨天。":`This is the first day TA left a snapshot, so there is no yesterday to compare with yet.`,还没有日记:`No diary yet`,"每天睡前(或凌晨),如果这一天真的有过经历,TA 会写下来,并和昨天的自己对照。":`Each day before sleep (or in the small hours), if the day held real experience, TA writes it down and compares it with yesterday's self.`,"LIFE · 一生":`LIFE`,"日子经过,":`Days pass by,`,"留下自己的形状。":`and leave their own shape.`,"写下今天,回望从前,也给明天留一点期待。":`Write today, look back on the past, and leave a little anticipation for tomorrow.`,"时间、任务与作品 →":`Time, tasks and works →`,一生的分区:`Lifetime sections`,日记本:`Diary`,回顾:`Reflections`,我的来路:`My Journey`,书架:`Bookshelf`,"来到这里的第 {dayOfLife} 天":`Day {dayOfLife} since arriving here`,"TA 的回顾":`TA's reflections`,"每隔一段时间,TA 在夜里重新看看这段日子:留下了什么、自己怎样在变。":`Every so often, TA looks back over these days at night: what was left behind and how she is changing.`,"和上次回顾比:{compare}":`Compared with the last reflection: {compare}`,还没有回顾过:`No reflection yet`,"日记攒到两篇以后,TA 会在睡着的时候第一次回顾。":`Once there are two diary entries, TA will make her first reflection while she sleeps.`,前言:`Preface`,"我的来路 · 第 {dayOfLife} 天":`My Journey · day {dayOfLife}`,收起旧版本:`Hide older versions`,"重写过 {v} 次":`Rewritten {v} times`,"第 {chapter} 章":`Chapter {chapter}`,自传还没开始写:`The autobiography has not been started`,"有了两篇日记之后,TA 会在夜里第一次回顾,写下「我的来路」和第一章。旧的版本都会留着。":`After two diary entries, TA will reflect for the first time at night and write “My Journey” and its first chapter. Older versions are all kept.`,"独处时,TA 会从共享资料里挑自己感兴趣的读,一段一段地读下去,读后的想法可以改变 TA。还有 {v} 段没读。":`When alone, TA picks things she is interested in from the shared material and reads them passage by passage. What she thinks afterwards can change her. {v} passages are still unread.`,去资料书架放点书:`Put something on the bookshelf`,"第 {v} / {total} 段 · {v2}":`Passage {v} / {total} · {v2}`,读完没说什么:`Read it and said nothing`,还没读过什么:`Has not read anything yet`,"把文章放进「记忆 → 资料书架」的共享集合,TA 独处时会去读。":`Put articles into a shared collection in Memory → Bookshelf, and TA will read them when she is alone.`,"独处时留下的东西 · {v}":`Left behind while alone · {v}`,"阅读草稿、篇章和旧版本 →":`Reading drafts, chapters and older versions →`,自己的作品:`Her own works`,留在私下:`Kept private`,还没有独处作品:`No works from time alone yet`,"她会按自己留下的计划,阅读、写东西或整理想法。":`She will read, write or sort her thoughts according to the plans she left herself.`,独处的时候:`When alone`,"独处、日记与夜里的记录 · {length}":`Time alone, diary and night records · {length}`,未调用模型:`No model was called`,"安静本身不会留下记录;TA 真正独处、写日记或在夜里整理时才会记下。":`Quiet itself leaves no record; it is noted only when TA actually spends time alone, writes a diary, or sorts things at night.`},Ys={"已重建 {chunks} 段向量":`Rebuilt vectors for {chunks} passages`,文档已切分入库:`Document split and stored`,"给 TA 留一点可以读的东西":`Leave TA something to read`,"存放可供聊天参考的资料,和自动记录的会话记忆分开管理。共享集合里的文章,TA 独处时也会挑着读。":`Holds reference material for chats, managed separately from the memory recorded automatically from sessions. Articles in a shared collection are also something TA picks from to read when alone.`,文档集合:`Document collections`,"资料书架,{length} 份资料":`Bookshelf, {length} documents`,"正在重建…":`Rebuilding…`,重建向量:`Rebuild vectors`,书架还空着:`The bookshelf is still empty`,"在下面放一份资料,TA 就能在聊天里查到,独处时也可能去读。":`Add a document below and TA can look it up in chat, and may read it when alone.`,"+ 添加一份资料":`+ Add a document`,标题:`Title`,粘贴正文:`Paste the text`,保存到书架:`Save to bookshelf`,"保存之后,TA 才能在聊天和独处时读到":`TA can read it in chat and when alone only after you save`,检索测试:`Search test`,试着搜索一个关键词:`Try searching a keyword`,检索:`Search`,"没有找到相关资料。":`No related material found.`,资料书架:`Bookshelf`,记忆已写入:`Memory saved`,"确定删除已选的 {length} 条记忆吗?":`Delete the {length} selected memories?`,删除记忆:`Delete memories`,"已删除 {v} 条记忆":`Deleted {v} memories`,"确定清空本会话的 {count} 条可删除记忆吗?":`Clear the {count} deletable memories of this session?`,清空本会话记忆:`Clear this session's memories`,记忆已整理:`Memory sorted`,在哪里知道的:`Where she learned it`,选择会话:`Choose a session`,关于谁:`About whom`,按人筛选:`Filter by person`,所有人:`Everyone`,"搜索记忆、人物或关键词":`Search memories, people or keywords`,搜索记忆:`Search memories`,"+ 手动记忆":`+ Add memory`,最近发生了什么:`What happened recently`,记忆档案:`Memory archive`,刷新总结:`Refresh summary`,"整理中…":`Sorting…`,立即整理:`Sort now`,"请选择会话以查看最近的记忆总结。":`Choose a session to see its recent memory summary.`,尚未整理:`Not sorted yet`,展开:`Expand`,全选:`Select all`,取消选择:`Clear selection`,"删除已选 {v}":`Delete selected {v}`,清空本会话:`Clear this session`,"选择记忆:":`Select memory: `,已锁定:`Locked`,"关于 {v} · {v2} · 把握 {v3}%":`About {v} · {v2} · confidence {v3}%`,在这里知道的:`Learned here`,别处知道的:`Learned elsewhere`,"编辑记忆:":`Edit memory: `,保存修改:`Save changes`,编辑后要点保存:`Save after editing`,"再显示 20 条":`Show 20 more`,这里还有空白:`Nothing here yet`,"别人说「记住……」、聊天积累后的自动整理,或你手动添加的事会出现在这里。TA 对所有会话只有一份记忆:别处知道的事只在相关时想起,私下知道的不当众说,要 TA 保密的不离开原处。":`Things people ask her to remember, what is sorted automatically as chats pile up, and what you add by hand will appear here. TA has a single memory across all sessions: what she learned elsewhere comes up only when relevant, what she knows privately is not said in public, and what she was asked to keep secret does not leave where it was told.`,"共 {length} 条记忆":`{length} memories in total`,共享与锁定的记忆不会被批量选中:`Shared and locked memories are not picked up by bulk selection`,手动记住一件事:`Remember something by hand`,所属会话:`Session`,"用户 ID":`User ID`,"选择昵称,或填写用户 ID":`Choose a nickname, or enter a user ID`,已确认的事实:`A confirmed fact`,新增人工记忆:`Add a manual memory`,"MEMORY · 记忆":`MEMORY`,"见过的人与事,":`The people and things she has met`,"会慢慢有了重量。":`slowly gain weight.`,"记住重要的,也允许改变看法。":`Remember what matters, and allow views to change.`,记忆的分区:`Memory sections`,"TA 记得的事":`What TA remembers`,"先在「对话」里添加一个会话,TA 才有地方认识人、记住事。":`Add a session under Chats first, so TA has somewhere to meet people and remember things.`},Xs={"可用更改次数已用完。之后的性格、兴趣和想法,由 TA 自己从经历里生长。":`No edits remain. TA's personality, interests and thoughts will continue growing from experience.`,温柔:`Gentle`,"颜色偏冷,表情淡淡的":`Cooler colours, a faint expression`,"颜色更暖,嘴角上扬":`Warmer colours, the corners of her mouth turned up`,毒舌:`Sharp-tongued`,不挖苦人:`No digs at anyone`,"嘴角一歪,会吐槽":`A crooked smile, ready to tease`,幽默:`Humorous`,认真:`Serious`,"眯眼笑,爱开玩笑":`Squinting smile, loves a joke`,活泼:`Lively`,安安静静:`Quiet and still`,跳得更快:`Bounces faster`,主动:`Proactive`,更喜欢独处:`Prefers being alone`,更愿意分享:`More willing to share`,系统指令:`System prompt`,看见与开口:`Seeing and speaking up`,分享与发起:`Sharing and initiating`,重新措辞:`Rewording`,回复检查:`Reply check`,上下文压缩:`Context compression`,摘要合并:`Summary merging`,"天性已保存,下一次开口时生效":`Nature saved; it takes effect the next time she speaks`,"TA 的日子已按新设置安排":`TA's days are arranged by the new settings`,"指令已保存,下一轮生效":`Prompt saved; it takes effect next turn`,天性预览:`Nature preview`,"THE WAY SHE GROWS · 天性":`THE WAY SHE GROWS`,"她的底色,":`Her undertone`,"慢慢长成她自己。":`slowly grows into herself.`,"一些与生俱来的倾向,会在每一次相遇里长出新的模样。":`Some inborn tendencies take on a new shape in every encounter.`,"调节刻度,看看此刻的她":`Adjust the scales and see her as she is now`,成长中的性格:`Character in growth`,"BECOMING · 正在成为":`BECOMING`,此刻的她:`Her right now`,"天性是起点。下方是她从真实经历里长出的刻度,下一次对话会使用这些值。":`Nature is the starting point. Below are the scales she grew from real experience; the next conversation uses these values.`,"起点 {v}":`Start {v}`,"INNER VOICE · 自己的样子":`INNER VOICE`,"她还没有为现在的自己留下一段新的描述。底色和已有的自我线索仍会陪着她。":`She has not left a new description of who she is now. Her undertone and existing self strands still stay with her.`,"看看她怎么走到这里 · {length} 版":`See how she got here · {length} versions`,"看看她为何改变 · {length} 次":`See why she changed · {length} times`,"她还没有从经历里改变这些刻度。独处或日记里形成了有来源的新选择后,会留在这里。":`She has not changed these scales through experience yet. Once a new choice with a source forms during time alone or in the diary, it will be kept here.`,"天性还可以改 {left} 次,包括性格刻度。用完后由她自己生长。":`Nature can still be changed {left} more times, character scales included. After that she grows by herself.`,"塑造 TA":`Shape TA`,"TA 生来是什么样的?":`What is TA like by birth?`,"天性是种子:性格、兴趣和底线。TA 的自我、在各群的样子、对每个人的感觉都会从经历里长出来——你能看到、能撤销,但不在这里改写。":`Nature is a seed: character, interests and boundaries. TA's self, how she is in each group, and how she feels about each person all grow from experience. You can see them and undo them, but not rewrite them here.`,名字:`Name`,性别:`Gender`,女:`Female`,男:`Male`,不指定:`Unspecified`,"人称会进入 TA 对自己的理解。女是「她」,男是「他」。":`The pronoun becomes part of how TA understands herself. Female is “she”, male is “he”.`,"别人会怎么叫 TA":`What others call TA`,用逗号分隔:`Separate with commas`,"群友叫 TA 的称呼,保存时一并写进全局设置":`The names group members call TA; saved into the global settings together`,"TA 的背景、性格、兴趣和社交方式…":`TA's background, character, interests and way of socializing…`,性格刻度:`Character scales`,"{label}刻度":`{label} scale`,说话长度:`Speech length`,作息:`Daily rhythm`,"TA 会睡觉:睡着时不看群,被私聊或 @ 会等醒来再看(危机消息除外)":`TA sleeps: while asleep she does not read groups, and a private message or @-mention waits until she wakes (crisis messages excepted)`,"拖动月亮和太阳,或直接输入时间。":`Drag the moon and sun, or type a time.`,"兴趣、边界与底线":`Interests, limits and bottom lines`,兴趣:`Interests`,社交边界:`Social limits`,"底线(每行一条)":`Bottom lines (one per line)`,"不想用的说法(每行一个)":`Phrases to avoid (one per line)`,"凭据(密码、密钥、验证码)永远不会进入 TA 的心智,这一条写死在代码里。":`Credentials (passwords, keys, verification codes) never enter TA's mind; this is hard-coded.`,"天性的版本 · {length}":`Nature versions · {length}`,"第 {version} 版":`Version {version}`,修改:`Change`,"已交给 TA":`Given to TA`,"保存中…":`Saving…`,保存天性:`Save nature`,更改次数已用完:`No changes left`,天性有未保存的修改:`Nature has unsaved changes`,"还可以改 {left} 次":`{left} changes left`,"调色盘 · 即时反馈":`Palette · instant feedback`,"微小的倾向,也会改变表达":`Even small tendencies change how she expresses herself`,用草稿天性试聊:`Trial chat with the draft nature`,今天真的好累啊:`I'm so tired today`,用左边还没保存的天性:`Uses the unsaved nature on the left`,"TA 的日子":`TA's days`,"TA 怎样度过没人说话的时间":`How TA spends the time when no one is talking`,"聊天安静下来后,TA 会重新看看最近的事,改变对自己、对人的理解。":`When chat goes quiet, TA looks over recent events again and may change how she understands herself and people.`,独处时读资料:`Read while alone`,"从共享资料里按自己的兴趣挑着读,一段一段读下去;读过的内容聊天时可以自然提起。":`She picks from shared material by her own interest and reads on passage by passage; what she has read can come up naturally in chat.`,睡前写日记:`Diary before sleep`,"一天结束时写下这一天,和昨天的自己对照;隔一段时间在夜里回顾,改写自传、翻开新的一章。":`At the end of the day she writes it down and compares it with yesterday's self; every so often she looks back at night, rewrites her autobiography and opens a new chapter.`,"睡着以后,把白天没整理的聊天记进记忆和约定里,再按回顾间隔回顾这段日子。":`After falling asleep, she records the day's unsorted chats into memory and promises, then looks back over these days on the reflection interval.`,"允许 TA 主动说话":`Let TA speak first`,"安静的时候,也能从自己的兴趣、念头和对人的感觉决定要不要先开口。不必等人提问,不催同一句话;对方没回应,也不等于以后不能分享新的事。关掉后停止主动联系。":`In quiet moments she can decide whether to speak first, from her own interests, thoughts and feelings about people. She does not need to wait to be asked and does not push the same line; no reply does not mean she can never share something new later. Turning this off stops proactive contact.`,"安静多久才独处(分钟)":`Quiet for how long before time alone (minutes)`,"两次独处至少间隔(分钟)":`Minimum gap between times alone (minutes)`,"攒够多少条新消息(条)":`New messages to pile up (count)`,"回顾间隔(天)":`Reflection interval (days)`,"安静时多久看看想不想聊(分钟)":`How often to check whether she wants to talk when quiet (minutes)`,"两次主动联系至少间隔(小时)":`Minimum gap between proactive contacts (hours)`,"主动联系间隔只在实际发出后计算,可设为 0;沉默不会占用发送间隔。想说的话会保留,临时忙碌后重新决定。没有新消息时也可独处,不需要攒够消息才能产生念头。":`The proactive-contact gap is counted only after something is actually sent and can be 0; silence does not use up the gap. What she wants to say is kept and she decides again after being busy. She can also spend time alone with no new messages; she does not need a pile of messages to have a thought.`,"独处、日记和夜里整理也使用模型库里的默认模型,不再单独指定。":`Time alone, the diary and night sorting also use the default model in the model library; they are no longer set separately.`,时区:`Time zone`,每日注意力:`Daily attention`,"TA 一天能花多少 Token":`How many tokens TA can spend in a day`,"每日 Token 上限(0 = 不限)":`Daily token limit (0 = unlimited)`,"滚动 24 小时计算。快用完时,TA 在群里只在被叫到时细看;用完后后台独处和整理暂停。":`Counted over a rolling 24 hours. When nearly used up, TA reads groups closely only when called on; once used up, background time alone and sorting pause.`,独处与日记最多占:`Time alone and diary use at most`,记忆整理与压缩最多占:`Memory sorting and compression use at most`,"扫一眼群聊不花 Token;TA 细看时一次调用同时完成理解、心情和回复。私聊和 @ 永远优先。":`Glancing over a group costs no tokens; when TA reads closely, one call does understanding, mood and reply together. Private chats and @-mentions always come first.`,"保存 TA 的日子":`Save TA's days`,日常安排有未保存的修改:`Daily arrangements have unsaved changes`,日常安排已保存:`Daily arrangements saved`,高级:`Advanced`,"指令(Prompt)":`Prompts`,要编辑的指令:`Prompt to edit`,指令正文:`Prompt text`,保存指令:`Save prompt`,指令有未保存的修改:`The prompt has unsaved changes`,指令已保存:`Prompt saved`,几点睡:`Bedtime`,几点醒:`Wake time`,"{h} 小时":`{h} h`,"{h} 小时 {m} 分":`{h} h {m} min`,"睡 {hours}":`Sleeps {hours}`},Zs={独处与日记:`Alone & diary`,整理记忆:`Sorting memory`,拖动调整首页壁纸构图:`Drag to adjust the wallpaper framing`,"按住并拖动图片,调整人物位置":`Press and drag the image to adjust where she stands`,拖动背景调整构图:`Drag the background to adjust the framing`,调整构图:`Adjust framing`,"TA 最近说":`What TA said lately`,"TA 还没在哪里开过口。":`TA has not spoken anywhere yet.`,"心里暂时没有挂着的事。":`Nothing is weighing on her mind for now.`,"正在为自己而活:{content}":`Living for herself: {content}`,"被别人的话碰到过 {touched} 次,上次{v}":`Touched by others' words {touched} times, last {v}`,"上次相遇:{text}":`Last encounter: {text}`,"(没出声)":`(said nothing)`,"看看 TA 的便签":`See TA's notes`,在等的事:`Things she is waiting for`,"这几天没有 TA 特别在等的事。":`Nothing in particular TA is waiting for these days.`,"今天的 TA":`TA today`,"{v},按时间排在一起":`{v}, in time order`,筛选今天的事:`Filter today's events`,开口与沉默:`Speaking and silence`,心情:`Mood`,"扫了 {count} 眼":`Glanced ×{count}`,"心情 · {feeling}":`Mood · {feeling}`,"约定 · {v}":`Promise · {v}`,"没什么需要 TA 细看的":`Nothing needs a close look from TA`,今天还很安静:`Today is still quiet`,"TA 扫一眼、开口、没出声、心情变化、独处、写日记,都会按时间排在这里。":`When TA glances over a chat, speaks, stays silent, changes mood, spends time alone or writes her diary, it all shows up here in time order.`,今天的注意力:`Today's attention`,这一天:`This day`,"共 {v} 次调用、{v2} Token,缓存命中 {v3}。 {v4}":`{v} calls, {v2} tokens, cache hit {v3}. {v4}`,"每日上限 {v}。":`Daily limit {v}.`,"没有设置每日上限。":`No daily limit set.`,还没细看的消息:`Messages not read closely yet`,留意:`Watch`,"{unread} 条未读":`{unread} unread`,"被叫到、聊到 TA 在意的事、熟人说话或攒了不少消息时,TA 才会细看。":`TA reads closely only when she is called on, the talk reaches something she cares about, someone familiar speaks, or enough messages pile up.`,"TA 的这一生":`TA's life so far`,到现在:`Up to now`,自我线索:`Self strands`,认识的人:`People known`,天日记:`days of diary`,件在等的事:`things waiting`,恢复默认:`Restore default`,换壁纸:`Change wallpaper`,浏览器没有保存这次构图:`The browser did not save this framing`,首页壁纸构图已记住:`Wallpaper framing remembered`,中间这张已换上:`The middle one is now set`,后面的壁纸已换上:`The background wallpaper is now set`,已恢复原来的壁纸:`Original wallpaper restored`,中间这张:`The middle one`,选择图片:`Choose an image`,后面的大壁纸:`The large background wallpaper`,"透明度 {v}%":`Opacity {v}%`,后面壁纸的透明度:`Background wallpaper opacity`,"越透明,心情的颜色越清楚。":`The more transparent it is, the clearer the mood colour shows.`},Qs={年长手足:`Older sibling`,年幼手足:`Younger sibling`,妹妹:`Younger sister`,姐姐:`Older sister`,弟弟:`Younger brother`,哥哥:`Older brother`,朋友:`Friend`,伙伴:`Companion`,其他关系:`Other relationship`,关系已保存:`Relationship saved`,"解除这份关系?相处留下的记忆和感受仍会保留。":`End this relationship? Memories and feelings from encounters will remain.`,解除关系:`End relationship`,解除:`End`,彼此的关系:`Relationships`,绑定关系:`Bind a relationship`,"按账号认出人或另一位机器人;关系融入关心、打算与交流,感情仍随着相处生长。":`Recognise people or other robots by account. Relationships inform care, plans and conversation, while feelings grow through encounters.`,另一位机器人:`Another robot`,人:`Person`,"还没有绑定关系,可以从一个准确的账号开始。":`No relationships bound yet. Start with an exact account.`,平台:`Platform`,对方账号:`Their account`,"QQ 号或平台用户 ID":`QQ number or platform user ID`,对象类型:`Account type`,对方名字:`Their name`,"可选,未填写时使用已认识的名字":`Optional. Otherwise use their known name.`,对方是我的:`They are my`,我是对方的:`I am their`,留空时按当前身份生成对应称呼:`Leave blank to infer the reciprocal role from the current identity`,关系称呼:`Relationship label`,应用账号:`Application account`,关系公开范围:`Relationship visibility`,这份关系的缘由:`Reason for this relationship`,"可选,写下真实的安排或缘由":`Optional. Describe the actual arrangement or reason.`,"绑定称呼不会凭空增加相处经历、信任或对方的同意。私下关系只在与对方的私聊中使用。":`A label does not invent shared experiences, trust or their consent. Private relationships are used only in private chats with that account.`,保存关系:`Save relationship`,修改关系:`Edit relationship`,"对方是我的 {peer},我是对方的 {self}":`They are my {peer}; I am their {self}`,关系变化记录:`Relationship history`,设置关系:`Set relationship`,新增:`Added`,在这里的想法:`Thoughts about this place`,"同一个她,在不同的地方留下自己的想法。":`The same person, with her own thoughts about different places.`,"她根据相处留下印象、愿望或疑问,选择什么时候新增、修改或放下。每次更新保留理由和来源。":`She leaves impressions, wishes or questions from her encounters, choosing when to add, revise or let them go. Each update retains its reasons and sources.`,"还没有特别想留在这里的想法,之后由她自己选择。":`No particular thoughts to keep here yet. She will choose in her own time.`,"查看想法与变化 ↗":`See thoughts and changes ↗`,"PLACE NOTES / 在这里的想法":`PLACE NOTES / thoughts about this place`,"旧人格记录,仅保留历史":`Previous persona record, kept only as history`,"撤销这次想法更新?会恢复上一次保留的想法。":`Undo this update? The previous set of thoughts will be restored.`,撤销想法更新:`Undo a thought update`,印象:`Impression`,偏好:`Preference`,想法:`Thought`,还在想的问题:`An open question`,相处的分寸:`Boundaries here`,"{n} 处来源":`{n} sources`,"相遇之间:TA 认识的人":`Between encounters: the people TA knows`,"PEOPLE / 相遇之间":`PEOPLE / between encounters`,"每一次相遇,":`Every encounter`,"都留下一点温度。":`leaves a little warmth.`,"越熟悉离 TA 越近。这里先放着最近亲近的 {length} 个人,其他人也仍然在名单里。":`The more familiar, the closer to TA. The {length} people closest lately are shown here; everyone else is still on the list.`,个相遇过的人:`people met`,最近靠近的人:`Recently closer`,"点开一张光片,看看她记得什么":`Open a card to see what she remembers`,还在慢慢认识:`Still getting to know`,"在名单里看看另外 {hidden} 个人":`See {hidden} more people on the list`,变化历史:`History of changes`,"已撤销 ·":`Undone ·`,"旧版 ·":`Older ·`,"没有记录。":`No records.`,人际的视图:`People views`,相遇之间:`Between encounters`,列表:`List`,找一个人:`Find a person`,"她记得相遇,也记得关系会随着时间改变。":`She remembers encounters, and remembers that relationships change over time.`,"在 {length} 个地方见过 · 上次说上话 {v}":`Met in {length} places · last spoke {v}`,"TA 还没有认识谁":`TA has not met anyone yet`,"有人和 TA 说话、TA 细看过群聊之后,这里会出现 TA 对每个人的感觉。":`Once someone talks to TA or she has read a group chat closely, her feeling about each person shows up here.`,"认识 {v} 天":`Known for {v} days`,"撤销这次「{v}」?TA 对这个人的感觉会重新计算。":`Undo this “{v}”? TA's feeling about this person will be recalculated.`,撤销一次关系变化:`Undo a change in the relationship`,"撤销这次相遇留下的意思?「{meant}」之后不会再回到 TA 心里,也不会再被当成变化的来源。":`Undo what this encounter left behind? “{meant}” will not come back to TA, and will no longer count as a source of change.`,撤销这次相遇:`Undo this encounter`,"正在想起…":`Remembering…`,"TA 认识的人":`A person TA knows`,"上次说上话 {v}":`Last spoke {v}`,还没说上过话:`Has not spoken yet`,"上次见到 {v}":`Last seen {v}`,"印象:{impression}":`Impression: {impression}`,"在这些地方见过:":`Met in these places: `,这份感觉是怎么来的:`How this feeling came about`,没有写原因:`No reason was written`,"{v} · {v2} · {length} 处来源":`{v} · {v2} · {length} sources`,"只是一起聊过天,还没有特别的变化。":`Only chatted together so far, with no particular change.`,"和{name}的相遇留下了什么":`What the encounters with {name} left behind`,私下:`Privately`,"当时:{why}":`Then: {why}`,"TA 记得关于{name}的事":`What TA remembers about {name}`,"{v} · 在「{v2}」知道的 · {when}":`{v} · learned in “{v2}” · {when}`,改完即生效:`Takes effect as soon as you change it`,"还没有记住关于这个人的事。":`Nothing remembered about this person yet.`,"和{name}有关的约定":`Promises involving {name}`,"没有和这个人有关的约定。":`No promises involving this person.`},$s={"THE WORLD SHE CAN TOUCH · 插件":`THE WORLD SHE CAN TOUCH · Plugins`,"核心是她。":`The core is her.`,"插件是世界。":`Plugins are the world.`,"插件只能经她同意接触世界。它们读不到她的数据库,也不能替她开口。":`A plugin touches the world only with her leave. It cannot read her database, and it cannot speak for her.`,插件的分区:`Plugin sections`,插件列表:`Plugin list`,"内置,未启用":`Built in, not enabled`,"已安装,未启用":`Installed, not enabled`,出错:`Error`,正在启动:`Starting`,"天气随 LuckyTri 附带,默认关闭。启用前会先列出它要的权限。":`Weather ships with LuckyTri and stays off. Enabling lists the permissions first.`,"插件市场的索引还没有发布,或现在连不上。随程序附带的插件在「插件列表」里,默认关闭。":`The market index is not published yet, or it cannot be reached. The plugins that ship with the app are in the plugin list, and they stay off.`,插件市场:`Plugin market`,她想做的事:`What she wants to do`,导入与开发:`Import and develop`,还没有接上插件:`No plugin is connected yet`,"内置的天气可以在这里启用,也可以从市场安装。":`The built-in weather can be enabled here, or you can install from the market.`,运行中:`Running`,查看权限并启用:`Review permissions and enable`,停用:`Disable`,详情:`Details`,正在查看市场:`Looking at the market`,"连不上的话,这里会说明,不会再显示一串英文错误。":`If it cannot be reached, this page says so, instead of an English error.`,市场暂时没有条目:`The market has no entries right now`,"索引仓库还是空的,或者现在连不上。你仍然可以导入一个插件包。":`The index repository is empty, or it cannot be reached. You can still import a package.`,安装:`Install`,没有等待同意的事:`Nothing is waiting for a yes`,"高风险的行动会先停在这里,等你点头。过一天就不再算数。":`A high-risk action waits here for you. After a day it no longer counts.`,同意:`Allow`,拒绝:`Refuse`,从链接导入:`Import from a link`,插件包地址:`Package address`,"校验值,可留空":`Checksum, optional`,检查这个包:`Check this package`,"从 GitHub 导入":`Import from GitHub`,仓库地址:`Repository address`,检查这个仓库:`Check this repository`,"本机目录(开发)":`Local folder (development)`,目录:`Folder`,按开发插件接上:`Connect as a development plugin`,索引源:`Index source`,索引地址:`Index address`,添加索引:`Add index`,先看清它要什么:`See what it asks for first`,校验通过:`Checksum matches`,未登记来源:`Unlisted source`,同意这些权限并安装:`Accept these permissions and install`,同意这些权限并启用:`Accept these permissions and enable`,高风险:`High risk`,中风险:`Medium risk`,低风险:`Low risk`,已保存的不会回显:`A saved value is not shown again`,一行一个地址:`One address per line`,保存设置:`Save settings`,卸载:`Remove`,插件:`Plugins`,"她能接触的世界,由这里接上。":`What she can touch of the world is connected here.`},ec={更新已开始:`Update started`,"正在下载新版本…":`Downloading the new version...`,"正在检查新程序…":`Checking the new program...`,"正在保存当下并停止实例…":`Saving the current state and stopping...`,"正在保留更新前的校验备份…":`Saving a verified backup before updating...`,"正在切换版本并重启…":`Switching versions and restarting...`,"正在确认新实例就绪…":`Checking that the new instance is ready...`,"正在恢复原版本和数据…":`Restoring the previous version and data...`,更新与重启已完成:`Update and restart completed`,更新未完成:`Update did not complete`,"更新到 {version} 并重启当前实例?先下载校验,再保留数据恢复点;启动失败时尝试恢复原版本。":`Update to {version} and restart this instance? The program is downloaded and checked first, then a data restore point is saved. If startup fails, recovery of the previous version is attempted.`,更新并重启:`Update and restart`,开始更新:`Start update`,"下载期间继续运行,切换前保留数据恢复点。更新完成后此页面会自动重新连接。":`The instance keeps running during download. A data restore point is saved before switching. This page reconnects after the update.`,"正在更新…":`Updating...`,"已恢复原版本和更新前的数据。":`The previous version and pre-update data were restored.`,版本与更新:`Version and updates`,检查更新:`Check for updates`,"正在检查…":`Checking…`,尚未检查更新:`Not checked yet`,有新版本可用:`An update is available`,已是最新发布版本:`Up to date with the latest release`,"当前版本领先于 npm 发布版本":`This version is ahead of the npm release`,暂时无法检查更新:`Unable to check for updates right now`,当前版本:`Current version`,"npm 最新版本":`Latest on npm`,上次成功检查:`Last successful check`,"暂时无法连接 npm 或读取版本信息,请稍后重试。":`Unable to reach npm or read version information. Please try again later.`,"点击时才检查,五分钟内复用结果。检查更新不会自动安装或重启。":`Checks only when clicked and reuses results for five minutes. Checking does not install updates or restart the instance.`,发布说明:`Release notes`,"DATA · 导入与导出":`DATA · Import and export`,"带上记忆,继续生活。":`Carry her memories forward.`,"导出数据库内的聊天、记忆、待办、作品、知识与设置。插件文件、知识库原始文件和本机 .env 不在数据包中。":`Export chats, memories, tasks, works, knowledge and settings stored in the database. Plugin files, original knowledge files and the local .env are outside the package.`,"数据包包含私聊内容和模型设置中的密钥,请存放在你信任的位置。导入前会校验,确认后才替换当前数据。":`The package includes private chats and keys saved in model settings. Store it somewhere you trust. Imports are checked first and replace current data only after confirmation.`,导出数据包:`Export data package`,选择导入文件:`Choose import file`,导入数据文件:`Import data file`,"支持 .luckytri 数据包和已有 SQLite 备份,单个文件最多 {size} GiB。":`Accepts .luckytri packages and existing SQLite backups, up to {size} GiB per file.`,"正在保留快照并重启加载,请等待…":`Saving the snapshot and restarting. Please wait...`,"正在上传数据文件…":`Uploading the data file...`,"正在生成完整数据包…":`Preparing the complete data package...`,"正在校验数据文件…":`Checking the data file...`,"上次数据导入已完成,自动回复在导入时关闭。请检查连接、模型和待办后再开启;插件需重新安装或确认权限。":`The last import completed with automatic replies turned off. Check connections, models and tasks before enabling them. Plugins need reinstalling or permission review.`,"校验通过 · 尚未导入":`Verified · Not yet imported`,"数据库版本 {from} → {to}":`Database version {from} -> {to}`,导入并重启:`Import and restart`,取消导入:`Cancel import`,"用这份数据替换当前数据,并保留导入前快照。实例将重启,导入后自动回复关闭。本机管理密码与 QQ 连接配置保持不变。":`Replace current data with this file and retain a snapshot first. The instance will restart with automatic replies off. The local management password and QQ connection settings are preserved.`,确认导入数据:`Confirm data import`,"数据包已生成,浏览器将开始下载":`Data package ready. Your browser will begin downloading it.`,数据处理失败:`Data processing failed`,"数据文件已过期,请重新选择":`The data file expired. Choose it again.`,"等待数据处理超时,请检查实例运行状态":`Timed out waiting for data processing. Check the instance status.`,数据文件超过导入大小限制:`The data file exceeds the import size limit`,数据上传失败:`Data upload failed`,导入前快照:`Pre-import snapshot`,聊天记录:`Chat records`,请先登录管理台:`Sign in to the studio first`,QQ:`QQ`,知识向量:`Knowledge vectors`,"API 地址":`API URL`,模型名称:`Model name`,知识向量模型已保存:`Knowledge vector model saved`,"连接成功,向量维度 {dimensions}":`Connected. Vector dimensions: {dimensions}`,知识向量模型:`Knowledge vector model`,"填写向量服务的请求地址和密钥。模型名可以留空:火山方舟地址会用 doubao-embedding-vision。维度填 0 表示不指定,用模型自己的长度,这个模型是 2048。不启用或连不上时,对话和关键词回忆照常进行。":`Enter the vector service address and key. The model name can be left empty: a Volcengine Ark address uses doubao-embedding-vision. Dimension 0 means do not ask for a length, so the model uses its own, which is 2048. Without it, or if it cannot be reached, conversation and keyword recall still run.`,请求地址:`Request address`,"可留空,按地址选择":`Optional; chosen from the address`,向量服务密钥:`Vector service key`,自动选择的细节:`Details chosen automatically`,"当前兼容旧配置,跟随默认模型。保存后改用独立配置。":`Currently using the old configuration and following the default model. Saving switches to a separate configuration.`,启用知识向量:`Enable knowledge vectors`,填写向量服务密钥:`Enter the vector service key`,"向量维度(0 表示自动)":`Vector dimensions (0 = automatic)`,每批段落数:`Passages per batch`,保存向量模型:`Save vector model`,测试向量连接:`Test vector connection`,配置已载入:`Configuration loaded`,请求格式:`Request format`,"OpenAI 兼容(可批量)":`OpenAI-compatible (batched)`,"多模态接口(逐条)":`Multimodal endpoint (one at a time)`,回忆索引:`Recall index`,"她的事实、情景、自我线索和近一个月的原话都在同一个索引里,按意思、字词和相关的人一起检索。向量还没覆盖的部分先按字词找。":`Her facts, episodes, self threads and the last month of messages share one index, searched by meaning, words and the people involved. Whatever vectors do not cover yet is found by words.`,事实:`Facts`,情景:`Episodes`,相遇:`Encounters`,自我线索:`Self threads`,念头:`Thoughts`,日记:`Diary`,回顾:`Reviews`,约定:`Plans`,原话:`Messages`,意思相关:`Related in meaning`,说到了:`Mentioned`,关于这个人:`About this person`,已有向量:`With vectors`,向量延迟:`Vector latency`,等待重试:`Waiting to retry`,暂时停用的备用模型:`Backup model paused`,选择会话:`Choose a conversation`,"输入一句话,看她会想起什么":`Type a line to see what she recalls`,试试回忆:`Try recall`,意思与字词一起:`Meaning and words`,仅字词:`Words only`,候选:`Candidates`,突出度:`Stands out`,共有字词:`Shared words`,没有想起什么:`Nothing came to mind`,极低:`Minimal`,中:`Medium`,极高:`Extra high`,最深:`Deepest`,"已保存 {value}":`Saved {value}`,"火山方舟 Coding Plan":`Volcengine Ark Coding Plan`,"亚马逊 Bedrock":`Amazon Bedrock`,通义千问:`Qwen`,"智谱 GLM":`Zhipu GLM`,"小米 MiMo":`Xiaomi MiMo`,自定义供应商:`Custom provider`,按所选模型填写上下文和输出参数:`Fill in context and output parameters for the chosen model`,"填写模型 ID 和对应参数":`Enter the model ID and its parameters`,"上下文 {context} · 输出 {v}":`Context {context} · output {v}`,开启:`On`,"放弃当前模型草稿?":`Discard the current model draft?`,放弃:`Discard`,"确定删除这个模型?":`Delete this model?`,删除模型:`Delete model`,"正在测试「{v}」…":`Testing “{v}”…`,"✓ {v} 连接成功 · {latency} ms":`✓ {v} connected · {latency} ms`,"+ 新增模型":`+ Add model`,"群聊、私聊和独处都使用默认模型。其余已启用的模型按这里的顺序作为备用。关掉的模型不会被调用。":`Group chats, private chats and time alone all use the default model. Other enabled models serve as backups in this order. Models that are switched off are never called.`,"还没有模型。":`No models yet.`,"{length} 个模型":`{length} models`,默认模型:`Default model`,备用模型:`Backup model`,模型档案:`Model profile`,新模型:`New model`,"默认模型 · ":`Default model · `,密钥已保存:`Key saved`,待填写密钥:`Key needed`,连接:`Connection`,同厂商模型:`Models from the same vendor`,供应商:`Provider`,"例如 deepseek、openai":`e.g. deepseek, openai`,"已保存,留空则保留":`Saved; leave empty to keep it`,填写供应商提供的密钥:`Enter the key from the provider`,容量与思考:`Capacity and thinking`,"官方按输入长度分档计价的模型可以在标准和百万之间切换;输出上限默认是官方最大值,思考强度只列出这个模型支持的档位。":`For models the vendor prices by input length, you can switch between standard and million-token tiers. The output limit defaults to the vendor's maximum, and thinking effort lists only the levels this model supports.`,上下文容量:`Context capacity`,"最大输入 Token":`Max input tokens`,"最大输出 Token":`Max output tokens`,思考强度:`Thinking effort`,高级参数与模型能力:`Advanced parameters and model abilities`,"随机程度 Temperature":`Randomness (temperature)`,"采样范围 Top P":`Sampling range (top P)`,知识检索模型:`Knowledge retrieval model`,留空跟随对话模型:`Leave empty to follow the chat model`,"打开图片理解后,聊天里的图片会先在本机读取,再连同画面交给这个模型。主模型不能看图时,到会话设置另选一个打开了图片理解的视觉兼容模型。":`With image understanding on, images in chat are read locally first, then handed to this model together with the picture. If the main model cannot see images, pick another vision-capable model with image understanding on in the session settings.`,"JSON 输出":`JSON output`,工具调用:`Tool calls`,"正在保存…":`Saving…`,保存模型:`Save model`,已保存的模型才会用来测试和回复:`Only a saved model is used for tests and replies`,启用这个备用模型:`Enable this backup model`,设为默认模型:`Set as default model`,"正在测试…":`Testing…`,保存后测试此模型:`Save, then test this model`,测试此模型连接:`Test this model's connection`,还没有模型:`No models yet`,"常见厂商会预填模型参数;OpenRouter 可选 GPT-6 预设,也可用自选模型手动填写模型 ID 和参数。":`Common vendors come with parameters prefilled. On OpenRouter you can pick a GPT-6 preset, or choose your own model and enter its ID and parameters by hand.`,"TOKEN LEDGER · 累计用量":`TOKEN LEDGER`,一路聊到现在:`All the way up to now`,"统计本机账本记录的模型调用;缓存 Token 已包含在输入量里。":`Counts the model calls recorded in this machine's ledger; cached tokens are already included in the input.`,"累计 Token":`Total tokens`,输入:`Input`,输出:`Output`,缓存命中:`Cache hits`,"(输入子项)":`(part of input)`,调用次数:`Calls`,"从 {v} 开始记录 · {v2} 为模型返回用量":`Recorded since {v} · {v2} reported by the model`,"· {v} 次调用按文本估算":`· {v} calls estimated from text`,"还没有模型调用记录。":`No model calls recorded yet.`,"更新中…":`Updating…`,"刷新统计 ↻":`Refresh stats ↻`,选择模型:`Choose a model`,"先选供应商,再挑具体模型;支持搜索。火山方舟 Coding Plan 已预填套餐专用接口与型号参数,请勿换成普通推理 API 地址。":`Pick a provider first, then a specific model; search is supported. Volcengine Ark Coding Plan comes prefilled with the plan's dedicated endpoint and model parameters; do not swap in a regular inference API URL.`,搜索模型或供应商:`Search models or providers`,"例如:火山方舟、Kimi K3、DeepSeek":`e.g. Volcengine Ark, Kimi K3, DeepSeek`,"{length} 个预设":`{length} presets`,"填写你在 OpenRouter 选择的模型 ID":`Enter the model ID you chose on OpenRouter`,"没有找到匹配的模型预设。":`No matching model presets found.`,已保存并应用:`Saved and applied`,模型库:`Model library`,已关闭:`Off`,"超时(毫秒)":`Timeout (ms)`,自动备份:`Automatic backup`,"自动备份出错,稍后重试":`Automatic backup failed; it will retry later`,"自动备份,运行一阵后会做第一份":`Automatic backup; the first one is made after running a while`,"上次自动备份 · {mb} MB · 已留 {count}/{keep} 份":`Last automatic backup · {mb} MB · {count}/{keep} kept`,"TA 现在可以说话吗":`Can TA speak right now?`,允许参与聊天:`Allow taking part in chats`,"总开关。关掉后 TA 不看也不回任何会话,心智照常保存。":`Master switch. When off, TA neither reads nor replies in any session, and her mind is still saved as usual.`,"仅模拟运行,不向 QQ 发送":`Simulation only; nothing is sent to QQ`,"模拟模式下,「对话」里可以发模拟消息走完整流程;它们写进模拟会话,不进入真实记忆。":`In simulation mode you can send simulated messages through the full pipeline from Chats; they are written to simulated sessions and never enter real memory.`,保存运行状态:`Save run state`,"已保存,立刻生效":`Saved; takes effect immediately`,参与中的会话:`Sessions taking part`,可用模型:`Models available`,在线:`Online`,离线:`Offline`,"QQ 连接":`QQ connection`,运行开关:`Run switches`,数据与备份:`Data and backups`,完整备份:`Full backup`,迁移快照:`Migration snapshot`,旧版本备份:`Older-version backup`,升级前快照:`Pre-upgrade snapshot`,备份整理规则已保存:`Backup cleanup rules saved`,"将清理选中的 {count} 份备份,释放约 {size}。这些历史恢复点清理后无法从本机找回。":`Remove {count} selected backups and free about {size}? These restore points cannot be recovered from this computer afterwards.`,清理所选备份:`Remove selected backups`,清理所选:`Remove selected`,"已清理 {count} 份备份,释放 {size}":`Removed {count} backups and freed {size}`,"DATA · 数据与备份":`DATA · BACKUPS`,"留住重要的,整理重复的。":`Keep what matters. Clear the repeats.`,"这里管理历史备份。聊天、记忆和作品仍在正在运行的数据库里,不会被列入清理。":`Manage historical backups here. Chats, memories, and works in the live database are never listed for cleanup.`,可管理的历史备份:`Historical backups`,份数据库副本:`Database copies`,按当前规则可定时整理:`Eligible under current rules`,定时整理:`Scheduled cleanup`,每天给备份留一点空间:`Make room for backups each day`,启用定时整理:`Enable scheduled cleanup`,每天执行时间:`Daily cleanup time`,完整备份保留天数:`Keep full backups for days`,完整备份最多保留份数:`Maximum full backups to keep`,"时间按服务器本地时区 {zone}。完整备份超过保留天数或数量上限便会定时整理;数量填 0 表示不保留完整备份。手动清理可选择完整备份和迁移快照,执行前会校验同一实例的近期自动恢复点。":`Times use the server's local time zone ({zone}). Full backups beyond either the age or count limit are scheduled for cleanup. Set the count to 0 to retain no full backups. Full and migration snapshots can be selected manually; a recent restore point from this instance is verified first.`,"上次整理未执行:{error}":`Last cleanup could not run: {error}`,"上次整理:{time} · {count} 份 · {size}":`Last cleanup: {time} · {count} copies · {size}`,"处理中…":`Working…`,保存整理规则:`Save cleanup rules`,手动整理:`Manual cleanup`,挑选历史恢复点:`Choose historical restore points`,"自动备份已有自己的轮换规则。迁移、旧版本和升级前快照只由你手动挑选;清理前会再次核对文件和恢复点。":`Automatic backups already rotate on their own. Migration, older-version, and pre-upgrade snapshots are removed only when you select them. Files and restore points are checked again before cleanup.`,选中规则建议:`Select suggested`,选中完整备份:`Select full backups`,取消选择:`Clear selection`,有校验清单:`Has manifest`,";部分未清理,详情见列表":`; some were not removed, see the list for details`,"部分备份未清理,请刷新列表后重试":`Some backups were not removed. Refresh the list and try again.`,旧备份无清单:`No manifest`,保留恢复点:`Protected restore point`,"已选 {count} 份 · 约 {size}":`Selected {count} · about {size}`,不限:`Unlimited`,搜索配置已保存并生效:`Search settings saved and active`,"{provider} 联网检索":`{provider} web search`,"{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度;当前填写的配置尚未保存。":`{source} test passed and returned {count} results. Tests do not use the daily query allowance; the settings you entered are not saved yet.`,"{source}测试通过,返回 {count} 条资料。测试不占用每日查询额度。":`{source} test passed and returned {count} results. Tests do not use the daily query allowance.`,"{error}。本次测试不占用每日查询额度。":`{error}. This test did not use the daily query allowance.`,"SEARCH · 独立搜索":`SEARCH`,接触世界的资料:`Material from the world`,"配置后优先联网检索。未配置密钥或关闭独立搜索时,使用当前模型整理已有知识。":`Once configured, web search comes first. Without a key, or with standalone search off, the current model organizes what it already knows.`,"当前生效:{v}。表单修改保存后生效。":`Active now: {v}. Changes in the form take effect once saved.`,"{provider} · 联网检索资料":`{provider} · web search material`,启用独立搜索:`Enable standalone search`,提供方:`Provider`,搜索提供方:`Search provider`,搜索地址:`Search URL`,独立密钥:`Separate key`,填写该提供方的搜索密钥:`Enter this provider's search key`,每次结果数:`Results per search`,每日查询上限:`Daily query limit`,"可手动调整;0 表示不限。保存后立即生效。":`Adjustable by hand; 0 means unlimited. Takes effect as soon as saved.`,"今日有效查询 {v} / {limitLabel}":`Valid queries today {v} / {limitLabel}`,"{v} 次进行中 · {v2} 次失败 · {v3} 次测试":`{v} in progress · {v2} failed · {v3} tests`,"测试当前填写的配置,不会自动保存。失败与连接测试不占本地每日额度;提供方的账户额度由提供方管理。":`Tests the settings as entered without saving them. Failed and connection tests do not use the local daily allowance; the provider manages its own account quota.`,保存搜索:`Save search`,测试连接:`Test connection`,"当前设置还没保存,离开这个分区吗?":`These settings are not saved. Leave this section?`,未保存的修改:`Unsaved changes`,放弃修改:`Discard changes`,继续编辑:`Keep editing`,"THE WORLD AROUND HER · 系统":`THE WORLD AROUND HER`,"让她与世界,":`Let her and the world`,"温柔相连。":`connect gently.`,"连接、模型与运行方式都在这里。每一处改变,都可以看见结果。":`Connection, models and the way she runs are all here. Every change shows its result.`,"正在与 QQ 相连":`Connecting to QQ`,"等待 QQ 连接":`Waiting for QQ to connect`,系统的分区:`System sections`,独立搜索:`Standalone search`},tc={休息建议:`Rest suggestion`,自由安排:`Free time`,作息安排:`Daily rhythm`,已发生:`Happened`,此前时长未单独记录:`Earlier duration was not recorded separately`,"实际投入 {v} 分钟":`Actually spent {v} min`,今日时间表:`Today's timetable`,时间表显示范围:`Timetable range`,此刻附近:`Around now`,全天:`All day`,实际时段:`Actual spans`,选定的安排:`Chosen plans`,"作息 / 空白":`Rhythm / open time`,"● 伴随交流":`● with chat`," · 伴随交流":` · with chat`,现在:`Now`,接下来:`Next`,"已经走过的时段 · {length} 段":`Spans already past · {length}`,"今天还没有活动记录,实际开始后会显示在上方。":`No activity recorded today yet; once something actually starts it will show above.`,她定下的安排:`Plans she set`,"还没有选定活动时间,留白由她再决定,不按待办队列填满。":`No time chosen for an activity yet. She will decide what to do with the open time; it is not filled from the to-do queue.`,"{label} · {v} · {durationMinutes} 分钟 · {scope}":`{label} · {v} · {durationMinutes} min · {scope}`,自己的安排:`Her own plans`,"可以想自己的事,也可以歇着;不算已做过":`She can think her own thoughts or just rest; it does not count as done`,"预计,做完眼前这段再调整":`Estimated; adjust after the current span is done`,"进入睡眠安排,醒来后再选择续接时间。":`Goes into the sleep schedule; she picks a time to resume after waking.`,"有更高优先级安排,届时先让位,之后再选续接时间。":`A higher-priority plan comes first then; she picks a time to resume afterwards.`,"睡眠安排:{v}":`Sleep plan: {v}`,"已记下,还没选时间 · {length} 件":`Noted, no time chosen yet · {length}`,"暂时停下来,进度保留 · {length} 件":`Paused for now, progress kept · {length}`,"需要条件或调整约定 · {length} 件":`Needs a condition or a changed agreement · {length}`,外部建议:`Outside suggestion`,体验记录:`Experience log`,"EXPERIENCES · 留下的经历":`EXPERIENCES`,最近做过的事:`What she did lately`,"故事写到哪里,玩过什么,又留下了哪些想法。":`Where the story got to, what she played, and the thoughts it left behind.`,"{label}记录":`{label} record`,"{v} · {characters} 字 · 版本 {version}":`{v} · {characters} chars · version {version}`,已保存成果:`Finished work saved`,已保存草稿:`Draft saved`,"这条旧记录没有保存摘要。":`This older record has no saved summary.`,"来自 {title}":`From {title}`,阅读这一稿:`Read this draft`,阅读完整记录:`Read the full record`,查看项目:`View project`,"接触的内容 · {length} 份":`Material met · {length}`,未命名资料:`Untitled material`,这里还没有经历记录:`No experience records here yet`,"做过的事与保存的成果,会逐渐出现在这里。":`What she did and the works she saved will gradually appear here.`,游戏客户端连接:`Game client connection`,开发中:`In development`,"客户端控制尚未接入。已有的游玩记录可以在上方阅读。":`Client control is not connected yet. Existing play records can be read above.`,"ToDo · 待办":`To do`,"Scheduled · 已安排":`Scheduled`,"Doing · 正在做":`Doing`,"Paused · 暂停":`Paused`,"Waiting · 等待":`Waiting`,"Done · 已完成":`Done`,"Abandoned · 已放下":`Abandoned`,"完成,尚未交付":`Finished, not yet delivered`,暂缓交付:`Delivery postponed`,暂不分享:`Not sharing for now`,待继续交付:`Delivery to continue`,已完整交付:`Fully delivered`,已整理并汇报:`Sorted and reported`,"送达不确定,等待核对":`Delivery uncertain, awaiting check`,正在交付:`Being delivered`,普通:`Normal`,最高:`Highest`,需要调整约定:`Needs a changed agreement`,待想具体:`Needs thinking through`,"Waiting · 等条件":`Waiting for a condition`,"ToDo · 待选时间":`To do · needs a time`,"Scheduled · 已选时间":`Scheduled · time chosen`,"Paused · 进度保留":`Paused · progress kept`,"{v} 分钟":`{v} min`,"最早开始时间(YYYY-MM-DD HH:mm)。截止时间保留原安排。":`Earliest start time (YYYY-MM-DD HH:mm). The deadline keeps its original plan.`,安排时间:`Schedule time`,继续:`Continue`,"这次安排投入多少分钟(5 至 240)?":`How many minutes for this session (5 to 240)?`,投入时间:`Time to spend`,"留下放下这件事的原因。":`Leave the reason for letting this go.`,"留下这次调整的原因。":`Leave the reason for this change.`,调整安排:`Adjust plan`,管理台调整:`Adjusted from the console`,"提出选题、续写方向或修改想法。她会自行决定是否采纳。":`Suggest a topic, a direction to continue, or an edit. She decides for herself whether to take it.`,给她一个建议:`Give her a suggestion`,留下建议:`Leave a suggestion`,这个项目已有待处理事项:`This project already has something pending`,"建议已保存,等待她的选择":`Suggestion saved; it waits for her choice`,专注安排已保存:`Focus plan saved`,"已记下,空下来时回看说过的话":`Noted; she will look back at what was said when free`,"已记下,让她重新想具体时间与投入时长":`Noted; she will rethink the exact time and duration`,"TIME · 时间":`TIME`,"日子在走,":`Days keep moving,`,"我也有自己的事。":`and I have things of my own.`,"想做的事,正在留下的作品,与世界相遇的每一段。":`The things she wants to do, the works she is leaving behind, and every stretch spent meeting the world.`,留一点时间给自己:`Leave some time for herself`,时间的分区:`Time sections`,今日:`Today`,待办:`To do`,作品库:`Works`,持续项目:`Ongoing projects`,重试:`Retry`,"正在取回这段生活…":`Fetching this stretch of life…`,此刻的主活动:`Main activity right now`,正在准备:`Preparing`,刚开始这一段:`Just started this span`,"本次已投入 ":`Spent so far: `,"她安排 {v} 开始,这次想投入 {durationMinutes} 分钟。":`She planned to start at {v} and wants to spend {durationMinutes} min this time.`,"本段预计 {v} · 还需约 {v2}":`This span ends around {v} · about {v2} left`,"从自己的打算接着做。":`Continuing from her own intentions.`,"正在推进当前步骤。":`Working on the current step.`,"查看安排 →":`See plans →`,这会儿没有主活动:`No main activity right now`,"自己选择接下来做什么,也可以歇着。":`She chooses what to do next, or simply rests.`,"下一项:{title} · {v} 开始 · {durationMinutes} 分钟":`Next: {title} · starts {v} · {durationMinutes} min`,让她重新想想安排:`Let her rethink the plan`,今天:`Today`,"实际活动投入 · {energyLabel} · {mood}":`Time actually spent · {energyLabel} · {mood}`,"普通交流可以伴随进行,短消息不会自动暂停。":`Ordinary chat can go on alongside; short messages do not pause it automatically.`,"翻开日记 →":`Open the diary →`,独处时理一理:`Sorting things out while alone`,"自己的打算,说过的约定":`Her own intentions and what she has promised`,"空下来时,她会想一件自己愿意做的小事,也会回看有没有漏下答应别人的事。可以选择歇着。":`When free, she thinks of a small thing she would like to do, and checks whether she missed anything she promised others. She may choose to rest.`,"最近:{reason}":`Lately: {reason}`,"还有 {pendingReplies} 条已说过的话等着分批回看。":`{pendingReplies} things already said are waiting to be reviewed in batches.`,正在整理自己的生活:`Sorting out her own life`,"已记下,空下来时整理":`Noted; she will sort it when free`,空下来整理一下约定:`Sort out promises when free`,专注与休息安排:`Focus and rest plans`,"默认专注段(分钟)":`Default focus span (minutes)`,"没有另行选择时使用;她自己的安排优先。":`Used when nothing else is chosen; her own plans come first.`,"休息建议(分钟)":`Rest suggestion (minutes)`,"保存步骤间隔(分钟)":`Step save interval (minutes)`,活动节奏:`Activity pace`,"默认 1.25 倍,所有活动按现实时间逐段推进。":`Default 1.25×; every activity advances span by span in real time.`,"想自己的安排(间隔分钟)":`Thinking about her own plans (interval, minutes)`,"有空才考虑,可以决定休息。":`Only considered when free; she may decide to rest.`,"回看说过的话(间隔分钟)":`Reviewing what was said (interval, minutes)`,"分批整理约定,保留去重与原来的选择。":`Sorts promises in batches, keeping deduplication and the original choices.`,正在保存:`Saving`,保存安排:`Save plan`,查看全部待办:`See all to-dos`,搜索标题:`Search titles`,搜索标题或项目:`Search titles or projects`,搜索:`Search`,任务状态:`Task status`,自己的计划:`Her own plans`,优先级:`Priority`,"优先级:":`Priority: `,"{v} {v2} — {v3} · 这次 {durationMinutes} 分钟":`{v} {v2} — {v3} · {durationMinutes} min this time`,管理台安排:`Set from the console`,她选定:`She chose`,"本段开始 {v}":`This span began {v}`,条件满足后建议:`Suggested once the condition is met`,已安排:`Scheduled`,"需要解决上面的条件,再选择时间":`Resolve the conditions above, then choose a time`,"进度已保存,之后再安排续接时间":`Progress saved; a time to resume is arranged later`,"已记下,等她选择具体时间":`Noted; waiting for her to choose an exact time`,"· 本段预计 {v} · 本段已投入 {v2}":`· this span ends around {v} · spent this span {v2}`,"· 还需约 {v}":`· about {v} left`,"· 此前时长未单独记录":`· earlier duration was not recorded separately`,正在准备这一段:`Preparing this span`,尚未开始本段投入:`Has not started spending time on this span`,"本段目标:{outcome}":`Goal for this span: {outcome}`,"下一步:{next}":`Next step: {next}`,"来源与原安排 · {length} 条":`Sources and original plans · {length}`,"原话日期参考 {v},不作为逾期判断。":`Date mentioned originally: {v}. Not used to judge lateness.`,"已合并到唯一事项,保留这条原记录。":`Merged into a single item; this original record is kept.`,阅读已有正文:`Read the existing text`,暂停:`Pause`,重新安排:`Reschedule`,"{v} · 第 {ordinal} 篇":`{v} · piece {ordinal}`,完成稿:`Finished piece`,草稿:`Draft`,"{characters} 字 · 版本 {version}":`{characters} chars · version {version}`,独处留下的东西:`What time alone left behind`,游戏:`Game`,连载:`Serial`,在继续:`Continuing`,已完结:`Finished`,暂时放下:`Set aside for now`,打开项目:`Open project`,作品还在等待第一笔:`The work is still waiting for its first stroke`,这里还没有记录:`No records here yet`,"实际发生并保存之后,这里才会出现内容。":`Content shows up here only after something actually happens and is saved.`,上一页:`Previous page`,下一页:`Next page`,作品:`Work`,她留下的正文:`The text she left`,"{v} · {length} 字":`{v} · {length} chars`,版本:`Version`,作品版本:`Work version`,导出正文:`Export text`,查看项目与设定:`View project and settings`,她自己的方向:`Her own direction`,设定与未解决线索:`Settings and unresolved threads`,人物:`Characters`,世界:`World`,未解决线索:`Unresolved threads`,资料主题:`Material topic`,建议续写:`Suggest continuing`,建议修改:`Suggest an edit`,建议方向:`Suggest a direction`,已经留下的篇章:`Pieces already left`,"第 {ordinal} 篇 · {title}":`Piece {ordinal} · {title}`,接触的资料:`Material met`,资料:`Material`,"模型知识整理 · 未经联网核验":`Organized from model knowledge · not verified online`,实际返回的摘录:`Excerpts actually returned`,打开来源:`Open source`,"基于模型已有知识,具体剧情与章节仍需核验。":`Based on what the model already knows; specific plot and chapters still need verification.`},nc={...Ws,...Gs,...Ks,...qs,...Js,...Ys,...Xs,...Zs,...Qs,...$s,...ec,...tc},rc=[{code:`zh`,label:`中文`,short:`中`},{code:`en`,label:`English`,short:`EN`}],ic=`luckyLocale`,ac={zh:`zh-CN`,en:`en`};function oc(){try{let e=localStorage.getItem(ic);if(e===`en`||e===`zh`)return e}catch{}return`zh`}var sc=Jt(oc());function cc(e){typeof document<`u`&&(document.documentElement.lang=ac[e],document.title=Z(`LuckyTri · TA 的小世界`))}function lc(e){if(e===`zh`||e===`en`){sc.value=e;try{localStorage.setItem(ic,e)}catch{}cc(e)}}function uc(){return sc.value===`en`?`en-US`:`zh-CN`}function dc(e){if(sc.value!==`en`)return e;let t=nc[e];return t===void 0?e:t}function fc(e,t){return t?e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]??``):e):e}function Z(e,t){return fc(dc(e),t)}function Q(e){return e}var pc=new WeakMap;function mc(e){let t=pc.get(e);if(t)return t;let n=new Proxy(e,{get(e,t,n){let r=Reflect.get(e,t,n);return typeof r==`string`?Z(r):r&&typeof r==`object`?mc(r):r}});return pc.set(e,n),n}cc(sc.value);var hc=zt({queue:[]});function gc(e,t,n){return new Promise(r=>hc.queue.push({kind:e,message:t,title:n.title??Z(e===`confirm`?`想确认一下`:`请填写`),confirmText:n.confirmText??Z(`确定`),cancelText:n.cancelText??Z(`取消`),danger:!!n.danger,secret:!!n.secret,placeholder:n.placeholder??``,value:n.value??``,resolve:r}))}async function _c(e,t={}){return await gc(`confirm`,e,t)!==null}function vc(e,t={}){return gc(`prompt`,e,t)}function yc(e){hc.queue.shift()?.resolve(e)}var bc=zt({phase:`checking`,revision:0}),xc,Sc;function Cc(){xc=new Promise(e=>{Sc=e})}Cc();function wc(){return bc.phase===`ready`?Promise.resolve():xc}function Tc(){bc.phase===`ready`&&(Cc(),bc.phase=`login`,bc.revision++)}async function Ec(e,t){let n=await fetch(`/api/auth/`+e,{method:t===void 0?`GET`:`POST`,credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-LuckyTri-Locale":sc.value},body:t===void 0?void 0:JSON.stringify(t)}),r=await n.json();if(!n.ok)throw Error(r.error||Z(`操作失败,请重试`));return r}function Dc(){bc.phase=`ready`,bc.revision++,Sc()}async function Oc(){let e=await Ec(`status`);e.authenticated?Dc():bc.phase=e.configured?`login`:`setup`}async function kc(e){await Ec(bc.phase===`setup`?`setup`:`login`,{password:e}),Dc()}async function Ac(){await Ec(`logout`,{}),Tc()}var jc=new class{version=0;entries=new Map;constructor(e){this.clock=e||Date.now}clock;snapshot(e){let t=this.entries.get(e)?.value;return t===void 0?void 0:structuredClone(t)}get(e,t,n=15e3){let r=this.entries.get(e);if(r?.value!==void 0&&r.expires>this.clock())return Promise.resolve(this.snapshot(e));if(r||(r={expires:0},this.entries.set(e,r),this.entries.size>48&&this.entries.delete(this.entries.keys().next().value)),!r.pending){let i=r,a=Promise.resolve().then(t).then(t=>(this.entries.get(e)===i&&i.pending===a&&(i.value=structuredClone(t),i.expires=this.clock()+n),t)).finally(()=>{i.pending===a&&(i.pending=void 0)});r.pending=a}return r.pending.then(e=>structuredClone(e))}expire(){this.version++;for(let e of this.entries.values())e.expires=0,e.pending=void 0}clear(){this.version++,this.entries.clear()}},Mc=new Set([`/mind`,`/mind/mood`,`/mind/today`,`/mind/self`,`/mind/bonds`,`/mind/nature`,`/core/state`,`/state`]),Nc=``;function Pc(){Nc!==String(bc.revision)&&(jc.clear(),Nc=String(bc.revision))}function Fc(e){return Pc(),jc.snapshot(e)}function Ic(){jc.expire()}function Lc(){jc.clear()}function Rc(){return jc.version}function zc(e){return Pc(),Vc(e,`GET`)}function Bc(e,t=`GET`,n){return Pc(),t===`GET`&&(Mc.has(e)||e.startsWith(`/core/memories?`)||e.startsWith(`/core/memory-summary?`)||e.startsWith(`/mind/thoughts?`)||e.startsWith(`/mind/life?`)||e.startsWith(`/mind/people/`))||t===`GET`&&e.startsWith(`/mind/time`)&&!e.startsWith(`/mind/time/search`)?jc.get(e,()=>Vc(e,t,n),[`/mind/time`,`/state`,`/core/state`].includes(e)?2e3:15e3):Vc(e,t,n)}async function Vc(e,t,n){await wc();let r=await fetch(`/api`+e,{method:t,credentials:`same-origin`,headers:{"Content-Type":`application/json`,"X-LuckyTri-Locale":sc.value},body:n===void 0?void 0:JSON.stringify(n)}),i=await r.json().catch(()=>({}));if(r.status===401&&i.error===`请先登录管理台`)return Tc(),await wc(),Lc(),Vc(e,t,n);if(!r.ok)throw Error(i.error||Z(`请求失败`));return t!==`GET`&&Lc(),i}var Hc;function Uc(e,t=!1){let n=document.querySelector(`#toast`);n&&(n.textContent=e,n.className=t?`show error`:`show`,clearTimeout(Hc),Hc=setTimeout(()=>n.className=``,4500))}async function Wc(){let[e,t]=await Promise.all([Bc(`/core/state`),Bc(`/state`)]);return{core:e,health:t}}async function Gc(e){return Bc(`/settings`,`PATCH`,e)}async function Kc(){return zc(`/state`)}var qc=mc({now:{label:Q(`此刻`),en:`NOW`,tagline:Q(`TA 此刻的样子。`)},heart:{label:Q(`内心`),en:`HEART`,tagline:Q(`从经历里长出来的 TA。`)},people:{label:Q(`人际`),en:`PEOPLE`,tagline:Q(`TA 认识的人,和 TA 对每个人的感觉。`)},life:{label:Q(`一生`),en:`LIFE`,tagline:Q(`记得昨天的自己,也成为今天的自己。`)},time:{label:Q(`时间`),en:`TIME`,tagline:Q(`带着自己的安排、作品与经历走过时间。`)},chats:{label:Q(`对话`),en:`CHATS`,tagline:Q(`TA 在哪里说话,又为什么这样说。`)},memory:{label:Q(`记忆`),en:`MEMORY`,tagline:Q(`TA 记得的事,和 TA 读过的资料。`)},nature:{label:Q(`天性`),en:`NATURE`,tagline:Q(`塑造 TA:只有这里由你来写。`)},system:{label:Q(`系统`),en:`SYSTEM`,tagline:Q(`连接、模型和运行开关。`)},plugins:{label:Q(`插件`),en:`PLUGINS`,tagline:Q(`她能接触的世界,由这里接上。`)}}),Jc=mc([{label:`TA`,pages:[`now`,`heart`,`people`,`life`]},{label:Q(`日常`),pages:[`time`,`chats`,`memory`]},{label:Q(`设置`),pages:[`nature`,`system`,`plugins`]}]),Yc=[`now`,`chats`,`heart`,`life`],Xc=[`time`,`people`,`memory`,`nature`,`system`,`plugins`],Zc={overview:`now`,her:`now`,character:`now`,live:`chats`,spaces:`chats/settings`,lab:`chats/replay`,knowledge:`memory`,models:`system/models`,connect:`system/connect`};function Qc(e=location.hash.slice(1)){let t=e;try{t=decodeURIComponent(e)}catch{}let n=Zc[t]??t,[r,...i]=n.split(`/`);return Object.hasOwn(qc,r)?{page:r,sub:i.join(`/`),moved:n!==t}:null}function $c(e,t=``){return`#`+e+(t?`/`+t:``)}var el=Qc(),$=zt({page:el?.page??`now`,sub:el?.sub??``,dirty:!1,core:null,health:null,error:``,chatOpen:!1,moreOpen:!1,tick:0,pulse:0}),tl=null,nl=-1;function rl(){let e=Rc();if(tl&&nl===e)return tl;let t=Wc().then(({core:e,health:n})=>{tl===t&&($.core=e,$.health=n)}).finally(()=>{tl===t&&(tl=null)});return tl=t,nl=e,tl}async function il(e,t=``){let n=Qc(t?`${e}/${t}`:e)??{page:`now`,sub:``};if($.moreOpen=!1,$.page===n.page&&$.sub===n.sub)return!0;if($.page!==n.page&&$.dirty&&!await _c(Z(`有尚未保存的修改,离开这一页吗?`),{title:Z(`草稿还没保存`),confirmText:Z(`离开`),cancelText:Z(`留下`)}))return!1;$.page!==n.page&&($.dirty=!1),$.page=n.page,$.sub=n.sub;let r=$c(n.page,n.sub);return location.hash!==r&&history.pushState(null,``,r),!0}function al(e){$.sub=e,history.replaceState(null,``,$c($.page,e))}function ol(){let e=Qc();if(!e){history.replaceState(null,``,$c($.page,$.sub));return}e.page!==$.page&&($.dirty=!1),$.page=e.page,$.sub=e.sub,e.moved&&history.replaceState(null,``,$c(e.page,e.sub))}var sl=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},cl={class:`empty`},ll={key:0},ul=sl(vr({__name:`Empty`,props:{title:{},text:{}},setup(e){return(t,n)=>(xa(),Ea(`div`,cl,[n[0]||=Ma(`span`,{class:`empty-blob`,"aria-hidden":`true`},[Ma(`i`),Ma(`i`)],-1),Ma(`b`,null,De(e.title),1),e.text?(xa(),Ea(`span`,ll,De(e.text),1)):Ra(``,!0),ri(t.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-c4ea9250`]]);export{La as $,rc as A,As as B,kc as C,Yt as Ct,vc as D,De as Dt,_c as E,fe as Et,lc as F,W as G,xs as H,Z as I,co as J,jr as K,To as L,uc as M,sc as N,hc as O,mc as P,Ea as Q,Vs as R,Tc as S,Jt as St,wc as T,_e as Tt,Ls as U,Ts as V,Fs as W,Da as X,Ma as Y,Ra as Z,Fc as _,Vn as _t,rl as a,xn as at,Ec as b,Nn as bt,qc as c,Pr as ct,Jc as d,xa as dt,Ia as et,Kc as f,ni as ft,Ic as g,ki as gt,Lc as h,yr as ht,il as i,ui as it,Q as j,yc as k,Xc as l,Hr as lt,Bc as m,$r as mt,sl as n,Or as nt,al as o,Nr as ot,Gc as p,ri as pt,nr as q,ol as r,vr as rt,$ as s,Gr as st,ul as t,q as tt,Yc as u,Kr as ut,Uc as v,zn as vt,Ac as w,Qt as wt,Oc as x,zt as xt,bc as y,Mn as yt,Ss as z};