PageSourceSearch

https://parlonsfrancais.net/assets/index-KTB3pgKk.js

js parlonsfrancais.net collected 2026-10-08 22:42:11 UTC 939,015 bytes, 259 lines download raw bytes

vendor: 7,733 bytes, lines 1-2
1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BTXwhaSI.js","assets/page-shell-CTbWDu3a.js","assets/site-footer-8pxnR2JR.js","assets/createLucideIcon-DXGH6rY8.js","assets/clsx-B-dksMZM.js","assets/createServerFn-DEU_Zt8O.js","assets/eye-EnJ0lR5G.js","assets/announcements-oMA4cBnZ.js","assets/message-circle-BgokD1_x.js","assets/book-open-DnLAXng6.js","assets/sparkles-DBjlL1v5.js","assets/building-2-BLXP1iRn.js","assets/arrow-right-DUa2rllH.js","assets/a-propos-BENAePKK.js","assets/annonces-DIAPkPO6.js","assets/calendar-days-DqB8FkJS.js","assets/ateliers-CIawulCH.js","assets/film-DHtoi47U.js","assets/chevron-right-DojDrKvn.js","assets/check-Dk24dWq8.js","assets/triangle-alert-BCQr6zuS.js","assets/avis-BU5meTsr.js","assets/external-link-CHT7UBj8.js","assets/carte-ZJB8UpLZ.js","assets/connexion-CEUSGdd_.js","assets/lock-DbkQXxnj.js","assets/contact-R7Pzo4vJ.js","assets/clock-BmdJv24Q.js","assets/cours-CgGdwyZf.js","assets/speed-test-button-CRy0T1pZ.js","assets/loader-circle-C8XSNCDZ.js","assets/chevron-down-CF6jWHcF.js","assets/plane-CAwXRTVI.js","assets/faq-DFWTDZcZ.js","assets/file-text-B5P8kHy0.js","assets/download-Ddi-MHxq.js","assets/mot-de-passe-oublie-CHH959ek.js","assets/paiement-BwteAKes.js","assets/professeur-DmLjLuty.js","assets/reinitialiser-mot-de-passe-m0VtnuPW.js","assets/renouvellement-eTjWfHUz.js","assets/ressources-OsL-d54l.js","assets/upload-BRG1vqeQ.js","assets/services-D6wB2eSf.js","assets/school-DlFIluhV.js","assets/tarif-social-B72n_4LU.js","assets/heart-handshake-BaQ6GGXI.js","assets/tarifs-CA90XL-D.js","assets/admin-BK8pjHOS.js","assets/mon-compte-CzDurc2C.js","assets/useQuery-C7FN0DsZ.js","assets/admin.functions-DTIvH5tY.js","assets/minute-credit-panel-BTlth64e.js","assets/ressources.cecrl-DHVC4qHc.js","assets/admin.index-CmM3y9VP.js","assets/admin._id-Bvfb3CSe.js","assets/admin.nouveau-BuVVykhL.js"])))=>i.map(i=>d[i]);
2function x1(t,e){for(var a=0;a<e.length;a++){const r=e[a];if(typeof r!="string"&&!Array.isArray(r)){for(const o in r)if(o!=="default"&&!(o in t)){const c=Object.getOwnPropertyDescriptor(r,o);c&&Object.defineProperty(t,o,c.get?c:{enumerable:!0,get:()=>r[o]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var iz=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function O1(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var pf={exports:{}},Fs={};var Vv;function L1(){if(Vv)return Fs;Vv=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function a(r,o,c){var u=null;if(c!==void 0&&(u=""+c),o.key!==void 0&&(u=""+o.key),"key"in o){c={};for(var d in o)d!=="key"&&(c[d]=o[d])}else c=o;return o=c.ref,{$$typeof:t,type:r,key:u,ref:o!==void 0?o:null,props:c}}return Fs.Fragment=e,Fs.jsx=a,Fs.jsxs=a,Fs}var Kv;function N1(){return Kv||(Kv=1,pf.exports=L1()),pf.exports}var V=N1(),mf={exports:{}},ye={};var Yv;function z1(){if(Yv)return ye;Yv=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),c=Symbol.for("react.consumer"),u=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),v=Symbol.for("react.activity"),b=Symbol.iterator;function w(R){return R===null||typeof R!="object"?null:(R=b&&R[b]||R["@@iterator"],typeof R=="function"?R:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},T=Object.assign,C={};function A(R,F,Q){this.props=R,this.context=F,this.refs=C,this.updater=Q||S}A.prototype.isReactComponent={},A.prototype.setState=function(R,F){if(typeof R!="object"&&typeof R!="function"&&R!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,R,F,"setState")},A.prototype.forceUpdate=function(R){this.updater.enqueueForceUpdate(this,R,"forceUpdate")};function O(){}O.prototype=A.prototype;function x(R,F,Q){this.props=R,this.context=F,this.refs=C,this.updater=Q||S}var B=x.prototype=new O;B.constructor=x,T(B,A.prototype),B.isPureReactComponent=!0;var Z=Array.isArray;function M(){}var N={H:null,A:null,T:null,S:null},Y=Object.prototype.hasOwnProperty;function te(R,F,Q){var ae=Q.ref;return{$$typeof:t,type:R,key:F,ref:ae!==void 0?ae:null,props:Q}}function ue(R,F){return te(R.type,F,R.props)}function H(R){return typeof R=="object"&&R!==null&&R.$$typeof===t}function G(R){var F={"=":"=0",":":"=2"};return"$"+R.replace(/[=:]/g,function(Q){return F[Q]})}var ee=/\/+/g;function ge(R,F){return typeof R=="object"&&R!==null&&R.key!=null?G(""+R.key):F.toString(36)}function ce(R){switch(R.status){case"fulfilled":return R.value;case"rejected":throw R.reason;default:switch(typeof R.status=="string"?R.then(M,M):(R.status="pending",R.then(function(F){R.status==="pending"&&(R.status="fulfilled",R.value=F)},function(F){R.status==="pending"&&(R.status="rejected",R.reason=F)})),R.status){case"fulfilled":return R.value;case"rejected":throw R.reason}}throw R}function j(R,F,Q,ae,ve){var Te=typeof R;(Te==="undefined"||Te==="boolean")&&(R=null);var he=!1;if(R===null)he=!0;else switch(Te){case"bigint":case"string":case"number":he=!0;break;case"object":switch(R.$$typeof){case t:case e:he=!0;break;case g:return he=R._init,j(he(R._payload),F,Q,ae,ve)}}if(he)return ve=ve(R),he=ae===""?"."+ge(R,0):ae,Z(ve)?(Q="",he!=null&&(Q=he.replace(ee,"$&/")+"/"),j(ve,F,Q,"",function(En){return En})):ve!=null&&(H(ve)&&(ve=ue(ve,Q+(ve.key==null||R&&R.key===ve.key?"":(""+ve.key).replace(ee,"$&/")+"/")+he)),F.push(ve)),1;he=0;var Pe=ae===""?".":ae+":";if(Z(R))for(var Ve=0;Ve<R.length;Ve++)ae=R[Ve],Te=Pe+ge(ae,Ve),he+=j(ae,F,Q,Te,ve);else if(Ve=w(R),typeof Ve=="function")for(R=Ve.call(R),Ve=0;!(ae=R.next()).done;)ae=ae.value,Te=Pe+ge(ae,Ve++),he+=j(ae,F,Q,Te,ve);else if(Te==="object"){if(typeof R.then=="function")return j(ce(R),F,Q,ae,ve);throw F=String(R),Error("Objects are not valid as a React child (found: "+(F==="[object Object]"?"object with keys {"+Object.keys(R).join(", ")+"}":F)+"). If you meant to render a collection of children, use an array instead.")}return he}function J(R,F,Q){if(R==null)return R;var ae=[],ve=0;return j(R,ae,"","",function(Te){return F.call(Q,Te,ve++)}),ae}function fe(R){if(R._status===-1){var F=R._result;F=F(),F.then(function(Q){(R._status===0||R._status===-1)&&(R._status=1,R._result=Q)},function(Q){(R._status===0||R._status===-1)&&(R._status=2,R._result=Q)}),R._status===-1&&(R._status=0,R._result=F)}if(R._status===1)return R._result.default;throw R._result}var je=typeof reportError=="function"?reportError:function(R){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var F=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof R=="object"&&R!==null&&typeof R.message=="string"?String(R.message):String(R),error:R});if(!window.dispatchEvent(F))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",R);return}console.error(R)},ke={map:J,forEach:function(R,F,Q){J(R,function(){F.apply(this,arguments)},Q)},count:function(R){var F=0;return J(R,function(){F++}),F},toArray:function(R){return J(R,function(F){return F})||[]},only:function(R){if(!H(R))throw Error("React.Children.only expected to receive a single React element child.");return R}};return ye.Activity=v,ye.Children=ke,ye.Component=A,ye.Fragment=a,ye.Profiler=o,ye.PureComponent=x,ye.StrictMode=r,ye.Suspense=p,ye.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=N,ye.__
vendor: 6,465 bytes, line 2
2COMPILER_RUNTIME={__proto__:null,c:function(R){return N.H.useMemoCache(R)}},ye.cache=function(R){return function(){return R.apply(null,arguments)}},ye.cacheSignal=function(){return null},ye.cloneElement=function(R,F,Q){if(R==null)throw Error("The argument must be a React element, but you passed "+R+".");var ae=T({},R.props),ve=R.key;if(F!=null)for(Te in F.key!==void 0&&(ve=""+F.key),F)!Y.call(F,Te)||Te==="key"||Te==="__self"||Te==="__source"||Te==="ref"&&F.ref===void 0||(ae[Te]=F[Te]);var Te=arguments.length-2;if(Te===1)ae.children=Q;else if(1<Te){for(var he=Array(Te),Pe=0;Pe<Te;Pe++)he[Pe]=arguments[Pe+2];ae.children=he}return te(R.type,ve,ae)},ye.createContext=function(R){return R={$$typeof:u,_currentValue:R,_currentValue2:R,_threadCount:0,Provider:null,Consumer:null},R.Provider=R,R.Consumer={$$typeof:c,_context:R},R},ye.createElement=function(R,F,Q){var ae,ve={},Te=null;if(F!=null)for(ae in F.key!==void 0&&(Te=""+F.key),F)Y.call(F,ae)&&ae!=="key"&&ae!=="__self"&&ae!=="__source"&&(ve[ae]=F[ae]);var he=arguments.length-2;if(he===1)ve.children=Q;else if(1<he){for(var Pe=Array(he),Ve=0;Ve<he;Ve++)Pe[Ve]=arguments[Ve+2];ve.children=Pe}if(R&&R.defaultProps)for(ae in he=R.defaultProps,he)ve[ae]===void 0&&(ve[ae]=he[ae]);return te(R,Te,ve)},ye.createRef=function(){return{current:null}},ye.forwardRef=function(R){return{$$typeof:d,render:R}},ye.isValidElement=H,ye.lazy=function(R){return{$$typeof:g,_payload:{_status:-1,_result:R},_init:fe}},ye.memo=function(R,F){return{$$typeof:m,type:R,compare:F===void 0?null:F}},ye.startTransition=function(R){var F=N.T,Q={};N.T=Q;try{var ae=R(),ve=N.S;ve!==null&&ve(Q,ae),typeof ae=="object"&&ae!==null&&typeof ae.then=="function"&&ae.then(M,je)}catch(Te){je(Te)}finally{F!==null&&Q.types!==null&&(F.types=Q.types),N.T=F}},ye.unstable_useCacheRefresh=function(){return N.H.useCacheRefresh()},ye.use=function(R){return N.H.use(R)},ye.useActionState=function(R,F,Q){return N.H.useActionState(R,F,Q)},ye.useCallback=function(R,F){return N.H.useCallback(R,F)},ye.useContext=function(R){return N.H.useContext(R)},ye.useDebugValue=function(){},ye.useDeferredValue=function(R,F){return N.H.useDeferredValue(R,F)},ye.useEffect=function(R,F){return N.H.useEffect(R,F)},ye.useEffectEvent=function(R){return N.H.useEffectEvent(R)},ye.useId=function(){return N.H.useId()},ye.useImperativeHandle=function(R,F,Q){return N.H.useImperativeHandle(R,F,Q)},ye.useInsertionEffect=function(R,F){return N.H.useInsertionEffect(R,F)},ye.useLayoutEffect=function(R,F){return N.H.useLayoutEffect(R,F)},ye.useMemo=function(R,F){return N.H.useMemo(R,F)},ye.useOptimistic=function(R,F){return N.H.useOptimistic(R,F)},ye.useReducer=function(R,F,Q){return N.H.useReducer(R,F,Q)},ye.useRef=function(R){return N.H.useRef(R)},ye.useState=function(R){return N.H.useState(R)},ye.useSyncExternalStore=function(R,F,Q){return N.H.useSyncExternalStore(R,F,Q)},ye.useTransition=function(){return N.H.useTransition()},ye.version="19.2.5",ye}var Qv;function Eo(){return Qv||(Qv=1,mf.exports=z1()),mf.exports}var re=Eo();const Co=O1(re),rz=x1({__proto__:null,default:Co},[re]);var gf={exports:{}},$s={},vf={exports:{}},yf={};var Jv;function q1(){return Jv||(Jv=1,(function(t){function e(j,J){var fe=j.length;j.push(J);e:for(;0<fe;){var je=fe-1>>>1,ke=j[je];if(0<o(ke,J))j[je]=J,j[fe]=ke,fe=je;else break e}}function a(j){return j.length===0?null:j[0]}function r(j){if(j.length===0)return null;var J=j[0],fe=j.pop();if(fe!==J){j[0]=fe;e:for(var je=0,ke=j.length,R=ke>>>1;je<R;){var F=2*(je+1)-1,Q=j[F],ae=F+1,ve=j[ae];if(0>o(Q,fe))ae<ke&&0>o(ve,Q)?(j[je]=ve,j[ae]=fe,je=ae):(j[je]=Q,j[F]=fe,je=F);else if(ae<ke&&0>o(ve,fe))j[je]=ve,j[ae]=fe,je=ae;else break e}}return J}function o(j,J){var fe=j.sortIndex-J.sortIndex;return fe!==0?fe:j.id-J.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var u=Date,d=u.now();t.unstable_now=function(){return u.now()-d}}var p=[],m=[],g=1,v=null,b=3,w=!1,S=!1,T=!1,C=!1,A=typeof setTimeout=="function"?setTimeout:null,O=typeof clearTimeout=="function"?clearTimeout:null,x=typeof setImmediate<"u"?setImmediate:null;function B(j){for(var J=a(m);J!==null;){if(J.callback===null)r(m);else if(J.startTime<=j)r(m),J.sortIndex=J.expirationTime,e(p,J);else break;J=a(m)}}function Z(j){if(T=!1,B(j),!S)if(a(p)!==null)S=!0,M||(M=!0,G());else{var J=a(m);J!==null&&ce(Z,J.startTime-j)}}var M=!1,N=-1,Y=5,te=-1;function ue(){return C?!0:!(t.unstable_now()-te<Y)}function H(){if(C=!1,M){var j=t.unstable_now();te=j;var J=!0;try{e:{S=!1,T&&(T=!1,O(N),N=-1),w=!0;var fe=b;try{t:{for(B(j),v=a(p);v!==null&&!(v.expirationTime>j&&ue());){var je=v.callback;if(typeof je=="function"){v.callback=null,b=v.priorityLevel;var ke=je(v.expirationTime<=j);if(j=t.unstable_now(),typeof ke=="function"){v.callback=ke,B(j),J=!0;break t}v===a(p)&&r(p),B(j)}else r(p);v=a(p)}if(v!==null)J=!0;else{var R=a(m);R!==null&&ce(Z,R.startTime-j),J=!1}}break e}finally{v=null,b=fe,w=!1}J=void 0}}finally{J?G():M=!1}}}var G;if(typeof x=="function")G=function(){x(H)};else if(typeof MessageChannel<"u"){var ee=new MessageChannel,ge=ee.port2;ee.port1.onmessage=H,G=function(){ge.postMessage(null)}}else G=function(){A(H,0)};function ce(j,J){N=A(function(){j(t.unstable_now())},J)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(j){j.callback=null},t.unstable_forceFrameRate=function(j){0>j||125<j?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):Y=0<j?Math.floor(1e3/j):5},t.unstable_getCurrentPriorityLevel=function(){return b},t.unstable_next=function(j){switch(b){case 1:case 2:case 3:var J=3;break;default:J=b}var fe=b;b=J;try{return j()}finally{b=fe}},t.unstable_requestPaint=function(){C=!0},t.unstable_runWithPriority=function(j,J){switch(j){case 1:case 2:case 3:case 4:case 5:break;default:j=3}var fe=b;b=j;try{return J()}finally{b=fe}},t.unstable_scheduleCallback=function(j,J,fe){var je=t.unstable_now();switch(typeof fe=="object"&&fe!==null?(fe=fe.delay,fe=typeof fe=="number"&&0<fe?je+fe:je):fe=je,j){case 1:var ke=-1;break;case 2:ke=250;break;case 5:ke=1073741823;break;case 4:ke=1e4;break;default:ke=5e3}return ke=fe+ke,j={id:g++,callback:J,priorityLevel:j,startTime:fe,expirationTime:ke,sortIndex:-1},fe>
vendor: 6,444 bytes, line 2
2je?(j.sortIndex=fe,e(m,j),a(p)===null&&j===a(m)&&(T?(O(N),N=-1):T=!0,ce(Z,fe-je))):(j.sortIndex=ke,e(p,j),S||w||(S=!0,M||(M=!0,G()))),j},t.unstable_shouldYield=ue,t.unstable_wrapCallback=function(j){var J=b;return function(){var fe=b;b=J;try{return j.apply(this,arguments)}finally{b=fe}}}})(yf)),yf}var Zv;function D1(){return Zv||(Zv=1,vf.exports=q1()),vf.exports}var bf={exports:{}},kt={};var Wv;function j1(){if(Wv)return kt;Wv=1;var t=Eo();function e(p){var m="https://react.dev/errors/"+p;if(1<arguments.length){m+="?args[]="+encodeURIComponent(arguments[1]);for(var g=2;g<arguments.length;g++)m+="&args[]="+encodeURIComponent(arguments[g])}return"Minified React error #"+p+"; visit "+m+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var r={d:{f:a,r:function(){throw Error(e(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},o=Symbol.for("react.portal");function c(p,m,g){var v=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:v==null?null:""+v,children:p,containerInfo:m,implementation:g}}var u=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(p,m){if(p==="font")return"";if(typeof m=="string")return m==="use-credentials"?m:""}return kt.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=r,kt.createPortal=function(p,m){var g=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!m||m.nodeType!==1&&m.nodeType!==9&&m.nodeType!==11)throw Error(e(299));return c(p,m,null,g)},kt.flushSync=function(p){var m=u.T,g=r.p;try{if(u.T=null,r.p=2,p)return p()}finally{u.T=m,r.p=g,r.d.f()}},kt.preconnect=function(p,m){typeof p=="string"&&(m?(m=m.crossOrigin,m=typeof m=="string"?m==="use-credentials"?m:"":void 0):m=null,r.d.C(p,m))},kt.prefetchDNS=function(p){typeof p=="string"&&r.d.D(p)},kt.preinit=function(p,m){if(typeof p=="string"&&m&&typeof m.as=="string"){var g=m.as,v=d(g,m.crossOrigin),b=typeof m.integrity=="string"?m.integrity:void 0,w=typeof m.fetchPriority=="string"?m.fetchPriority:void 0;g==="style"?r.d.S(p,typeof m.precedence=="string"?m.precedence:void 0,{crossOrigin:v,integrity:b,fetchPriority:w}):g==="script"&&r.d.X(p,{crossOrigin:v,integrity:b,fetchPriority:w,nonce:typeof m.nonce=="string"?m.nonce:void 0})}},kt.preinitModule=function(p,m){if(typeof p=="string")if(typeof m=="object"&&m!==null){if(m.as==null||m.as==="script"){var g=d(m.as,m.crossOrigin);r.d.M(p,{crossOrigin:g,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0})}}else m==null&&r.d.M(p)},kt.preload=function(p,m){if(typeof p=="string"&&typeof m=="object"&&m!==null&&typeof m.as=="string"){var g=m.as,v=d(g,m.crossOrigin);r.d.L(p,g,{crossOrigin:v,integrity:typeof m.integrity=="string"?m.integrity:void 0,nonce:typeof m.nonce=="string"?m.nonce:void 0,type:typeof m.type=="string"?m.type:void 0,fetchPriority:typeof m.fetchPriority=="string"?m.fetchPriority:void 0,referrerPolicy:typeof m.referrerPolicy=="string"?m.referrerPolicy:void 0,imageSrcSet:typeof m.imageSrcSet=="string"?m.imageSrcSet:void 0,imageSizes:typeof m.imageSizes=="string"?m.imageSizes:void 0,media:typeof m.media=="string"?m.media:void 0})}},kt.preloadModule=function(p,m){if(typeof p=="string")if(m){var g=d(m.as,m.crossOrigin);r.d.m(p,{as:typeof m.as=="string"&&m.as!=="script"?m.as:void 0,crossOrigin:g,integrity:typeof m.integrity=="string"?m.integrity:void 0})}else r.d.m(p)},kt.requestFormReset=function(p){r.d.r(p)},kt.unstable_batchedUpdates=function(p,m){return p(m)},kt.useFormState=function(p,m,g){return u.H.useFormState(p,m,g)},kt.useFormStatus=function(){return u.H.useHostTransitionStatus()},kt.version="19.2.5",kt}var Xv;function P1(){if(Xv)return bf.exports;Xv=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),bf.exports=j1(),bf.exports}var ey;function M1(){if(ey)return $s;ey=1;var t=D1(),e=Eo(),a=P1();function r(n){var i="https://react.dev/errors/"+n;if(1<arguments.length){i+="?args[]="+encodeURIComponent(arguments[1]);for(var s=2;s<arguments.length;s++)i+="&args[]="+encodeURIComponent(arguments[s])}return"Minified React error #"+n+"; visit "+i+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function o(n){return!(!n||n.nodeType!==1&&n.nodeType!==9&&n.nodeType!==11)}function c(n){var i=n,s=n;if(n.alternate)for(;i.return;)i=i.return;else{n=i;do i=n,(i.flags&4098)!==0&&(s=i.return),n=i.return;while(n)}return i.tag===3?s:null}function u(n){if(n.tag===13){var i=n.memoizedState;if(i===null&&(n=n.alternate,n!==null&&(i=n.memoizedState)),i!==null)return i.dehydrated}return null}function d(n){if(n.tag===31){var i=n.memoizedState;if(i===null&&(n=n.alternate,n!==null&&(i=n.memoizedState)),i!==null)return i.dehydrated}return null}function p(n){if(c(n)!==n)throw Error(r(188))}function m(n){var i=n.alternate;if(!i){if(i=c(n),i===null)throw Error(r(188));return i!==n?null:n}for(var s=n,l=i;;){var f=s.return;if(f===null)break;var h=f.alternate;if(h===null){if(l=f.return,l!==null){s=l;continue}break}if(f.child===h.child){for(h=f.child;h;){if(h===s)return p(f),n;if(h===l)return p(f),i;h=h.sibling}throw Error(r(188))}if(s.return!==l.return)s=f,l=h;else{for(var y=!1,_=f.child;_;){if(_===s){y=!0,s=f,l=h;break}if(_===l){y=!0,l=f,s=h;break}_=_.sibling}if(!y){for(_=h.child;_;){if(_===s){y=!0,s=h,l=f;break}if(_===l){y=!0,l=h,s=f;break}_=_.sibling}if(!y)throw Error(r(189))}}if(s.alternate!==l)throw Error(r(190))}if(s.tag!==3)throw Error(r(188));return s.stateNode.current===s?n:i}function g(n){var i=n.tag;if(i===5||i===26||i===27||i===6)return n;for(n=n.child;n!==null;){if(i=g(n),i!==null)return i;n=n.sibling}return null}var v=Object.assign,b=Symbol.for("react.element"),w=Symbol.for("react.transitional.element"),S=Symbol.for("react.portal"),T=Symbol.for("react.fragment"),C=Symbol.for("react.strict_mode"),A=Symbol.for("react.profiler"),O=Symbol.for("react.consumer"),x=Symbol.for("react.context"),B=Symbol.for("react.forward_ref"),Z=Symbol.for("react.suspense"),M=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),Y=Symbol.for("react.lazy"),te=Symbol.for("react.activity"),ue=Symbol.for("react.memo_cache_sentinel"),H=Symbol.iterator;function G(n){return n===null||typeof n!="object"?null:(n=H&&n[H
vendor: 13,308 bytes, lines 2-9
2]||n["@@iterator"],typeof n=="function"?n:null)}var ee=Symbol.for("react.client.reference");function ge(n){if(n==null)return null;if(typeof n=="function")return n.$$typeof===ee?null:n.displayName||n.name||null;if(typeof n=="string")return n;switch(n){case T:return"Fragment";case A:return"Profiler";case C:return"StrictMode";case Z:return"Suspense";case M:return"SuspenseList";case te:return"Activity"}if(typeof n=="object")switch(n.$$typeof){case S:return"Portal";case x:return n.displayName||"Context";case O:return(n._context.displayName||"Context")+".Consumer";case B:var i=n.render;return n=n.displayName,n||(n=i.displayName||i.name||"",n=n!==""?"ForwardRef("+n+")":"ForwardRef"),n;case N:return i=n.displayName||null,i!==null?i:ge(n.type)||"Memo";case Y:i=n._payload,n=n._init;try{return ge(n(i))}catch{}}return null}var ce=Array.isArray,j=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,J=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,fe={pending:!1,data:null,method:null,action:null},je=[],ke=-1;function R(n){return{current:n}}function F(n){0>ke||(n.current=je[ke],je[ke]=null,ke--)}function Q(n,i){ke++,je[ke]=n.current,n.current=i}var ae=R(null),ve=R(null),Te=R(null),he=R(null);function Pe(n,i){switch(Q(Te,i),Q(ve,n),Q(ae,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?mv(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=mv(i),n=gv(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}F(ae),Q(ae,n)}function Ve(){F(ae),F(ve),F(Te)}function En(n){n.memoizedState!==null&&Q(he,n);var i=ae.current,s=gv(i,n.type);i!==s&&(Q(ve,n),Q(ae,s))}function ri(n){ve.current===n&&(F(ae),F(ve)),he.current===n&&(F(he),Ms._currentValue=fe)}var Mn,Gh;function si(n){if(Mn===void 0)try{throw Error()}catch(s){var i=s.stack.trim().match(/\n( *(at )?)/);Mn=i&&i[1]||"",Gh=-1<s.stack.indexOf(`
3    at`)?" (<anonymous>)":-1<s.stack.indexOf("@")?"@unknown:0:0":""}return`
4`+Mn+n+Gh}var Jc=!1;function Zc(n,i){if(!n||Jc)return"";Jc=!0;var s=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var l={DetermineComponentFrameRoot:function(){try{if(i){var $=function(){throw Error()};if(Object.defineProperty($.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct($,[])}catch(P){var D=P}Reflect.construct(n,[],$)}else{try{$.call()}catch(P){D=P}n.call($.prototype)}}else{try{throw Error()}catch(P){D=P}($=n())&&typeof $.catch=="function"&&$.catch(function(){})}}catch(P){if(P&&D&&typeof P.stack=="string")return[P.stack,D.stack]}return[null,null]}};l.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var f=Object.getOwnPropertyDescriptor(l.DetermineComponentFrameRoot,"name");f&&f.configurable&&Object.defineProperty(l.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var h=l.DetermineComponentFrameRoot(),y=h[0],_=h[1];if(y&&_){var E=y.split(`
5`),q=_.split(`
6`);for(f=l=0;l<E.length&&!E[l].includes("DetermineComponentFrameRoot");)l++;for(;f<q.length&&!q[f].includes("DetermineComponentFrameRoot");)f++;if(l===E.length||f===q.length)for(l=E.length-1,f=q.length-1;1<=l&&0<=f&&E[l]!==q[f];)f--;for(;1<=l&&0<=f;l--,f--)if(E[l]!==q[f]){if(l!==1||f!==1)do if(l--,f--,0>f||E[l]!==q[f]){var U=`
7`+E[l].replace(" at new "," at ");return n.displayName&&U.includes("<anonymous>")&&(U=U.replace("<anonymous>",n.displayName)),U}while(1<=l&&0<=f);break}}}finally{Jc=!1,Error.prepareStackTrace=s}return(s=n?n.displayName||n.name:"")?si(s):""}function s_(n,i){switch(n.tag){case 26:case 27:case 5:return si(n.type);case 16:return si("Lazy");case 13:return n.child!==i&&i!==null?si("Suspense Fallback"):si("Suspense");case 19:return si("SuspenseList");case 0:case 15:return Zc(n.type,!1);case 11:return Zc(n.type.render,!1);case 1:return Zc(n.type,!0);case 31:return si("Activity");default:return""}}function Vh(n){try{var i="",s=null;do i+=s_(n,s),s=n,n=n.return;while(n);return i}catch(l){return`
8Error generating stack: `+l.message+`
9`+l.stack}}var Wc=Object.prototype.hasOwnProperty,Xc=t.unstable_scheduleCallback,eu=t.unstable_cancelCallback,o_=t.unstable_shouldYield,l_=t.unstable_requestPaint,It=t.unstable_now,c_=t.unstable_getCurrentPriorityLevel,Kh=t.unstable_ImmediatePriority,Yh=t.unstable_UserBlockingPriority,xo=t.unstable_NormalPriority,u_=t.unstable_LowPriority,Qh=t.unstable_IdlePriority,d_=t.log,f_=t.unstable_setDisableYieldValue,Jr=null,Ft=null;function va(n){if(typeof d_=="function"&&f_(n),Ft&&typeof Ft.setStrictMode=="function")try{Ft.setStrictMode(Jr,n)}catch{}}var $t=Math.clz32?Math.clz32:m_,h_=Math.log,p_=Math.LN2;function m_(n){return n>>>=0,n===0?32:31-(h_(n)/p_|0)|0}var Oo=256,Lo=262144,No=4194304;function oi(n){var i=n&42;if(i!==0)return i;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function zo(n,i,s){var l=n.pendingLanes;if(l===0)return 0;var f=0,h=n.suspendedLanes,y=n.pingedLanes;n=n.warmLanes;var _=l&134217727;return _!==0?(l=_&~h,l!==0?f=oi(l):(y&=_,y!==0?f=oi(y):s||(s=_&~n,s!==0&&(f=oi(s))))):(_=l&~h,_!==0?f=oi(_):y!==0?f=oi(y):s||(s=l&~n,s!==0&&(f=oi(s)))),f===0?0:i!==0&&i!==f&&(i&h)===0&&(h=f&-f,s=i&-i,h>=s||h===32&&(s&4194048)!==0)?i:f}function Zr(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function g_(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Jh(){var n=No;return No<<=1,(No&62914560)===0&&(No=4194304),n}function tu(n){for(var i=[],s=0;31>s;s++)i.push(n);return i}function Wr(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function v_(n,i,s,l,f,h){var y=n.pendingLanes;n.pendingLanes=s,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=s,n.entangledLanes&=s,n.errorRecoveryDisabledLanes&=s,n.shellSuspendCounter=0;var _=n.entanglements,E=n.expirationTimes,q=n.hiddenUpdates;for(s=y&~s;0<s;){var U=31-$t(s),$=1<<U;_[U]=0,E[U]=-1;var D=q[U];if(D!==null)for(q[U]=null,U=0;U<D.length;U++){var P=D[U];P!==null&&(P.lane&=-536870913)}s&=~$}l!==0&&Zh(n,l,0),h!==0&&f===0&&n.tag!==0&&(n.suspendedLanes|=h&~(y&~i))}function Zh(n,i,s){n.pendingLanes|=i,n.suspendedLanes&=~i;var l=31-$t(i);n.entangledLanes|=i,n.entanglements[l]=n.entanglements[l]|1073741824|s&261930}function Wh(n,i){var s=n.entangledLanes|=i;for(n=n.entanglements;s;){var l=31-$t(s),f=1<<l;f&i|n[l]&i&&(n[l]|=i),s&=~f}}function Xh(n,i){var s=i&-i;return s=(s&42)!==0?1:nu(s),(s&(n.suspendedLanes|i))!==0?0:s}function nu(n){switch(n){case 2:n=1;break;case 8:n=4;break;case 32:n=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:n=128;break;case 268435456:n=134217728;break;default:n=0}return n}function au(n){return n&=-n,2<n?8<n?(n&134217727)!==0?32:268435456:8:2}function ep(){var n=J.p;return n!==0?n:(n=window.event,n===void 0?32:Uv(n.type))}function tp(n,i){var s=J.p;try{return J.p=n,i()}finally{J.p=s}}var ya=Math.random().toString(36).slice(2),wt="__reactFiber$"+ya,zt="__reactProps$"+ya,Mi="__reactContainer$"+ya,iu="__reactEvents$"+ya,y_="__reactListeners$"+ya,b_="__reactHandles$"+ya,np="__reactResources$"+ya,Xr="__reactMarker$"+ya;function ru(n){delete n[wt],delete n[zt],delete n[iu],delete n[y_],delete n[b_]}function Ui(n){var i=n[wt];if(i)return i;for(var s=n.parentNode;s;){if(i=s[Mi]||s[wt]){if(s=i.alternate,i.child!==null||s!==null&&s.child!==null)for(n=Tv(n);n!==null;){if(s=n[wt])return s;n=Tv(n)}return i}n=s,s=n.parentNode}return null}function Bi(n){if(n=n[wt]||n[Mi]){var i=n.tag;if(i===5||i===6||i===13||i===31||i===26||i===27||i===3)return n}return null}function es(n){var i=n.tag;if(i===5||i===26||i===27||i===6)return n.stateNode;throw Error(r(33))}function Ii(n){var i=n[np];return i||(i=n[np]={hoistableStyles:new Map,hoistableScripts:new Map}),i}function gt(n){n[Xr]=!0}var ap=new Set,ip={};function li(n,i){Fi(n,i),Fi(n+"Capture",i)}function Fi(n,i){for(ip[n]=i,n=0;n<i.length;n++)ap.add(i[n])}var w_=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),rp={},sp={};function __(n){return Wc.call(sp,n)?!0:Wc.call(rp,n)?!1:w_.test(n)?sp[n]=!0:(rp[n]=!0,!1)}function qo(n,i,s){if(__(i))if(s===null)n.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":n.removeAttribute(i);return;case"boolean":var l=i.toLowerCase().slice(0,5);if(l!=="data-"&&l!=="aria-"){n.removeAttribute(i);return}}n.setAttribute(i,""+s)}}function Do(n,i,s){if(s===null)n.removeAttribute(i);else{switch(typeof s){case"undefined":case"function":case"symbol":case"boolean":n.removeAttribute(i);return}n.setAttribute(i,""+s)}}function Un(n,i,s,l){if(l===null)n.removeAttribute(s);else{switch(typeof l){case"undefined":case"function":case"symbol":case"boolean":n.removeAttribute(s);return}n.setAttributeNS(i,s,""+l)}}function Xt(n){switch(typeof n){case"bigint":case"boolean":case"number":case"string":case"undefined":return n;case"object":return n;default:return""}}function op(n){var i=n.type;return(n=n.nodeName)&&n.toLowerCase()==="input"&&(i==="checkbox"||i==="radio")}function S_(n,i,s){var l=Object.getOwnPropertyDescriptor(n.constructor.prototype,i);if(!n.hasOwnProperty(i)&&typeof l<"u"&&typeof l.get=="function"&&typeof l.set=="function"){var f=l.get,h=l.set;return Object.defineProperty(n,i,{configurable:!0,get:function(){return f.call(this)},set:function(y){s=""+y,h.call(this,y)}}),Object.defineProperty(n,i,{enumerable:l.enumerable}),{getValue:function(){return s},setValue:function(y){s=""+y},stopTracking:function(){n._valueTracker=null,delete n[i]}}}}function su(n){if(!n._valueTracker){var i=op(n)?"checked":"value";n._valueTracker=S_(n,i,""+n[i])}}function lp(n){if(!n)return!1;var i=n._valueTracker;if(!i)return!0;var s=i.getValue(),l="";return n&&(l=op(n)?n.checked?"true":"false":n.value),n=l,n!==s?(i.setValue(n),!0):!1}function jo(n){if(n=n||(typeof document<"u"?document:void 0),typeof n>"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var T_=/[\n"\\]/g;function en(n){return n.replace(T_,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ou(n,i,s,l,f,h,y,_){n.name="",y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"?n.type=y:n.removeAttribute("type"),i!=null?y==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+Xt(i)):n.value!==""+Xt(i)&&(n.value=""+Xt(i)):y!=="submit"&&y!=="reset"||n.removeAttribute("value"),i!=null?lu(n,y,Xt(i)):s!=null?lu(n,y,Xt(s)):l!=null&&n.removeAttribute("value"),f==null&&h!=null&&(n.defaultChecked=!!h),f!=null&&(n.checked=f&&typeof f!="function"&&typeof f!="symbol"),_!=null&&typeof _!="function"&&typeof _!="symbol"&&typeof _!="boolean"?n.name=""+Xt(_):n.removeAttribute("name")}function cp(n,i,s,l,f,h,y,_){if(h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"&&(n.type=h),i!=null||s!=null){if(!(h!=="submit"&&h!=="reset"||i!=null)){su(n);return}s=s!=null?""+Xt(s):"",i=i!=null?""+Xt(i):s,_||i===n.value||(n.value=i),n.defaultValue=i}l=l??f,l=typeof l!="function"&&typeof l!="symbol"&&!!l,n.checked=_?n.checked:!!l,n.defaultChecked=!!l,y!=null&&typeof y!="function"&&typeof y!="symbol"&&typeof y!="boolean"&&(n.name=y),su(n)}function lu(n,i,s){i==="number"&&jo(n.ownerDocument)===n||n.defaultValue===""+s||(n.defaultValue=""+s)}function $i(n,i,s,l){if(n=n.options,i){i={};for(var f=0;f<s.length;f++)i["$"+s[f]]=!0;for(s=0;s<n.length;s++)f=i.hasOwnProperty("$"+n[s].value),n[s].selected!==f&&(n[s].selected=f),f&&l&&(n[s].defaultSelected=!0)}else{for(s=""+Xt(s),i=null,f=0;f<n.length;f++){if(n[f].value===s){n[f].selected=!0,l&&(n[f].defaultSelected=!0);return}i!==null||n[f].disabled||(i=n[f])}i!==null&&(i.selected=!0)}}function up(n,i,s){if(i!=null&&(i=""+Xt(i),i!==n.value&&(n.value=i),s==null)){n.defaultValue!==i&&(n.defaultValue=i);return}n.defaultValue=s!=null?""+Xt(s):""}function dp(n,i,s,l){if(i==null){if(l!=null){if(s!=null)throw Error(r(92));if(ce(l)){if(1<l.length)throw Error(r(93));l=l[0]}s=l}s==null&&(s=""),i=s}s=Xt(i),n.defaultValue=s,l=n.textContent,l===s&&l!==""&&l!==null&&(n.value=l),su(n)}
vendor: 4,182 bytes, line 9
9function Hi(n,i){if(i){var s=n.firstChild;if(s&&s===n.lastChild&&s.nodeType===3){s.nodeValue=i;return}}n.textContent=i}var E_=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function fp(n,i,s){var l=i.indexOf("--")===0;s==null||typeof s=="boolean"||s===""?l?n.setProperty(i,""):i==="float"?n.cssFloat="":n[i]="":l?n.setProperty(i,s):typeof s!="number"||s===0||E_.has(i)?i==="float"?n.cssFloat=s:n[i]=(""+s).trim():n[i]=s+"px"}function hp(n,i,s){if(i!=null&&typeof i!="object")throw Error(r(62));if(n=n.style,s!=null){for(var l in s)!s.hasOwnProperty(l)||i!=null&&i.hasOwnProperty(l)||(l.indexOf("--")===0?n.setProperty(l,""):l==="float"?n.cssFloat="":n[l]="");for(var f in i)l=i[f],i.hasOwnProperty(f)&&s[f]!==l&&fp(n,f,l)}else for(var h in i)i.hasOwnProperty(h)&&fp(n,h,i[h])}function cu(n){if(n.indexOf("-")===-1)return!1;switch(n){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var C_=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode
9-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),A_=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Po(n){return A_.test(""+n)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":n}function Bn(){}var uu=null;function du(n){return n=n.target||n.srcElement||window,n.correspondingUseElement&&(n=n.correspondingUseElement),n.nodeType===3?n.parentNode:n}var Gi=null,Vi=null;function pp(n){var i=Bi(n);if(i&&(n=i.stateNode)){var s=n[zt]||null;e:switch(n=i.stateNode,i.type){case"input":if(ou(n,s.value,s.defaultValue,s.defaultValue,s.checked,s.defaultChecked,s.type,s.name),i=s.name,s.type==="radio"&&i!=null){for(s=n;s.parentNode;)s=s.parentNode;for(s=s.querySelectorAll('input[name="'+en(""+i)+'"][type="radio"]'),i=0;i<s.length;i++){var l=s[i];if(l!==n&&l.form===n.form){var f=l[zt]||null;if(!f)throw Error(r(90));ou(l,f.value,f.defaultValue,f.defaultValue,f.checked,f.defaultChecked,f.type,f.name)}}for(i=0;i<s.length;i++)l=s[i],l.form===n.form&&lp(l)}break e;case"textarea":up(n,s.value,s.defaultValue);break e;case"select":i=s.value,i!=null&&$i(n,!!s.multiple,i,!1)}}}var fu=!1;function mp(n,i,s){if(fu)return n(i,s);fu=!0;try{var l=n(i);return l}finally{if(fu=!1,(Gi!==null||Vi!==null)&&(El(),Gi&&(i=Gi,n=Vi,Vi=Gi=null,pp(i),n)))for(i=0;i<n.length;i++)pp(n[i])}}function ts(n,i){var s=n.stateNode;if(s===null)return null;var l=s[zt]||null;if(l===null)return null;s=l[i];e:switch(i){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(l=!l.disabled)||(n=n.type,l=!(n==="button"||n==="input"||n==="select"||n==="textarea")),n=!l;break e;default:n=!1}if(n)return null;if(s&&typeof s!="function")throw Error(r(231,i,typeof s));return s}var In=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hu=!1;if(In)try{var ns={};Object.defineProperty(ns,"passive",{get:function(){hu=!0}}),window.addEventListener("test",ns,ns),window.removeEventListener("test",ns,ns)}catch{hu=!1}var ba=null,pu=null,Mo=null;function gp(){if(Mo)return Mo;var n,i=pu,s=i.length,l,f="value"in ba?ba.value:ba.textContent,h=f.length;for(n=0;n<s&&i[n]===f[n];n++);var y=s-n;for(l=1;l<=y&&i[s-l]===f[h-l];l++);return Mo=f.slice(n,1<l?1-l:void 0)}function Uo(n){var i=n.keyCode;return"charCode"in n?(n=n.charCode,n===0&&i===13&&(n=13)):n=i,n===10&&(n=13),32<=n||n===13?n:0}function Bo(){return!0}function vp(){return!1}function qt(n){function i(s,l,f,h,y){this._reactName=s,this._targetInst=f,this.type=l,this.nativeEvent=h,this.target=y,this.currentTarget=null;for(var _ in n)n.hasOwnProperty(_)&&(s=n[_],this[_]=s?s(h):h[_]);return this.isDefaultPrevented=(h.defaultPrevented!=null?h.defaultPrevented:h.returnValue===!1)?Bo:vp,this.isPropagationStopped=vp,this}return v(i.prototype,{preventDefault:function(){this.defaultPrevented=!0;var s=this.nativeEvent;s&&(s.preventDefault?s.preventDefault():typeof s.returnValue!="unknown"&&(s.returnValue=!1),this.isDefaultPrevented=Bo)},stopPropagation:function(){var s=this.nativeEvent;s&&(s.stopPropagation?s.stopPropagation():typeof s.cancelBubble!="unknown"&&(s.cancelBubble=!0),this.isPropagationStopped=Bo)},persist:function(){},isPersistent:Bo}),i}var ci={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(n){return n.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Io=qt(ci),as=v({},ci,{view:0,detail:0}),k_=qt(as),mu,gu,is,Fo=v({},as,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:yu,button:0,buttons:0,relatedTarget:function(n){return n.relatedTarget===void 0?n.fromElement===n.srcElement?n.toElement:n.fromElement:n.relatedTarget},movementX:function(n){return"movementX"in n?n.movementX:(n!==is&&(is&&n.type==="mousemove"?(mu=n.screenX-is.screenX,gu=n.screenY-is.screenY):gu=mu=0,is=n),mu)},movementY:function(n){return"movementY"in n?n.movementY:gu}}),yp=qt(Fo),R_=v({},Fo,{dataTransfer:0}),x_=qt(R_),O_=v({},as,{relatedTarget:0}),vu=qt(O_),L_=v({},ci,{animationName:0,elapsedTime:0,pseudoElement:0}),N_=qt(L_),z_=v({},ci,{clipboardData:function(n){return"clipboardData"in n?n.clipboardData:window.clipboardData}}),q_=qt(z_),D_=v({},ci,{data:0}),bp=qt(D_),j_={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},P_={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},M_={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function U_(n){var i=this.nativeEvent;return i.getModifierState?i.getModifierState(n):(n=M_[n])?!!i[n]:!1}function yu(){return U_}var B_=v({},as,{key:function(n){if(n.key){var i=j_[n.key]||n.key;if(i!=="Unidentified")return i}
vendor: 5,186 bytes, line 9
9return n.type==="keypress"?(n=Uo(n),n===13?"Enter":String.fromCharCode(n)):n.type==="keydown"||n.type==="keyup"?P_[n.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:yu,charCode:function(n){return n.type==="keypress"?Uo(n):0},keyCode:function(n){return n.type==="keydown"||n.type==="keyup"?n.keyCode:0},which:function(n){return n.type==="keypress"?Uo(n):n.type==="keydown"||n.type==="keyup"?n.keyCode:0}}),I_=qt(B_),F_=v({},Fo,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),wp=qt(F_),$_=v({},as,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:yu}),H_=qt($_),G_=v({},ci,{propertyName:0,elapsedTime:0,pseudoElement:0}),V_=qt(G_),K_=v({},Fo,{deltaX:function(n){return"deltaX"in n?n.deltaX:"wheelDeltaX"in n?-n.wheelDeltaX:0},deltaY:function(n){return"deltaY"in n?n.deltaY:"wheelDeltaY"in n?-n.wheelDeltaY:"wheelDelta"in n?-n.wheelDelta:0},deltaZ:0,deltaMode:0}),Y_=qt(K_),Q_=v({},ci,{newState:0,oldState:0}),J_=qt(Q_),Z_=[9,13,27,32],bu=In&&"CompositionEvent"in window,rs=null;In&&"documentMode"in document&&(rs=document.documentMode);var W_=In&&"TextEvent"in window&&!rs,_p=In&&(!bu||rs&&8<rs&&11>=rs),Sp=" ",Tp=!1;function Ep(n,i){switch(n){case"keyup":return Z_.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Cp(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var Ki=!1;function X_(n,i){switch(n){case"compositionend":return Cp(i);case"keypress":return i.which!==32?null:(Tp=!0,Sp);case"textInput":return n=i.data,n===Sp&&Tp?null:n;default:return null}}function eS(n,i){if(Ki)return n==="compositionend"||!bu&&Ep(n,i)?(n=gp(),Mo=pu=ba=null,Ki=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1<i.char.length)return i.char;if(i.which)return String.fromCharCode(i.which)}return null;case"compositionend":return _p&&i.locale!=="ko"?null:i.data;default:return null}}var tS={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Ap(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i==="input"?!!tS[n.type]:i==="textarea"}function kp(n,i,s,l){Gi?Vi?Vi.push(l):Vi=[l]:Gi=l,i=Ll(i,"onChange"),0<i.length&&(s=new Io("onChange","change",null,s,l),n.push({event:s,listeners:i}))}var ss=null,os=null;function nS(n){cv(n,0)}function $o(n){var i=es(n);if(lp(i))return n}function Rp(n,i){if(n==="change")return i}var xp=!1;if(In){var wu;if(In){var _u="oninput"in document;if(!_u){var Op=document.createElement("div");Op.setAttribute("oninput","return;"),_u=typeof Op.oninput=="function"}wu=_u}else wu=!1;xp=wu&&(!document.documentMode||9<document.documentMode)}function Lp(){ss&&(ss.detachEvent("onpropertychange",Np),os=ss=null)}function Np(n){if(n.propertyName==="value"&&$o(os)){var i=[];kp(i,os,n,du(n)),mp(nS,i)}}function aS(n,i,s){n==="focusin"?(Lp(),ss=i,os=s,ss.attachEvent("onpropertychange",Np)):n==="focusout"&&Lp()}function iS(n){if(n==="selectionchange"||n==="keyup"||n==="keydown")return $o(os)}function rS(n,i){if(n==="click")return $o(i)}function sS(n,i){if(n==="input"||n==="change")return $o(i)}function oS(n,i){return n===i&&(n!==0||1/n===1/i)||n!==n&&i!==i}var Ht=typeof Object.is=="function"?Object.is:oS;function ls(n,i){if(Ht(n,i))return!0;if(typeof n!="object"||n===null||typeof i!="object"||i===null)return!1;var s=Object.keys(n),l=Object.keys(i);if(s.length!==l.length)return!1;for(l=0;l<s.length;l++){var f=s[l];if(!Wc.call(i,f)||!Ht(n[f],i[f]))return!1}return!0}function zp(n){for(;n&&n.firstChild;)n=n.firstChild;return n}function qp(n,i){var s=zp(n);n=0;for(var l;s;){if(s.nodeType===3){if(l=n+s.textContent.length,n<=i&&l>=i)return{node:s,offset:i-n};n=l}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=zp(s)}}function Dp(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Dp(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function jp(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=jo(n.document);i instanceof n.HTMLIFrameElement;){try{var s=typeof i.contentWindow.location.href=="string"}catch{s=!1}if(s)n=i.contentWindow;else break;i=jo(n.document)}return i}function Su(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var lS=In&&"documentMode"in document&&11>=document.documentMode,Yi=null,Tu=null,cs=null,Eu=!1;function Pp(n,i,s){var l=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;Eu||Yi==null||Yi!==jo(l)||(l=Yi,"selectionStart"in l&&Su(l)?l={start:l.selectionStart,end:l.selectionEnd}:(l=(l.ownerDocument&&l.ownerDocument.defaultView||window).getSelection(),l={anchorNode:l.anchorNode,anchorOffset:l.anchorOffset,focu
vendor: 15,781 bytes, line 9
9sNode:l.focusNode,focusOffset:l.focusOffset}),cs&&ls(cs,l)||(cs=l,l=Ll(Tu,"onSelect"),0<l.length&&(i=new Io("onSelect","select",null,i,s),n.push({event:i,listeners:l}),i.target=Yi)))}function ui(n,i){var s={};return s[n.toLowerCase()]=i.toLowerCase(),s["Webkit"+n]="webkit"+i,s["Moz"+n]="moz"+i,s}var Qi={animationend:ui("Animation","AnimationEnd"),animationiteration:ui("Animation","AnimationIteration"),animationstart:ui("Animation","AnimationStart"),transitionrun:ui("Transition","TransitionRun"),transitionstart:ui("Transition","TransitionStart"),transitioncancel:ui("Transition","TransitionCancel"),transitionend:ui("Transition","TransitionEnd")},Cu={},Mp={};In&&(Mp=document.createElement("div").style,"AnimationEvent"in window||(delete Qi.animationend.animation,delete Qi.animationiteration.animation,delete Qi.animationstart.animation),"TransitionEvent"in window||delete Qi.transitionend.transition);function di(n){if(Cu[n])return Cu[n];if(!Qi[n])return n;var i=Qi[n],s;for(s in i)if(i.hasOwnProperty(s)&&s in Mp)return Cu[n]=i[s];return n}var Up=di("animationend"),Bp=di("animationiteration"),Ip=di("animationstart"),cS=di("transitionrun"),uS=di("transitionstart"),dS=di("transitioncancel"),Fp=di("transitionend"),$p=new Map,Au="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");Au.push("scrollEnd");function hn(n,i){$p.set(n,i),li(i,[n])}var Ho=typeof reportError=="function"?reportError:function(n){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var i=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof n=="object"&&n!==null&&typeof n.message=="string"?String(n.message):String(n),error:n});if(!window.dispatchEvent(i))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",n);return}console.error(n)},tn=[],Ji=0,ku=0;function Go(){for(var n=Ji,i=ku=Ji=0;i<n;){var s=tn[i];tn[i++]=null;var l=tn[i];tn[i++]=null;var f=tn[i];tn[i++]=null;var h=tn[i];if(tn[i++]=null,l!==null&&f!==null){var y=l.pending;y===null?f.next=f:(f.next=y.next,y.next=f),l.pending=f}h!==0&&Hp(s,f,h)}}function Vo(n,i,s,l){tn[Ji++]=n,tn[Ji++]=i,tn[Ji++]=s,tn[Ji++]=l,ku|=l,n.lanes|=l,n=n.alternate,n!==null&&(n.lanes|=l)}function Ru(n,i,s,l){return Vo(n,i,s,l),Ko(n)}function fi(n,i){return Vo(n,null,null,i),Ko(n)}function Hp(n,i,s){n.lanes|=s;var l=n.alternate;l!==null&&(l.lanes|=s);for(var f=!1,h=n.return;h!==null;)h.childLanes|=s,l=h.alternate,l!==null&&(l.childLanes|=s),h.tag===22&&(n=h.stateNode,n===null||n._visibility&1||(f=!0)),n=h,h=h.return;return n.tag===3?(h=n.stateNode,f&&i!==null&&(f=31-$t(s),n=h.hiddenUpdates,l=n[f],l===null?n[f]=[i]:l.push(i),i.lane=s|536870912),h):null}function Ko(n){if(50<Ls)throw Ls=0,Pd=null,Error(r(185));for(var i=n.return;i!==null;)n=i,i=n.return;return n.tag===3?n.stateNode:null}var Zi={};function fS(n,i,s,l){this.tag=n,this.key=s,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=i,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=l,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Gt(n,i,s,l){return new fS(n,i,s,l)}function xu(n){return n=n.prototype,!(!n||!n.isReactComponent)}function Fn(n,i){var s=n.alternate;return s===null?(s=Gt(n.tag,i,n.key,n.mode),s.elementType=n.elementType,s.type=n.type,s.stateNode=n.stateNode,s.alternate=n,n.alternate=s):(s.pendingProps=i,s.type=n.type,s.flags=0,s.subtreeFlags=0,s.deletions=null),s.flags=n.flags&65011712,s.childLanes=n.childLanes,s.lanes=n.lanes,s.child=n.child,s.memoizedProps=n.memoizedProps,s.memoizedState=n.memoizedState,s.updateQueue=n.updateQueue,i=n.dependencies,s.dependencies=i===null?null:{lanes:i.lanes,firstContext:i.firstContext},s.sibling=n.sibling,s.index=n.index,s.ref=n.ref,s.refCleanup=n.refCleanup,s}function Gp(n,i){n.flags&=65011714;var s=n.alternate;return s===null?(n.childLanes=0,n.lanes=i,n.child=null,n.subtreeFlags=0,n.memoizedProps=null,n.memoizedState=null,n.updateQueue=null,n.dependencies=null,n.stateNode=null):(n.childLanes=s.childLanes,n.lanes=s.lanes,n.child=s.child,n.subtreeFlags=0,n.deletions=null,n.memoizedProps=s.memoizedProps,n.memoizedState=s.memoizedState,n.updateQueue=s.updateQueue,n.type=s.type,i=s.dependencies,n.dependencies=i===null?null:{lanes:i.lanes,firstContext:i.firstContext}),n}function Yo(n,i,s,l,f,h){var y=0;if(l=n,typeof n=="function")xu(n)&&(y=1);else if(typeof n=="string")y=v1(n,s,ae.current)?26:n==="html"||n==="head"||n==="body"?27:5;else e:switch(n){case te:return n=Gt(31,s,i,f),n.elementType=te,n.lanes=h,n;case T:return hi(s.children,f,h,i);case C:y=8,f|=24;break;case A:return n=Gt(12,s,i,f|2),n.elementType=A,n.lanes=h,n;case Z:return n=Gt(13,s,i,f),n.elementType=Z,n.lanes=h,n;case M:return n=Gt(19,s,i,f),n.elementType=M,n.lanes=h,n;default:if(typeof n=="object"&&n!==null)switch(n.$$typeof){case x:y=10;break e;case O:y=9;break e;case B:y=11;break e;case N:y=14;break e;case Y:y=16,l=null;break e}y=29,s=Error(r(130,n===null?"null":typeof n,"")),l=null}return i=Gt(y,s,i,f),i.elementType=n,i.type=l,i.lanes=h,i}function hi(n,i,s,l){return n=Gt(7,n,l,i),n.lanes=s,n}function Ou(n,i,s){return n=Gt(6,n,null,i),n.lanes=s,n}function Vp(n){var i=Gt(18,null,null,0);return i.stateNode=n,i}function Lu(n,i,s){return i=Gt(4,n.children!==null?n.children:[],n.key,i),i.lanes=s,i.stateNode={containerInfo:n.containerInfo,pendingChildren:null,implementation:n.implementation},i}var Kp=new WeakMap;function nn(n,i){if(typeof n=="object"&&n!==null){var s=Kp.get(n);return s!==void 0?s:(i={value:n,source:i,stack:Vh(i)},Kp.set(n,i),i)}return{value:n,source:i,stack:Vh(i)}}var Wi=[],Xi=0,Qo=null,us=0,an=[],rn=0,wa=null,Cn=1,An="";function $n(n,i){Wi[Xi++]=us,Wi[Xi++]=Qo,Qo=n,us=i}function Yp(n,i,s){an[rn++]=Cn,an[rn++]=An,an[rn++]=wa,wa=n;var l=Cn;n=An;var f=32-$t(l)-1;l&=~(1<<f),s+=1;var h=32-$t(i)+f;if(30<h){var y=f-f%5;h=(l&(1<<y)-1).toString(32),l>>=y,f-=y,Cn=1<<32-$t(i)+f|s<<f|l,An=h+n}else Cn=1<<h|s<<f|l,An=n}function Nu(n){n.return!==null&&($n(n,1),Yp(n,1,0))}function zu(n){for(;n===Qo;)Qo=Wi[--Xi],Wi[Xi]=null,us=Wi[--Xi],Wi[Xi]=null;for(;n===wa;)wa=an[--rn],an[rn]=null,An=an[--rn],an[rn]=null,Cn=an[--rn],an[rn]=null}function Qp(n,i){an[rn++]=Cn,an[rn++]=An,an[rn++]=wa,Cn=i.id,An=i.overflow,wa=n}var _t=null,We=null,Oe=!1,_a=null,sn=!1,qu=Error(r(519));function Sa(n){var i=Error(r(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw ds(nn(i,n)),qu}function Jp(n){var i=n.stateNode,s=n.type,l=n.memoizedProps;switch(i[wt]=n,i[zt]=l,s){case"dialog":Ae("cancel",i),Ae("close",i);break;case"iframe":case"object":case"embed":Ae("load",i);break;case"video":case"audio":for(s=0;s<zs.length;s++)Ae(zs[s],i);break;case"source":Ae("error",i);break;case"img":case"image":case"link":Ae("error",i),Ae("load",i);break;case"details":Ae("toggle",i);break;case"input":Ae("invalid",i),cp(i,l.value,l.defaultValue,l.checked,l.defaultChecked,l.type,l.name,!0);break;case"select":Ae("invalid",i);break;case"textarea":Ae("invalid",i),dp(i,l.value,l.defaultValue,l.children)}s=l.children,typeof s!="string"&&typeof s!="number"&&typeof s!="bigint"||i.textContent===""+s||l.suppressHydrationWarning===!0||hv(i.textContent,s)?(l.popover!=null&&(Ae("beforetoggle",i),Ae("toggle",i)),l.onScroll!=null&&Ae("scroll",i),l.onScrollEnd!=null&&Ae("scrollend",i),l.onClick!=null&&(i.onclick=Bn),i=!0):i=!1,i||Sa(n,!0)}function Zp(n){for(_t=n.return;_t;)switch(_t.tag){case 5:case 31:case 13:sn=!1;return;case 27:case 3:sn=!0;return;default:_t=_t.return}}function er(n){if(n!==_t)return!1;if(!Oe)return Zp(n),Oe=!0,!1;var i=n.tag,s;if((s=i!==3&&i!==27)&&((s=i===5)&&(s=n.type,s=!(s!=="form"&&s!=="button")||Wd(n.type,n.memoizedProps)),s=!s),s&&We&&Sa(n),Zp(n),i===13){if(n=n.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));We=Sv(n)}else if(i===31){if(n=n.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(317));We=Sv(n)}else i===27?(i=We,ja(n.type)?(n=af,af=null,We=n):We=i):We=_t?ln(n.stateNode.nextSibling):null;return!0}function pi(){We=_t=null,Oe=!1}function Du(){var n=_a;return n!==null&&(Mt===null?Mt=n:Mt.push.apply(Mt,n),_a=null),n}function ds(n){_a===null?_a=[n]:_a.push(n)}var ju=R(null),mi=null,Hn=null;function Ta(n,i,s){Q(ju,i._currentValue),i._currentValue=s}function Gn(n){n._currentValue=ju.current,F(ju)}function Pu(n,i,s){for(;n!==null;){var l=n.alternate;if((n.childLanes&i)!==i?(n.childLanes|=i,l!==null&&(l.childLanes|=i)):l!==null&&(l.childLanes&i)!==i&&(l.childLanes|=i),n===s)break;n=n.return}}function Mu(n,i,s,l){var f=n.child;for(f!==null&&(f.return=n);f!==null;){var h=f.dependencies;if(h!==null){var y=f.child;h=h.firstContext;e:for(;h!==null;){var _=h;h=f;for(var E=0;E<i.length;E++)if(_.context===i[E]){h.lanes|=s,_=h.alternate,_!==null&&(_.lanes|=s),Pu(h.return,s,n),l||(y=null);break e}h=_.next}}else if(f.tag===18){if(y=f.return,y===null)throw Error(r(341));y.lanes|=s,h=y.alternate,h!==null&&(h.lanes|=s),Pu(y,s,n),y=null}else y=f.child;if(y!==null)y.return=f;else for(y=f;y!==null;){if(y===n){y=null;break}if(f=y.sibling,f!==null){f.return=y.return,y=f;break}y=y.return}f=y}}function tr(n,i,s,l){n=null;for(var f=i,h=!1;f!==null;){if(!h){if((f.flags&524288)!==0)h=!0;else if((f.flags&262144)!==0)break}if(f.tag===10){var y=f.alternate;if(y===null)throw Error(r(387));if(y=y.memoizedProps,y!==null){var _=f.type;Ht(f.pendingProps.value,y.value)||(n!==null?n.push(_):n=[_])}}else if(f===he.current){if(y=f.alternate,y===null)throw Error(r(387));y.memoizedState.memoizedState!==f.memoizedState.memoizedState&&(n!==null?n.push(Ms):n=[Ms])}f=f.return}n!==null&&Mu(i,n,s,l),i.flags|=262144}function Jo(n){for(n=n.firstContext;n!==null;){if(!Ht(n.context._currentValue,n.memoizedValue))return!0;n=n.next}return!1}function gi(n){mi=n,Hn=null,n=n.dependencies,n!==null&&(n.firstContext=null)}function St(n){return Wp(mi,n)}function Zo(n,i){return mi===null&&gi(n),Wp(n,i)}function Wp(n,i){var s=i._currentValue;if(i={context:i,memoizedValue:s,next:null},Hn===null){if(n===null)throw Error(r(308));Hn=i,n.dependencies={lanes:0,firstContext:i},n.flags|=524288}else Hn=Hn.next=i;return s}var hS=typeof AbortController<"u"?AbortController:function(){var n=[],i=this.signal={aborted:!1,addEventListener:function(s,l){n.push(l)}};this.abort=function(){i.aborted=!0,n.forEach(function(s){return s()})}},pS=t.unstable_scheduleCallback,mS=t.unstable_NormalPriority,ot={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Uu(){return{controller:new hS,data:new Map,refCount:0}}function fs(n){n.refCount--,n.refCount===0&&pS(mS,function(){n.controller.abort()})}var hs=null,Bu=0,nr=0,ar=null;function gS(n,i){if(hs===null){var s=hs=[];Bu=0,nr=$d(),ar={status:"pending",value:void 0,then:function(l){s.push(l)}}}return Bu++,i.then(Xp,Xp),i}function Xp(){if(--Bu===0&&hs!==null){ar!==null&&(ar.status="fulfilled");var n=hs;hs=null,nr=0,ar=null;for(var i=0;i<n.length;i++)(0,n[i])()}}function vS(n,i){var s=[],l={status:"pending",value:null,reason:null,then:function(f){s.push(f)}};return n.then(function(){l.status="fulfilled",l.value=i;for(var f=0;f<s.length;f++)(0,s[f])(i)},function(f){for(l.status="rejected",l.reason=f,f=0;f<s.length;f++)(0,s[f])(void 0)}),l}var em=j.S;j.S=function(n,i){Pg=It(),typeof i=="object"&&i!==null&&typeof i.then=="function"&&gS(n,i),em!==null&&em(n,i)};var vi=R(null);function Iu(){var n=vi.current;return n!==null?n:Ge.pooledCache}function Wo(n,i){i===null?Q(vi,vi.current):Q(vi,i.pool)}function tm(){var n=Iu();return n===null?null:{parent:ot._currentValue,pool:n}}var ir=Error(r(460)),Fu=Error(r(474)),Xo=Error(r(542)),el={then:function(){}};function nm(n){return n=n.status,n==="fulfilled"||n==="rejected"}function am(n,i,s){switch(s=n[s],s===void 0?n.push(i):s!==i&&(i.then(Bn,Bn),i=s),i.status){case"fulfilled":return i.value;case"rejected":throw n=i.reason,rm(n),n;default:if(typeof i.status=="string")i.then(Bn,Bn);else{if(n=Ge,n!==null&&100<n.shellSuspendCounter)throw Error(r(482));n=i,n.status="pending",n.then(function(l){if(i.status==="pending"){var f=i;f.status="fulfilled",f.value=l}},function(l){if(i.status==="pending"){var f=i;f.status="rejected",f.reason=l}})}switch(i.status){case"fulfilled":return i.value;case"rejected":throw n=i.reason,rm(n),n}throw bi=i,ir}}function yi(n){try{var i=n._init;return i(n._payload)}catch(s){throw s!==null&&typeof s=="object"&&typeof s.then=="function"?(bi=s,ir):s}}var bi=null;function im(){if(bi===null)throw Error(r(459));var n=bi;return bi=null,n}function rm(n){if(n===ir||n===Xo)throw Error(r(483))}var rr=null,ps=0;function tl(n){var i=ps;return ps+=1,rr===null&&(rr=[]),am(rr,n,i)}function ms(n,i){i=i.props.ref,n.ref=i!==void 0?i:null}function nl(n,i){throw i.$$typeof===b?Error(r(525)):(n=Object.prototype.toString.call(i),Error(r(31,n==="[object Object]"?"object with keys {"+Object.keys(i).join(", ")+"}":n)))}function sm(n){function i(L,k){if(n){var z=L.deletions;z===null?(L.deletions=[k],L.flags|=16):z.push(k)}}function s(L,k){if(!n)return null;for(;k!==null;)i(L,k),k=k.sibling;return null}function l(L){for(var k=new Map;L!==null;)L.key!==null?k.set(L.key,L):k.set(L.index,L),L=L.sibling;return k}function f(L,k){return L=Fn(L,k),L.index=0,L.sibling=null,L}function h(L,k,z){return L.index=z,n?(z=L.alternate,z!==null?(z=z.index,z<k?(L.flags|=67108866,k):z):(L.flags|=67108866,k)):(L.flags|=1048576,k)}function y(L){return n&&L.alternate===null&&(L.flags|=67108866),L}function _(L,k,z,I){return k===null||k.tag!==6?(k=Ou(z,L.mode,I),k.return=L,k):(k=f(k,z),k.return=L,k)}function E(L,k,z,I){var de=z.type;return de===T?U(L,k,z.props.children,I,z.key):k!==null&&(k.elementType===de||typeof de=="object"&&de!==null&&de.$$typeof===Y&&yi(de)===k.type)?(k=f(k,z.props),ms(k,z),k.return=L,k):(k=Yo(z.type,z.key,z.props,null,L.mode,I),ms(k,z),k.return=L,k)}function q(L,k,z,I){return k===null||k.tag!==4||k.stateNode.containerInfo!==z.containerInfo||k.stateNode.implementation!==z.implementation?(k=Lu(z,L.mode,I),k.return=L,k):(k=f(k,z.children||[]),k.return=L,k)}function U(L,k,z,I,de){return k===null||k.tag!==7?(k=hi(z,L.mode,I,de),k.return=L,k):(k=f(k,z),k.return=L,k)}function $(L,k,z){if(typeof k=="string"&&k!==""||typeof k=="number"||typeof k=="bigint")return k=Ou(""+k,L.mode,z),k.return=L,k;if(typeof k=="object"&&k!==null){switch(k.$$typeof){case w:return z=Yo(k.type,k.key,k.props,null,L.mode,z),ms(z,k),z.return=L,z;case S:return k=Lu(k,L.mode,z),k.return=L,k;case Y:return k=yi(k),$(L,k,z)}if(ce(k)||G(k))return k=hi(k,L.mode,z,null),k.return=L,k;if(typeof k.then=="function")return $(L,tl(k),z);if(k.$$typeof===x)return $(L,Zo(L,k),z);nl(L,k)}return null}function D(L,k,z,I){var de=k!==null?k.key:null;if(typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint")return de!==null?null:_(L,k,""+z,I);if(typeof z=="object"&&z!==null){switch(z.$$typeof){case w:return z.key===de?E(L,k,z,I):null;case S:return z.key===de?q(L,k,z,I):null;case Y:return z=yi(z),D(L,k,z,I)}if(ce(z)||G(z))return de!==null?null:U(L,k,z,I,null);if(typeof z.then=="function")return D(L,k,tl(z),I);if(z.$$typeof===x)return D(L,k,Zo(L,z),I);nl(L,z)}return null}
vendor: 6,389 bytes, line 9
9function P(L,k,z,I,de){if(typeof I=="string"&&I!==""||typeof I=="number"||typeof I=="bigint")return L=L.get(z)||null,_(k,L,""+I,de);if(typeof I=="object"&&I!==null){switch(I.$$typeof){case w:return L=L.get(I.key===null?z:I.key)||null,E(k,L,I,de);case S:return L=L.get(I.key===null?z:I.key)||null,q(k,L,I,de);case Y:return I=yi(I),P(L,k,z,I,de)}if(ce(I)||G(I))return L=L.get(z)||null,U(k,L,I,de,null);if(typeof I.then=="function")return P(L,k,z,tl(I),de);if(I.$$typeof===x)return P(L,k,z,Zo(k,I),de);nl(k,I)}return null}function ne(L,k,z,I){for(var de=null,ze=null,oe=k,Se=k=0,xe=null;oe!==null&&Se<z.length;Se++){oe.index>Se?(xe=oe,oe=null):xe=oe.sibling;var qe=D(L,oe,z[Se],I);if(qe===null){oe===null&&(oe=xe);break}n&&oe&&qe.alternate===null&&i(L,oe),k=h(qe,k,Se),ze===null?de=qe:ze.sibling=qe,ze=qe,oe=xe}if(Se===z.length)return s(L,oe),Oe&&$n(L,Se),de;if(oe===null){for(;Se<z.length;Se++)oe=$(L,z[Se],I),oe!==null&&(k=h(oe,k,Se),ze===null?de=oe:ze.sibling=oe,ze=oe);return Oe&&$n(L,Se),de}for(oe=l(oe);Se<z.length;Se++)xe=P(oe,L,Se,z[Se],I),xe!==null&&(n&&xe.alternate!==null&&oe.delete(xe.key===null?Se:xe.key),k=h(xe,k,Se),ze===null?de=xe:ze.sibling=xe,ze=xe);return n&&oe.forEach(function(Ia){return i(L,Ia)}),Oe&&$n(L,Se),de}function pe(L,k,z,I){if(z==null)throw Error(r(151));for(var de=null,ze=null,oe=k,Se=k=0,xe=null,qe=z.next();oe!==null&&!qe.done;Se++,qe=z.next()){oe.index>Se?(xe=oe,oe=null):xe=oe.sibling;var Ia=D(L,oe,qe.value,I);if(Ia===null){oe===null&&(oe=xe);break}n&&oe&&Ia.alternate===null&&i(L,oe),k=h(Ia,k,Se),ze===null?de=Ia:ze.sibling=Ia,ze=Ia,oe=xe}if(qe.done)return s(L,oe),Oe&&$n(L,Se),de;if(oe===null){for(;!qe.done;Se++,qe=z.next())qe=$(L,qe.value,I),qe!==null&&(k=h(qe,k,Se),ze===null?de=qe:ze.sibling=qe,ze=qe);return Oe&&$n(L,Se),de}for(oe=l(oe);!qe.done;Se++,qe=z.next())qe=P(oe,L,Se,qe.value,I),qe!==null&&(n&&qe.alternate!==null&&oe.delete(qe.key===null?Se:qe.key),k=h(qe,k,Se),ze===null?de=qe:ze.sibling=qe,ze=qe);return n&&oe.forEach(function(R1){return i(L,R1)}),Oe&&$n(L,Se),de}function $e(L,k,z,I){if(typeof z=="object"&&z!==null&&z.type===T&&z.key===null&&(z=z.props.children),typeof z=="object"&&z!==null){switch(z.$$typeof){case w:e:{for(var de=z.key;k!==null;){if(k.key===de){if(de=z.type,de===T){if(k.tag===7){s(L,k.sibling),I=f(k,z.props.children),I.return=L,L=I;break e}}else if(k.elementType===de||typeof de=="object"&&de!==null&&de.$$typeof===Y&&yi(de)===k.type){s(L,k.sibling),I=f(k,z.props),ms(I,z),I.return=L,L=I;break e}s(L,k);break}else i(L,k);k=k.sibling}z.type===T?(I=hi(z.props.children,L.mode,I,z.key),I.return=L,L=I):(I=Yo(z.type,z.key,z.props,null,L.mode,I),ms(I,z),I.return=L,L=I)}return y(L);case S:e:{for(de=z.key;k!==null;){if(k.key===de)if(k.tag===4&&k.stateNode.containerInfo===z.containerInfo&&k.stateNode.implementation===z.implementation){s(L,k.sibling),I=f(k,z.children||[]),I.return=L,L=I;break e}else{s(L,k);break}else i(L,k);k=k.sibling}I=Lu(z,L.mode,I),I.return=L,L=I}return y(L);case Y:return z=yi(z),$e(L,k,z,I)}if(ce(z))return ne(L,k,z,I);if(G(z)){if(de=G(z),typeof de!="function")throw Error(r(150));return z=de.call(z),pe(L,k,z,I)}if(typeof z.then=="function")return $e(L,k,tl(z),I);if(z.$$typeof===x)return $e(L,k,Zo(L,z),I);nl(L,z)}return typeof z=="string"&&z!==""||typeof z=="number"||typeof z=="bigint"?(z=""+z,k!==null&&k.tag===6?(s(L,k.sibling),I=f(k,z),I.return=L,L=I):(s(L,k),I=Ou(z,L.mode,I),I.return=L,L=I),y(L)):s(L,k)}return function(L,k,z,I){try{ps=0;var de=$e(L,k,z,I);return rr=null,de}catch(oe){if(oe===ir||oe===Xo)throw oe;var ze=Gt(29,oe,null,L.mode);return ze.lanes=I,ze.return=L,ze}}}var wi=sm(!0),om=sm(!1),Ea=!1;function $u(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Hu(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Ca(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function Aa(n,i,s){var l=n.updateQueue;if(l===null)return null;if(l=l.shared,(Me&2)!==0){var f=l.pending;return f===null?i.next=i:(i.next=f.next,f.next=i),l.pending=i,i=Ko(n),Hp(n,null,s),i}return Vo(n,l,i,s),Ko(n)}function gs(n,i,s){if(i=i.updateQueue,i!==null&&(i=i.shared,(s&4194048)!==0)){var l=i.lanes;l&=n.pendingLanes,s|=l,i.lanes=s,Wh(n,s)}}function Gu(n,i){var s=n.updateQueue,l=n.alternate;if(l!==null&&(l=l.updateQueue,s===l)){var f=null,h=null;if(s=s.firstBaseUpdate,s!==null){do{var y={lane:s.lane,tag:s.tag,payload:s.payload,callback:null,next:null};h===null?f=h=y:h=h.next=y,s=s.next}while(s!==null);h===null?f=h=i:h=h.next=i}else f=h=i;s={baseState:l.baseState,firstBaseUpdate:f,lastBaseUpdate:h,shared:l.shared,callbacks:l.callbacks},n.updateQueue=s;return}n=s.lastBaseUpdate,n===null?s.firstBaseUpdate=i:n.next=i,s.lastBaseUpdate=i}var Vu=!1;function vs(){if(Vu){var n=ar;if(n!==null)throw n}}function ys(n,i,s,l){Vu=!1;var f=n.updateQueue;Ea=!1;var h=f.firstBaseUpdate,y=f.lastBaseUpdate,_=f.shared.pending;if(_!==null){f.shared.pending=null;var E=_,q=E.next;E.next=null,y===null?h=q:y.next=q,y=E;var U=n.alternate;U!==null&&(U=U.updateQueue,_=U.lastBaseUpdate,_!==y&&(_===null?U.firstBaseUpdate=q:_.next=q,U.lastBaseUpdate=E))}if(h!==null){var $=f.baseState;y=0,U=q=E=null,_=h;do{var D=_.lane&-536870913,P=D!==_.lane;if(P?(Re&D)===D:(l&D)===D){D!==0&&D===nr&&(Vu=!0),U!==null&&(U=U.next={lane:0,tag:_.tag,payload:_.payload,callback:null,next:null});e:{var ne=n,pe=_;D=i;var $e=s;switch(pe.tag){case 1:if(ne=pe.payload,typeof ne=="function"){$=ne.call($e,$,D);break e}$=ne;break e;case 3:ne.flags=ne.flags&-65537|128;case 0:if(ne=pe.payload,D=typeof ne=="function"?ne.call($e,$,D):ne,D==null)break e;$=v({},$,D);break e;case 2:Ea=!0}}D=_.callback,D!==null&&(n.flags|=64,P&&(n.flags|=8192),P=f.callbacks,P===null?f.callbacks=[D]:P.push(D))}else P={lane:D,tag:_.tag,payload:_.payload,callback:_.callback,next:null},U===null?(q=U=P,E=$):U=U.next=P,y|=D;if(_=_.next,_===null){if(_=f.shared.pending,_===null)break;P=_,_=P.next,P.next=null,f.lastBaseUpdate=P,f.shared.pending=null}}while(!0);U===null&&(E=$),f.baseState=E,f.firstBaseUpdate=q,f.lastBaseUpdate=U,h===null&&(f.shared.lanes=0),La|=y,n.lanes=y,n.memoizedState=$}}function lm(n,i){if(typeof n!="function")throw Error(r(191,n));n.call(i)}function cm(n,i){var s=n.callbacks;
vendor: 4,109 bytes, line 9
9if(s!==null)for(n.callbacks=null,n=0;n<s.length;n++)lm(s[n],i)}var sr=R(null),al=R(0);function um(n,i){n=ea,Q(al,n),Q(sr,i),ea=n|i.baseLanes}function Ku(){Q(al,ea),Q(sr,sr.current)}function Yu(){ea=al.current,F(sr),F(al)}var Vt=R(null),on=null;function ka(n){var i=n.alternate;Q(rt,rt.current&1),Q(Vt,n),on===null&&(i===null||sr.current!==null||i.memoizedState!==null)&&(on=n)}function Qu(n){Q(rt,rt.current),Q(Vt,n),on===null&&(on=n)}function dm(n){n.tag===22?(Q(rt,rt.current),Q(Vt,n),on===null&&(on=n)):Ra()}function Ra(){Q(rt,rt.current),Q(Vt,Vt.current)}function Kt(n){F(Vt),on===n&&(on=null),F(rt)}var rt=R(0);function il(n){for(var i=n;i!==null;){if(i.tag===13){var s=i.memoizedState;if(s!==null&&(s=s.dehydrated,s===null||tf(s)||nf(s)))return i}else if(i.tag===19&&(i.memoizedProps.revealOrder==="forwards"||i.memoizedProps.revealOrder==="backwards"||i.memoizedProps.revealOrder==="unstable_legacy-backwards"||i.memoizedProps.revealOrder==="together")){if((i.flags&128)!==0)return i}else if(i.child!==null){i.child.return=i,i=i.child;continue}if(i===n)break;for(;i.sibling===null;){if(i.return===null||i.return===n)return null;i=i.return}i.sibling.return=i.return,i=i.sibling}return null}var Vn=0,_e=null,Ie=null,lt=null,rl=!1,or=!1,_i=!1,sl=0,bs=0,lr=null,yS=0;function tt(){throw Error(r(321))}function Ju(n,i){if(i===null)return!1;for(var s=0;s<i.length&&s<n.length;s++)if(!Ht(n[s],i[s]))return!1;return!0}function Zu(n,i,s,l,f,h){return Vn=h,_e=i,i.memoizedState=null,i.updateQueue=null,i.lanes=0,j.H=n===null||n.memoizedState===null?Ym:fd,_i=!1,h=s(l,f),_i=!1,or&&(h=hm(i,s,l,f)),fm(n),h}function fm(n){j.H=Ss;var i=Ie!==null&&Ie.next!==null;if(Vn=0,lt=Ie=_e=null,rl=!1,bs=0,lr=null,i)throw Error(r(300));n===null||ct||(n=n.dependencies,n!==null&&Jo(n)&&(ct=!0))}function hm(n,i,s,l){_e=n;var f=0;do{if(or&&(lr=null),bs=0,or=!1,25<=f)throw Error(r(301));if(f+=1,lt=Ie=null,n.updateQueue!=null){var h=n.updateQueue;h.lastEffect=null,h.events=null,h.stores=null,h.memoCache!=null&&(h.memoCache.index=0)}j.H=Qm,h=i(s,l)}while(or);return h}function bS(){var n=j.H,i=n.useState()[0];return i=typeof i.then=="function"?ws(i):i,n=n.useState()[0],(Ie!==null?Ie.memoizedState:null)!==n&&(_e.flags|=1024),i}function Wu(){var n=sl!==0;return sl=0,n}function Xu(n,i,s){i.updateQueue=n.updateQueue,i.flags&=-2053,n.lanes&=~s}function ed(n){if(rl){for(n=n.memoizedState;n!==null;){var i=n.queue;i!==null&&(i.pending=null),n=n.next}rl=!1}Vn=0,lt=Ie=_e=null,or=!1,bs=sl=0,lr=null}function Ot(){var n={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return lt===null?_e.memoizedState=lt=n:lt=lt.next=n,lt}function st(){if(Ie===null){var n=_e.alternate;n=n!==null?n.memoizedState:null}else n=Ie.next;var i=lt===null?_e.memoizedState:lt.next;if(i!==null)lt=i,Ie=n;else{if(n===null)throw _e.alternate===null?Error(r(467)):Error(r(310));Ie=n,n={memoizedState:Ie.memoizedState,baseState:Ie.baseState,baseQueue:Ie.baseQueue,queue:Ie.queue,next:null},lt===null?_e.memoizedState=lt=n:lt=lt.next=n}return lt}function ol(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function ws(n){var i=bs;return bs+=1,lr===null&&(lr=[]),n=am(lr,n,i),i=_e,(lt===null?i.memoizedState:lt.next)===null&&(i=i.alternate,j.H=i===null||i.memoizedState===null?Ym:fd),n}function ll(n){if(n!==null&&typeof n=="object"){if(typeof n.then=="function")return ws(n);if(n.$$typeof===x)return St(n)}throw Error(r(438,String(n)))}function td(n){var i=null,s=_e.updateQueue;if(s!==null&&(i=s.memoCache),i==null){var l=_e.alternate;l!==null&&(l=l.updateQueue,l!==null&&(l=l.memoCache,l!=null&&(i={data:l.data.map(function(f){return f.slice()}),index:0})))}if(i==null&&(i={data:[],index:0}),s===null&&(s=ol(),_e.updateQueue=s),s.memoCache=i,s=i.data[i.index],s===void 0)for(s=i.data[i.index]=Array(n),l=0;l<n;l++)s[l]=ue;return i.index++,s}function Kn(n,i){return typeof i=="function"?i(n):i}function cl(n){var i=st();return nd(i,Ie,n)}function nd(n,i,s){var l=n.queue;if(l===null)throw Error(r(311));l.lastRenderedReducer=s;var f=n.baseQueue,h=l.pending;if(h!==null){if(f!==null){var y=f.next;f.next=h.next,h.next=y}
vendor: 5,035 bytes, line 9
9i.baseQueue=f=h,l.pending=null}if(h=n.baseState,f===null)n.memoizedState=h;else{i=f.next;var _=y=null,E=null,q=i,U=!1;do{var $=q.lane&-536870913;if($!==q.lane?(Re&$)===$:(Vn&$)===$){var D=q.revertLane;if(D===0)E!==null&&(E=E.next={lane:0,revertLane:0,gesture:null,action:q.action,hasEagerState:q.hasEagerState,eagerState:q.eagerState,next:null}),$===nr&&(U=!0);else if((Vn&D)===D){q=q.next,D===nr&&(U=!0);continue}else $={lane:0,revertLane:q.revertLane,gesture:null,action:q.action,hasEagerState:q.hasEagerState,eagerState:q.eagerState,next:null},E===null?(_=E=$,y=h):E=E.next=$,_e.lanes|=D,La|=D;$=q.action,_i&&s(h,$),h=q.hasEagerState?q.eagerState:s(h,$)}else D={lane:$,revertLane:q.revertLane,gesture:q.gesture,action:q.action,hasEagerState:q.hasEagerState,eagerState:q.eagerState,next:null},E===null?(_=E=D,y=h):E=E.next=D,_e.lanes|=$,La|=$;q=q.next}while(q!==null&&q!==i);if(E===null?y=h:E.next=_,!Ht(h,n.memoizedState)&&(ct=!0,U&&(s=ar,s!==null)))throw s;n.memoizedState=h,n.baseState=y,n.baseQueue=E,l.lastRenderedState=h}return f===null&&(l.lanes=0),[n.memoizedState,l.dispatch]}function ad(n){var i=st(),s=i.queue;if(s===null)throw Error(r(311));s.lastRenderedReducer=n;var l=s.dispatch,f=s.pending,h=i.memoizedState;if(f!==null){s.pending=null;var y=f=f.next;do h=n(h,y.action),y=y.next;while(y!==f);Ht(h,i.memoizedState)||(ct=!0),i.memoizedState=h,i.baseQueue===null&&(i.baseState=h),s.lastRenderedState=h}return[h,l]}function pm(n,i,s){var l=_e,f=st(),h=Oe;if(h){if(s===void 0)throw Error(r(407));s=s()}else s=i();var y=!Ht((Ie||f).memoizedState,s);if(y&&(f.memoizedState=s,ct=!0),f=f.queue,sd(vm.bind(null,l,f,n),[n]),f.getSnapshot!==i||y||lt!==null&&lt.memoizedState.tag&1){if(l.flags|=2048,cr(9,{destroy:void 0},gm.bind(null,l,f,s,i),null),Ge===null)throw Error(r(349));h||(Vn&127)!==0||mm(l,i,s)}return s}function mm(n,i,s){n.flags|=16384,n={getSnapshot:i,value:s},i=_e.updateQueue,i===null?(i=ol(),_e.updateQueue=i,i.stores=[n]):(s=i.stores,s===null?i.stores=[n]:s.push(n))}function gm(n,i,s,l){i.value=s,i.getSnapshot=l,ym(i)&&bm(n)}function vm(n,i,s){return s(function(){ym(i)&&bm(n)})}function ym(n){var i=n.getSnapshot;n=n.value;try{var s=i();return!Ht(n,s)}catch{return!0}}function bm(n){var i=fi(n,2);i!==null&&Ut(i,n,2)}function id(n){var i=Ot();if(typeof n=="function"){var s=n;if(n=s(),_i){va(!0);try{s()}finally{va(!1)}}}return i.memoizedState=i.baseState=n,i.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Kn,lastRenderedState:n},i}function wm(n,i,s,l){return n.baseState=s,nd(n,Ie,typeof l=="function"?l:Kn)}function wS(n,i,s,l,f){if(fl(n))throw Error(r(485));if(n=i.action,n!==null){var h={payload:f,action:n,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(y){h.listeners.push(y)}};j.T!==null?s(!0):h.isTransition=!1,l(h),s=i.pending,s===null?(h.next=i.pending=h,_m(i,h)):(h.next=s.next,i.pending=s.next=h)}}function _m(n,i){var s=i.action,l=i.payload,f=n.state;if(i.isTransition){var h=j.T,y={};j.T=y;try{var _=s(f,l),E=j.S;E!==null&&E(y,_),Sm(n,i,_)}catch(q){rd(n,i,q)}finally{h!==null&&y.types!==null&&(h.types=y.types),j.T=h}}else try{h=s(f,l),Sm(n,i,h)}catch(q){rd(n,i,q)}}function Sm(n,i,s){s!==null&&typeof s=="object"&&typeof s.then=="function"?s.then(function(l){Tm(n,i,l)},function(l){return rd(n,i,l)}):Tm(n,i,s)}function Tm(n,i,s){i.status="fulfilled",i.value=s,Em(i),n.state=s,i=n.pending,i!==null&&(s=i.next,s===i?n.pending=null:(s=s.next,i.next=s,_m(n,s)))}function rd(n,i,s){var l=n.pending;if(n.pending=null,l!==null){l=l.next;do i.status="rejected",i.reason=s,Em(i),i=i.next;while(i!==l)}n.action=null}function Em(n){n=n.listeners;for(var i=0;i<n.length;i++)(0,n[i])()}function Cm(n,i){return i}function Am(n,i){if(Oe){var s=Ge.formState;if(s!==null){e:{var l=_e;if(Oe){if(We){t:{for(var f=We,h=sn;f.nodeType!==8;){if(!h){f=null;break t}if(f=ln(f.nextSibling),f===null){f=null;break t}}h=f.data,f=h==="F!"||h==="F"?f:null}if(f){We=ln(f.nextSibling),l=f.data==="F!";break e}}Sa(l)}l=!1}l&&(i=s[0])}}return s=Ot(),s.memoizedState=s.baseState=i,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Cm,lastRenderedState:i},s.queue=l,s=Gm.bind(null,_e,l),l.dispatch=s,l=id(!1),h=dd.bind(null,_e,!1,l.queue),l=Ot(),f={state:i,dispatch:null,action:n,pending:null},l.queue=f,s=wS.bind(null,_e,f,h,s),f.dispatch=s,l.memoizedState=n,[i,s,!1]}function km(n){var i=st();return Rm(i,Ie,n)}function Rm(n,i,s){if(i=nd(n,i,Cm)[0],n=cl(Kn)[0],typeof i=="object"&&i!==null&&typeof i.then=="function")try{var l=ws(i)}catch(y){throw y===ir?Xo:y}else l=i;i=st();var f=i.queue,h=f.dispatch;return s!==i.memoizedState&&(_e.flags|=2048,cr(9,{destroy:void 0},_S.bind(null,f,s),null)),[l,h,n]}function _S(n,i){n.action=i}function xm(n){var i=st(),s=Ie;if(s!==null)return Rm(i,s,n);st(),i=i.memoizedState,s=st();var l=s.queue.dispatch;return s.memoizedState=n,[i,l,!1]}function cr(n,i,s,l){return n={tag:n,create:s,deps:l,inst:i,next:null},i=_e.updateQueue,i===null&&(i=ol(),_e.updateQueue=i),s=i.lastEffect,s===null?i.lastEffect=n.next=n:(l=s.next,
vendor: 5,327 bytes, line 9
9s.next=n,n.next=l,i.lastEffect=n),n}function Om(){return st().memoizedState}function ul(n,i,s,l){var f=Ot();_e.flags|=n,f.memoizedState=cr(1|i,{destroy:void 0},s,l===void 0?null:l)}function dl(n,i,s,l){var f=st();l=l===void 0?null:l;var h=f.memoizedState.inst;Ie!==null&&l!==null&&Ju(l,Ie.memoizedState.deps)?f.memoizedState=cr(i,h,s,l):(_e.flags|=n,f.memoizedState=cr(1|i,h,s,l))}function Lm(n,i){ul(8390656,8,n,i)}function sd(n,i){dl(2048,8,n,i)}function SS(n){_e.flags|=4;var i=_e.updateQueue;if(i===null)i=ol(),_e.updateQueue=i,i.events=[n];else{var s=i.events;s===null?i.events=[n]:s.push(n)}}function Nm(n){var i=st().memoizedState;return SS({ref:i,nextImpl:n}),function(){if((Me&2)!==0)throw Error(r(440));return i.impl.apply(void 0,arguments)}}function zm(n,i){return dl(4,2,n,i)}function qm(n,i){return dl(4,4,n,i)}function Dm(n,i){if(typeof i=="function"){n=n();var s=i(n);return function(){typeof s=="function"?s():i(null)}}if(i!=null)return n=n(),i.current=n,function(){i.current=null}}function jm(n,i,s){s=s!=null?s.concat([n]):null,dl(4,4,Dm.bind(null,i,n),s)}function od(){}function Pm(n,i){var s=st();i=i===void 0?null:i;var l=s.memoizedState;return i!==null&&Ju(i,l[1])?l[0]:(s.memoizedState=[n,i],n)}function Mm(n,i){var s=st();i=i===void 0?null:i;var l=s.memoizedState;if(i!==null&&Ju(i,l[1]))return l[0];if(l=n(),_i){va(!0);try{n()}finally{va(!1)}}return s.memoizedState=[l,i],l}function ld(n,i,s){return s===void 0||(Vn&1073741824)!==0&&(Re&261930)===0?n.memoizedState=i:(n.memoizedState=s,n=Ug(),_e.lanes|=n,La|=n,s)}function Um(n,i,s,l){return Ht(s,i)?s:sr.current!==null?(n=ld(n,s,l),Ht(n,i)||(ct=!0),n):(Vn&42)===0||(Vn&1073741824)!==0&&(Re&261930)===0?(ct=!0,n.memoizedState=s):(n=Ug(),_e.lanes|=n,La|=n,i)}function Bm(n,i,s,l,f){var h=J.p;J.p=h!==0&&8>h?h:8;var y=j.T,_={};j.T=_,dd(n,!1,i,s);try{var E=f(),q=j.S;if(q!==null&&q(_,E),E!==null&&typeof E=="object"&&typeof E.then=="function"){var U=vS(E,l);_s(n,i,U,Jt(n))}else _s(n,i,l,Jt(n))}catch($){_s(n,i,{then:function(){},status:"rejected",reason:$},Jt())}finally{J.p=h,y!==null&&_.types!==null&&(y.types=_.types),j.T=y}}function TS(){}function cd(n,i,s,l){if(n.tag!==5)throw Error(r(476));var f=Im(n).queue;Bm(n,f,i,fe,s===null?TS:function(){return Fm(n),s(l)})}function Im(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:fe,baseState:fe,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Kn,lastRenderedState:fe},next:null};var s={};return i.next={memoizedState:s,baseState:s,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Kn,lastRenderedState:s},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Fm(n){var i=Im(n);i.next===null&&(i=n.alternate.memoizedState),_s(n,i.next.queue,{},Jt())}function ud(){return St(Ms)}function $m(){return st().memoizedState}function Hm(){return st().memoizedState}function ES(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var s=Jt();n=Ca(s);var l=Aa(i,n,s);l!==null&&(Ut(l,i,s),gs(l,i,s)),i={cache:Uu()},n.payload=i;return}i=i.return}}function CS(n,i,s){var l=Jt();s={lane:l,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null},fl(n)?Vm(i,s):(s=Ru(n,i,s,l),s!==null&&(Ut(s,n,l),Km(s,i,l)))}function Gm(n,i,s){var l=Jt();_s(n,i,s,l)}function _s(n,i,s,l){var f={lane:l,revertLane:0,gesture:null,action:s,hasEagerState:!1,eagerState:null,next:null};if(fl(n))Vm(i,f);else{var h=n.alternate;if(n.lanes===0&&(h===null||h.lanes===0)&&(h=i.lastRenderedReducer,h!==null))try{var y=i.lastRenderedState,_=h(y,s);if(f.hasEagerState=!0,f.eagerState=_,Ht(_,y))return Vo(n,i,f,0),Ge===null&&Go(),!1}catch{}if(s=Ru(n,i,f,l),s!==null)return Ut(s,n,l),Km(s,i,l),!0}return!1}function dd(n,i,s,l){if(l={lane:2,revertLane:$d(),gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},fl(n)){if(i)throw Error(r(479))}else i=Ru(n,s,l,2),i!==null&&Ut(i,n,2)}function fl(n){var i=n.alternate;return n===_e||i!==null&&i===_e}function Vm(n,i){or=rl=!0;var s=n.pending;s===null?i.next=i:(i.next=s.next,s.next=i),n.pending=i}function Km(n,i,s){if((s&4194048)!==0){var l=i.lanes;l&=n.pendingLanes,s|=l,i.lanes=s,Wh(n,s)}}var Ss={readContext:St,use:ll,useCallback:tt,useContext:tt,useEffect:tt,useImperativeHandle:tt,useLayoutEffect:tt,useInsertionEffect:tt,useMemo:tt,useReducer:tt,useRef:tt,useState:tt,useDebugValue:tt,useDeferredValue:tt,useTransition:tt,useSyncExternalStore:tt,useId:tt,useHostTransitionStatus:tt,useFormState:tt,useActionState:tt,useOptimistic:tt,useMemoCache:tt,useCacheRefresh:tt};Ss.useEffectEvent=tt;var Ym={readContext:St,use:ll,useCallback:function(n,i){return Ot().memoizedState=[n,i===void 0?null:i],n},useContext:St,useEffect:Lm,useImperativeHandle:function(n,i,s){s=s!=null?s.concat([n]):null,ul(4194308,4,Dm.bind(null,i,n),s)},useLayoutEffect:function(n,i){return ul(4194308,4,n,i)},useInsertionEffect:function(n,i){ul(4,2,n,i)},useMemo:function(n,i){var s=Ot();i=i===void 0?null:i;var l=n();if(_i){va(!0);try{n()}finally{va(!1)}}return s.memoizedState=[l,i],l},useReducer:function(n,i,s){var l=Ot();if(s!==void 0){var f=s(i);if(_i){va(!0);try{s(i)}finally{va(!1)}}}else f=i;return l.memoizedState=l.baseState=f,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:f},l.queue=n,n=n.dispatch=CS.bind(null,_e,n),[l.memoizedState,n]}
vendor: 20,249 bytes, line 9
9,useRef:function(n){var i=Ot();return n={current:n},i.memoizedState=n},useState:function(n){n=id(n);var i=n.queue,s=Gm.bind(null,_e,i);return i.dispatch=s,[n.memoizedState,s]},useDebugValue:od,useDeferredValue:function(n,i){var s=Ot();return ld(s,n,i)},useTransition:function(){var n=id(!1);return n=Bm.bind(null,_e,n.queue,!0,!1),Ot().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,s){var l=_e,f=Ot();if(Oe){if(s===void 0)throw Error(r(407));s=s()}else{if(s=i(),Ge===null)throw Error(r(349));(Re&127)!==0||mm(l,i,s)}f.memoizedState=s;var h={value:s,getSnapshot:i};return f.queue=h,Lm(vm.bind(null,l,h,n),[n]),l.flags|=2048,cr(9,{destroy:void 0},gm.bind(null,l,h,s,i),null),s},useId:function(){var n=Ot(),i=Ge.identifierPrefix;if(Oe){var s=An,l=Cn;s=(l&~(1<<32-$t(l)-1)).toString(32)+s,i="_"+i+"R_"+s,s=sl++,0<s&&(i+="H"+s.toString(32)),i+="_"}else s=yS++,i="_"+i+"r_"+s.toString(32)+"_";return n.memoizedState=i},useHostTransitionStatus:ud,useFormState:Am,useActionState:Am,useOptimistic:function(n){var i=Ot();i.memoizedState=i.baseState=n;var s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return i.queue=s,i=dd.bind(null,_e,!0,s),s.dispatch=i,[n,i]},useMemoCache:td,useCacheRefresh:function(){return Ot().memoizedState=ES.bind(null,_e)},useEffectEvent:function(n){var i=Ot(),s={impl:n};return i.memoizedState=s,function(){if((Me&2)!==0)throw Error(r(440));return s.impl.apply(void 0,arguments)}}},fd={readContext:St,use:ll,useCallback:Pm,useContext:St,useEffect:sd,useImperativeHandle:jm,useInsertionEffect:zm,useLayoutEffect:qm,useMemo:Mm,useReducer:cl,useRef:Om,useState:function(){return cl(Kn)},useDebugValue:od,useDeferredValue:function(n,i){var s=st();return Um(s,Ie.memoizedState,n,i)},useTransition:function(){var n=cl(Kn)[0],i=st().memoizedState;return[typeof n=="boolean"?n:ws(n),i]},useSyncExternalStore:pm,useId:$m,useHostTransitionStatus:ud,useFormState:km,useActionState:km,useOptimistic:function(n,i){var s=st();return wm(s,Ie,n,i)},useMemoCache:td,useCacheRefresh:Hm};fd.useEffectEvent=Nm;var Qm={readContext:St,use:ll,useCallback:Pm,useContext:St,useEffect:sd,useImperativeHandle:jm,useInsertionEffect:zm,useLayoutEffect:qm,useMemo:Mm,useReducer:ad,useRef:Om,useState:function(){return ad(Kn)},useDebugValue:od,useDeferredValue:function(n,i){var s=st();return Ie===null?ld(s,n,i):Um(s,Ie.memoizedState,n,i)},useTransition:function(){var n=ad(Kn)[0],i=st().memoizedState;return[typeof n=="boolean"?n:ws(n),i]},useSyncExternalStore:pm,useId:$m,useHostTransitionStatus:ud,useFormState:xm,useActionState:xm,useOptimistic:function(n,i){var s=st();return Ie!==null?wm(s,Ie,n,i):(s.baseState=n,[n,s.queue.dispatch])},useMemoCache:td,useCacheRefresh:Hm};Qm.useEffectEvent=Nm;function hd(n,i,s,l){i=n.memoizedState,s=s(l,i),s=s==null?i:v({},i,s),n.memoizedState=s,n.lanes===0&&(n.updateQueue.baseState=s)}var pd={enqueueSetState:function(n,i,s){n=n._reactInternals;var l=Jt(),f=Ca(l);f.payload=i,s!=null&&(f.callback=s),i=Aa(n,f,l),i!==null&&(Ut(i,n,l),gs(i,n,l))},enqueueReplaceState:function(n,i,s){n=n._reactInternals;var l=Jt(),f=Ca(l);f.tag=1,f.payload=i,s!=null&&(f.callback=s),i=Aa(n,f,l),i!==null&&(Ut(i,n,l),gs(i,n,l))},enqueueForceUpdate:function(n,i){n=n._reactInternals;var s=Jt(),l=Ca(s);l.tag=2,i!=null&&(l.callback=i),i=Aa(n,l,s),i!==null&&(Ut(i,n,s),gs(i,n,s))}};function Jm(n,i,s,l,f,h,y){return n=n.stateNode,typeof n.shouldComponentUpdate=="function"?n.shouldComponentUpdate(l,h,y):i.prototype&&i.prototype.isPureReactComponent?!ls(s,l)||!ls(f,h):!0}function Zm(n,i,s,l){n=i.state,typeof i.componentWillReceiveProps=="function"&&i.componentWillReceiveProps(s,l),typeof i.UNSAFE_componentWillReceiveProps=="function"&&i.UNSAFE_componentWillReceiveProps(s,l),i.state!==n&&pd.enqueueReplaceState(i,i.state,null)}function Si(n,i){var s=i;if("ref"in i){s={};for(var l in i)l!=="ref"&&(s[l]=i[l])}if(n=n.defaultProps){s===i&&(s=v({},s));for(var f in n)s[f]===void 0&&(s[f]=n[f])}return s}function Wm(n){Ho(n)}function Xm(n){console.error(n)}function eg(n){Ho(n)}function hl(n,i){try{var s=n.onUncaughtError;s(i.value,{componentStack:i.stack})}catch(l){setTimeout(function(){throw l})}}function tg(n,i,s){try{var l=n.onCaughtError;l(s.value,{componentStack:s.stack,errorBoundary:i.tag===1?i.stateNode:null})}catch(f){setTimeout(function(){throw f})}}function md(n,i,s){return s=Ca(s),s.tag=3,s.payload={element:null},s.callback=function(){hl(n,i)},s}function ng(n){return n=Ca(n),n.tag=3,n}function ag(n,i,s,l){var f=s.type.getDerivedStateFromError;if(typeof f=="function"){var h=l.value;n.payload=function(){return f(h)},n.callback=function(){tg(i,s,l)}}var y=s.stateNode;y!==null&&typeof y.componentDidCatch=="function"&&(n.callback=function(){tg(i,s,l),typeof f!="function"&&(Na===null?Na=new Set([this]):Na.add(this));var _=l.stack;this.componentDidCatch(l.value,{componentStack:_!==null?_:""})})}function AS(n,i,s,l,f){if(s.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){if(i=s.alternate,i!==null&&tr(i,s,f,!0),s=Vt.current,s!==null){switch(s.tag){case 31:case 13:return on===null?Cl():s.alternate===null&&nt===0&&(nt=3),s.flags&=-257,s.flags|=65536,s.lanes=f,l===el?s.flags|=16384:(i=s.updateQueue,i===null?s.updateQueue=new Set([l]):i.add(l),Bd(n,l,f)),!1;case 22:return s.flags|=65536,l===el?s.flags|=16384:(i=s.updateQueue,i===null?(i={transitions:null,markerInstances:null,retryQueue:new Set([l])},s.updateQueue=i):(s=i.retryQueue,s===null?i.retryQueue=new Set([l]):s.add(l)),Bd(n,l,f)),!1}throw Error(r(435,s.tag))}return Bd(n,l,f),Cl(),!1}if(Oe)return i=Vt.current,i!==null?((i.flags&65536)===0&&(i.flags|=256),i.flags|=65536,i.lanes=f,l!==qu&&(n=Error(r(422),{cause:l}),ds(nn(n,s)))):(l!==qu&&(i=Error(r(423),{cause:l}),ds(nn(i,s))),n=n.current.alternate,n.flags|=65536,f&=-f,n.lanes|=f,l=nn(l,s),f=md(n.stateNode,l,f),Gu(n,f),nt!==4&&(nt=2)),!1;var h=Error(r(520),{cause:l});if(h=nn(h,s),Os===null?Os=[h]:Os.push(h),nt!==4&&(nt=2),i===null)return!0;l=nn(l,s),s=i;do{switch(s.tag){case 3:return s.flags|=65536,n=f&-f,s.lanes|=n,n=md(s.stateNode,l,n),Gu(s,n),!1;case 1:if(i=s.type,h=s.stateNode,(s.flags&128)===0&&(typeof i.getDerivedStateFromError=="function"||h!==null&&typeof h.componentDidCatch=="function"&&(Na===null||!Na.has(h))))return s.flags|=65536,f&=-f,s.lanes|=f,f=ng(f),ag(f,n,s,l),Gu(s,f),!1}s=s.return}while(s!==null);return!1}var gd=Error(r(461)),ct=!1;function Tt(n,i,s,l){i.child=n===null?om(i,null,s,l):wi(i,n.child,s,l)}function ig(n,i,s,l,f){s=s.render;var h=i.ref;if("ref"in l){var y={};for(var _ in l)_!=="ref"&&(y[_]=l[_])}else y=l;return gi(i),l=Zu(n,i,s,y,h,f),_=Wu(),n!==null&&!ct?(Xu(n,i,f),Yn(n,i,f)):(Oe&&_&&Nu(i),i.flags|=1,Tt(n,i,l,f),i.child)}function rg(n,i,s,l,f){if(n===null){var h=s.type;return typeof h=="function"&&!xu(h)&&h.defaultProps===void 0&&s.compare===null?(i.tag=15,i.type=h,sg(n,i,h,l,f)):(n=Yo(s.type,null,l,i,i.mode,f),n.ref=i.ref,n.return=i,i.child=n)}if(h=n.child,!Ed(n,f)){var y=h.memoizedProps;if(s=s.compare,s=s!==null?s:ls,s(y,l)&&n.ref===i.ref)return Yn(n,i,f)}return i.flags|=1,n=Fn(h,l),n.ref=i.ref,n.return=i,i.child=n}function sg(n,i,s,l,f){if(n!==null){var h=n.memoizedProps;if(ls(h,l)&&n.ref===i.ref)if(ct=!1,i.pendingProps=l=h,Ed(n,f))(n.flags&131072)!==0&&(ct=!0);else return i.lanes=n.lanes,Yn(n,i,f)}return vd(n,i,s,l,f)}function og(n,i,s,l){var f=l.children,h=n!==null?n.memoizedState:null;if(n===null&&i.stateNode===null&&(i.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),l.mode==="hidden"){if((i.flags&128)!==0){if(h=h!==null?h.baseLanes|s:s,n!==null){for(l=i.child=n.child,f=0;l!==null;)f=f|l.lanes|l.childLanes,l=l.sibling;l=f&~h}else l=0,i.child=null;return lg(n,i,h,s,l)}if((s&536870912)!==0)i.memoizedState={baseLanes:0,cachePool:null},n!==null&&Wo(i,h!==null?h.cachePool:null),h!==null?um(i,h):Ku(),dm(i);else return l=i.lanes=536870912,lg(n,i,h!==null?h.baseLanes|s:s,s,l)}else h!==null?(Wo(i,h.cachePool),um(i,h),Ra(),i.memoizedState=null):(n!==null&&Wo(i,null),Ku(),Ra());return Tt(n,i,f,s),i.child}function Ts(n,i){return n!==null&&n.tag===22||i.stateNode!==null||(i.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),i.sibling}function lg(n,i,s,l,f){var h=Iu();return h=h===null?null:{parent:ot._currentValue,pool:h},i.memoizedState={baseLanes:s,cachePool:h},n!==null&&Wo(i,null),Ku(),dm(i),n!==null&&tr(n,i,l,!0),i.childLanes=f,null}function pl(n,i){return i=gl({mode:i.mode,children:i.children},n.mode),i.ref=n.ref,n.child=i,i.return=n,i}function cg(n,i,s){return wi(i,n.child,null,s),n=pl(i,i.pendingProps),n.flags|=2,Kt(i),i.memoizedState=null,n}function kS(n,i,s){var l=i.pendingProps,f=(i.flags&128)!==0;if(i.flags&=-129,n===null){if(Oe){if(l.mode==="hidden")return n=pl(i,l),i.lanes=536870912,Ts(null,n);if(Qu(i),(n=We)?(n=_v(n,sn),n=n!==null&&n.data==="&"?n:null,n!==null&&(i.memoizedState={dehydrated:n,treeContext:wa!==null?{id:Cn,overflow:An}:null,retryLane:536870912,hydrationErrors:null},s=Vp(n),s.return=i,i.child=s,_t=i,We=null)):n=null,n===null)throw Sa(i);return i.lanes=536870912,null}return pl(i,l)}var h=n.memoizedState;if(h!==null){var y=h.dehydrated;if(Qu(i),f)if(i.flags&256)i.flags&=-257,i=cg(n,i,s);else if(i.memoizedState!==null)i.child=n.child,i.flags|=128,i=null;else throw Error(r(558));else if(ct||tr(n,i,s,!1),f=(s&n.childLanes)!==0,ct||f){if(l=Ge,l!==null&&(y=Xh(l,s),y!==0&&y!==h.retryLane))throw h.retryLane=y,fi(n,y),Ut(l,n,y),gd;Cl(),i=cg(n,i,s)}else n=h.treeContext,We=ln(y.nextSibling),_t=i,Oe=!0,_a=null,sn=!1,n!==null&&Qp(i,n),i=pl(i,l),i.flags|=4096;return i}return n=Fn(n.child,{mode:l.mode,children:l.children}),n.ref=i.ref,i.child=n,n.return=i,n}function ml(n,i){var s=i.ref;if(s===null)n!==null&&n.ref!==null&&(i.flags|=4194816);else{if(typeof s!="function"&&typeof s!="object")throw Error(r(284));(n===null||n.ref!==s)&&(i.flags|=4194816)}}function vd(n,i,s,l,f){return gi(i),s=Zu(n,i,s,l,void 0,f),l=Wu(),n!==null&&!ct?(Xu(n,i,f),Yn(n,i,f)):(Oe&&l&&Nu(i),i.flags|=1,Tt(n,i,s,f),i.child)}function ug(n,i,s,l,f,h){return gi(i),i.updateQueue=null,s=hm(i,l,s,f),fm(n),l=Wu(),n!==null&&!ct?(Xu(n,i,h),Yn(n,i,h)):(Oe&&l&&Nu(i),i.flags|=1,Tt(n,i,s,h),i.child)}function dg(n,i,s,l,f){if(gi(i),i.stateNode===null){var h=Zi,y=s.contextType;typeof y=="object"&&y!==null&&(h=St(y)),h=new s(l,h),i.memoizedState=h.state!==null&&h.state!==void 0?h.state:null,h.updater=pd,i.stateNode=h,h._reactInternals=i,h=i.stateNode,h.props=l,h.state=i.memoizedState,h.refs={},$u(i),y=s.contextType,h.context=typeof y=="object"&&y!==null?St(y):Zi,h.state=i.memoizedState,y=s.getDerivedStateFromProps,typeof y=="function"&&(hd(i,s,y,l),h.state=i.memoizedState),typeof s.getDerivedStateFromProps=="function"||typeof h.getSnapshotBeforeUpdate=="function"||typeof h.UNSAFE_componentWillMount!="function"&&typeof h.componentWillMount!="function"||(y=h.state,typeof h.componentWillMount=="function"&&h.componentWillMount(),typeof h.UNSAFE_componentWillMount=="function"&&h.UNSAFE_componentWillMount(),y!==h.state&&pd.enqueueReplaceState(h,h.state,null),ys(i,l,h,f),vs(),h.state=i.memoizedState),typeof h.componentDidMount=="function"&&(i.flags|=4194308),l=!0}else if(n===null){h=i.stateNode;var _=i.memoizedProps,E=Si(s,_);h.props=E;var q=h.context,U=s.contextType;y=Zi,typeof U=="object"&&U!==null&&(y=St(U));var $=s.getDerivedStateFromProps;U=typeof $=="function"||typeof h.getSnapshotBeforeUpdate=="function",_=i.pendingProps!==_,U||typeof h.UNSAFE_componentWillReceiveProps!="function"&&typeof h.componentWillReceiveProps!="function"||(_||q!==y)&&Zm(i,h,l,y),Ea=!1;var D=i.memoizedState;h.state=D,ys(i,l,h,f),vs(),q=i.memoizedState,_||D!==q||Ea?(typeof $=="function"&&(hd(i,s,$,l),q=i.memoizedState),(E=Ea||Jm(i,s,E,l,D,q,y))?(U||typeof h.UNSAFE_componentWillMount!="function"&&typeof h.componentWillMount!="function"||(typeof h.componentWillMount=="function"&&h.componentWillMount(),typeof h.UNSAFE_componentWillMount=="function"&&h.UNSAFE_componentWillMount()),typeof h.componentDidMount=="function"&&(i.flags|=4194308)):(typeof h.componentDidMount=="function"&&(i.flags|=4194308),i.memoizedProps=l,i.memoizedState=q),h.props=l,h.state=q,h.context=y,l=E):(typeof h.componentDidMount=="function"&&(i.flags|=4194308),l=!1)}else{h=i.stateNode,Hu(n,i),y=i.memoizedProps,U=Si(s,y),h.props=U,$=i.pendingProps,D=h.context,q=s.contextType,E=Zi,typeof q=="object"&&q!==null&&(E=St(q)),_=s.getDerivedStateFromProps,(q=typeof _=="function"||typeof h.getSnapshotBeforeUpdate=="function")||typeof h.UNSAFE_componentWillReceiveProps!="function"&&typeof h.componentWillReceiveProps!="function"||(y!==$||D!==E)&&Zm(i,h,l,E),Ea=!1,D=i.memoizedState,h.state=D,ys(i,l,h,f),vs();var P=i.memoizedState;y!==$||D!==P||Ea||n!==null&&n.dependencies!==null&&Jo(n.dependencies)?(typeof _=="function"&&(hd(i,s,_,l),P=i.memoizedState),(U=Ea||Jm(i,s,U,l,D,P,E)||n!==null&&n.dependencies!==null&&Jo(n.dependencies))?(q||typeof h.UNSAFE_componentWillUpdate!="function"&&typeof h.componentWillUpdate!="function"||(typeof h.componentWillUpdate=="function"&&h.componentWillUpdate(l,P,E),typeof h.UNSAFE_componentWillUpdate=="function"&&h.UNSAFE_componentWillUpdate(l,P,E)),typeof h.componentDidUpdate=="function"&&(i.flags|=4),typeof h.getSnapshotBeforeUpdate=="function"&&(i.flags|=1024)):(typeof h.componentDidUpdate!="function"||y===n.memoizedProps&&D===n.memoizedState||(i.flags|=4),typeof h.getSnapshotBeforeUpdate!="function"||y===n.memoizedProps&&D===n.memoizedState||(i.flags|=1024),i.memoizedProps=l,i.memoizedState=P),h.props=l,h.state=P,h.context=E,l=U):(typeof h.componentDidUpdate!="function"||y===n.memoizedProps&&D===n.memoizedState||(i.flags|=4),typeof h.getSnapshotBeforeUpdate!="function"||y===n.memoizedProps&&D===n.memoizedState||(i.flags|=1024),l=!1)}return h=l,ml(n,i),l=(i.flags&128)!==0,h||l?(h=i.stateNode,s=l&&typeof s.getDerivedStateFromError!="function"?null:h.render(),i.flags|=1,n!==null&&l?(i.child=wi(i,n.child,null,f),i.child=wi(i,null,s,f)):Tt(n,i,s,f),i.memoizedState=h.state,n=i.child):n=Yn(n,i,f),n}function fg(n,i,s,l){return pi(),i.flags|=256,Tt(n,i,s,l),i.child}var yd={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function bd(n){return{baseLanes:n,cachePool:tm()}}function wd(n,i,s){return n=n!==null?n.childLanes&~s:0,i&&(n|=Qt),n}function hg(n,i,s){var l=i.pendingProps,f=!1,h=(i.flags&128)!==0,y;if((y=h)||(y=n!==null&&n.memoizedState===null?!1:(rt.current&2)!==0),y&&(f=!0,i.flags&=-129),y=(i.flags&32)!==0,i.flags&=-33,n===null){if(Oe){if(f?ka(i):Ra(),(n=We)?(n=_v(n,sn),n=n!==null&&n.data!=="&"?n:null,n!==null&&(i.memoizedState={dehydrated:n,treeContext:wa!==null?{id:Cn,overflow:An}:null,retryLane:536870912,hydrationErrors:null},s=Vp(n),s.return=i,i.child=s,_t=i,We=null)):n=null,n===null)throw Sa(i);return nf(n)?i.lanes=32:i.lanes=536870912,null}var _=l.children;return l=l.fallback,f?(Ra(),f=i.mode,_=gl({mode:"hidden",children:_},f),l=hi(l,f,s,null),_.return=i,l.return=i,_.sibling=l,i.child=_,l=i.child,l.memoizedState=bd(s),l.childLanes=wd(n,y,s),i.memoizedState=yd,Ts(null,l)):(ka(i),_d(i,_))}var E=n.memoizedState;if(E!==null&&(_=E.dehydrated,_!==null)){if(h)i.flags&256?(ka(i),i.flags&=-257,i=Sd(n,i,s)):i.memoizedState!==null?(Ra(),i.child=n.child,i.flags|=128,i=null):(Ra(),_=l.fallback,f=i.mode,l=gl({mode:"visible",children:l.children},f),_=hi(_,f,s,null),_.flags|=2,l.return=i,_.return=i,l.sibling=_,i.child=l,wi(i,n.child,null,s),l=i.child,l.memoizedState=bd(s),l.childLanes=wd(n,y,s),i.memoizedState=yd,i=Ts(null,l));else if(ka(i),nf(_)){if(y=_.nextSibling&&_.nextSibling.dataset,y)var q=y.dgst;y=q,l=Error(r(419)),l.stack="",l.digest=y,ds({value:l,source:null,stack:null}),i=Sd(n,i,s)}else if(ct||tr(n,i,s,!1),y=(s&n.childLanes)!==0,ct||y){if(y=Ge,y!==null&&(l=Xh(y,s),l!==0&&l!==E.retryLane))throw E.retryLane=l,fi(n,l),Ut(y,n,l),gd;tf(_)||Cl(),i=Sd(n,i,s)}else tf(_)?(i.flags|=192,i.child=n.child,i=null):(n=E.treeContext,We=ln(_.nextSibling),_t=i,Oe=!0,_a=null,sn=!1,n!==null&&Qp(i,n),i=_d(i,l.children),i.flags|=4096);return i}return f?(Ra(),_=l.fallback,f=i.mode,E=n.child,q=E.sibling,l=Fn(E,{mode:"hidden",children:l.children}),l.subtreeFlags=E.subtreeFlags&65011712,q!==null?_=Fn(q,_):(_=hi(_,f,s,null),_.flags|=2),_.return=i,l.return=i,l.sibling=_,i.child=l,Ts(null,l),l=i.child,_=n.child.memoizedState,_===null?_=bd(s):(f=_.cachePool,f!==null?(E=ot._currentValue,f=f.parent!==E?{parent:E,pool:E}:f):f=tm(),_={baseLanes:_.baseLanes|s,cachePool:f}),l.memoizedState=_,l.childLanes=wd(n,y,s),i.memoizedState=yd,Ts(n.child,l)):(ka(i),s=n.child,n=s.sibling,s=Fn(s,{mode:"visible",children:l.children}),s.return=i,s.sibling=null,n!==null&&(y=i.deletions,y===null?(i.deletions=[n],i.flags|=16):y.push(n)),i.child=s,i.memoizedState=null,s)}function _d(n,i){return i=gl({mode:"visible",children:i},n.mode),i.return=n,n.child=i}function gl(n,i){return n=Gt(22,n,null,i),n.lanes=0,n}function Sd(n,i,s){return wi(i,n.child,null,s),n=_d(i,i.pendingProps.children),n.flags|=2,i.memoizedState=null,n}function pg(n,i,s){n.lanes|=i;var l=n.alternate;l!==null&&(l.lanes|=i),Pu(n.return,i,s)}function Td(n,i,s,l,f,h){var y=n.memoizedState;y===null?n.memoizedState={isBackwards:i,rendering:null,renderingStartTime:0,last:l,tail:s,tailMode:f,treeForkCount:h}:(y.isBackwards=i,y.rendering=null,y.renderingStartTime=0,y.last=l,y.tail=s,y.tailMode=f,y.treeForkCount=h)}function mg(n,i,s){var l=i.pendingProps,f=l.revealOrder,h=l.tail;l=l.children;var y=rt.current,_=(y&2)!==0;if(_?(y=y&1|2,i.flags|=128):y&=1,Q(rt,y),Tt(n,i,l,s),l=Oe?us:0,!_&&n!==null&&(n.flags&128)!==0)e:for(n=i.child;n!==null;){if(n.tag===13)n.memoizedState!==null&&pg(n,s,i);else if(n.tag===19)pg(n,s,i);else if(n.child!==null){n.child.return=n,n=n.child;continue}if(n===i)break e;for(;n.sibling===null;){if(n.return===null||n.return===i)break e;n=n.return}n.sibling.return=n.return,n=n.sibling}switch(f){case"forwards":for(s=i.child,f=null;s!==null;)n=s.alternate,n!==null&&il(n)===null&&(f=s),s=s.sibling;s=f,s===null?(f=i.child,i.child=null):(f=s.sibling,s.sibling=null),Td(i,!1,f,s,h,l);break;case"backwards":case"unstable_legacy-backwards":for(s=null,f=i.child,i.child=null;f!==null;){if(n=f.alternate,n!==null&&il(n)===null){i.child=f;break}n=f.sibling,f.sibling=s,s=f,f=n}Td(i,!0,s,null,h,l);break;case"together":Td(i,!1,null,null,void 0,l);break;default:i.memoizedState=null}return i.child}function Yn(n,i,s){if(n!==null&&(i.dependencies=n.dependencies),La|=i.lanes,(s&i.childLanes)===0)if(n!==null){if(tr(n,i,s,!1),(s&i.childLanes)===0)return null}else return null;if(n!==null&&i.child!==n.child)throw Error(r(153));if(i.child!==null){for(n=i.child,s=Fn(n,n.pendingProps),i.child=s,s.return=i;n.sibling!==null;)n=n.sibling,s=s.sibling=Fn(n,n.pendingProps),s.return=i;s.sibling=null}return i.child}function Ed(n,i){return(n.lanes&i)!==0?!0:(n=n.dependencies,!!(n!==null&&Jo(n)))}function RS(n,i,s){switch(i.tag){case 3:Pe(i,i.stateNode.containerInfo),Ta(i,ot,n.memoizedState.cache),pi();break;case 27:case 5:En(i);break;case 4:Pe(i,i.stateNode.containerInfo);break;case 10:Ta(i,i.type,i.memoizedProps.value);break;case 31:if(i.memoizedState!==null)return i.flags|=128,Qu(i),null;break;case 13:var l=i.memoizedState;if(l!==null)return l.dehydrated!==null?(ka(i),i.flags|=128,null):(s&i.child.childLanes)!==0?hg(n,i,s):(ka(i),n=Yn(n,i,s),n!==null?n.sibling:null);ka(i);break;case 19:var f=(n.flags&128)!==0;if(l=(s&i.childLanes)!==0,l||(tr(n,i,s,!1),l=(s&i.childLanes)!==0),f){if(l)return mg(n,i,s);i.flags|=128}if(f=i.memoizedState,f!==null&&(f.rendering=null,f.tail=null,f.lastEffect=null),Q(rt,rt.current),l)break;return null;case 22:return i.lanes=0,og(n,i,s,i.pendingProps);case 24:Ta(i,ot,n.memoizedState.cache)}return Yn(n,i,s)}function gg(n,i,s){if(n!==null)if(n.memoizedProps!==i.pendingProps)ct=!0;else{if(!Ed(n,s)&&(i.flags&128)===0)return ct=!1,RS(n,i,s);ct=(n.flags&131072)!==0}else ct=!1,Oe&&(i.flags&1048576)!==0&&Yp(i,us,i.index);switch(i.lanes=0,i.tag){case 16:e:{var l=i.pendingProps;if(n=yi(i.elementType),i.type=n,typeof n=="function")xu(n)?(l=Si(n,l),i.tag=1,i=dg(null,i,n,l,s)):(i.tag=0,i=vd(null,i,n,l,s));else{if(n!=null){var f=n.$$typeof;if(f===B){i.tag=11,i=ig(null,i,n,l,s);break e}else if(f===N){i.tag=14,i=rg(null,i,n,l,s);break e}}throw i=ge(n)||n,Error(r(306,i,""))}}return i;case 0:return vd(n,i,i.type,i.pendingProps,s);
vendor: 5,862 bytes, line 9
9case 1:return l=i.type,f=Si(l,i.pendingProps),dg(n,i,l,f,s);case 3:e:{if(Pe(i,i.stateNode.containerInfo),n===null)throw Error(r(387));l=i.pendingProps;var h=i.memoizedState;f=h.element,Hu(n,i),ys(i,l,null,s);var y=i.memoizedState;if(l=y.cache,Ta(i,ot,l),l!==h.cache&&Mu(i,[ot],s,!0),vs(),l=y.element,h.isDehydrated)if(h={element:l,isDehydrated:!1,cache:y.cache},i.updateQueue.baseState=h,i.memoizedState=h,i.flags&256){i=fg(n,i,l,s);break e}else if(l!==f){f=nn(Error(r(424)),i),ds(f),i=fg(n,i,l,s);break e}else for(n=i.stateNode.containerInfo,n.nodeType===9?n=n.body:n=n.nodeName==="HTML"?n.ownerDocument.body:n,We=ln(n.firstChild),_t=i,Oe=!0,_a=null,sn=!0,s=om(i,null,l,s),i.child=s;s;)s.flags=s.flags&-3|4096,s=s.sibling;else{if(pi(),l===f){i=Yn(n,i,s);break e}Tt(n,i,l,s)}i=i.child}return i;case 26:return ml(n,i),n===null?(s=kv(i.type,null,i.pendingProps,null))?i.memoizedState=s:Oe||(s=i.type,n=i.pendingProps,l=Nl(Te.current).createElement(s),l[wt]=i,l[zt]=n,Et(l,s,n),gt(l),i.stateNode=l):i.memoizedState=kv(i.type,n.memoizedProps,i.pendingProps,n.memoizedState),null;case 27:return En(i),n===null&&Oe&&(l=i.stateNode=Ev(i.type,i.pendingProps,Te.current),_t=i,sn=!0,f=We,ja(i.type)?(af=f,We=ln(l.firstChild)):We=f),Tt(n,i,i.pendingProps.children,s),ml(n,i),n===null&&(i.flags|=4194304),i.child;case 5:return n===null&&Oe&&((f=l=We)&&(l=i1(l,i.type,i.pendingProps,sn),l!==null?(i.stateNode=l,_t=i,We=ln(l.firstChild),sn=!1,f=!0):f=!1),f||Sa(i)),En(i),f=i.type,h=i.pendingProps,y=n!==null?n.memoizedProps:null,l=h.children,Wd(f,h)?l=null:y!==null&&Wd(f,y)&&(i.flags|=32),i.memoizedState!==null&&(f=Zu(n,i,bS,null,null,s),Ms._currentValue=f),ml(n,i),Tt(n,i,l,s),i.child;case 6:return n===null&&Oe&&((n=s=We)&&(s=r1(s,i.pendingProps,sn),s!==null?(i.stateNode=s,_t=i,We=null,n=!0):n=!1),n||Sa(i)),null;case 13:return hg(n,i,s);case 4:return Pe(i,i.stateNode.containerInfo),l=i.pendingProps,n===null?i.child=wi(i,null,l,s):Tt(n,i,l,s),i.child;case 11:return ig(n,i,i.type,i.pendingProps,s);case 7:return Tt(n,i,i.pendingProps,s),i.child;case 8:return Tt(n,i,i.pendingProps.children,s),i.child;case 12:return Tt(n,i,i.pendingProps.children,s),i.child;case 10:return l=i.pendingProps,Ta(i,i.type,l.value),Tt(n,i,l.children,s),i.child;case 9:return f=i.type._context,l=i.pendingProps.children,gi(i),f=St(f),l=l(f),i.flags|=1,Tt(n,i,l,s),i.child;case 14:return rg(n,i,i.type,i.pendingProps,s);case 15:return sg(n,i,i.type,i.pendingProps,s);case 19:return mg(n,i,s);case 31:return kS(n,i,s);case 22:return og(n,i,s,i.pendingProps);case 24:return gi(i),l=St(ot),n===null?(f=Iu(),f===null&&(f=Ge,h=Uu(),f.pooledCache=h,h.refCount++,h!==null&&(f.pooledCacheLanes|=s),f=h),i.memoizedState={parent:l,cache:f},$u(i),Ta(i,ot,f)):((n.lanes&s)!==0&&(Hu(n,i),ys(i,null,null,s),vs()),f=n.memoizedState,h=i.memoizedState,f.parent!==l?(f={parent:l,cache:l},i.memoizedState=f,i.lanes===0&&(i.memoizedState=i.updateQueue.baseState=f),Ta(i,ot,l)):(l=h.cache,Ta(i,ot,l),l!==f.cache&&Mu(i,[ot],s,!0))),Tt(n,i,i.pendingProps.children,s),i.child;case 29:throw i.pendingProps}throw Error(r(156,i.tag))}function Qn(n){n.flags|=4}function Cd(n,i,s,l,f){if((i=(n.mode&32)!==0)&&(i=!1),i){if(n.flags|=16777216,(f&335544128)===f)if(n.stateNode.complete)n.flags|=8192;else if($g())n.flags|=8192;else throw bi=el,Fu}else n.flags&=-16777217}function vg(n,i){if(i.type!=="stylesheet"||(i.state.loading&4)!==0)n.flags&=-16777217;else if(n.flags|=16777216,!Nv(i))if($g())n.flags|=8192;else throw bi=el,Fu}function vl(n,i){i!==null&&(n.flags|=4),n.flags&16384&&(i=n.tag!==22?Jh():536870912,n.lanes|=i,hr|=i)}function Es(n,i){if(!Oe)switch(n.tailMode){case"hidden":i=n.tail;for(var s=null;i!==null;)i.alternate!==null&&(s=i),i=i.sibling;s===null?n.tail=null:s.sibling=null;break;case"collapsed":s=n.tail;for(var l=null;s!==null;)s.alternate!==null&&(l=s),s=s.sibling;l===null?i||n.tail===null?n.tail=null:n.tail.sibling=null:l.sibling=null}}function Xe(n){var i=n.alternate!==null&&n.alternate.child===n.child,s=0,l=0;if(i)for(var f=n.child;f!==null;)s|=f.lanes|f.childLanes,l|=f.subtreeFlags&65011712,l|=f.flags&65011712,f.return=n,f=f.sibling;else for(f=n.child;f!==null;)s|=f.lanes|f.childLanes,l|=f.subtreeFlags,l|=f.flags,f.return=n,f=f.sibling;return n.subtreeFlags|=l,n.childLanes=s,i}function xS(n,i,s){var l=i.pendingProps;switch(zu(i),i.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Xe(i),null;case 1:return Xe(i),null;case 3:return s=i.stateNode,l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),Gn(ot),Ve(),s.pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),(n===null||n.child===null)&&(er(i)?Qn(i):n===null||n.memoizedState.isDehydrated&&(i.flags&256)===0||(i.flags|=1024,Du())),Xe(i),null;case 26:var f=i.type,h=i.memoizedState;return n===null?(Qn(i),h!==null?(Xe(i),vg(i,h)):(Xe(i),Cd(i,f,null,l,s))):h?h!==n.memoizedState?(Qn(i),Xe(i),vg(i,h)):(Xe(i),i.flags&=-16777217):(n=n.memoizedProps,n!==l&&Qn(i),Xe(i),Cd(i,f,n,l,s)),null;case 27:if(ri(i),s=Te.current,f=i.type,n!==null&&i.stateNode!=null)n.memoizedProps!==l&&Qn(i);else{if(!l){if(i.stateNode===null)throw Error(r(166));return Xe(i),null}n=ae.current,er(i)?Jp(i):(n=Ev(f,l,s),i.stateNode=n,Qn(i))}return Xe(i),null;case 5:if(ri(i),f=i.type,n!==null&&i.stateNode!=null)n.memoizedProps!==l&&Qn(i);else{if(!l){if(i.stateNode===null)throw Error(r(166));return Xe(i),null}if(h=ae.current,er(i))Jp(i);else{var y=Nl(Te.current);switch(h){case 1:h=y.createElementNS("http://www.w3.org/2000/svg",f);break;case 2:h=y.createElementNS("http://www.w3.org/1998/Math/MathML",f);break;default:switch(f){case"svg":h=y.createElementNS("http://www.w3.org/2000/svg",f);break;case"math":h=y.createElementNS("http://www.w3.org/1998/Math/MathML",f);break;case"script":h=y.createElement("div"),h.innerHTML="<script><\/script>",h=h.removeChild(h.firstChild);break;
vendor: 24,756 bytes, line 9
9case"select":h=typeof l.is=="string"?y.createElement("select",{is:l.is}):y.createElement("select"),l.multiple?h.multiple=!0:l.size&&(h.size=l.size);break;default:h=typeof l.is=="string"?y.createElement(f,{is:l.is}):y.createElement(f)}}h[wt]=i,h[zt]=l;e:for(y=i.child;y!==null;){if(y.tag===5||y.tag===6)h.appendChild(y.stateNode);else if(y.tag!==4&&y.tag!==27&&y.child!==null){y.child.return=y,y=y.child;continue}if(y===i)break e;for(;y.sibling===null;){if(y.return===null||y.return===i)break e;y=y.return}y.sibling.return=y.return,y=y.sibling}i.stateNode=h;e:switch(Et(h,f,l),f){case"button":case"input":case"select":case"textarea":l=!!l.autoFocus;break e;case"img":l=!0;break e;default:l=!1}l&&Qn(i)}}return Xe(i),Cd(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,s),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==l&&Qn(i);else{if(typeof l!="string"&&i.stateNode===null)throw Error(r(166));if(n=Te.current,er(i)){if(n=i.stateNode,s=i.memoizedProps,l=null,f=_t,f!==null)switch(f.tag){case 27:case 5:l=f.memoizedProps}n[wt]=i,n=!!(n.nodeValue===s||l!==null&&l.suppressHydrationWarning===!0||hv(n.nodeValue,s)),n||Sa(i,!0)}else n=Nl(n).createTextNode(l),n[wt]=i,i.stateNode=n}return Xe(i),null;case 31:if(s=i.memoizedState,n===null||n.memoizedState!==null){if(l=er(i),s!==null){if(n===null){if(!l)throw Error(r(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(r(557));n[wt]=i}else pi(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Xe(i),n=!1}else s=Du(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=s),n=!0;if(!n)return i.flags&256?(Kt(i),i):(Kt(i),null);if((i.flags&128)!==0)throw Error(r(558))}return Xe(i),null;case 13:if(l=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(f=er(i),l!==null&&l.dehydrated!==null){if(n===null){if(!f)throw Error(r(318));if(f=i.memoizedState,f=f!==null?f.dehydrated:null,!f)throw Error(r(317));f[wt]=i}else pi(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Xe(i),f=!1}else f=Du(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=f),f=!0;if(!f)return i.flags&256?(Kt(i),i):(Kt(i),null)}return Kt(i),(i.flags&128)!==0?(i.lanes=s,i):(s=l!==null,n=n!==null&&n.memoizedState!==null,s&&(l=i.child,f=null,l.alternate!==null&&l.alternate.memoizedState!==null&&l.alternate.memoizedState.cachePool!==null&&(f=l.alternate.memoizedState.cachePool.pool),h=null,l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(h=l.memoizedState.cachePool.pool),h!==f&&(l.flags|=2048)),s!==n&&s&&(i.child.flags|=8192),vl(i,i.updateQueue),Xe(i),null);case 4:return Ve(),n===null&&Kd(i.stateNode.containerInfo),Xe(i),null;case 10:return Gn(i.type),Xe(i),null;case 19:if(F(rt),l=i.memoizedState,l===null)return Xe(i),null;if(f=(i.flags&128)!==0,h=l.rendering,h===null)if(f)Es(l,!1);else{if(nt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(h=il(n),h!==null){for(i.flags|=128,Es(l,!1),n=h.updateQueue,i.updateQueue=n,vl(i,n),i.subtreeFlags=0,n=s,s=i.child;s!==null;)Gp(s,n),s=s.sibling;return Q(rt,rt.current&1|2),Oe&&$n(i,l.treeForkCount),i.child}n=n.sibling}l.tail!==null&&It()>Sl&&(i.flags|=128,f=!0,Es(l,!1),i.lanes=4194304)}else{if(!f)if(n=il(h),n!==null){if(i.flags|=128,f=!0,n=n.updateQueue,i.updateQueue=n,vl(i,n),Es(l,!0),l.tail===null&&l.tailMode==="hidden"&&!h.alternate&&!Oe)return Xe(i),null}else 2*It()-l.renderingStartTime>Sl&&s!==536870912&&(i.flags|=128,f=!0,Es(l,!1),i.lanes=4194304);l.isBackwards?(h.sibling=i.child,i.child=h):(n=l.last,n!==null?n.sibling=h:i.child=h,l.last=h)}return l.tail!==null?(n=l.tail,l.rendering=n,l.tail=n.sibling,l.renderingStartTime=It(),n.sibling=null,s=rt.current,Q(rt,f?s&1|2:s&1),Oe&&$n(i,l.treeForkCount),n):(Xe(i),null);case 22:case 23:return Kt(i),Yu(),l=i.memoizedState!==null,n!==null?n.memoizedState!==null!==l&&(i.flags|=8192):l&&(i.flags|=8192),l?(s&536870912)!==0&&(i.flags&128)===0&&(Xe(i),i.subtreeFlags&6&&(i.flags|=8192)):Xe(i),s=i.updateQueue,s!==null&&vl(i,s.retryQueue),s=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(s=n.memoizedState.cachePool.pool),l=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(l=i.memoizedState.cachePool.pool),l!==s&&(i.flags|=2048),n!==null&&F(vi),null;case 24:return s=null,n!==null&&(s=n.memoizedState.cache),i.memoizedState.cache!==s&&(i.flags|=2048),Gn(ot),Xe(i),null;case 25:return null;case 30:return null}throw Error(r(156,i.tag))}function OS(n,i){switch(zu(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return Gn(ot),Ve(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return ri(i),null;case 31:if(i.memoizedState!==null){if(Kt(i),i.alternate===null)throw Error(r(340));pi()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Kt(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(r(340));pi()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return F(rt),null;case 4:return Ve(),null;case 10:return Gn(i.type),null;case 22:case 23:return Kt(i),Yu(),n!==null&&F(vi),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return Gn(ot),null;case 25:return null;default:return null}}function yg(n,i){switch(zu(i),i.tag){case 3:Gn(ot),Ve();break;case 26:case 27:case 5:ri(i);break;case 4:Ve();break;case 31:i.memoizedState!==null&&Kt(i);break;case 13:Kt(i);break;case 19:F(rt);break;case 10:Gn(i.type);break;case 22:case 23:Kt(i),Yu(),n!==null&&F(vi);break;case 24:Gn(ot)}}function Cs(n,i){try{var s=i.updateQueue,l=s!==null?s.lastEffect:null;if(l!==null){var f=l.next;s=f;do{if((s.tag&n)===n){l=void 0;var h=s.create,y=s.inst;l=h(),y.destroy=l}s=s.next}while(s!==f)}}catch(_){Be(i,i.return,_)}}function xa(n,i,s){try{var l=i.updateQueue,f=l!==null?l.lastEffect:null;if(f!==null){var h=f.next;l=h;do{if((l.tag&n)===n){var y=l.inst,_=y.destroy;if(_!==void 0){y.destroy=void 0,f=i;var E=s,q=_;try{q()}catch(U){Be(f,E,U)}}}l=l.next}while(l!==h)}}catch(U){Be(i,i.return,U)}}function bg(n){var i=n.updateQueue;if(i!==null){var s=n.stateNode;try{cm(i,s)}catch(l){Be(n,n.return,l)}}}function wg(n,i,s){s.props=Si(n.type,n.memoizedProps),s.state=n.memoizedState;try{s.componentWillUnmount()}catch(l){Be(n,i,l)}}function As(n,i){try{var s=n.ref;if(s!==null){switch(n.tag){case 26:case 27:case 5:var l=n.stateNode;break;case 30:l=n.stateNode;break;default:l=n.stateNode}typeof s=="function"?n.refCleanup=s(l):s.current=l}}catch(f){Be(n,i,f)}}function kn(n,i){var s=n.ref,l=n.refCleanup;if(s!==null)if(typeof l=="function")try{l()}catch(f){Be(n,i,f)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof s=="function")try{s(null)}catch(f){Be(n,i,f)}else s.current=null}function _g(n){var i=n.type,s=n.memoizedProps,l=n.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":s.autoFocus&&l.focus();break e;case"img":s.src?l.src=s.src:s.srcSet&&(l.srcset=s.srcSet)}}catch(f){Be(n,n.return,f)}}function Ad(n,i,s){try{var l=n.stateNode;WS(l,n.type,s,i),l[zt]=i}catch(f){Be(n,n.return,f)}}function Sg(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&ja(n.type)||n.tag===4}function kd(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||Sg(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&ja(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Rd(n,i,s){var l=n.tag;if(l===5||l===6)n=n.stateNode,i?(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s).insertBefore(n,i):(i=s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,i.appendChild(n),s=s._reactRootContainer,s!=null||i.onclick!==null||(i.onclick=Bn));else if(l!==4&&(l===27&&ja(n.type)&&(s=n.stateNode,i=null),n=n.child,n!==null))for(Rd(n,i,s),n=n.sibling;n!==null;)Rd(n,i,s),n=n.sibling}function yl(n,i,s){var l=n.tag;if(l===5||l===6)n=n.stateNode,i?s.insertBefore(n,i):s.appendChild(n);else if(l!==4&&(l===27&&ja(n.type)&&(s=n.stateNode),n=n.child,n!==null))for(yl(n,i,s),n=n.sibling;n!==null;)yl(n,i,s),n=n.sibling}function Tg(n){var i=n.stateNode,s=n.memoizedProps;try{for(var l=n.type,f=i.attributes;f.length;)i.removeAttributeNode(f[0]);Et(i,l,s),i[wt]=n,i[zt]=s}catch(h){Be(n,n.return,h)}}var Jn=!1,ut=!1,xd=!1,Eg=typeof WeakSet=="function"?WeakSet:Set,vt=null;function LS(n,i){if(n=n.containerInfo,Jd=Ul,n=jp(n),Su(n)){if("selectionStart"in n)var s={start:n.selectionStart,end:n.selectionEnd};else e:{s=(s=n.ownerDocument)&&s.defaultView||window;var l=s.getSelection&&s.getSelection();if(l&&l.rangeCount!==0){s=l.anchorNode;var f=l.anchorOffset,h=l.focusNode;l=l.focusOffset;try{s.nodeType,h.nodeType}catch{s=null;break e}var y=0,_=-1,E=-1,q=0,U=0,$=n,D=null;t:for(;;){for(var P;$!==s||f!==0&&$.nodeType!==3||(_=y+f),$!==h||l!==0&&$.nodeType!==3||(E=y+l),$.nodeType===3&&(y+=$.nodeValue.length),(P=$.firstChild)!==null;)D=$,$=P;for(;;){if($===n)break t;if(D===s&&++q===f&&(_=y),D===h&&++U===l&&(E=y),(P=$.nextSibling)!==null)break;$=D,D=$.parentNode}$=P}s=_===-1||E===-1?null:{start:_,end:E}}else s=null}s=s||{start:0,end:0}}else s=null;for(Zd={focusedElem:n,selectionRange:s},Ul=!1,vt=i;vt!==null;)if(i=vt,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,vt=n;else for(;vt!==null;){switch(i=vt,h=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(s=0;s<n.length;s++)f=n[s],f.ref.impl=f.nextImpl;break;case 11:case 15:break;case 1:if((n&1024)!==0&&h!==null){n=void 0,s=i,f=h.memoizedProps,h=h.memoizedState,l=s.stateNode;try{var ne=Si(s.type,f);n=l.getSnapshotBeforeUpdate(ne,h),l.__reactInternalSnapshotBeforeUpdate=n}catch(pe){Be(s,s.return,pe)}}break;case 3:if((n&1024)!==0){if(n=i.stateNode.containerInfo,s=n.nodeType,s===9)ef(n);else if(s===1)switch(n.nodeName){case"HEAD":case"HTML":case"BODY":ef(n);break;default:n.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((n&1024)!==0)throw Error(r(163))}if(n=i.sibling,n!==null){n.return=i.return,vt=n;break}vt=i.return}}function Cg(n,i,s){var l=s.flags;switch(s.tag){case 0:case 11:case 15:Wn(n,s),l&4&&Cs(5,s);break;case 1:if(Wn(n,s),l&4)if(n=s.stateNode,i===null)try{n.componentDidMount()}catch(y){Be(s,s.return,y)}else{var f=Si(s.type,i.memoizedProps);i=i.memoizedState;try{n.componentDidUpdate(f,i,n.__reactInternalSnapshotBeforeUpdate)}catch(y){Be(s,s.return,y)}}l&64&&bg(s),l&512&&As(s,s.return);break;case 3:if(Wn(n,s),l&64&&(n=s.updateQueue,n!==null)){if(i=null,s.child!==null)switch(s.child.tag){case 27:case 5:i=s.child.stateNode;break;case 1:i=s.child.stateNode}try{cm(n,i)}catch(y){Be(s,s.return,y)}}break;case 27:i===null&&l&4&&Tg(s);case 26:case 5:Wn(n,s),i===null&&l&4&&_g(s),l&512&&As(s,s.return);break;case 12:Wn(n,s);break;case 31:Wn(n,s),l&4&&Rg(n,s);break;case 13:Wn(n,s),l&4&&xg(n,s),l&64&&(n=s.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&(s=BS.bind(null,s),s1(n,s))));break;case 22:if(l=s.memoizedState!==null||Jn,!l){i=i!==null&&i.memoizedState!==null||ut,f=Jn;var h=ut;Jn=l,(ut=i)&&!h?Xn(n,s,(s.subtreeFlags&8772)!==0):Wn(n,s),Jn=f,ut=h}break;case 30:break;default:Wn(n,s)}}function Ag(n){var i=n.alternate;i!==null&&(n.alternate=null,Ag(i)),n.child=null,n.deletions=null,n.sibling=null,n.tag===5&&(i=n.stateNode,i!==null&&ru(i)),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}var et=null,Dt=!1;function Zn(n,i,s){for(s=s.child;s!==null;)kg(n,i,s),s=s.sibling}function kg(n,i,s){if(Ft&&typeof Ft.onCommitFiberUnmount=="function")try{Ft.onCommitFiberUnmount(Jr,s)}catch{}switch(s.tag){case 26:ut||kn(s,i),Zn(n,i,s),s.memoizedState?s.memoizedState.count--:s.stateNode&&(s=s.stateNode,s.parentNode.removeChild(s));break;case 27:ut||kn(s,i);var l=et,f=Dt;ja(s.type)&&(et=s.stateNode,Dt=!1),Zn(n,i,s),Ds(s.stateNode),et=l,Dt=f;break;case 5:ut||kn(s,i);case 6:if(l=et,f=Dt,et=null,Zn(n,i,s),et=l,Dt=f,et!==null)if(Dt)try{(et.nodeType===9?et.body:et.nodeName==="HTML"?et.ownerDocument.body:et).removeChild(s.stateNode)}catch(h){Be(s,i,h)}else try{et.removeChild(s.stateNode)}catch(h){Be(s,i,h)}break;case 18:et!==null&&(Dt?(n=et,bv(n.nodeType===9?n.body:n.nodeName==="HTML"?n.ownerDocument.body:n,s.stateNode),_r(n)):bv(et,s.stateNode));break;case 4:l=et,f=Dt,et=s.stateNode.containerInfo,Dt=!0,Zn(n,i,s),et=l,Dt=f;break;case 0:case 11:case 14:case 15:xa(2,s,i),ut||xa(4,s,i),Zn(n,i,s);break;case 1:ut||(kn(s,i),l=s.stateNode,typeof l.componentWillUnmount=="function"&&wg(s,i,l)),Zn(n,i,s);break;case 21:Zn(n,i,s);break;case 22:ut=(l=ut)||s.memoizedState!==null,Zn(n,i,s),ut=l;break;default:Zn(n,i,s)}}function Rg(n,i){if(i.memoizedState===null&&(n=i.alternate,n!==null&&(n=n.memoizedState,n!==null))){n=n.dehydrated;try{_r(n)}catch(s){Be(i,i.return,s)}}}function xg(n,i){if(i.memoizedState===null&&(n=i.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null))))try{_r(n)}catch(s){Be(i,i.return,s)}}function NS(n){switch(n.tag){case 31:case 13:case 19:var i=n.stateNode;return i===null&&(i=n.stateNode=new Eg),i;case 22:return n=n.stateNode,i=n._retryCache,i===null&&(i=n._retryCache=new Eg),i;default:throw Error(r(435,n.tag))}}function bl(n,i){var s=NS(n);i.forEach(function(l){if(!s.has(l)){s.add(l);var f=IS.bind(null,n,l);l.then(f,f)}})}function jt(n,i){var s=i.deletions;if(s!==null)for(var l=0;l<s.length;l++){var f=s[l],h=n,y=i,_=y;e:for(;_!==null;){switch(_.tag){case 27:if(ja(_.type)){et=_.stateNode,Dt=!1;break e}break;case 5:et=_.stateNode,Dt=!1;break e;case 3:case 4:et=_.stateNode.containerInfo,Dt=!0;break e}_=_.return}if(et===null)throw Error(r(160));kg(h,y,f),et=null,Dt=!1,h=f.alternate,h!==null&&(h.return=null),f.return=null}if(i.subtreeFlags&13886)for(i=i.child;i!==null;)Og(i,n),i=i.sibling}var pn=null;function Og(n,i){var s=n.alternate,l=n.flags;switch(n.tag){case 0:case 11:case 14:case 15:jt(i,n),Pt(n),l&4&&(xa(3,n,n.return),Cs(3,n),xa(5,n,n.return));break;case 1:jt(i,n),Pt(n),l&512&&(ut||s===null||kn(s,s.return)),l&64&&Jn&&(n=n.updateQueue,n!==null&&(l=n.callbacks,l!==null&&(s=n.shared.hiddenCallbacks,n.shared.hiddenCallbacks=s===null?l:s.concat(l))));break;case 26:var f=pn;if(jt(i,n),Pt(n),l&512&&(ut||s===null||kn(s,s.return)),l&4){var h=s!==null?s.memoizedState:null;if(l=n.memoizedState,s===null)if(l===null)if(n.stateNode===null){e:{l=n.type,s=n.memoizedProps,f=f.ownerDocument||f;t:switch(l){case"title":h=f.getElementsByTagName("title")[0],(!h||h[Xr]||h[wt]||h.namespaceURI==="http://www.w3.org/2000/svg"||h.hasAttribute("itemprop"))&&(h=f.createElement(l),f.head.insertBefore(h,f.querySelector("head > title"))),Et(h,l,s),h[wt]=n,gt(h),l=h;break e;case"link":var y=Ov("link","href",f).get(l+(s.href||""));if(y){for(var _=0;_<y.length;_++)if(h=y[_],h.getAttribute("href")===(s.href==null||s.href===""?null:s.href)&&h.getAttribute("rel")===(s.rel==null?null:s.rel)&&h.getAttribute("title")===(s.title==null?null:s.title)&&h.getAttribute("crossorigin")===(s.crossOrigin==null?null:s.crossOrigin)){y.splice(_,1);break t}}h=f.createElement(l),Et(h,l,s),f.head.appendChild(h);break;case"meta":if(y=Ov("meta","content",f).get(l+(s.content||""))){for(_=0;_<y.length;_++)if(h=y[_],h.getAttribute("content")===(s.content==null?null:""+s.content)&&h.getAttribute("name")===(s.name==null?null:s.name)&&h.getAttribute("property")===(s.property==null?null:s.property)&&h.getAttribute("http-equiv")===(s.httpEquiv==null?null:s.httpEquiv)&&h.getAttribute("charset")===(s.charSet==null?null:s.charSet)){y.splice(_,1);break t}}h=f.createElement(l),Et(h,l,s),f.head.appendChild(h);break;default:throw Error(r(468,l))}h[wt]=n,gt(h),l=h}n.stateNode=l}else Lv(f,n.type,n.stateNode);else n.stateNode=xv(f,l,n.memoizedProps);else h!==l?(h===null?s.stateNode!==null&&(s=s.stateNode,s.parentNode.removeChild(s)):h.count--,l===null?Lv(f,n.type,n.stateNode):xv(f,l,n.memoizedProps)):l===null&&n.stateNode!==null&&Ad(n,n.memoizedProps,s.memoizedProps)}break;case 27:jt(i,n),Pt(n),l&512&&(ut||s===null||kn(s,s.return)),s!==null&&l&4&&Ad(n,n.memoizedProps,s.memoizedProps);break;case 5:if(jt(i,n),Pt(n),l&512&&(ut||s===null||kn(s,s.return)),n.flags&32){f=n.stateNode;try{Hi(f,"")}catch(ne){Be(n,n.return,ne)}}l&4&&n.stateNode!=null&&(f=n.memoizedProps,Ad(n,f,s!==null?s.memoizedProps:f)),l&1024&&(xd=!0);break;case 6:if(jt(i,n),Pt(n),l&4){if(n.stateNode===null)throw Error(r(162));l=n.memoizedProps,s=n.stateNode;try{s.nodeValue=l}catch(ne){Be(n,n.return,ne)}}break;case 3:if(Dl=null,f=pn,pn=zl(i.containerInfo),jt(i,n),pn=f,Pt(n),l&4&&s!==null&&s.memoizedState.isDehydrated)try{_r(i.containerInfo)}catch(ne){Be(n,n.return,ne)}xd&&(xd=!1,Lg(n));break;case 4:l=pn,pn=zl(n.stateNode.containerInfo),jt(i,n),Pt(n),pn=l;break;case 12:jt(i,n),Pt(n);break;case 31:jt(i,n),Pt(n),l&4&&(l=n.updateQueue,l!==null&&(n.updateQueue=null,bl(n,l)));break;case 13:jt(i,n),Pt(n),n.child.flags&8192&&n.memoizedState!==null!=(s!==null&&s.memoizedState!==null)&&(_l=It()),l&4&&(l=n.updateQueue,l!==null&&(n.updateQueue=null,bl(n,l)));break;case 22:f=n.memoizedState!==null;var E=s!==null&&s.memoizedState!==null,q=Jn,U=ut;if(Jn=q||f,ut=U||E,jt(i,n),ut=U,Jn=q,Pt(n),l&8192)e:for(i=n.stateNode,i._visibility=f?i._visibility&-2:i._visibility|1,f&&(s===null||E||Jn||ut||Ti(n)),s=null,i=n;;){if(i.tag===5||i.tag===26){if(s===null){E=s=i;try{if(h=E.stateNode,f)y=h.style,typeof y.setProperty=="function"?y.setProperty("display","none","important"):y.display="none";else{_=E.stateNode;var $=E.memoizedProps.style,D=$!=null&&$.hasOwnProperty("display")?$.display:null;_.style.display=D==null||typeof D=="boolean"?"":(""+D).trim()}}catch(ne){Be(E,E.return,ne)}}}else if(i.tag===6){if(s===null){E=i;try{E.stateNode.nodeValue=f?"":E.memoizedProps}catch(ne){Be(E,E.return,ne)}}}else if(i.tag===18){if(s===null){E=i;try{var P=E.stateNode;f?wv(P,!0):wv(E.stateNode,!1)}catch(ne){Be(E,E.return,ne)}}}else if((i.tag!==22&&i.tag!==23||i.memoizedState===null||i===n)&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===n)break e;for(;i.sibling===null;){if(i.return===null||i.return===n)break e;s===i&&(s=null),i=i.return}s===i&&(s=null),i.sibling.return=i.return,i=i.sibling}l&4&&(l=n.updateQueue,l!==null&&(s=l.retryQueue,s!==null&&(l.retryQueue=null,bl(n,s))));break;case 19:jt(i,n),Pt(n),l&4&&(l=n.updateQueue,l!==null&&(n.updateQueue=null,bl(n,l)));break;case 30:break;case 21:break;default:jt(i,n),Pt(n)}}function Pt(n){var i=n.flags;if(i&2){try{for(var s,l=n.return;l!==null;){if(Sg(l)){s=l;break}l=l.return}if(s==null)throw Error(r(160));switch(s.tag){case 27:var f=s.stateNode,h=kd(n);yl(n,h,f);break;case 5:var y=s.stateNode;s.flags&32&&(Hi(y,""),s.flags&=-33);var _=kd(n);yl(n,_,y);break;case 3:case 4:var E=s.stateNode.containerInfo,q=kd(n);Rd(n,q,E);break;default:throw Error(r(161))}}catch(U){Be(n,n.return,U)}n.flags&=-3}i&4096&&(n.flags&=-4097)}function Lg(n){if(n.subtreeFlags&1024)for(n=n.child;n!==null;){var i=n;Lg(i),i.tag===5&&i.flags&1024&&i.stateNode.reset(),n=n.sibling}}function Wn(n,i){if(i.subtreeFlags&8772)for(i=i.child;i!==null;)Cg(n,i.alternate,i),i=i.sibling}function Ti(n){for(n=n.child;n!==null;){var i=n;switch(i.tag){case 0:case 11:case 14:case 15:xa(4,i,i.return),Ti(i);break;case 1:kn(i,i.return);var s=i.stateNode;typeof s.componentWillUnmount=="function"&&wg(i,i.return,s),Ti(i);break;case 27:Ds(i.stateNode);case 26:case 5:kn(i,i.return),Ti(i);break;case 22:i.memoizedState===null&&Ti(i);break;case 30:Ti(i);break;default:Ti(i)}n=n.sibling}}function Xn(n,i,s){for(s=s&&(i.subtreeFlags&8772)!==0,i=i.child;i!==null;){var l=i.alternate,f=n,h=i,y=h.flags;switch(h.tag){case 0:case 11:case 15:Xn(f,h,s),Cs(4,h);break;case 1:if(Xn(f,h,s),l=h,f=l.stateNode,typeof f.componentDidMount=="function")try{f.componentDidMount()}catch(q){Be(l,l.return,q)}if(l=h,f=l.updateQueue,f!==null){var _=l.stateNode;try{var E=f.shared.hiddenCallbacks;if(E!==null)for(f.shared.hiddenCallbacks=null,f=0;f<E.length;f++)lm(E[f],_)}catch(q){Be(l,l.return,q)}}s&&y&64&&bg(h),As(h,h.return);break;case 27:Tg(h);case 26:case 5:Xn(f,h,s),s&&l===null&&y&4&&_g(h),As(h,h.return);break;case 12:Xn(f,h,s);break;case 31:Xn(f,h,s),s&&y&4&&Rg(f,h);break;case 13:Xn(f,h,s),s&&y&4&&xg(f,h);break;case 22:h.memoizedState===null&&Xn(f,h,s),As(h,h.return);break;case 30:break;default:Xn(f,h,s)}i=i.sibling}}function Od(n,i){var s=null;n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(s=n.memoizedState.cachePool.pool),n=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(n=i.memoizedState.cachePool.pool),n!==s&&(n!=null&&n.refCount++,s!=null&&fs(s))}function Ld(n,i){n=null,i.alternate!==null&&(n=i.alternate.memoizedState.cache),i=i.memoizedState.cache,i!==n&&(i.refCount++,n!=null&&fs(n))}function mn(n,i,s,l){if(i.subtreeFlags&10256)for(i=i.child;i!==null;)Ng(n,i,s,l),i=i.sibling}function Ng(n,i,s,l){var f=i.flags;switch(i.tag){case 0:case 11:case 15:mn(n,i,s,l),f&2048&&Cs(9,i);break;case 1:mn(n,i,s,l);break;case 3:mn(n,i,s,l),f&2048&&(n=null,i.alternate!==null&&(n=i.alternate.memoizedState.cache),i=i.memoizedState.cache,i!==n&&(i.refCount++,n!=null&&fs(n)));break;case 12:if(f&2048){mn(n,i,s,l),n=i.stateNode;try{var h=i.memoizedProps,y=h.id,_=h.onPostCommit;typeof _=="function"&&_(y,i.alternate===null?"mount":"update",n.passiveEffectDuration,-0)}catch(E){Be(i,i.return,E)}}else mn(n,i,s,l);break;case 31:mn(n,i,s,l);break;case 13:mn(n,i,s,l);break;case 23:break;case 22:h=i.stateNode,y=i.alternate,i.memoizedState!==null?h._visibility&2?mn(n,i,s,l):ks(n,i):h._visibility&2?mn(n,i,s,l):(h._visibility|=2,ur(n,i,s,l,(i.subtreeFlags&10256)!==0||!1)),f&2048&&Od(y,i);break;case 24:mn(n,i,s,l),f&2048&&Ld(i.alternate,i);break;default:mn(n,i,s,l)}}function ur(n,i,s,l,f){for(f=f&&((i.subtreeFlags&10256)!==0||!1),i=i.child;i!==null;){var h=n,y=i,_=s,E=l,q=y.flags;switch(y.tag){case 0:case 11:case 15:ur(h,y,_,E,f),Cs(8,y);break;case 23:break;case 22:var U=y.stateNode;y.memoizedState!==null?U._visibility&2?ur(h,y,_,E,f):ks(h,y):(U._visibility|=2,ur(h,y,_,E,f)),f&&q&2048&&Od(y.alternate,y);break;case 24:ur(h,y,_,E,f),f&&q&2048&&Ld(y.alternate,y);break;default:ur(h,y,_,E,f)}i=i.sibling}}function ks(n,i){if(i.subtreeFlags&10256)for(i=i.child;i!==null;){var s=n,l=i,f=l.flags;switch(l.tag){case 22:ks(s,l),f&2048&&Od(l.alternate,l);break;case 24:ks(s,l),f&2048&&Ld(l.alternate,l);break;default:ks(s,l)}i=i.sibling}}var Rs=8192;function dr(n,i,s){if(n.subtreeFlags&Rs)for(n=n.child;n!==null;)zg(n,i,s),n=n.sibling}function zg(n,i,s){switch(n.tag){case 26:dr(n,i,s),n.flags&Rs&&n.memoizedState!==null&&y1(s,pn,n.memoizedState,n.memoizedProps);break;case 5:dr(n,i,s);break;case 3:case 4:var l=pn;pn=zl(n.stateNode.containerInfo),dr(n,i,s),pn=l;break;case 22:n.memoizedState===null&&(l=n.alternate,l!==null&&l.memoizedState!==null?(l=Rs,Rs=16777216,dr(n,i,s),Rs=l):dr(n,i,s));break;default:dr(n,i,s)}}function qg(n){var i=n.alternate;if(i!==null&&(n=i.child,n!==null)){i.child=null;do i=n.sibling,n.sibling=null,n=i;while(n!==null)}}function xs(n){var i=n.deletions;if((n.flags&16)!==0){if(i!==null)for(var s=0;s<i.length;s++){var l=i[s];vt=l,jg(l,n)}qg(n)}if(n.subtreeFlags&10256)for(n=n.child;n!==null;)Dg(n),n=n.sibling}function Dg(n){switch(n.tag){case 0:case 11:case 15:xs(n),n.flags&2048&&xa(9,n,n.return);break;case 3:xs(n);break;case 12:xs(n);break;case 22:var i=n.stateNode;n.memoizedState!==null&&i._visibility&2&&(n.return===null||n.return.tag!==13)?(i._visibility&=-3,wl(n)):xs(n);break;default:xs(n)}}function wl(n){var i=n.deletions;if((n.flags&16)!==0){if(i!==null)for(var s=0;s<i.length;s++){var l=i[s];vt=l,jg(l,n)}qg(n)}for(n=n.child;n!==null;){switch(i=n,i.tag){case 0:case 11:case 15:xa(8,i,i.return),wl(i);break;case 22:s=i.stateNode,s._visibility&2&&(s._visibility&=-3,wl(i));break;default:wl(i)}n=n.sibling}}function jg(n,i){for(;vt!==null;){var s=vt;switch(s.tag){case 0:case 11:case 15:xa(8,s,i);break;case 23:case 22:if(s.memoizedState!==null&&s.memoizedState.cachePool!==null){var l=s.memoizedState.cachePool.pool;l!=null&&l.refCount++}break;case 24:fs(s.memoizedState.cache)}if(l=s.child,l!==null)l.return=s,vt=l;else e:for(s=n;vt!==null;){l=vt;var f=l.sibling,h=l.return;if(Ag(l),l===s){vt=null;break e}if(f!==null){f.return=h,vt=f;break e}vt=h}}}var zS={getCacheForType:function(n){var i=St(ot),s=i.data.get(n);return s===void 0&&(s=n(),i.data.set(n,s)),s},cacheSignal:function(){return St(ot).controller.signal}},qS=typeof WeakMap=="function"?WeakMap:Map,Me=0,Ge=null,Ce=null,Re=0,Ue=0,Yt=null,Oa=!1,fr=!1,Nd=!1,ea=0,nt=0,La=0,Ei=0,zd=0,Qt=0,hr=0,Os=null,Mt=null,qd=!1,_l=0,Pg=0,Sl=1/0,Tl=null,Na=null,pt=0,za=null,pr=null,ta=0,Dd=0,jd=null,Mg=null,Ls=0,Pd=null;function Jt(){return(Me&2)!==0&&Re!==0?Re&-Re:j.T!==null?$d():ep()}function Ug(){if(Qt===0)if((Re&536870912)===0||Oe){var n=Lo;
vendor: 15,954 bytes, line 9
9Lo<<=1,(Lo&3932160)===0&&(Lo=262144),Qt=n}else Qt=536870912;return n=Vt.current,n!==null&&(n.flags|=32),Qt}function Ut(n,i,s){(n===Ge&&(Ue===2||Ue===9)||n.cancelPendingCommit!==null)&&(mr(n,0),qa(n,Re,Qt,!1)),Wr(n,s),((Me&2)===0||n!==Ge)&&(n===Ge&&((Me&2)===0&&(Ei|=s),nt===4&&qa(n,Re,Qt,!1)),Rn(n))}function Bg(n,i,s){if((Me&6)!==0)throw Error(r(327));var l=!s&&(i&127)===0&&(i&n.expiredLanes)===0||Zr(n,i),f=l?PS(n,i):Ud(n,i,!0),h=l;do{if(f===0){fr&&!l&&qa(n,i,0,!1);break}else{if(s=n.current.alternate,h&&!DS(s)){f=Ud(n,i,!1),h=!1;continue}if(f===2){if(h=i,n.errorRecoveryDisabledLanes&h)var y=0;else y=n.pendingLanes&-536870913,y=y!==0?y:y&536870912?536870912:0;if(y!==0){i=y;e:{var _=n;f=Os;var E=_.current.memoizedState.isDehydrated;if(E&&(mr(_,y).flags|=256),y=Ud(_,y,!1),y!==2){if(Nd&&!E){_.errorRecoveryDisabledLanes|=h,Ei|=h,f=4;break e}h=Mt,Mt=f,h!==null&&(Mt===null?Mt=h:Mt.push.apply(Mt,h))}f=y}if(h=!1,f!==2)continue}}if(f===1){mr(n,0),qa(n,i,0,!0);break}e:{switch(l=n,h=f,h){case 0:case 1:throw Error(r(345));case 4:if((i&4194048)!==i)break;case 6:qa(l,i,Qt,!Oa);break e;case 2:Mt=null;break;case 3:case 5:break;default:throw Error(r(329))}if((i&62914560)===i&&(f=_l+300-It(),10<f)){if(qa(l,i,Qt,!Oa),zo(l,0,!0)!==0)break e;ta=i,l.timeoutHandle=vv(Ig.bind(null,l,s,Mt,Tl,qd,i,Qt,Ei,hr,Oa,h,"Throttled",-0,0),f);break e}Ig(l,s,Mt,Tl,qd,i,Qt,Ei,hr,Oa,h,null,-0,0)}}break}while(!0);Rn(n)}function Ig(n,i,s,l,f,h,y,_,E,q,U,$,D,P){if(n.timeoutHandle=-1,$=i.subtreeFlags,$&8192||($&16785408)===16785408){$={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:Bn},zg(i,h,$);var ne=(h&62914560)===h?_l-It():(h&4194048)===h?Pg-It():0;if(ne=b1($,ne),ne!==null){ta=h,n.cancelPendingCommit=ne(Qg.bind(null,n,i,h,s,l,f,y,_,E,U,$,null,D,P)),qa(n,h,y,!q);return}}Qg(n,i,h,s,l,f,y,_,E)}function DS(n){for(var i=n;;){var s=i.tag;if((s===0||s===11||s===15)&&i.flags&16384&&(s=i.updateQueue,s!==null&&(s=s.stores,s!==null)))for(var l=0;l<s.length;l++){var f=s[l],h=f.getSnapshot;f=f.value;try{if(!Ht(h(),f))return!1}catch{return!1}}if(s=i.child,i.subtreeFlags&16384&&s!==null)s.return=i,i=s;else{if(i===n)break;for(;i.sibling===null;){if(i.return===null||i.return===n)return!0;i=i.return}i.sibling.return=i.return,i=i.sibling}}return!0}function qa(n,i,s,l){i&=~zd,i&=~Ei,n.suspendedLanes|=i,n.pingedLanes&=~i,l&&(n.warmLanes|=i),l=n.expirationTimes;for(var f=i;0<f;){var h=31-$t(f),y=1<<h;l[h]=-1,f&=~y}s!==0&&Zh(n,s,i)}function El(){return(Me&6)===0?(Ns(0),!1):!0}function Md(){if(Ce!==null){if(Ue===0)var n=Ce.return;else n=Ce,Hn=mi=null,ed(n),rr=null,ps=0,n=Ce;for(;n!==null;)yg(n.alternate,n),n=n.return;Ce=null}}function mr(n,i){var s=n.timeoutHandle;s!==-1&&(n.timeoutHandle=-1,t1(s)),s=n.cancelPendingCommit,s!==null&&(n.cancelPendingCommit=null,s()),ta=0,Md(),Ge=n,Ce=s=Fn(n.current,null),Re=i,Ue=0,Yt=null,Oa=!1,fr=Zr(n,i),Nd=!1,hr=Qt=zd=Ei=La=nt=0,Mt=Os=null,qd=!1,(i&8)!==0&&(i|=i&32);var l=n.entangledLanes;if(l!==0)for(n=n.entanglements,l&=i;0<l;){var f=31-$t(l),h=1<<f;i|=n[f],l&=~h}return ea=i,Go(),s}function Fg(n,i){_e=null,j.H=Ss,i===ir||i===Xo?(i=im(),Ue=3):i===Fu?(i=im(),Ue=4):Ue=i===gd?8:i!==null&&typeof i=="object"&&typeof i.then=="function"?6:1,Yt=i,Ce===null&&(nt=1,hl(n,nn(i,n.current)))}function $g(){var n=Vt.current;return n===null?!0:(Re&4194048)===Re?on===null:(Re&62914560)===Re||(Re&536870912)!==0?n===on:!1}function Hg(){var n=j.H;return j.H=Ss,n===null?Ss:n}function Gg(){var n=j.A;return j.A=zS,n}function Cl(){nt=4,Oa||(Re&4194048)!==Re&&Vt.current!==null||(fr=!0),(La&134217727)===0&&(Ei&134217727)===0||Ge===null||qa(Ge,Re,Qt,!1)}function Ud(n,i,s){var l=Me;Me|=2;var f=Hg(),h=Gg();(Ge!==n||Re!==i)&&(Tl=null,mr(n,i)),i=!1;var y=nt;e:do try{if(Ue!==0&&Ce!==null){var _=Ce,E=Yt;switch(Ue){case 8:Md(),y=6;break e;case 3:case 2:case 9:case 6:Vt.current===null&&(i=!0);var q=Ue;if(Ue=0,Yt=null,gr(n,_,E,q),s&&fr){y=0;break e}break;default:q=Ue,Ue=0,Yt=null,gr(n,_,E,q)}}jS(),y=nt;break}catch(U){Fg(n,U)}while(!0);return i&&n.shellSuspendCounter++,Hn=mi=null,Me=l,j.H=f,j.A=h,Ce===null&&(Ge=null,Re=0,Go()),y}function jS(){for(;Ce!==null;)Vg(Ce)}function PS(n,i){var s=Me;Me|=2;var l=Hg(),f=Gg();Ge!==n||Re!==i?(Tl=null,Sl=It()+500,mr(n,i)):fr=Zr(n,i);e:do try{if(Ue!==0&&Ce!==null){i=Ce;var h=Yt;t:switch(Ue){case 1:Ue=0,Yt=null,gr(n,i,h,1);break;case 2:case 9:if(nm(h)){Ue=0,Yt=null,Kg(i);break}i=function(){Ue!==2&&Ue!==9||Ge!==n||(Ue=7),Rn(n)},h.then(i,i);break e;case 3:Ue=7;break e;case 4:Ue=5;break e;case 7:nm(h)?(Ue=0,Yt=null,Kg(i)):(Ue=0,Yt=null,gr(n,i,h,7));break;case 5:var y=null;switch(Ce.tag){case 26:y=Ce.memoizedState;case 5:case 27:var _=Ce;if(y?Nv(y):_.stateNode.complete){Ue=0,Yt=null;var E=_.sibling;if(E!==null)Ce=E;else{var q=_.return;q!==null?(Ce=q,Al(q)):Ce=null}break t}}Ue=0,Yt=null,gr(n,i,h,5);break;case 6:Ue=0,Yt=null,gr(n,i,h,6);break;case 8:Md(),nt=6;break e;default:throw Error(r(462))}}MS();break}catch(U){Fg(n,U)}while(!0);return Hn=mi=null,j.H=l,j.A=f,Me=s,Ce!==null?0:(Ge=null,Re=0,Go(),nt)}function MS(){for(;Ce!==null&&!o_();)Vg(Ce)}function Vg(n){var i=gg(n.alternate,n,ea);n.memoizedProps=n.pendingProps,i===null?Al(n):Ce=i}function Kg(n){var i=n,s=i.alternate;switch(i.tag){case 15:case 0:i=ug(s,i,i.pendingProps,i.type,void 0,Re);break;case 11:i=ug(s,i,i.pendingProps,i.type.render,i.ref,Re);break;case 5:ed(i);default:yg(s,i),i=Ce=Gp(i,ea),i=gg(s,i,ea)}n.memoizedProps=n.pendingProps,i===null?Al(n):Ce=i}function gr(n,i,s,l){Hn=mi=null,ed(i),rr=null,ps=0;var f=i.return;try{if(AS(n,f,i,s,Re)){nt=1,hl(n,nn(s,n.current)),Ce=null;return}}catch(h){if(f!==null)throw Ce=f,h;nt=1,hl(n,nn(s,n.current)),Ce=null;return}i.flags&32768?(Oe||l===1?n=!0:fr||(Re&536870912)!==0?n=!1:(Oa=n=!0,(l===2||l===9||l===3||l===6)&&(l=Vt.current,l!==null&&l.tag===13&&(l.flags|=16384))),Yg(i,n)):Al(i)}function Al(n){var i=n;do{if((i.flags&32768)!==0){Yg(i,Oa);return}n=i.return;var s=xS(i.alternate,i,ea);if(s!==null){Ce=s;return}if(i=i.sibling,i!==null){Ce=i;return}Ce=i=n}while(i!==null);nt===0&&(nt=5)}function Yg(n,i){do{var s=OS(n.alternate,n);if(s!==null){s.flags&=32767,Ce=s;return}if(s=n.return,s!==null&&(s.flags|=32768,s.subtreeFlags=0,s.deletions=null),!i&&(n=n.sibling,n!==null)){Ce=n;return}Ce=n=s}while(n!==null);nt=6,Ce=null}function Qg(n,i,s,l,f,h,y,_,E){n.cancelPendingCommit=null;do kl();while(pt!==0);if((Me&6)!==0)throw Error(r(327));if(i!==null){if(i===n.current)throw Error(r(177));if(h=i.lanes|i.childLanes,h|=ku,v_(n,s,h,y,_,E),n===Ge&&(Ce=Ge=null,Re=0),pr=i,za=n,ta=s,Dd=h,jd=f,Mg=l,(i.subtreeFlags&10256)!==0||(i.flags&10256)!==0?(n.callbackNode=null,n.callbackPriority=0,FS(xo,function(){return ev(),null})):(n.callbackNode=null,n.callbackPriority=0),l=(i.flags&13878)!==0,(i.subtreeFlags&13878)!==0||l){l=j.T,j.T=null,f=J.p,J.p=2,y=Me,Me|=4;try{LS(n,i,s)}finally{Me=y,J.p=f,j.T=l}}pt=1,Jg(),Zg(),Wg()}}function Jg(){if(pt===1){pt=0;var n=za,i=pr,s=(i.flags&13878)!==0;if((i.subtreeFlags&13878)!==0||s){s=j.T,j.T=null;var l=J.p;J.p=2;var f=Me;Me|=4;try{Og(i,n);var h=Zd,y=jp(n.containerInfo),_=h.focusedElem,E=h.selectionRange;if(y!==_&&_&&_.ownerDocument&&Dp(_.ownerDocument.documentElement,_)){if(E!==null&&Su(_)){var q=E.start,U=E.end;if(U===void 0&&(U=q),"selectionStart"in _)_.selectionStart=q,_.selectionEnd=Math.min(U,_.value.length);else{var $=_.ownerDocument||document,D=$&&$.defaultView||window;if(D.getSelection){var P=D.getSelection(),ne=_.textContent.length,pe=Math.min(E.start,ne),$e=E.end===void 0?pe:Math.min(E.end,ne);!P.extend&&pe>$e&&(y=$e,$e=pe,pe=y);var L=qp(_,pe),k=qp(_,$e);if(L&&k&&(P.rangeCount!==1||P.anchorNode!==L.node||P.anchorOffset!==L.offset||P.focusNode!==k.node||P.focusOffset!==k.offset)){var z=$.createRange();z.setStart(L.node,L.offset),P.removeAllRanges(),pe>$e?(P.addRange(z),P.extend(k.node,k.offset)):(z.setEnd(k.node,k.offset),P.addRange(z))}}}}for($=[],P=_;P=P.parentNode;)P.nodeType===1&&$.push({element:P,left:P.scrollLeft,top:P.scrollTop});for(typeof _.focus=="function"&&_.focus(),_=0;_<$.length;_++){var I=$[_];I.element.scrollLeft=I.left,I.element.scrollTop=I.top}}Ul=!!Jd,Zd=Jd=null}finally{Me=f,J.p=l,j.T=s}}n.current=i,pt=2}}function Zg(){if(pt===2){pt=0;var n=za,i=pr,s=(i.flags&8772)!==0;if((i.subtreeFlags&8772)!==0||s){s=j.T,j.T=null;var l=J.p;J.p=2;var f=Me;Me|=4;try{Cg(n,i.alternate,i)}finally{Me=f,J.p=l,j.T=s}}pt=3}}function Wg(){if(pt===4||pt===3){pt=0,l_();var n=za,i=pr,s=ta,l=Mg;(i.subtreeFlags&10256)!==0||(i.flags&10256)!==0?pt=5:(pt=0,pr=za=null,Xg(n,n.pendingLanes));var f=n.pendingLanes;if(f===0&&(Na=null),au(s),i=i.stateNode,Ft&&typeof Ft.onCommitFiberRoot=="function")try{Ft.onCommitFiberRoot(Jr,i,void 0,(i.current.flags&128)===128)}catch{}if(l!==null){i=j.T,f=J.p,J.p=2,j.T=null;try{for(var h=n.onRecoverableError,y=0;y<l.length;y++){var _=l[y];h(_.value,{componentStack:_.stack})}}finally{j.T=i,J.p=f}}(ta&3)!==0&&kl(),Rn(n),f=n.pendingLanes,(s&261930)!==0&&(f&42)!==0?n===Pd?Ls++:(Ls=0,Pd=n):Ls=0,Ns(0)}}function Xg(n,i){(n.pooledCacheLanes&=i)===0&&(i=n.pooledCache,i!=null&&(n.pooledCache=null,fs(i)))}function kl(){return Jg(),Zg(),Wg(),ev()}function ev(){if(pt!==5)return!1;var n=za,i=Dd;Dd=0;var s=au(ta),l=j.T,f=J.p;try{J.p=32>s?32:s,j.T=null,s=jd,jd=null;var h=za,y=ta;if(pt=0,pr=za=null,ta=0,(Me&6)!==0)throw Error(r(331));var _=Me;if(Me|=4,Dg(h.current),Ng(h,h.current,y,s),Me=_,Ns(0,!1),Ft&&typeof Ft.onPostCommitFiberRoot=="function")try{Ft.onPostCommitFiberRoot(Jr,h)}catch{}return!0}finally{J.p=f,j.T=l,Xg(n,i)}}function tv(n,i,s){i=nn(s,i),i=md(n.stateNode,i,2),n=Aa(n,i,2),n!==null&&(Wr(n,2),Rn(n))}function Be(n,i,s){if(n.tag===3)tv(n,n,s);else for(;i!==null;){if(i.tag===3){tv(i,n,s);break}else if(i.tag===1){var l=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof l.componentDidCatch=="function"&&(Na===null||!Na.has(l))){n=nn(s,n),s=ng(2),l=Aa(i,s,2),l!==null&&(ag(s,l,i,n),Wr(l,2),Rn(l));break}}i=i.return}}function Bd(n,i,s){var l=n.pingCache;if(l===null){l=n.pingCache=new qS;var f=new Set;l.set(i,f)}else f=l.get(i),f===void 0&&(f=new Set,l.set(i,f));f.has(s)||(Nd=!0,f.add(s),n=US.bind(null,n,i,s),i.then(n,n))}function US(n,i,s){var l=n.pingCache;l!==null&&l.delete(i),n.pingedLanes|=n.suspendedLanes&s,n.warmLanes&=~s,Ge===n&&(Re&s)===s&&(nt===4||nt===3&&(Re&62914560)===Re&&300>It()-_l?(Me&2)===0&&mr(n,0):zd|=s,hr===Re&&(hr=0)),Rn(n)}function nv(n,i){i===0&&(i=Jh()),n=fi(n,i),n!==null&&(Wr(n,i),Rn(n))}function BS(n){var i=n.memoizedState,s=0;i!==null&&(s=i.retryLane),nv(n,s)}function IS(n,i){var s=0;switch(n.tag){case 31:case 13:var l=n.stateNode,f=n.memoizedState;f!==null&&(s=f.retryLane);break;case 19:l=n.stateNode;break;case 22:l=n.stateNode._retryCache;break;default:throw Error(r(314))}l!==null&&l.delete(i),nv(n,s)}function FS(n,i){return Xc(n,i)}var Rl=null,vr=null,Id=!1,xl=!1,Fd=!1,Da=0;function Rn(n){n!==vr&&n.next===null&&(vr===null?Rl=vr=n:vr=vr.next=n),xl=!0,Id||(Id=!0,HS())}function Ns(n,i){if(!Fd&&xl){Fd=!0;do for(var s=!1,l=Rl;l!==null;){if(n!==0){var f=l.pendingLanes;if(f===0)var h=0;else{var y=l.suspendedLanes,_=l.pingedLanes;h=(1<<31-$t(42|n)+1)-1,h&=f&~(y&~_),h=h&201326741?h&201326741|1:h?h|2:0}h!==0&&(s=!0,sv(l,h))}else h=Re,h=zo(l,l===Ge?h:0,l.cancelPendingCommit!==null||l.timeoutHandle!==-1),(h&3)===0||Zr(l,h)||(s=!0,sv(l,h));l=l.next}while(s);Fd=!1}}function $S(){av()}function av(){xl=Id=!1;var n=0;Da!==0&&e1()&&(n=Da);for(var i=It(),s=null,l=Rl;l!==null;){var f=l.next,h=iv(l,i);h===0?(l.next=null,s===null?Rl=f:s.next=f,f===null&&(vr=s)):(s=l,(n!==0||(h&3)!==0)&&(xl=!0)),l=f}pt!==0&&pt!==5||Ns(n),Da!==0&&(Da=0)}function iv(n,i){for(var s=n.suspendedLanes,l=n.pingedLanes,f=n.expirationTimes,h=n.pendingLanes&-62914561;0<h;){var y=31-$t(h),_=1<<y,E=f[y];E===-1?((_&s)===0||(_&l)!==0)&&(f[y]=g_(_,i)):E<=i&&(n.expiredLanes|=_),h&=~_}if(i=Ge,s=Re,s=zo(n,n===i?s:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),l=n.callbackNode,s===0||n===i&&(Ue===2||Ue===9)||n.cancelPendingCommit!==null)return l!==null&&l!==null&&eu(l),n.callbackNode=null,n.callbackPriority=0;if((s&3)===0||Zr(n,s)){if(i=s&-s,i===n.callbackPriority)return i;switch(l!==null&&eu(l),au(s)){case 2:case 8:s=Yh;break;case 32:s=xo;break;case 268435456:s=Qh;break;default:s=xo}return l=rv.bind(null,n),s=Xc(s,l),n.callbackPriority=i,n.callbackNode=s,i}return l!==null&&l!==null&&eu(l),n.callbackPriority=2,n.callbackNode=null,2}function rv(n,i){if(pt!==0&&pt!==5)return n.callbackNode=null,n.callbackPriority=0,null;var s=n.callbackNode;if(kl()&&n.callbackNode!==s)return null;var l=Re;return l=zo(n,n===Ge?l:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),l===0?null:(Bg(n,l,i),iv(n,It()),n.callbackNode!=null&&n.callbackNode===s?rv.bind(null,n):null)}function sv(n,i){if(kl())return null;Bg(n,i,!0)}function HS(){n1(function(){(Me&6)!==0?Xc(Kh,$S):av()})}function $d(){if(Da===0){var n=nr;n===0&&(n=Oo,Oo<<=1,(Oo&261888)===0&&(Oo=256)),Da=n}return Da}function ov(n){return n==null||typeof n=="symbol"||typeof n=="boolean"?null:typeof n=="function"?n:Po(""+n)}function lv(n,i){var s=i.ownerDocument.createElement("input");return s.name=i.name,s.value=i.value,n.id&&s.setAttribute("form",n.id),i.parentNode.insertBefore(s,i),n=new FormData(n),s.parentNode.removeChild(s),n}function GS(n,i,s,l,f){if(i==="submit"&&s&&s.stateNode===f){var h=ov((f[zt]||null).action),y=l.submitter;y&&(i=(i=y[zt]||null)?ov(i.formAction):y.getAttribute("formAction"),i!==null&&(h=i,y=null));var _=new Io("action","action",null,l,f);n.push({event:_,listeners:[{instance:null,listener:function(){if(l.defaultPrevented){if(Da!==0){var E=y?lv(f,y):new FormData(f);cd(s,{pending:!0,data:E,method:f.method,action:h},null,E)}}else typeof h=="function"&&(_.preventDefault(),E=y?lv(f,y):new FormData(f),cd(s,{pending:!0,data:E,method:f.method,action:h},h,E))},currentTarget:f}]})}}for(var Hd=0;Hd<Au.length;Hd++){var Gd=Au[Hd],VS=Gd.toLowerCase(),KS=Gd[0].toUpperCase()+Gd.slice(1);hn(VS,"on"+KS)}hn(Up,"onAnimationEnd"),hn(Bp,"onAnimationIteration"),hn(Ip,"onAnimationStart"),hn("dblclick","onDoubleClick"),hn("focusin","onFocus"),hn("focusout","onBlur"),hn(cS,"onTransitionRun"),hn(uS,"onTransitionStart"),hn(dS,"onTransitionCancel"),hn(Fp,"onTransitionEnd"),Fi("onMouseEnter",["mouseout","mouseover"]),Fi("onMouseLeave",["mouseout","mouseover"]),Fi("onPointerEnter",["pointerout","pointerover"]),Fi("onPointerLeave",["pointerout","pointerover"]),li("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),li("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),li("onBeforeInput",["compositionend","keypress","textInput","paste"]),li("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),li("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),li("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var zs="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),YS=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(zs));function cv(n,i){i=(i&4)!==0;for(var s=0;s<n.length;s++){var l=n[s],f=l.event;l=l.listeners;e:{var h=void 0;if(i)for(var y=l.length-1;0<=y;y--){var _=l[y],E=_.instance,q=_.currentTarget;if(_=_.listener,E!==h&&f.isPropagationStopped())break e;h=_,f.currentTarget=q;try{h(f)}catch(U){Ho(U)}f.currentTarget=null,h=E}else for(y=0;y<l.length;y++){if(_=l[y],E=_.instance,q=_.currentTarget,_=_.listener,E!==h&&f.isPropagationStopped())break e;h=_,f.currentTarget=q;try{h(f)}catch(U){Ho(U)}f.currentTarget=null,h=E}}}}function Ae(n,i){var s=i[iu];s===void 0&&(s=i[iu]=new Set);var l=n+"__bubble";s.has(l)||(uv(i,n,2,!1),s.add(l))}function Vd(n,i,s){var l=0;i&&(l|=4),uv(s,n,l,i)}var Ol="_reactListening"+Math.random().toString(36).slice(2);
vendor: 3,356 bytes, line 9
9function Kd(n){if(!n[Ol]){n[Ol]=!0,ap.forEach(function(s){s!=="selectionchange"&&(YS.has(s)||Vd(s,!1,n),Vd(s,!0,n))});var i=n.nodeType===9?n:n.ownerDocument;i===null||i[Ol]||(i[Ol]=!0,Vd("selectionchange",!1,i))}}function uv(n,i,s,l){switch(Uv(i)){case 2:var f=S1;break;case 8:f=T1;break;default:f=cf}s=f.bind(null,i,s,n),f=void 0,!hu||i!=="touchstart"&&i!=="touchmove"&&i!=="wheel"||(f=!0),l?f!==void 0?n.addEventListener(i,s,{capture:!0,passive:f}):n.addEventListener(i,s,!0):f!==void 0?n.addEventListener(i,s,{passive:f}):n.addEventListener(i,s,!1)}function Yd(n,i,s,l,f){var h=l;if((i&1)===0&&(i&2)===0&&l!==null)e:for(;;){if(l===null)return;var y=l.tag;if(y===3||y===4){var _=l.stateNode.containerInfo;if(_===f)break;if(y===4)for(y=l.return;y!==null;){var E=y.tag;if((E===3||E===4)&&y.stateNode.containerInfo===f)return;y=y.return}for(;_!==null;){if(y=Ui(_),y===null)return;if(E=y.tag,E===5||E===6||E===26||E===27){l=h=y;continue e}_=_.parentNode}}l=l.return}mp(function(){var q=h,U=du(s),$=[];e:{var D=$p.get(n);if(D!==void 0){var P=Io,ne=n;switch(n){case"keypress":if(Uo(s)===0)break e;case"keydown":case"keyup":P=I_;break;case"focusin":ne="focus",P=vu;break;case"focusout":ne="blur",P=vu;break;case"beforeblur":case"afterblur":P=vu;break;case"click":if(s.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":P=yp;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":P=x_;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":P=H_;break;case Up:case Bp:case Ip:P=N_;break;case Fp:P=V_;break;case"scroll":case"scrollend":P=k_;break;case"wheel":P=Y_;break;case"copy":case"cut":case"paste":P=q_;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":P=wp;break;case"toggle":case"beforetoggle":P=J_}var pe=(i&4)!==0,$e=!pe&&(n==="scroll"||n==="scrollend"),L=pe?D!==null?D+"Capture":null:D;pe=[];for(var k=q,z;k!==null;){var I=k;if(z=I.stateNode,I=I.tag,I!==5&&I!==26&&I!==27||z===null||L===null||(I=ts(k,L),I!=null&&pe.push(qs(k,I,z))),$e)break;k=k.return}0<pe.length&&(D=new P(D,ne,null,s,U),$.push({event:D,listeners:pe}))}}if((i&7)===0){e:{if(D=n==="mouseover"||n==="pointerover",P=n==="mouseout"||n==="pointerout",D&&s!==uu&&(ne=s.relatedTarget||s.fromElement)&&(Ui(ne)||ne[Mi]))break e;if((P||D)&&(D=U.window===U?U:(D=U.ownerDocument)?D.defaultView||D.parentWindow:window,P?(ne=s.relatedTarget||s.toElement,P=q,ne=ne?Ui(ne):null,ne!==null&&($e=c(ne),pe=ne.tag,ne!==$e||pe!==5&&pe!==27&&pe!==6)&&(ne=null)):(P=null,ne=q),P!==ne)){if(pe=yp,I="onMouseLeave",L="onMouseEnter",k="mouse",(n==="pointerout"||n==="pointerover")&&(pe=wp,I="onPointerLeave",L="onPointerEnter",k="pointer"),$e=P==null?D:es(P),z=ne==null?D:es(ne),D=new pe(I,k+"leave",P,s,U),D.target=$e,D.relatedTarget=z,I=null,Ui(U)===q&&(pe=new pe(L,k+"enter",ne,s,U),pe.target=z,pe.relatedTarget=$e,I=pe),$e=I,P&&ne)t:{for(pe=QS,L=P,k=ne,z=0,I=L;I;I=pe(I))z++;I=0;for(var de=k;de;de=pe(de))I++;for(;0<z-I;)L=pe(L),z--;for(;0<I-z;)k=pe(k),I--;for(;z--;){if(L===k||k!==null&&L===k.alternate){pe=L;break t}L=pe(L),k=pe(k)}pe=null}else pe=null;P!==null&&dv($,D,P,pe,!1),ne!==null&&$e!==null&&dv($,$e,ne,pe,!0)}}
vendor: 5,189 bytes, lines 9-10
9e:{if(D=q?es(q):window,P=D.nodeName&&D.nodeName.toLowerCase(),P==="select"||P==="input"&&D.type==="file")var ze=Rp;else if(Ap(D))if(xp)ze=sS;else{ze=iS;var oe=aS}else P=D.nodeName,!P||P.toLowerCase()!=="input"||D.type!=="checkbox"&&D.type!=="radio"?q&&cu(q.elementType)&&(ze=Rp):ze=rS;if(ze&&(ze=ze(n,q))){kp($,ze,s,U);break e}oe&&oe(n,D,q),n==="focusout"&&q&&D.type==="number"&&q.memoizedProps.value!=null&&lu(D,"number",D.value)}switch(oe=q?es(q):window,n){case"focusin":(Ap(oe)||oe.contentEditable==="true")&&(Yi=oe,Tu=q,cs=null);break;case"focusout":cs=Tu=Yi=null;break;case"mousedown":Eu=!0;break;case"contextmenu":case"mouseup":case"dragend":Eu=!1,Pp($,s,U);break;case"selectionchange":if(lS)break;case"keydown":case"keyup":Pp($,s,U)}var Se;if(bu)e:{switch(n){case"compositionstart":var xe="onCompositionStart";break e;case"compositionend":xe="onCompositionEnd";break e;case"compositionupdate":xe="onCompositionUpdate";break e}xe=void 0}else Ki?Ep(n,s)&&(xe="onCompositionEnd"):n==="keydown"&&s.keyCode===229&&(xe="onCompositionStart");xe&&(_p&&s.locale!=="ko"&&(Ki||xe!=="onCompositionStart"?xe==="onCompositionEnd"&&Ki&&(Se=gp()):(ba=U,pu="value"in ba?ba.value:ba.textContent,Ki=!0)),oe=Ll(q,xe),0<oe.length&&(xe=new bp(xe,n,null,s,U),$.push({event:xe,listeners:oe}),Se?xe.data=Se:(Se=Cp(s),Se!==null&&(xe.data=Se)))),(Se=W_?X_(n,s):eS(n,s))&&(xe=Ll(q,"onBeforeInput"),0<xe.length&&(oe=new bp("onBeforeInput","beforeinput",null,s,U),$.push({event:oe,listeners:xe}),oe.data=Se)),GS($,n,q,s,U)}cv($,i)})}function qs(n,i,s){return{instance:n,listener:i,currentTarget:s}}function Ll(n,i){for(var s=i+"Capture",l=[];n!==null;){var f=n,h=f.stateNode;if(f=f.tag,f!==5&&f!==26&&f!==27||h===null||(f=ts(n,s),f!=null&&l.unshift(qs(n,f,h)),f=ts(n,i),f!=null&&l.push(qs(n,f,h))),n.tag===3)return l;n=n.return}return[]}function QS(n){if(n===null)return null;do n=n.return;while(n&&n.tag!==5&&n.tag!==27);return n||null}function dv(n,i,s,l,f){for(var h=i._reactName,y=[];s!==null&&s!==l;){var _=s,E=_.alternate,q=_.stateNode;if(_=_.tag,E!==null&&E===l)break;_!==5&&_!==26&&_!==27||q===null||(E=q,f?(q=ts(s,h),q!=null&&y.unshift(qs(s,q,E))):f||(q=ts(s,h),q!=null&&y.push(qs(s,q,E)))),s=s.return}y.length!==0&&n.push({event:i,listeners:y})}var JS=/\r\n?/g,ZS=/\u0000|\uFFFD/g;function fv(n){return(typeof n=="string"?n:""+n).replace(JS,`
10`).replace(ZS,"")}function hv(n,i){return i=fv(i),fv(n)===i}function Fe(n,i,s,l,f,h){switch(s){case"children":typeof l=="string"?i==="body"||i==="textarea"&&l===""||Hi(n,l):(typeof l=="number"||typeof l=="bigint")&&i!=="body"&&Hi(n,""+l);break;case"className":Do(n,"class",l);break;case"tabIndex":Do(n,"tabindex",l);break;case"dir":case"role":case"viewBox":case"width":case"height":Do(n,s,l);break;case"style":hp(n,l,h);break;case"data":if(i!=="object"){Do(n,"data",l);break}case"src":case"href":if(l===""&&(i!=="a"||s!=="href")){n.removeAttribute(s);break}if(l==null||typeof l=="function"||typeof l=="symbol"||typeof l=="boolean"){n.removeAttribute(s);break}l=Po(""+l),n.setAttribute(s,l);break;case"action":case"formAction":if(typeof l=="function"){n.setAttribute(s,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof h=="function"&&(s==="formAction"?(i!=="input"&&Fe(n,i,"name",f.name,f,null),Fe(n,i,"formEncType",f.formEncType,f,null),Fe(n,i,"formMethod",f.formMethod,f,null),Fe(n,i,"formTarget",f.formTarget,f,null)):(Fe(n,i,"encType",f.encType,f,null),Fe(n,i,"method",f.method,f,null),Fe(n,i,"target",f.target,f,null)));if(l==null||typeof l=="symbol"||typeof l=="boolean"){n.removeAttribute(s);break}l=Po(""+l),n.setAttribute(s,l);break;case"onClick":l!=null&&(n.onclick=Bn);break;case"onScroll":l!=null&&Ae("scroll",n);break;case"onScrollEnd":l!=null&&Ae("scrollend",n);break;case"dangerouslySetInnerHTML":if(l!=null){if(typeof l!="object"||!("__html"in l))throw Error(r(61));if(s=l.__html,s!=null){if(f.children!=null)throw Error(r(60));n.innerHTML=s}}break;case"multiple":n.multiple=l&&typeof l!="function"&&typeof l!="symbol";break;case"muted":n.muted=l&&typeof l!="function"&&typeof l!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(l==null||typeof l=="function"||typeof l=="boolean"||typeof l=="symbol"){n.removeAttribute("xlink:href");break}s=Po(""+l),n.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":l!=null&&typeof l!="function"&&typeof l!="symbol"?n.setAttribute(s,""+l):n.removeAttribute(s);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInl
10ine":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":l&&typeof l!="function"&&typeof l!="symbol"?n.setAttribute(s,""):n.removeAttribute(s);break;case"capture":case"download":l===!0?n.setAttribute(s,""):l!==!1&&l!=null&&typeof l!="function"&&typeof l!="symbol"?n.setAttribute(s,l):n.removeAttribute(s);break;case"cols":case"rows":case"size":case"span":l!=null&&typeof l!="function"&&typeof l!="symbol"&&!isNaN(l)&&1<=l?n.setAttribute(s,l):n.removeAttribute(s);break;case"rowSpan":case"start":l==null||typeof l=="function"||typeof l=="symbol"||isNaN(l)?n.removeAttribute(s):n.setAttribute(s,l);break;case"popover":Ae("beforetoggle",n),Ae("toggle",n),qo(n,"popover",l);break;case"xlinkActuate":Un(n,"http://www.w3.org/1999/xlink","xlink:actuate",l);break;case"xlinkArcrole":Un(n,"http://www.w3.org/1999/xlink","xlink:arcrole",l);break;case"xlinkRole":Un(n,"http://www.w3.org/1999/xlink","xlink:role",l);break;case"xlinkShow":Un(n,"http://www.w3.org/1999/xlink","xlink:show",l);break;case"xlinkTitle":Un(n,"http://www.w3.org/1999/xlink","xlink:title",l);break;case"xlinkType":Un(n,"http://www.w3.org/1999/xlink","xlink:type",l);break;case"xmlBase":Un(n,"http://www.w3.org/XML/1998/namespace","xml:base",l);break;case"xmlLang":Un(n,"http://www.w3.org/XML/1998/namespace","xml:lang",l);break;case"xmlSpace":Un(n,"http://www.w3.org/XML/1998/namespace","xml:space",l);break;case"is":qo(n,"is",l);break;case"innerText":case"textContent":break;default:(!(2<s.length)||s[0]!=="o"&&s[0]!=="O"||s[1]!=="n"&&s[1]!=="N")&&(s=C_.get(s)||s,qo(n,s,l))}}function Qd(n,i,s,l,f,h){switch(s){case"style":hp(n,l,h);break;case"dangerouslySetInnerHTML":if(l!=null){if(typeof l!="object"||!("__html"in l))throw Error(r(61));if(s=l.__html,s!=null){if(f.children!=null)throw Error(r(60));n.innerHTML=s}}break;case"children":typeof l=="string"?Hi(n,l):(typeof l=="number"||typeof l=="bigint")&&Hi(n,""+l);break;case"onScroll":l!=null&&Ae("scroll",n);break;case"onScrollEnd":l!=null&&Ae("scrollend",n);break;case"onClick":l!=null&&(n.onclick=Bn);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!ip.hasOwnProperty(s))e:{if(s[0]==="o"&&s[1]==="n"&&(f=s.endsWith("Capture"),i=s.slice(2,f?s.length-7:void 0),h=n[zt]||null,h=h!=null?h[s]:null,typeof h=="function"&&n.removeEventListener(i,h,f),typeof l=="function")){typeof h!="function"&&h!==null&&(s in n?n[s]=null:n.hasAttribute(s)&&n.removeAttribute(s)),n.addEventListener(i,l,f);break e}s in n?n[s]=l:l===!0?n.setAttribute(s,""):qo(n,s,l)}}}function Et(n,i,s){switch(i){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Ae("error",n),Ae("load",n);var l=!1,f=!1,h;for(h in s)if(s.hasOwnProperty(h)){var y=s[h];if(y!=null)switch(h){case"src":l=!0;break;case"srcSet":f=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(r(137,i));default:Fe(n,i,h,y,s,null)}}f&&Fe(n,i,"srcSet",s.srcSet,s,null),l&&Fe(n,i,"src",s.src,s,null);return;case"input":Ae("invalid",n);var _=h=y=f=null,E=null,q=null;for(l in s)if(s.hasOwnProperty(l)){var U=s[l];if(U!=null)switch(l){case"name":f=U;break;case"type":y=U;break;case"checked":E=U;break;case"defaultChecked":q=U;break;case"value":h=U;break;case"defaultValue":_=U;break;case"children":case"dangerouslySetInnerHTML":if(U!=null)throw Error(r(137,i));break;default:Fe(n,i,l,U,s,null)}}cp(n,h,_,E,q,y,f,!1);return;case"select":Ae("invalid",n),l=y=h=null;for(f in s)if(s.hasOwnProperty(f)&&(_=s[f],_!=null))switch(f){case"value":h=_;break;case"defaultValue":y=_;break;case"multiple":l=_;default:Fe(n,i,f,_,s,null)}i=h,s=y,n.multiple=!!l,i!=null?$i(n,!!l,i,!1):s!=null&&$i(n,!!l,s,!0);return;case"textarea":Ae("invalid",n),h=f=l=null;for(y in s)if(s.hasOwnProperty(y)&&(_=s[y],_!=null))switch(y){case"value":l=_;break;case"defaultValue":f=_;break;case"children":h=_;break;case"dangerouslySetInnerHTML":if(_!=null)throw Error(r(91));break;default:Fe(n,i,y,_,s,null)}dp(n,l,f,h);return;case"option":for(E in s)s.hasOwnProperty(E)&&(l=s[E],l!=null)&&(E==="selected"?n.selected=l&&typeof l!="function"&&typeof l!="symbol":Fe(n,i,E,l,s,null));return;case"dialog":Ae("beforetoggle",n),Ae("toggle",n),Ae("cancel",n),Ae("close",n);break;case"iframe":case"object":Ae("load",n);break;case"video":case"audio":for(l=0;l<zs.length;l++)Ae(zs[l],n);break;case"image":Ae("error",n),Ae("load",n);break;case"details":Ae("toggle",n);break;case"embed":case"source":case"link":Ae("error",n),Ae("load",n);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(q in s)if(s.hasOwnProperty(q)&&(l=s[q],l!=null))switch(q){case"children":case"dangerouslySetInnerHTML":throw Error(r(137,i));default:Fe(n,i,q,l,s,null)}return;default:if(cu(i)){for(U in s)s.hasOwnProperty(U)&&(l=s[U],l!==void 0&&Qd(n,i,U,l,s,void 0));return}}for(_ in s)s.hasOwnProperty(_)&&(l=s[_],l!=null&&Fe(n,i,_,l,s,null))}function WS(n,i,s,l){switch(i){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var f=null,h=null,y=null,_=null,E=null,q=null,U=null;for(P in s){var $=s[P];if(s.hasOwnProperty(P)&&$!=null)switch(P){case"checked":break;case"value":break;case"defaultValue":E=$;default:l.hasOwnProperty(P)||Fe(n,i,P,null,l,$)}}for(var D in l){var P=l[D];if($=s[D],l.hasOwnProperty(D)&&(P!=null||$!=null))switch(D){case"type":h=P;break;case"name":f=P;break;case"checked":q=P;break;case"defaultChecked":U=P;break;case"value":y=P;break;case"defaultValue":_=P;break;case"children":case"dangerouslySetInnerHTML":if(P!=null)throw Error(r(137,i));break;default:P!==$&&Fe(n,i,D,P,l,$)}}ou(n,y,_,E,q,U,h,f);return;case"select":P=y=_=D=null;for(h in s)if(E=s[h],s.hasOwnProperty(h)&&E!=null)switch(h){case"value":break;case"multiple":P=E;default:l.hasOwnProperty(h)||Fe(n,i,h,null,l,E)}for(f in l)if(h=l[f],E=s[f],l.hasOwnProperty(f)&&(h!=null||E!=null))switch(f){case"value":D=h;break;case"defaultValue":_=h;break;case"multiple":y=h;default:h!==E&&Fe(n,i,f,h,l,E)}i=_,s=y,l=P,D!=null?$i(n,!!s,D,!1):!!l!=!!s&&(i!=null?$i(n,!!s,i,!0):$i(n,
vendor: 6,696 bytes, line 10
10!!s,s?[]:"",!1));return;case"textarea":P=D=null;for(_ in s)if(f=s[_],s.hasOwnProperty(_)&&f!=null&&!l.hasOwnProperty(_))switch(_){case"value":break;case"children":break;default:Fe(n,i,_,null,l,f)}for(y in l)if(f=l[y],h=s[y],l.hasOwnProperty(y)&&(f!=null||h!=null))switch(y){case"value":D=f;break;case"defaultValue":P=f;break;case"children":break;case"dangerouslySetInnerHTML":if(f!=null)throw Error(r(91));break;default:f!==h&&Fe(n,i,y,f,l,h)}up(n,D,P);return;case"option":for(var ne in s)D=s[ne],s.hasOwnProperty(ne)&&D!=null&&!l.hasOwnProperty(ne)&&(ne==="selected"?n.selected=!1:Fe(n,i,ne,null,l,D));for(E in l)D=l[E],P=s[E],l.hasOwnProperty(E)&&D!==P&&(D!=null||P!=null)&&(E==="selected"?n.selected=D&&typeof D!="function"&&typeof D!="symbol":Fe(n,i,E,D,l,P));return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var pe in s)D=s[pe],s.hasOwnProperty(pe)&&D!=null&&!l.hasOwnProperty(pe)&&Fe(n,i,pe,null,l,D);for(q in l)if(D=l[q],P=s[q],l.hasOwnProperty(q)&&D!==P&&(D!=null||P!=null))switch(q){case"children":case"dangerouslySetInnerHTML":if(D!=null)throw Error(r(137,i));break;default:Fe(n,i,q,D,l,P)}return;default:if(cu(i)){for(var $e in s)D=s[$e],s.hasOwnProperty($e)&&D!==void 0&&!l.hasOwnProperty($e)&&Qd(n,i,$e,void 0,l,D);for(U in l)D=l[U],P=s[U],!l.hasOwnProperty(U)||D===P||D===void 0&&P===void 0||Qd(n,i,U,D,l,P);return}}for(var L in s)D=s[L],s.hasOwnProperty(L)&&D!=null&&!l.hasOwnProperty(L)&&Fe(n,i,L,null,l,D);for($ in l)D=l[$],P=s[$],!l.hasOwnProperty($)||D===P||D==null&&P==null||Fe(n,i,$,D,l,P)}function pv(n){switch(n){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function XS(){if(typeof performance.getEntriesByType=="function"){for(var n=0,i=0,s=performance.getEntriesByType("resource"),l=0;l<s.length;l++){var f=s[l],h=f.transferSize,y=f.initiatorType,_=f.duration;if(h&&_&&pv(y)){for(y=0,_=f.responseEnd,l+=1;l<s.length;l++){var E=s[l],q=E.startTime;if(q>_)break;var U=E.transferSize,$=E.initiatorType;U&&pv($)&&(E=E.responseEnd,y+=U*(E<_?1:(_-q)/(E-q)))}if(--l,i+=8*(h+y)/(f.duration/1e3),n++,10<n)break}}if(0<n)return i/n/1e6}return navigator.connection&&(n=navigator.connection.downlink,typeof n=="number")?n:5}var Jd=null,Zd=null;function Nl(n){return n.nodeType===9?n:n.ownerDocument}function mv(n){switch(n){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function gv(n,i){if(n===0)switch(i){case"svg":return 1;case"math":return 2;default:return 0}return n===1&&i==="foreignObject"?0:n}function Wd(n,i){return n==="textarea"||n==="noscript"||typeof i.children=="string"||typeof i.children=="number"||typeof i.children=="bigint"||typeof i.dangerouslySetInnerHTML=="object"&&i.dangerouslySetInnerHTML!==null&&i.dangerouslySetInnerHTML.__html!=null}var Xd=null;function e1(){var n=window.event;return n&&n.type==="popstate"?n===Xd?!1:(Xd=n,!0):(Xd=null,!1)}var vv=typeof setTimeout=="function"?setTimeout:void 0,t1=typeof clearTimeout=="function"?clearTimeout:void 0,yv=typeof Promise=="function"?Promise:void 0,n1=typeof queueMicrotask=="function"?queueMicrotask:typeof yv<"u"?function(n){return yv.resolve(null).then(n).catch(a1)}:vv;function a1(n){setTimeout(function(){throw n})}function ja(n){return n==="head"}function bv(n,i){var s=i,l=0;do{var f=s.nextSibling;if(n.removeChild(s),f&&f.nodeType===8)if(s=f.data,s==="/$"||s==="/&"){if(l===0){n.removeChild(f),_r(i);return}l--}else if(s==="$"||s==="$?"||s==="$~"||s==="$!"||s==="&")l++;else if(s==="html")Ds(n.ownerDocument.documentElement);else if(s==="head"){s=n.ownerDocument.head,Ds(s);for(var h=s.firstChild;h;){var y=h.nextSibling,_=h.nodeName;h[Xr]||_==="SCRIPT"||_==="STYLE"||_==="LINK"&&h.rel.toLowerCase()==="stylesheet"||s.removeChild(h),h=y}}else s==="body"&&Ds(n.ownerDocument.body);s=f}while(s);_r(i)}function wv(n,i){var s=n;n=0;do{var l=s.nextSibling;if(s.nodeType===1?i?(s._stashedDisplay=s.style.display,s.style.display="none"):(s.style.display=s._stashedDisplay||"",s.getAttribute("style")===""&&s.removeAttribute("style")):s.nodeType===3&&(i?(s._stashedText=s.nodeValue,s.nodeValue=""):s.nodeValue=s._stashedText||""),l&&l.nodeType===8)if(s=l.data,s==="/$"){if(n===0)break;n--}else s!=="$"&&s!=="$?"&&s!=="$~"&&s!=="$!"||n++;s=l}while(s)}function ef(n){var i=n.firstChild;for(i&&i.nodeType===10&&(i=i.nextSibling);i;){var s=i;switch(i=i.nextSibling,s.nodeName){case"HTML":case"HEAD":case"BODY":ef(s),ru(s);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(s.rel.toLowerCase()==="stylesheet")continue}n.removeChild(s)}}function i1(n,i,s,l){for(;n.nodeType===1;){var f=s;if(n.nodeName.toLowerCase()!==i.toLowerCase()){if(!l&&(n.nodeName!=="INPUT"||n.type!=="hidden"))break}else if(l){if(!n[Xr])switch(i){case"meta":if(!n.hasAttribute("itemprop"))break;return n;case"link":if(h=n.getAttribute("rel"),h==="stylesheet"&&n.hasAttribute("data-precedence"))break;if(h!==f.rel||n.getAttribute("href")!==(f.href==null||f.href===""?null:f.href)||n.getAttribute("crossorigin")!==(f.crossOrigin==null?null:f.crossOrigin)||n.getAttribute("title")!==(f.title==null?null:f.title))break;return n;case"style":if(n.hasAttribute("data-precedence"))break;return n;case"script":if(h=n.getAttribute("src"),(h!==(f.src==null?null:f.src)||n.getAttribute("type")!==(f.type==null?null:f.type)||n.getAttribute("crossorigin")!==(f.crossOrigin==null?null:f.crossOrigin))&&h&&n.hasAttribute("async")&&!n.hasAttribute("itemprop"))break;return n;default:return n}}else if(i==="input"&&n.type==="hidden"){var h=f.name==null?null:""+f.name;if(f.type==="hidden"&&n.getAttribute("name")===h)return n}else return n;if(n=ln(n.nextSibling),n===null)break}return null}function r1(n,i,s){if(i==="")return null;for(;n.nodeType!==3;)if((n.nodeType!==1||n.nodeName!=="INPUT"||n.type!=="hidden")&&!s||(n=ln(n.nextSibling),n===null))return null;return n}function _v(n,i){for(;n.nodeType!==8;)if((n.nodeType!==1||n.nodeName!=="INPUT"||n.type!=="hidden")&&!i||(n=ln(n.nextSibling),n===null))return null;return n}function tf(n){return n.data==="$?"||n.data==="$~"}function nf(n){return n.data==="$!"||n.data==="$?"&&n.ownerDocument.readyState!=="loading"}function s1(n,i){var s=n.ownerDocument;if(n.data==="$~")n._reactRetry=i;else if(n.data!=="$?"||s.readyState!=="loading")i();else{var l=function(){i(),s.removeEventListener("DOMContentLoaded",l)};s.addEventListener("DOMContentLoaded",l),n._reactRetry=l}}function ln(n){for(;n!=null;n=n.nextSibling){var i=n.nodeType;if(i===1||i===3)break;if(i===8){if(i=n.data,i==="$"||i==="$!"||i==="$?"||i==="$~"||i==="&"||i==="F!"||i==="F")break;
vendor: 4,584 bytes, line 10
10if(i==="/$"||i==="/&")return null}}return n}var af=null;function Sv(n){n=n.nextSibling;for(var i=0;n;){if(n.nodeType===8){var s=n.data;if(s==="/$"||s==="/&"){if(i===0)return ln(n.nextSibling);i--}else s!=="$"&&s!=="$!"&&s!=="$?"&&s!=="$~"&&s!=="&"||i++}n=n.nextSibling}return null}function Tv(n){n=n.previousSibling;for(var i=0;n;){if(n.nodeType===8){var s=n.data;if(s==="$"||s==="$!"||s==="$?"||s==="$~"||s==="&"){if(i===0)return n;i--}else s!=="/$"&&s!=="/&"||i++}n=n.previousSibling}return null}function Ev(n,i,s){switch(i=Nl(s),n){case"html":if(n=i.documentElement,!n)throw Error(r(452));return n;case"head":if(n=i.head,!n)throw Error(r(453));return n;case"body":if(n=i.body,!n)throw Error(r(454));return n;default:throw Error(r(451))}}function Ds(n){for(var i=n.attributes;i.length;)n.removeAttributeNode(i[0]);ru(n)}var cn=new Map,Cv=new Set;function zl(n){return typeof n.getRootNode=="function"?n.getRootNode():n.nodeType===9?n:n.ownerDocument}var na=J.d;J.d={f:o1,r:l1,D:c1,C:u1,L:d1,m:f1,X:p1,S:h1,M:m1};function o1(){var n=na.f(),i=El();return n||i}function l1(n){var i=Bi(n);i!==null&&i.tag===5&&i.type==="form"?Fm(i):na.r(n)}var yr=typeof document>"u"?null:document;function Av(n,i,s){var l=yr;if(l&&typeof i=="string"&&i){var f=en(i);f='link[rel="'+n+'"][href="'+f+'"]',typeof s=="string"&&(f+='[crossorigin="'+s+'"]'),Cv.has(f)||(Cv.add(f),n={rel:n,crossOrigin:s,href:i},l.querySelector(f)===null&&(i=l.createElement("link"),Et(i,"link",n),gt(i),l.head.appendChild(i)))}}function c1(n){na.D(n),Av("dns-prefetch",n,null)}function u1(n,i){na.C(n,i),Av("preconnect",n,i)}function d1(n,i,s){na.L(n,i,s);var l=yr;if(l&&n&&i){var f='link[rel="preload"][as="'+en(i)+'"]';i==="image"&&s&&s.imageSrcSet?(f+='[imagesrcset="'+en(s.imageSrcSet)+'"]',typeof s.imageSizes=="string"&&(f+='[imagesizes="'+en(s.imageSizes)+'"]')):f+='[href="'+en(n)+'"]';var h=f;switch(i){case"style":h=br(n);break;case"script":h=wr(n)}cn.has(h)||(n=v({rel:"preload",href:i==="image"&&s&&s.imageSrcSet?void 0:n,as:i},s),cn.set(h,n),l.querySelector(f)!==null||i==="style"&&l.querySelector(js(h))||i==="script"&&l.querySelector(Ps(h))||(i=l.createElement("link"),Et(i,"link",n),gt(i),l.head.appendChild(i)))}}function f1(n,i){na.m(n,i);var s=yr;if(s&&n){var l=i&&typeof i.as=="string"?i.as:"script",f='link[rel="modulepreload"][as="'+en(l)+'"][href="'+en(n)+'"]',h=f;switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":h=wr(n)}if(!cn.has(h)&&(n=v({rel:"modulepreload",href:n},i),cn.set(h,n),s.querySelector(f)===null)){switch(l){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(s.querySelector(Ps(h)))return}l=s.createElement("link"),Et(l,"link",n),gt(l),s.head.appendChild(l)}}}function h1(n,i,s){na.S(n,i,s);var l=yr;if(l&&n){var f=Ii(l).hoistableStyles,h=br(n);i=i||"default";var y=f.get(h);if(!y){var _={loading:0,preload:null};if(y=l.querySelector(js(h)))_.loading=5;else{n=v({rel:"stylesheet",href:n,"data-precedence":i},s),(s=cn.get(h))&&rf(n,s);var E=y=l.createElement("link");gt(E),Et(E,"link",n),E._p=new Promise(function(q,U){E.onload=q,E.onerror=U}),E.addEventListener("load",function(){_.loading|=1}),E.addEventListener("error",function(){_.loading|=2}),_.loading|=4,ql(y,i,l)}y={type:"stylesheet",instance:y,count:1,state:_},f.set(h,y)}}}function p1(n,i){na.X(n,i);var s=yr;if(s&&n){var l=Ii(s).hoistableScripts,f=wr(n),h=l.get(f);h||(h=s.querySelector(Ps(f)),h||(n=v({src:n,async:!0},i),(i=cn.get(f))&&sf(n,i),h=s.createElement("script"),gt(h),Et(h,"link",n),s.head.appendChild(h)),h={type:"script",instance:h,count:1,state:null},l.set(f,h))}}function m1(n,i){na.M(n,i);var s=yr;if(s&&n){var l=Ii(s).hoistableScripts,f=wr(n),h=l.get(f);h||(h=s.querySelector(Ps(f)),h||(n=v({src:n,async:!0,type:"module"},i),(i=cn.get(f))&&sf(n,i),h=s.createElement("script"),gt(h),Et(h,"link",n),s.head.appendChild(h)),h={type:"script",instance:h,count:1,state:null},l.set(f,h))}}function kv(n,i,s,l){var f=(f=Te.current)?zl(f):null;if(!f)throw Error(r(446));switch(n){case"meta":case"title":return null;case"style":return typeof s.precedence=="string"&&typeof s.href=="string"?(i=br(s.href),s=Ii(f).hoistableStyles,l=s.get(i),l||(l={type:"style",instance:null,count:0,state:null},s.set(i,l)),l):{type:"void",instance:null,count:0,state:null};case"link":if(s.rel==="stylesheet"&&typeof s.href=="string"&&typeof s.precedence=="string"){n=br(s.href);var h=Ii(f).hoistableStyles,y=h.get(n);if(y||(f=f.ownerDocument||f,y={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}}
vendor: 4,212 bytes, line 10
10,h.set(n,y),(h=f.querySelector(js(n)))&&!h._p&&(y.instance=h,y.state.loading=5),cn.has(n)||(s={rel:"preload",as:"style",href:s.href,crossOrigin:s.crossOrigin,integrity:s.integrity,media:s.media,hrefLang:s.hrefLang,referrerPolicy:s.referrerPolicy},cn.set(n,s),h||g1(f,n,s,y.state))),i&&l===null)throw Error(r(528,""));return y}if(i&&l!==null)throw Error(r(529,""));return null;case"script":return i=s.async,s=s.src,typeof s=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=wr(s),s=Ii(f).hoistableScripts,l=s.get(i),l||(l={type:"script",instance:null,count:0,state:null},s.set(i,l)),l):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,n))}}function br(n){return'href="'+en(n)+'"'}function js(n){return'link[rel="stylesheet"]['+n+"]"}function Rv(n){return v({},n,{"data-precedence":n.precedence,precedence:null})}function g1(n,i,s,l){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?l.loading=1:(i=n.createElement("link"),l.preload=i,i.addEventListener("load",function(){return l.loading|=1}),i.addEventListener("error",function(){return l.loading|=2}),Et(i,"link",s),gt(i),n.head.appendChild(i))}function wr(n){return'[src="'+en(n)+'"]'}function Ps(n){return"script[async]"+n}function xv(n,i,s){if(i.count++,i.instance===null)switch(i.type){case"style":var l=n.querySelector('style[data-href~="'+en(s.href)+'"]');if(l)return i.instance=l,gt(l),l;var f=v({},s,{"data-href":s.href,"data-precedence":s.precedence,href:null,precedence:null});return l=(n.ownerDocument||n).createElement("style"),gt(l),Et(l,"style",f),ql(l,s.precedence,n),i.instance=l;case"stylesheet":f=br(s.href);var h=n.querySelector(js(f));if(h)return i.state.loading|=4,i.instance=h,gt(h),h;l=Rv(s),(f=cn.get(f))&&rf(l,f),h=(n.ownerDocument||n).createElement("link"),gt(h);var y=h;return y._p=new Promise(function(_,E){y.onload=_,y.onerror=E}),Et(h,"link",l),i.state.loading|=4,ql(h,s.precedence,n),i.instance=h;case"script":return h=wr(s.src),(f=n.querySelector(Ps(h)))?(i.instance=f,gt(f),f):(l=s,(f=cn.get(h))&&(l=v({},s),sf(l,f)),n=n.ownerDocument||n,f=n.createElement("script"),gt(f),Et(f,"link",l),n.head.appendChild(f),i.instance=f);case"void":return null;default:throw Error(r(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(l=i.instance,i.state.loading|=4,ql(l,s.precedence,n));return i.instance}function ql(n,i,s){for(var l=s.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),f=l.length?l[l.length-1]:null,h=f,y=0;y<l.length;y++){var _=l[y];if(_.dataset.precedence===i)h=_;else if(h!==f)break}h?h.parentNode.insertBefore(n,h.nextSibling):(i=s.nodeType===9?s.head:s,i.insertBefore(n,i.firstChild))}function rf(n,i){n.crossOrigin==null&&(n.crossOrigin=i.crossOrigin),n.referrerPolicy==null&&(n.referrerPolicy=i.referrerPolicy),n.title==null&&(n.title=i.title)}function sf(n,i){n.crossOrigin==null&&(n.crossOrigin=i.crossOrigin),n.referrerPolicy==null&&(n.referrerPolicy=i.referrerPolicy),n.integrity==null&&(n.integrity=i.integrity)}var Dl=null;function Ov(n,i,s){if(Dl===null){var l=new Map,f=Dl=new Map;f.set(s,l)}else f=Dl,l=f.get(s),l||(l=new Map,f.set(s,l));if(l.has(n))return l;for(l.set(n,null),s=s.getElementsByTagName(n),f=0;f<s.length;f++){var h=s[f];if(!(h[Xr]||h[wt]||n==="link"&&h.getAttribute("rel")==="stylesheet")&&h.namespaceURI!=="http://www.w3.org/2000/svg"){var y=h.getAttribute(i)||"";y=n+y;var _=l.get(y);_?_.push(h):l.set(y,[h])}}return l}function Lv(n,i,s){n=n.ownerDocument||n,n.head.insertBefore(s,i==="title"?n.querySelector("head > title"):null)}function v1(n,i,s){if(s===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;return i.rel==="stylesheet"?(n=i.disabled,typeof i.precedence=="string"&&n==null):!0;case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function Nv(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function y1(n,i,s,l){if(s.type==="stylesheet"&&(typeof l.media!="str
10ing"||matchMedia(l.media).matches!==!1)&&(s.state.loading&4)===0){if(s.instance===null){var f=br(l.href),h=i.querySelector(js(f));if(h){i=h._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=jl.bind(n),i.then(n,n)),s.state.loading|=4,s.instance=h,gt(h);return}h=i.ownerDocument||i,l=Rv(l),(f=cn.get(f))&&rf(l,f),h=h.createElement("link"),gt(h);var y=h;y._p=new Promise(function(_,E){y.onload=_,y.onerror=E}),Et(h,"link",l),s.instance=h}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(s,i),(i=s.state.preload)&&(s.state.loading&3)===0&&(n.count++,s=jl.bind(n),i.addEventListener("load",s),i.addEventListener("error",s))}}var of=0;function b1(n,i){return n.stylesheets&&n.count===0&&Ml(n,n.stylesheets),0<n.count||0<n.imgCount?function(s){var l=setTimeout(function(){if(n.stylesheets&&Ml(n,n.stylesheets),n.unsuspend){var h=n.unsuspend;n.unsuspend=null,h()}},6e4+i);0<n.imgBytes&&of===0&&(of=62500*XS());var f=setTimeout(function(){if(n.waitingForImages=!1,n.count===0&&(n.stylesheets&&Ml(n,n.stylesheets),n.unsuspend)){var h=n.unsuspend;n.unsuspend=null,h()}},(n.imgBytes>of?50:800)+i);return n.unsuspend=s,function(){n.unsuspend=null,clearTimeout(l),clearTimeout(f)}}:null}function jl(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ml(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var Pl=null;function Ml(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,Pl=new Map,i.forEach(w1,n),Pl=null,jl.call(n))}function w1(n,i){if(!(i.state.loading&4)){var s=Pl.get(n);if(s)var l=s.get(null);else{s=new Map,Pl.set(n,s);for(var f=n.querySelectorAll("link[data-precedence],style[data-precedence]"),h=0;h<f.length;h++){var y=f[h];(y.nodeName==="LINK"||y.getAttribute("media")!=="not all")&&(s.set(y.dataset.precedence,y),l=y)}l&&s.set(null,l)}f=i.instance,y=f.getAttribute("data-precedence"),h=s.get(y)||l,h===l&&s.set(null,f),s.set(y,f),this.count++,l=jl.bind(this),f.addEventListener("load",l),f.addEventListener("error",l),h?h.parentNode.insertBefore(f,h.nextSibling):(n=n.nodeType===9?n.head:n,n.insertBefore(f,n.firstChild)),i.state.loading|=4}}var Ms={$$typeof:x,Provider:null,Consumer:null,_currentValue:fe,_currentValue2:fe,_threadCount:0};function _1(n,i,s,l,f,h,y,_,E){this.tag=1,this.containerInfo=n,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=tu(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=tu(0),this.hiddenUpdates=tu(null),this.identifierPrefix=l,this.onUncaughtError=f,this.onCaughtError=h,this.onRecoverableError=y,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=E,this.incompleteTransitions=new Map}function zv(n,i,s,l,f,h,y,_,E,q,U,$){return n=new _1(n,i,s,y,E,q,U,$,_),i=1,h===!0&&(i|=24),h=Gt(3,null,null,i),n.current=h,h.stateNode=n,i=Uu(),i.refCount++,n.pooledCache=i,i.refCount++,h.memoizedState={element:l,isDehydrated:s,cache:i},$u(h),n}function qv(n){return n?(n=Zi,n):Zi}function Dv(n,i,s,l,f,h){f=qv(f),l.context===null?l.context=f:l.pendingContext=f,l=Ca(i),l.payload={element:s},h=h===void 0?null:h,h!==null&&(l.callback=h),s=Aa(n,l,i),s!==null&&(Ut(s,n,i),gs(s,n,i))}function jv(n,i){if(n=n.memoizedState,n!==null&&n.dehydrated!==null){var s=n.retryLane;n.retryLane=s!==0&&s<i?s:i}}function lf(n,i){jv(n,i),(n=n.alternate)&&jv(n,i)}function Pv(n){if(n.tag===13||n.tag===31){var i=fi(n,67108864);i!==null&&Ut(i,n,67108864),lf(n,67108864)}}function Mv(n){if(n.tag===13||n.tag===31){var i=Jt();i=nu(i);var s=fi(n,i);s!==null&&Ut(s,n,i),lf(n,i)}}var Ul=!0;function S1(n,i,s,l){var f=j.T;j.T=null;var h=J.p;try{J.p=2,cf(n,i,s,l)}finally{J.p=h,j.T=f}}function T1(n,i,s,l){var f=j.T;j.T=null;var h=J.p;try{J.p=8,cf(n,i,s,l)}finally{J.p=h,j.T=f}}function cf(n,i,s,l){if(Ul){var f=uf(l);if(f===null)Yd(n,i,l,Bl,s),Bv(n,l);else if(C1(f,n,i,s,l))l.stopPropagation();else if(Bv(n,l),i&4&&-1<E1.indexOf(n)){for(;f!==null;){var h=Bi(f);if(h!==null)switch(h.tag){case 3:if(h=h.stateNode,h.current.memoizedState.isDehydrated){var y=oi(h.pendingLanes);if(y!==0){var _=h;for(_.pendingLanes|=2,_.entangledLanes|=2;y;){var E=1<<31-$t(y);_.entanglements[1]|=E,y&=~E}Rn(h),(Me&6)===0&&(Sl=It()+500,Ns(0))}}break;case 31:case 13:_=fi(h,2),_!==null&&Ut(_,h,2),El(),lf(h,2)}if(h=uf(l),h===null&&Yd(n,i,l,Bl,s),h===f)break;f=h}f!==null&&l.stopPropagation()}else Yd(n,i,l,null,s)}}function uf(n){return n=du(n),df(n)}var Bl=null;function df(n){if(Bl=null,n=Ui(n),n!==null){var i=c(n);if(i===null)n=null;else{var s=i.tag;if(s===13){if(n=u(i),n!==null)return n;n=null}else if(s===31){if(n=d(i),n!==null)return n;n=null}else if(s===3){if(i.stateNode.current.memoizedState.isDehydrated)return i.tag===3?i.stateNode.containerInfo:null;n=null}else i!==n&&(n=null)}}return Bl=n,null}function Uv(n){switch(n){case"beforetoggle":case"cancel":case"click":case"close"
vendor: 3,445 bytes, line 10
10:case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(c_()){case Kh:return 2;case Yh:return 8;case xo:case u_:return 32;case Qh:return 268435456;default:return 32}default:return 32}}var ff=!1,Pa=null,Ma=null,Ua=null,Us=new Map,Bs=new Map,Ba=[],E1="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function Bv(n,i){switch(n){case"focusin":case"focusout":Pa=null;break;case"dragenter":case"dragleave":Ma=null;break;case"mouseover":case"mouseout":Ua=null;break;case"pointerover":case"pointerout":Us.delete(i.pointerId);break;case"gotpointercapture":case"lostpointercapture":Bs.delete(i.pointerId)}}function Is(n,i,s,l,f,h){return n===null||n.nativeEvent!==h?(n={blockedOn:i,domEventName:s,eventSystemFlags:l,nativeEvent:h,targetContainers:[f]},i!==null&&(i=Bi(i),i!==null&&Pv(i)),n):(n.eventSystemFlags|=l,i=n.targetContainers,f!==null&&i.indexOf(f)===-1&&i.push(f),n)}function C1(n,i,s,l,f){switch(i){case"focusin":return Pa=Is(Pa,n,i,s,l,f),!0;case"dragenter":return Ma=Is(Ma,n,i,s,l,f),!0;case"mouseover":return Ua=Is(Ua,n,i,s,l,f),!0;case"pointerover":var h=f.pointerId;return Us.set(h,Is(Us.get(h)||null,n,i,s,l,f)),!0;case"gotpointercapture":return h=f.pointerId,Bs.set(h,Is(Bs.get(h)||null,n,i,s,l,f)),!0}return!1}function Iv(n){var i=Ui(n.target);if(i!==null){var s=c(i);if(s!==null){if(i=s.tag,i===13){if(i=u(s),i!==null){n.blockedOn=i,tp(n.priority,function(){Mv(s)});return}}else if(i===31){if(i=d(s),i!==null){n.blockedOn=i,tp(n.priority,function(){Mv(s)});return}}else if(i===3&&s.stateNode.current.memoizedState.isDehydrated){n.blockedOn=s.tag===3?s.stateNode.containerInfo:null;return}}}n.blockedOn=null}function Il(n){if(n.blockedOn!==null)return!1;for(var i=n.targetContainers;0<i.length;){var s=uf(n.nativeEvent);if(s===null){s=n.nativeEvent;var l=new s.constructor(s.type,s);uu=l,s.target.dispatchEvent(l),uu=null}else return i=Bi(s),i!==null&&Pv(i),n.blockedOn=s,!1;i.shift()}return!0}function Fv(n,i,s){Il(n)&&s.delete(i)}function A1(){ff=!1,Pa!==null&&Il(Pa)&&(Pa=null),Ma!==null&&Il(Ma)&&(Ma=null),Ua!==null&&Il(Ua)&&(Ua=null),Us.forEach(Fv),Bs.forEach(Fv)}function Fl(n,i){n.blockedOn===i&&(n.blockedOn=null,ff||(ff=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,A1)))}var $l=null;
10function $v(n){$l!==n&&($l=n,t.unstable_scheduleCallback(t.unstable_NormalPriority,function(){$l===n&&($l=null);for(var i=0;i<n.length;i+=3){var s=n[i],l=n[i+1],f=n[i+2];if(typeof l!="function"){if(df(l||s)===null)continue;break}var h=Bi(s);h!==null&&(n.splice(i,3),i-=3,cd(h,{pending:!0,data:f,method:s.method,action:l},l,f))}}))}function _r(n){function i(E){return Fl(E,n)}Pa!==null&&Fl(Pa,n),Ma!==null&&Fl(Ma,n),Ua!==null&&Fl(Ua,n),Us.forEach(i),Bs.forEach(i);for(var s=0;s<Ba.length;s++){var l=Ba[s];l.blockedOn===n&&(l.blockedOn=null)}for(;0<Ba.length&&(s=Ba[0],s.blockedOn===null);)Iv(s),s.blockedOn===null&&Ba.shift();if(s=(n.ownerDocument||n).$$reactFormReplay,s!=null)for(l=0;l<s.length;l+=3){var f=s[l],h=s[l+1],y=f[zt]||null;if(typeof h=="function")y||$v(s);else if(y){var _=null;if(h&&h.hasAttribute("formAction")){if(f=h,y=h[zt]||null)_=y.formAction;else if(df(f)!==null)continue}else _=y.action;typeof _=="function"?s[l+1]=_:(s.splice(l,3),l-=3),$v(s)}}}function Hv(){function n(h){h.canIntercept&&h.info==="react-transition"&&h.intercept({handler:function(){return new Promise(function(y){return f=y})},focusReset:"manual",scroll:"manual"})}function i(){f!==null&&(f(),f=null),l||setTimeout(s,20)}function s(){if(!l&&!navigation.transition){var h=navigation.currentEntry;h&&h.url!=null&&navigation.navigate(h.url,{state:h.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var l=!1,f=null;return navigation.addEventListener("navigate",n),navigation.addEventListener("navigatesuccess",i),navigation.addEventListener("navigateerror",i),setTimeout(s,100),function(){l=!0,navigation.removeEventListener("navigate",n),navigation.removeEventListener("navigatesuccess",i),navigation.removeEventListener("navigateerror",i),f!==null&&(f(),f=null)}}}function hf(n){this._internalRoot=n}Hl.prototype.render=hf.prototype.render=function(n){var i=this._internalRoot;if(i===null)throw Error(r(409));var s=i.current,l=Jt();Dv(s,l,n,i,null,null)},Hl.prototype.unmount=hf.prototype.unmount=function(){var n=this._internalRoot;if(n!==null){this._internalRoot=null;var i=n.containerInfo;Dv(n.current,2,null,n,null,null),El(),i[Mi]=null}};function Hl(n){this._internalRoot=n}Hl.prototype.unstable_scheduleHydration=function(n){if(n){var i=ep();n={blockedOn:null,target:n,priority:i};for(var s=0;s<Ba.length&&i!==0&&i<Ba[s].priority;s++);Ba.splice(s,0,n),s===0&&Iv(n)}};var Gv=e.version;if(Gv!=="19.2.5")throw Error(r(527,Gv,"19.2.5"));J.findDOMNode=function(n){var i=n._reactInternals;if(i===void 0)throw typeof n.render=="function"?Error(r(188)):(n=Object.keys(n).join(","),Error(r(268,n)));return n=m(i),n=n!==null?g(n):null,n=n===null?null:n.stateNode,n};var k1={bundleType:0,version:"19.2.5",rendererPackageName:"react-dom",currentDispatcherRef:j,reconcilerVersion:"19.2.5"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Gl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Gl.isDisabled&&Gl.supportsFiber)try{Jr=Gl.inject(k1),Ft=Gl}catch{}}return $s.createRoot=function(n,i){if(!o(n))throw Error(r(299));var s=!1,l="",f=Wm,h=Xm,y=eg;return i!=null&&(i.unstable_strictMode===!0&&(s=!0),i.identifierPrefix!==void 0&&(l=i.identifierPrefix),i.onUncaughtError!==void 0&&(f=i.onUncaughtError),i.onCaughtError!==void 0&&(h=i.onCaughtError),i.onRecoverableError!==void 0&&(y=i.onRecoverableError)),i=zv(n,1,!1,null,null,s,l,null,f,h,y,Hv),n[Mi]=i.current,Kd(n),new hf(i)},$s.hydrateRoot=function(n,i,s){if(!o(n))throw Error(r(299));var l=!1,f="",h=Wm,y=Xm,_=eg,E=null;return s!=null&&(s.unstable_strictMode===!0&&(l=!0),s.identifierPrefix!==void 0&&(f=s.identifierPrefix),s.onUncaughtError!==void 0&&(h=s.onUncaughtError),s.onCaughtError!==void 0&&(y=s.onCaughtError),s.onRecoverableError!==void 0&&(_=s.onRecoverableError),s.formState!==void 0&&(E=s.formState)),i=zv(n,1,!0,i,s??null,l,f,E,h,y,_,Hv),i.context=qv(null),s=i.current,l=Jt(),l=nu(l),f=Ca(l),f.callback=null,Aa(s,f,l),s=l,i.current.lanes=s,Wr(i,s),Rn(i),n[Mi]=i.current,Kd(n),new Hl(i)},$s.version="19.2.5",$s}var ty;function U1(){if(ty)return gf.exports;ty=1;function t(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),gf.exports=M1(),gf.exports}var B1=U1(),I1="__TSS_CONTEXT",Uf=Symbol.for("TSS_SERVER_FUNCTION"),sz=Symbol.for("TSS_SERVER_FUNCTION_FACTORY"),F1="application/x-tss-framed",H0=()=>window.__TSS_START_OPTIONS__;function zi(t){return t?.isNotFound===!0}function ao(t){t.statusCode=t.statusCode||t.code||307;const e=new Headers(t.headers);t.href&&e.get("Location")===null&&e.set("Location",t.href);const a=new Response(null,{status:t.statusCode,headers:e});if(a.options=t,t.throw)throw a;return a}function G0(t){return t instanceof Response&&!!t.options}function $1(t){if(t!==null&&typeof t=="object"&&t.isSerializedRedirect)return ao(t)}function H1(t){return t.replaceAll("\0","/").replaceAll("�","/").replace(/~([~0r])/g,(e,a)=>a==="0"?"\0":a==="r"?"�":a)}const ny=!1;function Wa(t){return t[t.length-1]}function V0(t,e){return typeof t=="function"?t(e):t}const bh=Object.prototype.hasOwnProperty;function K0(t){for(const e in t)if(bh.call(t,e))return!0;return!1}const cc=()=>Object.create(null),Sr=(t,e)=>Qa(t,e,!0);function Qa(t,e,a,r=0){if(t===e)return t;if(r++>500)return e;const o=Array.isArray(t)&&Array.isArray(e);if(!o&&!(vc(t)&&vc(e)))return e;const c=Object.keys(t),u=c.length,d=Object.keys(e),p=d.length;if(o?u!==t.length||p!==e.length||u&&Wa(c)!==`${u-1}`||p&&Wa(d)!==`${p-1}`:u!==Object.getOwnPropertyNames(t).length||p!==Object.getOwnPropertyNames(e).length||Object.getOwnPropertySymbols(e).length)return e;let m=0,g,v,b;if(o){for(;m<p&&(b=m,v=t[b],g=e[b],g=v===g?v:typeof v=="object"?Qa(v,g,a,r):g,g===v);m++);if(m===p&&u===p)return t}else{let S=u===p,T=!0;for(;m<p;m++){b=d[m],v=t[b];const C=e[b];g=v===C?v:typeof v=="object"?Qa(v,C,a,r):C,S&&=g===v&&(c[m]===b||bh.call(t,b)),T&&=Object.is(g,C),c[m]=g}if(S)return Object.getOwnPropertySymbols(t).length?e:t;if(T)return e}const w=o?d.fill(0):a?cc():{};for(let S=0;S<p;S++)b=o?S:d[S],o?(v=t[b],S>m&&(g=e[b],g=v===g?v:typeof v=="object"?Qa(v,g,a,r):g),w[b]=S<m?v:g):w[b]=c[S];return w}function vc(t){return!t||typeof t!="object"?!1:(Object.getPrototypeOf(t)?.constructor??Object)===Object}function Tn(t,e,a,r){if(t===e)return!0;
10if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let o=0,c=t.length;o<c;o++){const u=t[o],d=e[o];if(u!==d&&!Tn(u,d,a,r))return!1}return!0}if(vc(t)&&vc(e)){if(a){for(const c in e)if((r||e[c]!==void 0)&&!Tn(t[c],e[c],a,r))return!1;return!0}let o=0;if(r)o=Object.keys(t).length;else for(const c in t)t[c]!==void 0&&o++;for(const c in e)if((r||e[c]!==void 0)&&(o--===0||!Tn(t[c],e[c],a,r)))return!1;return o===0}return!1}function G1(t){return typeof t?.message!="string"?!1:t.message.startsWith("Failed to fetch dynamically imported module")||t.message.startsWith("error loading dynamically imported module")||t.message.startsWith("Importing a module script failed")}const V1=/[\x00-\x1f\x7f"<>`{}]/g;function K1(t){return t.replace(V1,e=>"%"+e.charCodeAt(0).toString(16).toUpperCase().padStart(2,"0"))}function ay(t){let e;try{e=decodeURI(t)}catch{e=t.replaceAll(/%[0-9A-F]{2}/gi,a=>{try{return decodeURI(a)}catch{return a}})}return K1(e)}const Y1=["http:","https:","mailto:","tel:"];function io(t){if(t[0]!=="/"&&t.includes(":"))return/^[\x00-\x20]*([a-z][a-z\d+.\t\n\r-]*:)/i.exec(t)?.[1]?.replace(/[\t\n\r]/g,"").toLowerCase()}const Y0=/^[\x00-\x20]*[\\/][\t\n\r]*[\\/]/;function Q0(t,e){if(!t)return!1;if(Y0.test(t))return!0;const a=io(t);return a?!e.has(a):!1}const Q1={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},J1=/[&><\u2028\u2029]/g;function Z1(t){return t.replace(J1,e=>Q1[e])}function Hs(t){if(!t)return t;let e=t;if(/[%\\\x00-\x1f\x7f]/.test(t)){const a=/%25|%5C/gi;let r=0,o;for(e="";(o=a.exec(t))!==null;)e+=ay(t.slice(r,o.index))+o[0],r=a.lastIndex;e+=ay(r?t.slice(r):t)}return e}function W1(t){return/[\s\u0080-\uFFFF]/.test(t)?t.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):t}function X1(t,e){if(t===e)return!0;if(t.length!==e.length)return!1;for(let a=0;a<t.length;a++)if(t[a]!==e[a])return!1;return!0}function Br(t){return t.replace(/\/{2,}/g,"/")}function J0(t){return t==="/"?t:t.replace(/^\/+/,"")}function qn(t){const e=t.length;return e>1&&t[e-1]==="/"?t.replace(/\/+$/,""):t}function Z0(t){return qn(J0(t))}function iy(t,e){return t?.endsWith("/")&&t!=="/"&&t!==`${e}/`?t.slice(0,-1):t}function ry(t,e,a="never",r){if(e.includes("//")&&(e=Br(e)),e.startsWith("/"))return e.length===1||a==="preserve"?e:a==="always"?e.endsWith("/")?e:`${e}/`:e.endsWith("/")?e.slice(0,-1):e;const o=e===".";let c;if(r){c=o?t:t+"\0"+e;const m=r.get(c);if(m)return m}let u;if(o)u=t.split("/");else{for(t.includes("//")&&(t=Br(t)),u=t.split("/");u.length>1&&Wa(u)==="";)u.pop();const m=e.split("/");for(let g=0,v=m.length;g<v;g++){const b=m[g];b===""?g?g===v-1&&u.push(b):u=[b]:b===".."?u.length>1?u.pop():u=[""]:b==="."||u.push(b)}}u.length>1&&(Wa(u)===""?a==="never"&&u.pop():a==="always"&&u.push(""));const d=u.join("/"),p=(o?Br(d):d)||"/";return c&&r&&r.set(c,p),p}function eT(t){const e=new Map(t.map(r=>[encodeURIComponent(r),r])),a=new RegExp([...e.keys()].join("|").replace(/[.*()]/g,"\\$&"),"g");return r=>r.replace(a,o=>e.get(o)??o)}function tT(t){return t==null||t===""}function nT(t,e,a){if(typeof e!="string")return""+(e??void 0);const r=t==="_splat";if(r&&(!e||/^[a-zA-Z0-9\-._~!/]*$/.test(e)))return e;let o=encodeURIComponent(e);return r&&(o=o.replaceAll("%2F","/")),a?a(o):o}function sy(t,e,a,r,o){const c=t.endsWith("/")?"/":"";let u="";for(const d of e){if(typeof d=="string"){u+=d;continue}const[p,m,g,v]=d,b=p===2,w=b&&v!==void 0?v+c:v;let S=a[m];if(!(p===3&&S==null)){if(o&&(o[m]=S,b&&(o["*"]=S)),b&&tT(S)){if(g==="/"&&!w)continue;S=""}u+=g+nT(m,S,r)+(w||"")}}return u+c||"/"}function yc(t){const e=new Map;let a,r;return{get(o){const c=e.get(o);if(c)return c.visited=!0,c.value},set(o,c){const u=e.get(o);if(u){u.value=c;return}if(e.size>=t){let p=a?.next().value;for(;!p||p.visited;)p?p.visited=!1:a=e.values(),p=a.next().value;p===r&&(a=void 0),e.delete(p.key)}const d={key:o,value:c,visited:!1};r=d,e.set(o,d)},clear(){e.clear(),a=void 0,r=void 0}}}function ro(){throw new Error("Invariant failed")}const Ka=4,W0=5;function aT(t){const e=t.names;if(e)return e;const a=[];for(const r of t)typeof r!="string"&&a.push(r[1]);return t.names=a}function iT(t,e,a){const r=t.substring(e,a);if(r.charCodeAt(0)===36)return r.length===1?[2,"_splat","",void 0]:[1,r.substring(1),"",""];const o=r.indexOf("{");
10if(o>=0){const c=r.indexOf("}",o),u=r.charCodeAt(o+1)===45,d=o+(u?3:2);if(c>=0&&r.charCodeAt(d-1)===36&&(!u||d<c)){const p=r.substring(d,c);return[u?3:p?1:2,p||"_splat",r.substring(0,o),t.substring(e+c+1,p?a:t.length)]}}return r}function so(t,e,a,r,o,c){let u=a;const d=e.fullPath??e.from,p=e.options,m=d.length,g=d.endsWith("/")?m-1:m,v=p?.caseSensitive??t,b=p?.params?.parse??p?.parseParams;let w,S=c?a-1:0;if(!r||d.includes("$")){w=c?.slice()??[];const A=Wa(w);A&&typeof A!="string"&&A[0]===2&&(w[w.length-1]=[A[0],A[1],A[2],A[3]===void 0?void 0:A[3]+d.substring(a-(d[a-2]==="/"?2:1),g)],S=m)}for(;u<m;){const A=u,O=d.indexOf("/",A);let x=O===-1?m:O;const B=iT(d,A,x);u=x+1;let Z;if(typeof B=="string"){if(!r)continue;let M=B,N;v?N=r.static??=new Map:(M=B.toLowerCase(),N=r.staticInsensitive??=new Map);const Y=N.get(M);if(Y)Z=Y;else{const te=Ri(r);Z=te,N.set(M,te)}}else{const M=B[0];let N=B[2],Y=B[3]??"";if(M===2&&(x=m,u=x+1),w&&S<x&&(S<A-1&&w.push(d.substring(S,A-1)),B[2]="/"+N,M===2&&B[3]!==void 0&&g<m&&(B[3]=Y.slice(0,-1)),w.push(B),S=x),!r)continue;const te=v&&!!(N||Y);v||(N=N.toLowerCase(),Y=Y.toLowerCase());const ue=M===1?r.dynamic??=[]:M===3?r.optional??=[]:r.wildcard??=[],H=M!==2&&!b&&ue.find(G=>!G.parse&&G.caseSensitive===te&&G.prefix===N&&G.suffix===Y);if(H)Z=H;else{const G=Ri(r,M,te,N,Y);Z=G,ue.push(G),ue.length===2&&o?.push(ue)}}r=Z}w&&S<g&&w.push(d.substring(S,g));const T=w?.slice();if(!r)return T;if(b&&e.children&&!e.isRoot&&e.id&&e.id.charCodeAt(e.id.lastIndexOf("/")+1)===95){const A=Ri(r,W0);(r.pathless??=[]).push(A),r=A}const C=(e.path||!e.children)&&!e.isRoot;if(C&&g<m){const A=Ri(r,Ka);r.index=A,r=A}return r.parse=b??null,r.priority=p?.params?.priority??0,r.route||(r.data=T,C&&(r.route=e)),[r,u,T]}function X0(t,e){if(t.parse&&!e.parse)return-1;if(!t.parse&&e.parse)return 1;if(t.parse&&e.parse&&(t.priority||e.priority))return e.priority-t.priority;if(t.prefix&&e.prefix&&t.prefix!==e.prefix){if(t.prefix.startsWith(e.prefix))return-1;if(e.prefix.startsWith(t.prefix))return 1}if(t.suffix&&e.suffix&&t.suffix!==e.suffix){if(t.suffix.endsWith(e.suffix))return-1;if(e.suffix.endsWith(t.suffix))return 1}return t.prefix&&!e.prefix?-1:!t.prefix&&e.prefix?1:t.suffix&&!e.suffix?-1:!t.suffix&&e.suffix?1:t.caseSensitive&&!e.caseSensitive?-1:!t.caseSensitive&&e.caseSensitive?1:0}function Ri(t,e=0,a,r,o){return{kind:e,depth:t?t.depth+1:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,data:void 0,parent:t,parse:null,priority:0,caseSensitive:a,prefix:r,suffix:o}}function rT(t,e){const a=Ri(),r=[];function o(c,u,d,p){const[m,g,v]=so(!1,c,u,d,r,p);if(c.children)for(const b of c.children)o(b,g,m,v)}for(const c of t)o(c,1,a);for(const c of r)c.sort(X0);e.masksTree=a,e.flatCache=yc(1e3)}function sT(t,e){t||="/";const a=e.flatCache.get(t);if(a!==void 0)return a;const r=wh(t,e.masksTree);return e.flatCache.set(t,r),r}function oT(t,e,a,r,o){t||="/",r||="/";const c=e?`case\0${t}`:t;let u=o.singleCache.get(c);return u||(u=Ri(),so(e,{from:t},1,u),o.singleCache.set(c,u)),wh(r,u,a)}function lT(t,e,a=!1){const r=a?t:`nofuzz\0${t}`,o=e.matchCache.get(r);if(o!==void 0)return o;t||="/";let c;try{c=wh(t,e.segmentTree,a)}catch(u){if(u instanceof URIError)c=null;else throw u}return c&&(c.branch=tb(c.route)),e.matchCache.set(r,c),c}function cT(t,e=!1){const a=Ri(),r=[],o={},c={};let u=0;function d(p,m,g,v){if(p.init(u),p.id in o&&ro(),o[p.id]=p,u!==0&&p.path){const T=qn(p.fullPath);(!c[T]||p.fullPath.endsWith("/"))&&(c[T]=p)}u++;const[b,w,S]=so(e,p,m,g,r,v);if(p._interpolation=S,p.children)for(const T of p.children)d(T,w,b,S)}d(t,1,a);for(const p of r)p.sort(X0);return{processedTree:{segmentTree:a,singleCache:yc(1e3),matchCache:yc(1e3),flatCache:null,masksTree:null},routesById:o,routesByPath:c}}function wh(t,e,a=!1){const r=t.split("/"),o=dT(t,r,e,a);if(!o)return null;const[c]=eb(t,r,o);return{route:o.node.route,rawParams:c}}function eb(t,e,a){const r=uT(a.node),o=a.node.data&&aT(a.node.data),c=Object.create(null);let u=a.extract?.part??0,d=a.extract?.node??0,p=a.extract?.path??0,m=a.extract?.param??0;for(;d<r.length;u++,d++,p++){const g=r[d];if(g.kind===Ka)break;if(g.kind===W0){u--,p--;continue}const v=e[u],b=p;if(v&&(p+=v.length),g.kind===1||g.kind===3){const w=o[m++];if(g.kind===3&&a.skipped&1<<d){u--,p=b-1;continue}const S=g.suffix||g.prefix?v.substring(g.prefix.length,v.length-g.suffix.length):v;(S||g.kind===1)&&(c[w]=decodeURIComponent(S))}else if(g.kind===2){const w=g,S=t.substring(b+w.prefix.length,t.length-w.suffix.length),T=decodeURIComponent(S);c["*"]=T,c._splat=T;break}}return a.rawParams&&Object.assign(c,a.rawParams),[c,{part:u,node:d,path:p,param:m}]}function tb(t){const e=[t];for(;t.parentRoute;)t=t.parentRoute,e.push(t);return e.reverse(),e}function uT(t){const e=Array(t.depth+1);do e[t.depth]=t,t=t.parent;while(t);return e}function dT(t,e,a,r){if(t==="/"&&a.index)return{node:a.index,skipped:0};const o=!Wa(e),c=o&&t!=="/",u=e.length-(o?1:0),d=[{node:a,index:1,skipped:0,statics:0,dynamics:0,optionals:0}];let p=null,m=null;for(;d.length;){const g=d.pop(),{node:v,index:b,skipped:w,statics:S,dynamics:T,optionals:C}=g;let{extract:A,rawParams:O}=g;if(v.kind===2&&v.route&&!Kl(m,g))continue;if(v.parse){if(!oy(t,e,g))continue;O=g.rawParams,A=g.extract}r&&v.route&&v.kind!==Ka&&Kl(p,g)&&(p=g);const x=b===u;if(x&&(v.route&&(!c||v.kind===Ka||v.kind===2)&&Kl(m,g)&&(m=g),!v.optional&&!v.wildcard&&!v.index&&!v.pathless))continue;const B=x?void 0:e[b];let Z;if(x&&v.index){const M={node:v.index,index:b,skipped:w,statics:S,dynamics:T,optionals:C,extract:A,rawParams:O};let N=!0;if(v.index.parse&&(oy(t,e,M)||(N=!1)),N){if(!T&&!C&&!w&&fT(S,u))return M;Kl(m,M)&&(m=M)}}if(v.wildcard)for(let M=v.wildcard.length-1;M>=0;M--){const N=v.wildcard[M],{prefix:Y,suffix:te}=N;
10if(!(Y&&(x||!(N.caseSensitive?B:Z??=B.toLowerCase()).startsWith(Y)))){if(te){if(x)continue;const ue=e.slice(b).join("/"),H=ue.slice(-te.length);if((N.caseSensitive?H:H.toLowerCase())!==te||ue.length-te.length<Y.length)continue}d.push({node:N,index:u,skipped:w,statics:S,dynamics:T,optionals:C,extract:A,rawParams:O})}}if(v.optional){const M=w|1<<v.depth+1;for(let N=v.optional.length-1;N>=0;N--){const Y=v.optional[N];d.push({node:Y,index:b,skipped:M,statics:S,dynamics:T,optionals:C,extract:A,rawParams:O})}if(!x)for(let N=v.optional.length-1;N>=0;N--){const Y=v.optional[N],{prefix:te,suffix:ue}=Y;if(te||ue){const H=Y.caseSensitive?B:Z??=B.toLowerCase();if(te&&!H.startsWith(te)||ue&&H.indexOf(ue,H.length-ue.length)<te.length)continue}d.push({node:Y,index:b+1,skipped:w,statics:S,dynamics:T,optionals:C+Vl(u,b),extract:A,rawParams:O})}}if(!x&&v.dynamic&&B)for(let M=v.dynamic.length-1;M>=0;M--){const N=v.dynamic[M],{prefix:Y,suffix:te}=N;if(Y||te){const ue=N.caseSensitive?B:Z??=B.toLowerCase();if(Y&&!ue.startsWith(Y)||te&&ue.indexOf(te,ue.length-te.length)<Y.length)continue}d.push({node:N,index:b+1,skipped:w,statics:S,dynamics:T+Vl(u,b),optionals:C,extract:A,rawParams:O})}if(!x&&v.staticInsensitive){const M=v.staticInsensitive.get(Z??=B.toLowerCase());M&&d.push({node:M,index:b+1,skipped:w,statics:S+Vl(u,b),dynamics:T,optionals:C,extract:A,rawParams:O})}if(!x&&v.static){const M=v.static.get(B);M&&d.push({node:M,index:b+1,skipped:w,statics:S+Vl(u,b),dynamics:T,optionals:C,extract:A,rawParams:O})}if(v.pathless)for(let M=v.pathless.length-1;M>=0;M--){const N=v.pathless[M];d.push({node:N,index:b,skipped:w,statics:S,dynamics:T,optionals:C,extract:A,rawParams:O})}}if(m)return m;if(r&&p){let g=p.index;for(let b=0;b<p.index;b++)g+=e[b].length;const v=g===t.length?"/":t.slice(g);return p.rawParams??=Object.create(null),p.rawParams["**"]=decodeURIComponent(v),p}return null}function Vl(t,e){return 2**(t-e-1)}function fT(t,e){return t===2**(e-1)-1}function oy(t,e,a){let r,o;try{[r,o]=eb(t,e,a)}catch{return null}if(a.rawParams=r,a.extract=o,!a.node.parse)return!0;try{if(a.node.parse(r)===!1)return null}catch{}return!0}function Kl(t,e){return t?e.statics>t.statics||e.statics===t.statics&&(e.dynamics>t.dynamics||e.dynamics===t.dynamics&&(e.optionals>t.optionals||e.optionals===t.optionals&&((e.node.kind===Ka)>(t.node.kind===Ka)||e.node.kind===Ka==(t.node.kind===Ka)&&e.node.depth>t.node.depth))):!0}function hT(){try{return sessionStorage}catch{return}}const pT="tsr-scroll-restoration-v1_3",nb=hT();function mT(){try{return JSON.parse(nb?.getItem("tsr-scroll-restoration-v1_3")||"{}")}catch{return{}}}const Tr=mT(),ly="data-scroll-restoration-id",gT=t=>t.state.__TSR_key||t.href;function vT(t){const e=t.getAttribute(ly);if(e)return`[${ly}="${e}"]`;let a="",r=t,o;for(;o=r.parentNode;){let c=1,u=r;for(;u=u.previousElementSibling;)c++;const d=`${r.localName}:nth-child(${c})`;a=a?`${d} > ${a}`:d,r=o}return a}let Yl=!1;const uc="window";function Bf(t){try{return typeof t=="function"?t():document.querySelector(t)}catch{}}function cy(t){const e=new Set;for(const a of t){if(a===uc)continue;const r=Bf(a);r&&e.add(r)}return e}function yT(t,e){const a=t.options.scrollRestoration,r=t._scroll;a&&(r.e=!0);const o=t.options.getScrollRestorationKey||gT,c=new Set,u=d=>{const p=Tr[d]||={};for(const m of c)m===document?p[uc]={scrollX,scrollY}:m.isConnected&&(p[vT(m)]={scrollX:m.scrollLeft,scrollY:m.scrollTop})};a&&!r.s&&(r.s=!0,Yl=!1,history.scrollRestoration="manual",document.addEventListener("scroll",d=>{Yl||c.add(d.target)},!0),t.subscribe("onBeforeLoad",d=>{d.fromLocation&&u(o(d.fromLocation)),c.clear()}),addEventListener("pagehide",()=>{history.scrollRestoration="auto",u(o(t.stores.resolvedLocation.get()??t.stores.location.get()));try{nb?.setItem(pT,JSON.stringify(Tr))}catch{}}),addEventListener("pageshow",d=>{d.persisted&&(history.scrollRestoration="manual")})),!r.r&&(r.r=!0,t.subscribe("onRendered",d=>{const p=t.options.scrollRestorationBehavior,m=t.options.scrollToTopSelectors,g=r.n,v=r.h;let b;if(c.clear(),r.n=!0,r.h=!1,typeof t.options.scrollRestoration=="function"&&!t.options.scrollRestoration({location:t.latestLocation}))return;const w=o(d.toLocation),S=d.fromLocation&&o(d.fromLocation);if(r.e&&S&&S!==w){const T=Tr[S];if(T){let C=Tr[w];for(const A in T){if(A===uc){if(g)continue}else{const O=Bf(A);if(!O||g&&m&&(b??=cy(m),b.has(O)))continue}C||(C=Tr[w]={}),C[A]??=T[A]}}}Yl=!0;try{const T=d.toLocation.hash,C=d.toLocation.state.__hashScrollIntoViewOptions??!0;let A=!1;if(g){!T&&m&&(b??=cy(m));const O=T&&C&&v,x=r.e?Tr[w]:void 0;if(x)for(const B in x){const{scrollX:Z,scrollY:M}=x[B];if(B===uc){if(O)continue;scrollTo({top:M,left:Z,behavior:p}),A=!0}else{const N=Bf(B);N&&(N.scrollLeft=Z,N.scrollTop=M,b?.delete(N))}}if(!T){const B={top:0,left:0,behavior:p};if(A||scrollTo(B),b)for(const Z of b)Z.scrollTo(B)}}!A&&T&&C&&document.getElementById(T)?.scrollIntoView(C)}finally{Yl=!1}}))}function ab(t,e=String){let a;for(const r in t){const o=t[r];o!==void 0&&(a||=new URLSearchParams).set(r,e(o))}return a?a.toString():""}function wf(t){return t?t==="false"?!1:t==="true"?!0:+t*0===0&&+t+""===t?+t:t:""}function bT(t){const e=new URLSearchParams(t),a=Object.create(null);for(const[r,o]of e.entries()){const c=a[r];c==null?a[r]=wf(o):Array.isArray(c)?c.push(wf(o)):a[r]=[c,wf(o)]}return a}const ib=/^(?:\s|["[{\d-]|fa|nu|tr)/,wT=ST(JSON.parse),_T=TT(JSON.stringify,JSON.parse);function ST(t){const e=t===JSON.parse;return a=>{a[0]==="?"&&(a=a.substring(1));const r=bT(a);for(const o in r){const c=r[o];if(typeof c=="string"){if(e&&!ib.test(c))continue;try{r[o]=t(c)}catch{}}}return r}}function TT(t,e){const a=e===JSON.parse;function r(o){if(o&&typeof o=="object")try{return t(o)}catch{}
10else if(e&&typeof o=="string"){if(a&&!ib.test(o))return o;try{return e(o),t(o)}catch{}}return o}return o=>{const c=ab(o,r);return c?`?${c}`:""}}const Ir="__root__";function ET(t,e,a){const r=Z0(t),o=`/${r}`,c=e?o:o.toLowerCase(),u=`${c}/`,d={input:({url:p})=>{const m=e?p.pathname:p.pathname.toLowerCase();return m===c?p.pathname="/":m.startsWith(u)&&(p.pathname=p.pathname.slice(o.length)),p},output:({url:p})=>(p.pathname=Br(`/${r}${p.pathname}`),p)};return a?{input:({url:p})=>If(a,d.input({url:p})),output:({url:p})=>d.output({url:rb(a,p)})}:d}function If(t,e){const a=t?.input?.({url:e});if(a){if(typeof a=="string")return new URL(a);if(a instanceof URL)return a}return e}function rb(t,e){const a=t?.output?.({url:e});if(a){if(typeof a=="string")return new URL(a);if(a instanceof URL)return a}return e}function CT(t,e){const{createMutableStore:a,createReadonlyStore:r,batch:o}=e,c=new Map,u=a("idle"),d=a(t),p=a(void 0),m=a([]),g=r(()=>m.get().map(T=>c.get(T).get())),v=r(()=>({status:u.get(),isLoading:u.get()==="pending",matches:g.get(),location:d.get(),resolvedLocation:p.get()}));function b(T){let C=c.get(T);return C||(C=a(void 0),c.set(T,C)),C}const w={status:u,location:d,resolvedLocation:p,ids:m,matches:g,byRoute:c,__store:v,getMatchStore:b,setMatches:S};function S(T){const C=m.get(),A=T.map(O=>O.routeId);o(()=>{X1(C,A)||m.set(A);for(const O of C)A.includes(O)||c.get(O).set(()=>{});for(const O of T){const x=b(O.routeId);x.get()!==O&&x.set(O)}})}return w}var Ja="__TSR_index",uy="popstate",dy="beforeunload",AT=/^[\x00-\x20]*(?:[\\/][\t\n\r]*){2,}/;function dc(t){const e=AT.exec(t);return e?"/"+t.slice(e[0].length):t}function sb(t){return/[\x00-\x1f\x7f]/.test(t)&&(t=t.replace(/[\x00-\x1f\x7f]/g,e=>`	
11\r`.includes(e)?"":encodeURIComponent(e))),dc(t)}function kT(t){let e=t.getLocation();const a=new Set,r=u=>{e=t.getLocation(),a.forEach(d=>d({location:e,action:u}))},o=u=>{t.notifyOnIndexChange??!0?r(u):e=t.getLocation()},c=async({task:u,navigateOpts:d,...p})=>{if(d?.ignoreBlocker??!1){u();return}const m=t.getBlockers?.()??[],g=p.type==="PUSH"||p.type==="REPLACE";if(typeof document<"u"&&m.length&&g)for(const v of m){const b=bc(p.path,p.state);if(await v.blockerFn({currentLocation:e,nextLocation:b,action:p.type})){t.onBlocked?.();return}}u()};return{get location(){return e},get length(){return t.getLength()},subscribers:a,subscribe:u=>(a.add(u),()=>{a.delete(u)}),push:(u,d,p)=>{const m=e.state[Ja];d=fy(m+1,d),c({task:()=>{t.pushState(u,d),r({type:"PUSH"})},navigateOpts:p,type:"PUSH",path:u,state:d})},replace:(u,d,p)=>{const m=e.state[Ja];d=fy(m,d),c({task:()=>{t.replaceState(u,d),r({type:"REPLACE"})},navigateOpts:p,type:"REPLACE",path:u,state:d})},go:(u,d)=>{c({task:()=>{t.go(u,d?.ignoreBlocker??!1),o({type:"GO",index:u})},navigateOpts:d,type:"GO"})},back:u=>{c({task:()=>{t.back(u?.ignoreBlocker??!1),o({type:"BACK"})},navigateOpts:u,type:"BACK"})},forward:u=>{c({task:()=>{t.forward(u?.ignoreBlocker??!1),o({type:"FORWARD"})},navigateOpts:u,type:"FORWARD"})},canGoBack:()=>e.state[Ja]!==0,createHref:u=>t.createHref(u),block:u=>{if(!t.setBlockers)return()=>{};const d=t.getBlockers?.()??[];return t.setBlockers([...d,u]),()=>{const p=t.getBlockers?.()??[];t.setBlockers?.(p.filter(m=>m!==u))}},flush:()=>t.flush?.(),destroy:()=>t.destroy?.(),notify:r,_getBlockers:()=>t.getBlockers?.()??[]}}function fy(t,e){const a=_h();return{...e,key:a,__TSR_key:a,[Ja]:t}}function RT(t){const e=typeof document<"u"?window:void 0,a=e.history.pushState,r=e.history.replaceState;let o=[];const c=()=>o,u=N=>o=N,d=N=>sb(N),p=(()=>bc(`${e.location.pathname}${e.location.search}${e.location.hash}`,e.history.state));if(!e.history.state?.__TSR_key&&!e.history.state?.key){const N=_h();e.history.replaceState({[Ja]:0,key:N,__TSR_key:N},"")}let m=p(),g,v=!1,b=!1,w=!1,S=!1;const T=()=>m;let C;const A=()=>{C&&(M._ignoreSubscribers=!0,(C[2]?e.history.pushState:e.history.replaceState)(C[1],"",C[0]),M._ignoreSubscribers=!1,C=void 0,g=void 0)},O=(N,Y,te)=>{const ue=!!C;ue||(g=m),m=bc(Y,te),C=[m.href,te,C?.[2]||N],ue||queueMicrotask(()=>A())},x=N=>{m=p(),M.notify({type:N})},B=async()=>
11{if(S=!1,b){b=!1;return}const N=p(),Y=N.state[Ja]-m.state[Ja],te=Y===1,ue=Y===-1,H=!te&&!ue||v;v=!1;const G=H?"GO":ue?"BACK":"FORWARD",ee=H?{type:"GO",index:Y}:{type:ue?"BACK":"FORWARD"};if(w)w=!1;else{const ge=c();if(typeof document<"u"&&ge.length){for(const ce of ge)if(await ce.blockerFn({currentLocation:m,nextLocation:N,action:G})){b=!0,e.history.go(-Y),M.notify(ee);return}}}m=p(),M.notify(ee)},Z=N=>{if(S){S=!1;return}let Y=!1;const te=c();if(typeof document<"u"&&te.length)for(const ue of te){const H=ue.enableBeforeUnload??!0;if(H===!0){Y=!0;break}if(typeof H=="function"&&H()===!0){Y=!0;break}}if(Y)return N.preventDefault(),N.returnValue=""},M=kT({getLocation:T,getLength:()=>e.history.length,pushState:(N,Y)=>O(!0,N,Y),replaceState:(N,Y)=>O(!1,N,Y),back:N=>(N&&(w=!0,S=!0),e.history.back()),forward:N=>{N&&(w=!0,S=!0),e.history.forward()},go:(N,Y)=>{v=!0,Y&&(w=!0,S=!0),e.history.go(N)},createHref:N=>d(N),flush:A,destroy:()=>{e.history.pushState=a,e.history.replaceState=r,e.removeEventListener(dy,Z,{capture:!0}),e.removeEventListener(uy,B)},onBlocked:()=>{g&&m!==g&&(m=g)},getBlockers:c,setBlockers:u,notifyOnIndexChange:!1});return M._ignoreNextBeforeUnload=N=>{S=!1;try{N=new URL(N,e.document.baseURI).href,S=/^https?:/.test(N)&&(!N.includes("#")||N.split("#")[0]!==e.location.href.split("#")[0])}catch{}},e.addEventListener(dy,Z,{capture:!0}),e.addEventListener(uy,B),e.history.pushState=function(...N){const Y=a.apply(e.history,N);return M._ignoreSubscribers||x("PUSH"),Y},e.history.replaceState=function(...N){const Y=r.apply(e.history,N);return M._ignoreSubscribers||x("REPLACE"),Y},M}function bc(t,e){const a=sb(t),r=a.indexOf("#"),o=a.indexOf("?");if(!e){const c=_h();e={[Ja]:0,key:c,__TSR_key:c}}return{href:a,pathname:a.substring(0,r>0?o>0?Math.min(r,o):r:o>0?o:a.length),hash:r>-1?a.substring(r):"",search:o>-1?a.slice(o,r===-1?void 0:r):"",state:e}}function _h(){return(Math.random()+1).toString(36).substring(7)}function _f(t,e){return t.protocol!=="http:"&&t.protocol!=="https:"||t.origin!==e||!!t.username||!!t.password}function Sf(t){return t.pathname+t.search+t.hash}function hy(t){return t.options.loader||t.options.beforeLoad||t.lazyFn||t.options.component?.preload||t.options.pendingComponent?.preload}function xT(t){return t instanceof Error?{name:t.name,message:t.message}:{data:t}}function Pc(t,e){return{fromLocation:e,toLocation:t,pathChanged:e?.pathname!==t.pathname,hrefChanged:e?.href!==t.href,hashChanged:e?.hash!==t.hash}}function py({key:t,__TSR_key:e,__TSR_index:a,__hashScrollIntoViewOptions:r,...o}){return o}function ob(t){return t.findIndex(e=>e.status==="error"||e.status==="notFound"||e._notFound)+1}function OT(t,e,a,r,o,c){r&&(e=e.slice(0,r)),o&&(a=a.slice(0,o));for(const u of e){if(c&&t._tx!==c)return;a.some(d=>d.routeId===u.routeId)||t.routesById[u.routeId].options.onLeave?.(u)}for(const u of a){if(c&&t._tx!==c)return;t.routesById[u.routeId].options[e.some(d=>d.routeId===u.routeId)?"onStay":"onEnter"]?.(u)}}var LT=class{constructor(t,e){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this._scroll={n:!0},this.subscribers=new Set,this._cache=new Map,this._committed=[],this.startTransition=async a=>(a(),!1),this.update=a=>{const r=this.options;this.options={...r,...a},this.isServer=this.options.isServer??ny??typeof document>"u",this.staticLocations=new WeakMap,this.protocolAllowlist=new Set(this.options.protocolAllowlist),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.options.history?this.history=this.options.history:this.history=RT()),this.origin=this.options.origin,this.origin||(window?.origin&&window.origin!=="null"?this.origin=window.origin:this.origin="http://localhost");const o=this.options.basepath??"/",c=this.options.rewrite,u=this.basepath!==o||r?.rewrite!==c||r?.caseSensitive!==this.options.caseSensitive;if(u&&(this.basepath=o,this.rewrite=o!=="/"&&Z0(o)?ET(o,this.options.caseSensitive,c):c),this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree||ny){this.routeTree=this.options.routeTree;let d;d=this.buildRouteTree(),this.setRoutes(d)}if(this.stores)u&&this.stores.location.set(this.latestLocation);else if(this.latestLocation){const d=this.getStoreConfig(this);this.batch=d.batch,this.stores=CT(this.latestLocation,d),yT(this)}},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{const a=cT(this.routeTree,this.options.caseSensitive);return this.options.routeMasks&&rT(this.options.routeMasks,a.processedTree),{...a,resolvePathCache:yc(1e3)}},this.subscribe=(a,r)=>{const o={eventType:a,fn:r};return this.subscribers.add(o),()=>{this.subscribers.delete(o)}},this.emit=a=>{for(const r of this.subscribers)if(r.eventType===a.type)try{r.fn(a)}catch(o){console.error(o)}},this.parseLocation=(a,r)=>
11{const o=({pathname:p,search:m,hash:g,href:v},b)=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(p)){const C=this.options.parseSearch(m),A=this.options.stringifySearch(C);return{href:p+A+g,publicHref:p+A+g,pathname:Hs(p),external:!1,searchStr:A,search:Sr(r?.search,C),hash:Hs(g.slice(1)),state:Qa(r?.state,b)}}const w=If(this.rewrite,new URL(v,this.origin)),S=this.options.parseSearch(w.search),T=this.options.stringifySearch(S);return w.search=T,{href:w.href.replace(w.origin,""),publicHref:v,pathname:Hs(dc(w.pathname)),external:!!this.rewrite&&_f(w,this.origin),searchStr:T,search:Sr(r?.search,S),hash:Hs(w.hash.slice(1)),state:Qa(r?.state,b)}},c=o(a,a.state),{__tempLocation:u,__tempKey:d}=c.state;if(u&&(!d||d===this.tempLocationKey)){const p=o(u,{...u.state,__tempLocation:void 0,key:c.state.key,__TSR_key:c.state.__TSR_key});return p.maskedLocation=c,p}return c},this.matchRoutes=(a,r,o)=>typeof a=="string"?this.matchRoutesInternal({pathname:a,search:r},o):this.matchRoutesInternal(a,r),this.getMatchedRoutes=a=>{const r=Object.create(null),o=lT(qn(a),this.processedTree,!0);return o&&Object.assign(r,o.rawParams),[o?.branch||[this.routesById.__root__],r,o?.route]},this.buildLocation=a=>{{const u=this.staticLocations.get(a);if(u)return u}let r=!1;const o=(u={})=>{if(u.href){const ge=bc(u.href,{});u={...u,to:If(this.rewrite,new URL(ge.pathname,this.origin)).pathname,search:this.options.parseSearch(ge.search),hash:ge.hash.slice(1)}}const d=u._fromLocation||this._pendingLocation||this.latestLocation;let p;const m=()=>(r=!0,d),g=()=>(r=!0,p??=this.matchRoutesLightweight(d)),v=u.to?`${u.to}`:".",b=ry(v[0]==="/"?"":u.unsafeRelative==="path"?m().pathname:u.from??g()[1],v,this.options.trailingSlash,this.resolvePathCache),w=this.routesByPath[qn(b)],S=b.includes("$");let T;if(w)T=w._branch??=tb(w);else if(S)T=[];else{const[ge,ce,j]=this.getMatchedRoutes(b);T=ge,this.options.notFoundRoute&&(!j||j.path!=="/"&&ce["**"])&&(T=[...T,this.options.notFoundRoute])}const C=S?w?._interpolation??so(!1,{fullPath:b},0):void 0;let A;for(const ge of T){const ce=ge.options.params?.stringify??ge.options.stringifyParams;if(ce){const j=g()[3];if(A??=Tf(u.params,j),!K0(A))break;A===j&&(A=Object.assign(cc(),A));try{Object.assign(A,ce(A))}catch{}}}A??=Tf(u.params,zT(u.params,C)?g()[3]:Ef);
11const O=a.leaveParams?b:dc(Hs(C?sy(b,C,A,this.pathParamsDecoder):b)),x=qT(T,a._includeValidateSearch),B=()=>{let ge=g()[2];if(a._includeValidateSearch&&this.options.search?.strict){const ce={};T.forEach(j=>{if(j.options.validateSearch)try{Object.assign(ce,fc(j.options.validateSearch,{...ce,...ge}))}catch{}}),ge=ce}return ge},Z=x.length?DT(x,B(),u):u.search===!0?B():typeof u.search=="function"?u.search(B()):u.search||Ef,M=this.options.stringifySearch(Z),N=u.hash===!0?m().hash:typeof u.hash=="function"?u.hash(m().hash):u.hash||void 0,Y=N?`#${N}`:"",te=u.state?u.state===!0?m().state:typeof u.state=="function"?u.state(m().state):u.state:Ef,ue=`${O}${M}${Y}`;let H,G,ee=!1;if(this.rewrite){const ge=new URL(ue,this.origin),ce=ge.origin,j=rb(this.rewrite,ge);H=Sf(ge),_f(j,ce)?(G=j.href,ee=!0):G=dc(Sf(j))}else H=W1(ue),G=H;return{publicHref:G,href:H,pathname:O,search:Z,searchStr:M,state:te,hash:N??"",external:ee,unmaskOnReload:u.unmaskOnReload}},c=o(a);if(a.mask)c.maskedLocation=o({from:a.from,...a.mask});else if(this.options.routeMasks){const u=sT(c.pathname,this.processedTree);if(u){const d=Object.assign(cc(),u.rawParams),{from:p,params:m,...g}=u.route,v=Tf(m,d);c.maskedLocation=o({from:a.from,...g,params:v})}}return!r&&a._fromLocation&&!c.maskedLocation&&this.staticLocations.set(a,c),c},this.commitLocation=async({viewTransition:a,ignoreBlocker:r,...o})=>{const c=o.maskedLocation??o;if(c.external)return my(this,c.publicHref,{replace:o.replace,ignoreBlocker:r});let u;const d=qn(this.latestLocation.href)===qn(o.href)&&Tn(py(o.state),py(this.latestLocation.state)),p=this._commitPromise;let m;const g=new Promise(v=>{m=v});if(g.resolve=()=>{m(),p?.resolve()},this._commitPromise=g,d)this.load();else{let{maskedLocation:v,hashScrollIntoView:b,...w}=o;v&&(w={...v,state:{...v.state,__tempKey:void 0,__tempLocation:{...w,search:w.searchStr,state:{...w.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(w.unmaskOnReload??this.options.unmaskOnReload??!1)&&(w.state.__tempKey=this.tempLocationKey)),w.state={...w.state,__hashScrollIntoViewOptions:b??this.options.defaultHashScrollIntoView??!0},this.shouldViewTransition=a,u=o.replace?"REPLACE":"PUSH",this.history[u==="REPLACE"?"replace":"push"](w.publicHref,w.state,{ignoreBlocker:r}),this.history.subscribers.size||this.load({action:{type:u}})}return this._scroll.n=o.resetScroll??!0,this._commitPromise},this.buildAndCommitLocation=({replace:a,resetScroll:r,hashScrollIntoView:o,viewTransition:c,ignoreBlocker:u,...d}={})=>{const p=this.buildLocation({...d,_includeValidateSearch:!0});this._pendingLocation=p;const m=this.commitLocation({...p,viewTransition:c,replace:a,resetScroll:r,hashScrollIntoView:o,ignoreBlocker:u});return queueMicrotask(()=>{this._pendingLocation===p&&(this._pendingLocation=void 0)}),m},this.navigate=async({to:a,reloadDocument:r,href:o,publicHref:c,...u})=>{const d=o?io(o):void 0;if(d||r){if(a!==void 0||!o){const m=this.buildLocation({to:a,...u}),g=m.maskedLocation??m;o??=g.publicHref,c??=g.publicHref}return my(this,!d&&c?c:o,u)}return this.buildAndCommitLocation({...u,href:o,to:a,_isNavigate:!0})},this.load=async a=>{this.updateLatestLocation(),a?.action&&(this._scroll.h=a.action.type==="PUSH"||a.action.type==="REPLACE"),await $T(this,a)},this.startViewTransition=a=>{const r=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,r&&typeof document.startViewTransition=="function"){let o;if(typeof r=="object"&&window.CSS?.supports?.("selector(:active-view-transition-type(a))")){const c=this.latestLocation,u=this.stores.resolvedLocation.get(),d=typeof r.types=="function"?r.types(Pc(c,u)):r.types;if(d===!1)return a();o={update:a,types:d}}else o=a;return document.startViewTransition(o).updateCallbackDone}return a()},this.invalidate=a=>{const r=this._committed,o=a?.filter,c=this._preloads,u=new Set,d=g=>{(!o||o(g))&&u.add(g.id)};r.forEach(d),this._cache.forEach(d),c?.forEach(g=>g.forEach(d)),this._tx?.[3].forEach(d);const p=[];for(const[g,v]of c??[])v.some(b=>u.has(b.id))&&(c.delete(g),p.push(g));const m=g=>{if(u.has(g.id)){const v=this.routesById[g.routeId],b={...g,invalid:!0,...(a?.forcePending||g.status==="error"||g.status==="notFound")&&hy(v)?{status:"pending",error:void 0}:void 0};return g._flight=void 0,b}return g};this._committed=r.map(m);for(const[g,v]of this._cache)u.has(g)&&(v.invalid=!0,a?.forcePending&&(v.status="pending"));for(const g of u){const v=this._flights?.get(g);this._flights?.delete(g),v&&!v[2]&&p.push(v[1])}for(const g of p)g.abort();return this.shouldViewTransition=!1,this.load({sync:a?.sync})},this.resolveRedirect=a=>{const r=a.options;let o=a.headers.get("Location")||r.href;if(!o){const u=this.buildLocation(r);o=(u.maskedLocation??u).publicHref||"/"}let c;if(Y0.test(o)||(c=io(o))&&!this.protocolAllowlist.has(c))throw new Error("Redirect blocked: unsafe protocol");if(c==="http:"||c==="https:"){const u=new URL(o);u.pathname.startsWith("//")?o=u.href:_f(u,this.origin)||(o=Sf(u),c=void 0)}return c&&(r.reloadDocument=!0),r.href=o,a.headers.set("Location",o),a},this.clearCache=a=>{const r=this._cache,o=this._preloads,c=a?.filter,u=[],d=[];for(const[m,g]of r)(!c||c(g))&&(d.push(m),u.push(g));const p=[];for(const[m,g]of o??[])(!c||g.some(c))&&(p.push(m),u.push(...g));for(const m of d)r.delete(m);for(const m of p)o.delete(m);for(const m of u){const g=m._flight;m._flight=void 0,g&&!--g[2]&&(this._flights?.get(m.id)===g&&this._flights.delete(m.id),p.push(g[1]))}for(const m of p)m.abort()},this.loadRouteChunk=ca,this.preloadRoute=a=>HT(this,a),this.matchRoute=(a,r)=>{const o={...a,to:a.to?ry(a.from||"",a.to,this.options.trailingSlash,this.resolvePathCache):void 0,params:a.params||{}
11,leaveParams:!0},c=this.buildLocation(o),u=this.stores.status.get()==="pending";if(r?.pending&&!u)return!1;const d=r?.pending??!u?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),p=oT(c.pathname,r?.caseSensitive??!1,r?.fuzzy??!1,d.pathname,this.processedTree);return!p||a.params&&!Tn(p.rawParams,a.params,!0)?!1:r?.includeSearch??!0?Tn(d.search,c.search,!0)?p.rawParams:!1:p.rawParams},this.getStoreConfig=e,t.pathParamsAllowedCharacters?.length&&(this.pathParamsDecoder=eT(t.pathParamsAllowedCharacters)),this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...t,caseSensitive:t.caseSensitive??!1,notFoundMode:t.notFoundMode??"fuzzy",stringifySearch:t.stringifySearch??_T,parseSearch:t.parseSearch??wT,protocolAllowlist:t.protocolAllowlist??Y1}),self.__TSR_ROUTER__=this}isShell(){return!!this.options.isShell}get state(){return this.stores.__store.get()}setRoutes(t){Object.assign(this,t),this.lightweightCache=new WeakMap,this.staticLocations=new WeakMap;const e=this.options.notFoundRoute;e&&(e.init(99999999999),this.routesById[e.id]!==e&&(e._interpolation=so(!1,e,0)),this.routesById[e.id]=e)}matchRoutesInternal(t,e){const[a,r,o]=this.getMatchedRoutes(t.pathname);let c=a,u=!1;(o?o.path!=="/"&&r["**"]:qn(t.pathname))&&(this.options.notFoundRoute?c=[...c,this.options.notFoundRoute]:u=!0);const d=u?jT(this.options.notFoundMode,c):void 0,p=new Array(c.length),m=this._committed,g=(b,w)=>{const S=m[w];return S?.routeId===b.id?S:b===this.options.notFoundRoute?m.find(T=>T.routeId===b.id):void 0};let v;for(let b=0;b<c.length;b++){const w=c[b],S=p[b-1];let T,C,A;{const ee=S?.search??t.search,ge=S?._strictSearch??void 0;try{const ce=fc(w.options.validateSearch,{...ee})??void 0;T={...ee,...ce},C={...ge,...ce}}catch(ce){let j=ce;if(ce instanceof wc||(j=new wc(ce.message,{cause:ce})),e?.throwOnError)throw j;T=ee,C={},A=j}}let O="",x="";try{O=w.options.loaderDeps?.({search:T})??"",x=O&&JSON.stringify(O)||""}catch(ee){if(e?.throwOnError)throw ee;A??=ee}const B=cc(),Z=w._interpolation?sy(w.fullPath,w._interpolation,r,this.pathParamsDecoder,B):w.fullPath,M=w.id+Z+x,N=g(w,b),Y=this._cache.get(M)??(N?.id===M?N:void 0);v=Y?._strictParams??Object.assign(B,v);let te;if(!Y)try{gy(w,v)}catch(ee){if(zi(ee)||G0(ee)?te=ee:te=new NT(ee.message,{cause:ee}),e?.throwOnError)throw te}const ue=N?"stay":"enter";let H;if(Y)H={...Y,cause:ue,search:Sr(N?N.search:Y.search,T),_strictSearch:C,searchError:A};else{const ee=hy(w)?"pending":"success";H={id:M,ssr:w.options.ssr,index:b,routeId:w.id,params:N?.params??v,_strictParams:v,pathname:Z,updatedAt:Date.now(),search:N?Sr(N.search,T):T,_strictSearch:C,searchError:A,status:ee,isFetching:!1,error:void 0,paramsError:te,context:{},abortController:e?._controller??new AbortController,cause:ue,loaderDeps:N?Qa(N.loaderDeps,O):O,invalid:!1,preload:!1,staticData:w.options.staticData||{},fullPath:w.fullPath}}const G=d===w.id;H._notFound&&!G&&(H.error=void 0),H._notFound=G,p[b]=H}for(let b=0;b<p.length;b++){const w=p[b];w.params=w.cause==="stay"?Sr(w.params,v):v,e?._controller&&(w.context={})}return p}matchRoutesLightweight(t){const e=Wa(this.stores.ids.get()),a=e?this.stores.byRoute.get(e).get():void 0,r=a?.id,o=this.lightweightCache.get(t);if(o&&o[0]===r)return o[1];const[c,u]=this.getMatchedRoutes(t.pathname),d=Wa(c),p={...t.search};for(const b of c)try{Object.assign(p,fc(b.options.validateSearch,p))}catch{}const m=a&&a.routeId===d.id&&a.pathname===t.pathname;let g;if(m)g=a.params;else{const b=u;for(const w of c)try{gy(w,b)}catch{}g=b}const v=[c,d.fullPath,p,g];return this.lightweightCache.set(t,[r,v]),v}};async function my(t,e,{replace:a,ignoreBlocker:r}){if(!Q0(e,t.protocolAllowlist)){if(!r){const o=t.history._getBlockers();for(const c of o)if(c?.blockerFn&&await c.blockerFn({currentLocation:t.history.location,nextLocation:t.history.location,action:a?"REPLACE":"PUSH"}))return}t.history._ignoreNextBeforeUnload?.(e),a?window.location.replace(e):window.location.href=e}}var wc=class extends Error{},NT=class extends Error{};function fc(t,e){if(t==null)return{};if("~standard"in t){const a=t["~standard"].validate(e);if(a instanceof Promise)throw new wc("Async validation not supported");if(a.issues)throw new wc(JSON.stringify(a.issues,void 0,2),{cause:a});return a.value}return"parse"in t?t.parse(e):typeof t=="function"?t(e):{}}function Tf(t,e){if(t===void 0||t===!0)return e;const a=Object.create(null);return t===!1||t===null?a:typeof t=="function"?(Object.assign(a,e),Object.assign(a,t(a))):Object.assign(a,e,t)}function zT(t,e){return typeof t=="function"?!0:!e||t===!1||t===null?!1:t===void 0||t===!0||e.some(a=>typeof a!="string"&&!bh.call(t,a[1]))}const Ef=Object.freeze({});function qT(t,e){const a=[];for(let r=0;r<t.length;r++){const o=t[r].options;if("search"in o)o.search?.middlewares&&a.push(...o.search.middlewares);else if(o.preSearchFilters||o.postSearchFilters){const u=({search:d,next:p})=>{const m=p(o.preSearchFilters?o.preSearchFilters.reduce((g,v)=>v(g),d):d);return o.postSearchFilters?o.postSearchFilters.reduce((g,v)=>v(g),m):m};a.push(u)}const c=o.validateSearch;if(e&&c){const u=({search:d,next:p,meta:m})=>{const g=p(d);try{const v=fc(c,g);if(m&&v)for(const b in v)b in g||(m.defaulted||=new Map).set(b,v[b]);return{...g,...v}}catch{}return g};a.push(u)}}return a}function DT(t,e,a){const r=(o,c,u)=>{if(o>=t.length){if(!a.search)return{};if(a.search===!0)return c;const p=V0(a.search,c);return u&&(u.explicit=p),p}const d=(p,m)=>{if(m){const g=u||{};return{search:r(o+1,p,g),meta:g}}return r(o+1,p,u)};return t[o]({search:c,next:d,meta:u})};return r(0,e)}function jT(t,e){if(t!=="root"){let a;for(let r=e.length-1;r>=0;r--){const o=e[r];if(o.options.notFoundComponent)return o.id;a||=o.children&&o.id}if(a)return a}return Ir}function gy(t,e){const a=t.options.params?.parse??t.options.parseParams;a&&Object.assign(e,a(e))}function Ff(t,e){return t.options[e]?.preload?.()}function PT(t,e){const a=Ff(t,"component");
11let r=Ff(t,"pendingComponent");return e&&(r?r=r.then(e):e()),a&&r?Promise.all([a,r]).then(()=>{}):a??r}function ca(t,e,a){const r=()=>e===!1?void 0:e?Ff(t,e):PT(t,a),o=t._lazy;if(o)return o===!0?r():o.then(r);if(!t.lazyFn)return r();const c=t.lazyFn().then(u=>{{const{id:d,...p}=u.options;Object.assign(t.options,p),t._lazy=!0}},u=>{throw t._lazy=void 0,u});return t._lazy=c,c.then(r)}function Sh(t){const e=t.findIndex(a=>a.status!=="success"||a._notFound)+1;return e&&e<t.length?t.slice(0,e):t}function lb(t){let e=t.length;for(let a=0;a<e;a++){const r=t[a];if(r._assetEnd!==void 0){e=Math.min(e,Math.max(a+1,r._assetEnd));continue}if(r.status!=="success"||r._notFound){e=a+1;break}}return e<t.length?t.slice(0,e):t}const Dn=0,ua=1,Mc=2,Nt=3,Xa=[4];function oo(t){return typeof t[0]=="number"}function da(t,e){return e.aborted?Promise.race([Promise.reject(e),t]):new Promise((a,r)=>{const o=()=>r(e);e.addEventListener("abort",o,{once:!0}),Promise.resolve(t).then(a,r).then(()=>e.removeEventListener("abort",o))})}function Sn(t,e){return t.routesById[e.routeId]}function lo(t,e,a){return G0(t)?[Nt,t]:zi(t)?(t.routeId||=a,[Mc,t]):e?(typeof t?.then=="function"&&(t=new Error("A Promise was thrown",{cause:t})),[ua,t]):[Dn,t]}function Th(t,e){let a=lo(e,!0,t.id);if(a[0]!==ua)return a;try{t.options.onError?.(a[1])}catch(r){a=lo(r,!0,t.id)}return a}function Ws(t,e,a,r,o){return o[0].signal.aborted?Xa:Ah(t,e,a,Th(a,r),o)}async function MT(t,e,a,r,o,c){const[u,d]=e,p=a[0].signal,m=!!a[3];for(let g=a[6]??0;g<r;g++){const v=d[g],b=Sn(t,v);v.abortController=a[0];const w=d[g-1]?.context??t.options.context??{},S={params:v.params,location:u,navigate:O=>t.navigate({...O,_fromLocation:u}),buildLocation:t.buildLocation,cause:m?"preload":v.cause,abortController:a[0],preload:m,matches:d,routeId:b.id};try{const O=v._ctx||=b.options.context?b.options.context({...S,deps:v.loaderDeps,context:w})||{}:void 0;v.context={...w,...O}}catch(O){return la(t,v),[g,Ws(t,e,b,O,a)]}if(p.aborted)return[g,Xa];const T=v.paramsError??v.searchError;if(T!==void 0)return la(t,v),[g,Ws(t,e,b,T,a)];const C=b.options.beforeLoad;if(!C)continue;const A=v.status;g>=c&&(v.status="pending",a[7]?.());try{co(t,v,"beforeLoad",a[0]);const O=C({...S,search:v.search,context:v.context,...t.options.additionalContext}),x=await(typeof O?.then=="function"?da(O,p):O);if(p.aborted)return[g,Xa];const B=Ah(t,e,b,lo(x,!1,b.id),a);if(B[0]!==Dn)return la(t,v),[g,B];v.context={...v.context,...x}}catch(O){return la(t,v),[g,Ws(t,e,b,O,a)]}finally{v.status=A,co(t,v,!1,a[0])}}o()}function Eh(t,e,a){if(!(!a||--a[2])){if(t._flights?.get(e.id)===a){const r=t._tx;if(r&&!r[0].signal.aborted&&!r[3].includes(e)&&r[3].some(o=>o.id===e.id)&&r[3].some(o=>o.isFetching==="beforeLoad"))return;t._flights.delete(e.id)}return a[1]}}function la(t,e){const a=e._flight;e._flight=void 0,Eh(t,e,a)?.abort()}function Rt(t,e,a,r){const o=[];for(const c of e)if(!a?.includes(c)){const u=c._flight;if(c._flight=void 0,r&&u?.[2]===1&&t._flights?.get(c.id)===u&&a?.some(d=>d.id===c.id))u[2]=0;else{const d=Eh(t,c,u);d&&o.push(d)}}for(const c of o)c.abort()}function Ch(t){for(const e of t){const a=e._flight;a&&a[2]++}}function co(t,e,a,r){if(e.isFetching=a,r&&t._tx?.[0]!==r)return;const o=t.stores.byRoute.get(e.routeId),c=o?.get();c?.id===e.id&&o.set({...c,isFetching:a})}function cb(t,e,a,r,o,c,u){const d=e[0];return{params:a.params,location:d,navigate:p=>t.navigate({...p,_fromLocation:d}),cause:u?"preload":a.cause,abortController:o,preload:u,deps:a.loaderDeps,parentMatchPromise:c,context:a.context,route:r,...t.options.additionalContext}}async function vy(t,e,a,r,o,c,u){const d=u[0],p=d.signal;if(p.aborted)return Xa;if(!o)return[Dn,void 0];let m=a._flight;co(t,a,"loader",d);try{if(!m){const g=new AbortController;m=[Promise.resolve().then(()=>o(cb(t,e,a,r,g,c,!!u[3]))).then(v=>lo(v,!1,r.id),v=>lo(v,!0,r.id)).then(v=>(v[0]!==Dn&&t._flights?.get(a.id)===m&&(t._flights.delete(a.id),m[2]||g.abort()),v[0]===ua&&m[2]?Th(r,v[1]):v)),g,1],(t._flights??=new Map).set(a.id,m)}return a._flight=m,a.abortController=m[1],Ah(t,e,r,await da(m[0],p),u)}catch(g){if(g!==p||!p.aborted)throw g;return la(t,a),Xa}finally{co(t,a,!1,d)}}function yy(t,e,a){e[0]!==Nt&&(t.status="success",t.error=void 0,e[0]===Dn?(t.loaderData=e[1],t.invalid=!1,t.updatedAt=Date.now(),t.preload=a):t.invali
11d=!0)}function ub(t,e,a){const r=t._cache.get(e.id);if(r!==a||t._committed.some(c=>c.id===e.id&&c._flight===e._flight))return;const o={...e,_notFound:void 0,context:{}};o._flight&&o._flight[2]++,t._cache.set(e.id,o),r&&la(t,r)}function by(t,e){return e[0]===ua||e[0]===Mc?{...t,status:e[0]===ua?"error":"notFound",error:e[1],_flight:void 0}:t}function UT(t,e,a,r,o,c,u){const d=e[1][a],p=Sn(t,d),m=!!c[3],g=t._cache.get(d.id);let v,b=!1,w;try{if(d.status==="success"&&(v=p.options.shouldReload,typeof v=="function"&&(v=v(cb(t,e,d,p,c[0],o,m))),c[0].signal.aborted&&(w=Xa)),!w)if(d.status!=="success")b=!0;else{const G=m||d.preload?p.options.preloadStaleTime??t.options.defaultPreloadStaleTime??3e4:p.options.staleTime??t.options.defaultStaleTime??0;b=!!(d.invalid||v||v===void 0&&Date.now()-d.updatedAt>=G&&(c[5]||d.cause==="enter"||c[2].some(ee=>ee.routeId===d.routeId&&ee.id!==d.id)))}}catch(G){d.invalid=!0,la(t,d),w=Ws(t,e,p,G,c)}const S=p.options.loader,T=typeof S=="function",C=T?S:S?.handler,A=!m||p.options.preload!==!1;let O=A&&S?t._flights?.get(d.id):void 0;O===d._flight||w?O=void 0:O&&!b&&!m&&v===void 0?b=!0:b||(O=void 0);const x=!!(S&&b&&d.status==="success"&&!m&&!c[4]&&((T?void 0:S.staleReloadMode)??t.options.defaultStaleReloadMode)!=="blocking"),B=b&&A,Z=B&&!x&&(d.status!=="success"||!!S),M=a>=u?c[7]:void 0,N=p.lazyFn&&p._lazy!==!0?M:void 0;if(B&&!S&&(d.invalid=!1,d.updatedAt=Date.now()),O&&O[2]++,Z){const G=d._flight;d._flight=O,Eh(t,d,G)?.abort(),a>=u&&(d.status="pending"),M?.()}B||(d.isFetching=!1);const Y=!w&&Z?vy(t,e,d,p,C,o,c).then(G=>(yy(d,G,m),G[0]===Dn&&(S&&!c[0].signal.aborted&&ub(t,d,g),a>=u&&(d.status="pending")),G)):Promise.resolve(w??[Dn,d.loaderData]),te=(async()=>{try{const ee=ca(p,void 0,N);ee&&await da(ee,c[0].signal)}catch(ee){if(!e[1].some((ge,ce)=>ce<=a&&(ge.status==="error"||ge.status==="notFound"||ge._notFound)))return[a,Ws(t,e,p,ee,c)]}const G=await Y;Z&&G[0]===Dn&&d.status==="pending"&&!c[0].signal.aborted&&(d.status="success",M?.())})();if(r.push([a,Y,te]),!x)return Y.then(G=>by(d,G));const ue={...d,status:"pending",preload:!1,_flight:O};d.invalid=!1,d.isFetching="loader";const H=vy(t,e,ue,p,C,o,c).then(G=>(d.isFetching=!1,yy(ue,G,!1),G));return(e[2]??=[]).push([a,H,te,ue]),H.then(G=>by(ue,G))}async function $f(t,e,a,r,o=0){const c=a?.[1][1];let u=c?.routeId?e.findIndex(d=>d.routeId===c.routeId):a?.[0]??e.length-1;u<0&&(u=0);for(let d=u;d>=0;d--){const p=Sn(t,e[d]);try{const m=ca(p,!1);m&&await da(m,r)}catch(m){if(m===r&&r.aborted)throw m}if(p.options.notFoundComponent)return d}return c?.routeId?u:o}function Ni(t,e){e[2]&&(Rt(t,e[2].map(a=>a[3])),e[2]=void 0)}async function wy(t,e,a,r){let o;try{await Promise.all(t.map(c=>c[1].then(async u=>{const d=c[0];if(!(r&&d>=await r)){if(u[0]>=Nt)throw[d,u];!o&&u[0]!==Dn&&(o=[d,u],await Promise.all((a??[]).map(p=>{if(!(p[0]<=d))return p[1].then(m=>{if(m[0]===Nt)throw[p[0],m]})})))}})))}catch(c){return c}return e??o}function Ah(t,e,a,r,o,c){for(;r[0]===Nt;){const u=r[1],d=u.options;try{if((d.href||u.headers.has("Location"))&&(t.resolveRedirect(u),d.reloadDocument)||(d.reloadDocument?o[3]:o[1]>=20))return r;const p=t.buildLocation({...d,_fromLocation:e[0],_includeValidateSearch:!0}),m=p.maskedLocation??p;if(m.external){const g=u.clone();return g.options={...d},g.headers.set("Location",m.publicHref),t.resolveRedirect(g),o[3]?[Nt,g]:[Nt,g,m]}return[Nt,u,p]}catch(p){r=c?[ua,p]:Th(a,p),c=!0}}return r}async function db(t,e,a,r,o,c){const u=e[1];let d=await o,p=!1;const m=u.findIndex(w=>w._notFound),g=w=>w[1][0]===Mc?$f(t,u,w,r.signal):w[0];let v=m<0?u.length:m;if((d?.[1][0]??0)>=Nt)v=0;else if(d){v=d[2]??=await g(d);for(const w of a){if(w[0]>=v)break;const S=await w[1];if(S[0]!==Dn&&S[0]<Nt&&!("loaderData"in u[w[0]])){d=[w[0],S],v=d[2]=await g(d);break}}}for(const w of a){if(w[0]>=v)break;const S=await w[2];if(S){d=S;break}}if((d?.[1][0]??0)>=Nt){const w=d[1];if(w[0]!==Nt||w[1].options.reloadDocument||w[2])return Ni(t,e),w;p=!0,d=[0,[ua,new Error("Too many redirects")]]}const b=d?d[2]??await g(d):m;if(b>=0){const w=d?.[1],S=w?.[0],T=u[b],C=w?.[1],A=()=>{w&&(T._notFound=void 0,S===ua?T.status="error":(C.routeId=T.routeId,T.routeId===t.routeTree.id?(T.status="success",T._notFound=!0):T.status="notFound"),T.error=C,T.isFetching=!1)};A(),w||c?.();const O=Sn(t,T);try{await da(w?Promise.resolve().then(()=>ca(O,S===ua?"errorComponent":"notFoundComponent")):Promise.all([ca(O),ca(O,"notFoundComponent")]),r.signal)}
11catch(x){if(x===r.signal&&r.signal.aborted)return Ni(t,e),Xa}w?p&&(r.abort(),await Promise.all([...a.map(x=>x[1]),...a.map(x=>x[2]),...(e[2]??[]).map(x=>x[1])]),Ni(t,e),Rt(t,u),A()):T.status="success"}return e}async function kh(t,e,a,r=0,o=e[1].length){const c=e[1];for(let u=r;u<o;u++){const d=c[u],p=Sn(t,d).options;if(p.head||p.scripts)try{const m={ssr:t.options.ssr,matches:c,match:d,params:d.params,loaderData:d.loaderData},[g,v]=await da(Promise.all([p.head?.(m),p.scripts?.(m)]),a);d.meta=g?.meta,d.links=g?.links,d.headScripts=g?.scripts,d.styles=g?.styles,d.scripts=v}catch(m){if(m===a&&a.aborted)break;console.error(m)}if(d.status!=="success"||d._notFound)break}return e}async function fb(t,e,a,r){const o=[e,a],c=r[0].signal;let u;try{const d=t.stores.matches.get();let p=a.findIndex(A=>A._notFound);if(t.options.notFoundMode!=="root"&&p>=0){const A=await $f(t,a,void 0,c,p);a[p]._notFound=void 0,a[A]._notFound=!0,p=A}let m=p<0?a.length:p+1,g=0;for(;g<m&&g!==p;){const A=a[g],O=r[2][g],x=d[g];if(O?.id!==A.id||O.status!=="success"||A.preload||x?.id!==A.id||x.status!=="success"||(g++,O._notFound||x._notFound))break}const v=[],b=r[6]??0;let w=b?Promise.resolve(a[b-1]):void 0;const S=()=>{for(let A=b;A<m&&!c.aborted;A++)w=UT(t,o,A,v,w,r,g)},T=await MT(t,o,r,m,S,g);if(T){if(r[4]=!0,m=T[0],T[1][0]===Mc){const A=await $f(t,a,T,c);T[2]=A,m=Math.min(m,A+1)}else T[1][0]>=Nt&&(m=0);S()}if(!c.aborted&&!r[3]){const A=[];for(const[O,x]of t._flights??[])x[2]||(t._flights.delete(O),A.push(x[1]));for(const O of A)O.abort()}const C=db(t,o,v,r[0],wy(v,T,o[2]),r[7]);o[2]?.length&&(o[3]=wy(o[2],void 0,void 0,C.then(A=>oo(A)?0:Sh(a).length,()=>0))),u=await C}catch(d){if(Ni(t,o),d===c&&c.aborted)return Xa;throw d}return oo(u)?u:kh(t,u,c,r[6]===a.length?r[6]:0)}function Hf(t,e){if(t._tx!==e)return;const a=e[3],r=t.stores.matches.get();let o=t._pending;for(let c=0;c<a.length;c++){const u=a[c],d=u.status==="success"&&!u._notFound,p=r[c]?.id===u.id&&r[c]?.status==="pending";if(d&&!p)continue;const m=Sn(t,u),g=d||u.invalid?0:m.options.pendingMs??t.options.defaultPendingMs,v=m.options.pendingComponent??t.options.defaultPendingComponent;if(!v||typeof g!="number"||g===1/0){o&&(o[0]=e,o[2]=0,o[4]=!0);return}const b=m.options.pendingMinMs??t.options.defaultPendingMinMs??0;let w=!1;if(o?.[1]===u.id?(w=o[0]!==e,o[0]=e):(clearTimeout(o?.[3]),t._pending=o=void 0),o||(t._pending=o=[e,u.id,p?Date.now()+b:e[4]+g,void 0,p||void 0,v]),o[4]&&!w&&o[5]===v)return;if(o[5]=v,!o[4]){clearTimeout(o[3]);const C=o[2]-Date.now();if(C>0){o[3]=setTimeout(()=>Hf(t,e),C);return}o[2]=0}const S=a.map(C=>({...C,_flight:void 0}));S[c].status="pending";const T=o[4]=t.startTransition(()=>t.stores.setMatches(S),S).then(C=>(C&&t._pending===o&&o[4]===T&&!o[2]&&(o[2]=Date.now()+b),C));return}}function Gs(t,e){const a=t._pending;(t._tx===e||!t._tx?.[3].some(r=>r.id===a?.[1]))&&(clearTimeout(a?.[3]),t._pending=void 0)}async function _y(t,e){const a=t._pending;if(!a)return;clearTimeout(a[3]);const r=a[2]-Date.now();if(!a[4]||r<=0||!Sh(e[3]).some(c=>c.id===a[1]))return;let o;try{await da(new Promise(c=>{o=setTimeout(c,r)}),e[0].signal)}catch{}clearTimeout(o)}function hb(t,e){t._committed=e,t.stores.setMatches(e)}function BT(t,e,a,r){const o=t._committed,c=t._lifecycleEnd,u=t._cache;for(const g of a)g.preload=!1,r&&(g._assetEnd=void 0);const d=Sh(a).length,p=new Map;{const g=Date.now(),v=new Set;for(let b=0;b<a.length;b++){const w=a[b];(b<d||w.status==="success")&&v.add(w.id)}for(const b of[...o,...u.values()]){if(b.status!=="success"||v.has(b.id))continue;const w=Sn(t,b);!w.options.loader||g-b.updatedAt>=(b.preload?w.options.preloadGcTime??t.options.defaultPreloadGcTime??3e5:w.options.gcTime??t.options.defaultGcTime??3e5)||p.set(b.id,u.get(b.id)===b?b:{...b,_flight:void 0,isFetching:!1,context:{}})}}e[3]=[],t._cache=p;const m=t._lifecycleEnd=ob(a);hb(t,a),Rt(t,[...u.values(),...o].filter(g=>g._flight&&p.get(g.id)!==g),a),OT(t,o,a,c,m,e)}async function Ql(t,e){let a=t._tx;for(;a&&a!==e;)e=a,await a[5],a=t._tx}function pb(t,e,a){const r=a[1].options,o=a[2];if(!o)return t.navigate({...r,replace:!0,ignoreBlocker:!0});if(r.reloadDocument)return t.navigate({href:(o.maskedLocation??o).publicHref,reloadDocument:!0,replace:!0,ignoreBlocker:!0});o._redirects=e[1]+1,t._pendingLocation=o;const c=t.commitLocation({...o,viewTransition:r.viewTransition,replace:!0,resetScroll:r.resetScroll,hashScrollIntoView:r.hashScrollIntoView,ignoreBlocker:!0});return queueMicrotask(()=>{t._pendingLocation===o&&(t._pendingLocation=void 0)}),c}async function IT(t,e,a,r,o){const c=a.map(p=>({...p}));Ch(c);for(const p of r)la(t,c[p[0]]),c[p[0]]=p[3];const u=[e[2],c];let d;try{d=await db(t,u,r,e[0],o)}catch(p){throw Rt(t,c),p}if(oo(d)){Rt(t,c),d[0]===Nt&&t._tx===e&&t._committed===a&&await pb(t,e,d);return}if(await kh(t,d,e[0].signal),t._tx!==e||t._committed!==a){Rt(t,c);return}
11for(const p of c){const m=t._cache.get(p.id);m?._flight&&m._flight===p._flight&&(t._cache.delete(p.id),la(t,m))}hb(t,c),Rt(t,a,c)}async function FT(t,e,a,r,o,c){const u=await fb(t,e[2],e[3],[e[0],e[1],t._committed,void 0,o,a,c,r]);if(oo(u)){const v=u[0]===Nt&&t._tx===e;if((!v||u[1].options.reloadDocument)&&Gs(t,e),Rt(t,e[3]),e[3]=[],!v)return;if(t._tx!==e){Gs(t,e);return}await pb(t,e,u);return}const d=u[1];if(t._tx===e&&await _y(t,e),t._tx!==e){Gs(t,e),Rt(t,d),Ni(t,u);return}const p=e[2],m=Pc(p,t.stores.resolvedLocation.get()),g=u[2];await t.startViewTransition(async()=>{if(t._tx===e&&await _y(t,e),t._tx!==e){Gs(t,e),Rt(t,d),Ni(t,u);return}const v=()=>{Gs(t,e),BT(t,e,d,c),t._tx===e&&(t.emit({type:"onLoad",...m}),t._tx===e&&t.emit({type:"onBeforeRouteMount",...m}))},b=await t.startTransition(v,d);if(t._tx!==e){Ni(t,u);return}g?.length&&IT(t,e,d,g,u[3]).catch(console.error),t.batch(()=>{t.stores.resolvedLocation.set(p),t.stores.status.set("idle"),t._tx===e&&t.emit({type:"onResolved",...m}),b&&t._tx===e&&t.emit({type:"onRendered",...m})}),t._tx===e&&(t._commitPromise?.resolve(),t._commitPromise=void 0)})}async function $T(t,e){const a=t._tx,r=t.stores.resolvedLocation.get(),o=r??t.stores.location.get(),c=t.latestLocation,u=t._pendingLocation,d=u?.href===c.href?u._redirects??0:0,p=t._handoff,m=p?.[0](),g=new AbortController,v=t._preflight;if(t._preflight=g,m||p?.[1](),v?.abort(),!g.signal.aborted){const B=Pc(c,r);t.emit({type:"onBeforeNavigate",...B}),g.signal.aborted||t.emit({type:"onBeforeLoad",...B})}if(g.signal.aborted){await Ql(t,a);return}const b=o.href===c.href;let w=g;const S=t.matchRoutes(c,{_controller:g});Ch(S);const T=m?p[1](S):void 0;if(T?w=m:m?.abort(),g.signal.aborted){Rt(t,S),await Ql(t,a);return}t._preflight=void 0;let C;const A=()=>FT(t,x,b,()=>Hf(t,x),e?.sync,T),O=e?.sync?new Promise(B=>C=B):Promise.resolve().then(A),x=[w,d,c,S,Date.now(),O.then(()=>Ql(t,x))];if(t._tx=x,a){for(const B of t.stores.matches.get()){if(t._tx!==x)break;B.isFetching&&co(t,B,!1)}a[0].abort(),Rt(t,a[3],x[3],!0)}if(t._tx!==x){Rt(t,x[3]),x[3]=[],C?.(),await Ql(t,x);return}t.batch(()=>{t.stores.status.set("pending"),t.stores.location.set(c)}),(T||!t._committed.length&&S[0]?.status!=="success"&&!S.some(B=>B._notFound))&&Hf(t,x),C?.(A()),await x[5]}async function HT(t,e){let a=t.buildLocation(e);for(let r=0;;r++){const o=t._committed,c=new AbortController;let u,d,p;try{try{u=t.matchRoutes(a,{_controller:c}),Ch(u),d=(t._preloads??=new Map).set(c,u),p=await fb(t,a,u,[c,r,o,!0])}finally{d&&(d=d.delete(c),Rt(t,u)),c.abort()}if(!oo(p))return p[1];if(!d||p.length<3)return;a=p[2]}catch(m){zi(m)||console.error(m);return}}}async function GT(t){const e=window.$_TSR,a=t.options.serializationAdapters;a?.length&&(e.t=new Map(a.map(H=>[H.key,H.fromSerializable])),e.buffer.forEach(H=>H())),e.initialized=!0;const r=e.router;t.ssr={manifest:r.manifest},t.options.ssr={nonce:document.querySelector('meta[property="csp-nonce"]')?.content};const o=r.matches,c=new AbortController,u=t._preflight;t._preflight=c,u?.abort();const d=()=>t._preflight===c;let p,m,g,v;try{if(await da(t.options.hydrate?.(r.dehydratedData),c.signal),!d())return;const H=t.history.location;g=H.href,v=H.state,t.updateLatestLocation(),p=t.latestLocation,t.stores.location.set(p),m=t.matchRoutes(p,{_controller:c})}catch(H){if(d()&&(t._preflight=void 0),c.abort(H),H!==c.signal)throw H}if(!d())return;const b=[];let w,S=0;const T=H=>{S=Math.min(S,H+1);const G=b.splice(H);for(const ee of G)Sn(t,ee).options.loader&&(ee.status==="success"||!ee.invalid&&"loaderData"in ee)&&ub(t,{...ee,status:"success",error:void 0,preload:!0},t._cache.get(ee.id));Rt(t,G)},C=o.length>m.length?m.findIndex(H=>H._notFound)+1:o.length;let A=!1;for(let H=0;H<C;H++){const G=m[H],ee=o[H];if(typeof ee.i!="string"||H1(ee.i)!==G.id){w??=H;break}S=H+1;const ge=Sn(t,G);if(("l"in ee||ee.s==="success"&&ee.e===void 0&&ge.options.loader)&&(G.loaderData=ee.l),G.status=ee.s,G.ssr=ee.ssr,ge.options.ssr=G.ssr,G.updatedAt=ee.u,G.error=ee.e,G._notFound||=ee.g,G.status==="error"||G.status==="notFound"||G._notFound){A=!0,b.push(G),(G.ssr===!1||G.ssr==="data-only")&&(w??=H);break}if(G.status==="pending"){w??=H;break}b.push(G),G.ssr==="data-only"&&(w??=H)}!A&&b.length===C&&C<m.length&&(w=C);const O=b.map(async H=>{try{const G=Sn(t,H);return await(H._notFound?Promise.all([ca(G),ca(G,"notFoundComponent")]):ca(G,H.status==="error"?"errorComponent":H.status==="notFound"?"notFoundComponent":void 0)),!0}catch{return!1}});let x=0;try{for(;x<O.length&&await da(O[x],c.signal);)x++}catch{return}if(!d())return;x<b.length&&T(x);const B=Math.max(w===b.length?b.length+1:b.length,x<O.length?x:S);for(let H=0;H<B;H++){const G=m[H],ee=Sn(t,G),ge=m[H-1]?.context??t.options.context??{};let ce;if(ee.options.context){try{ce=G._ctx=ee.options.context({deps:G.loaderDeps,params:G.params,context:ge,location:p,navigate:j=>t.navigate({...j,_fromLocation:p}),buildLocation:t.buildLocation,cause:G.cause,abortController:c,preload:!1,matches:m,routeId:ee.id})||{}}catch{if(!d())return;if(G.status!=="error"&&G.status!=="notFound"&&!G._notFound){w=Math.min(w??H,H),T(H);break}}if(!d())return}G.context={...ge,...ce,...b[H]&&o[H].b}}if(await kh(t,[p,m],c.signal,0,S),!d())return;const Z=w!==void 0||b.length<C,M=A&&b.length===C?m:b;let N=Z?m:M,Y;if(Z&&w!==void 0){const H=N[w];Y=H.ssr==="data-only"&&S>w+1?S:void 0,N=N.slice(),N[w]={...H,status:"pending",ssr:H.ssr==="data-only"?"data-only":!1,_assetEnd:Y}}const te=()=>{const H=t.history.location;return Z&&!t._tx&&H.href===g&&H.state===v&&t._committed===M&&M.length&&!c.signal.aborted?c:void 0},ue=[te,H=>{if(t._handoff!==ue)return;t._handoff=void 0;const G=M.length;if(!H||!te()||M.some((ce,j)=>ce.id!==H[j]?.id)){c.abort();return}let ee=Y;if(ee!==void 0){for(let ce=G;ce<ee;ce++)if(m[ce]?.id!==H[ce]?.id){ee=ce>w+1?ce:void 0;break}}const ge=M.map(ce=>({...ce}));ee!==void 0&&(ge[w]._assetEnd=ee),Rt(t,H.splice(0,G,...ge));for(let ce=G;ce<H.length;ce++){const j=H[ce],J=m[ce];J?.id===j.id&&J._ctx&&(j._ctx=J._ctx),j.abortController=c}return G}];t._committed=M,t._lifecycleEnd=ob(M),t._handoff=ue,t._preflight=void 0,t.batch(()=>{t.stores.setMatches(N),t.stores.status.set("idle"),Z||t.stores.resolvedLocation.set(t.stores.location.get())})}const fa=Symbol.asyncIterator,mb=Symbol.hasInstance,Fr=Symbol.isConcatSpreadable,ha=Symbol.iterator,gb=Symbol.match,vb=Symbol.matchAll,yb=Symbol.replace,bb=Symbol.search,wb=Symbol.species,_b=Symbol.split,Sb=Symbol.toPrimitive,$r=Symbol.toStringTag,Tb=Symbol.unscopables,Eb={[fa]:0,[mb]:1,[Fr]:2,[ha]:3,[gb]:4,[vb]:5,[yb]:6,[bb]:7,[wb]:8,[_b]:9,[Sb]:10,[$r]:11,[Tb]:12},VT={0:fa,1:mb,2:Fr,3:ha,4:gb,5:vb,6:yb,7:bb,8:wb,9:_b,10:Sb,11:$r,12:Tb},KT={2:!0,3:!1,1:void 0,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:NaN},YT={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},QT={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError};function Le(t,e,a,r,o,c,u,d,p,m,g,v){return{t,i:e,s:a,c:r,m:o,p:c,e:u,a:d,f:p,b:m,o:g,l:v}}function ai(t){return Le(2,void 0,t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}const Cb=ai(2),Ab=ai(3),JT=ai(1),ZT=ai(0),WT=ai(4),XT=ai(5),eE=ai(6),tE=ai(7),nE=64,aE=/[\x00-\x07\x0b\x0e-\x1f<\u2028\u2029\ud800-\udfff]/;function iE(t){switch(t){case'"':return'\\"';case"\\":return"\\\\";case`
12`:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case"	":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return}}function Di(t){if(t.length>=nE&&!aE.test(t))return JSON.stringify(t).slice(1,-1);let e="",a=0,r;for(let o=0,c=t.length;o<c;o++)r=iE(t[o]),r&&(e+=t.slice(a,o)+r,a=o+1);return a===0?e=t:e+=t.slice(a),e}function rE(t){switch(t){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return`
13`;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return"	";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return t}}function ii(t){return typeof t=="string"&&!t.includes("\\")?t:t.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,rE)}
13const sE={parsing:1,serialization:2,deserialization:3};function oE(t){return`Seroval Error (step: ${sE[t]})`}const lE=(t,e)=>oE(t);var kb=class extends Error{constructor(t,e){super(lE(t)),this.cause=e}},Sy=class extends kb{constructor(t){super("parsing",t)}},cE=class extends kb{constructor(t){super("deserialization",t)}};function ma(t){return`Seroval Error (specific: ${t})`}var ji=class extends Error{constructor(t){super(ma(1)),this.value=t}},Rh=class extends Error{constructor(t){super(ma(2))}},uE=class extends Error{constructor(t){super(ma(3))}},Uc=class extends Error{constructor(t){super(ma(4))}},dE=class extends Error{constructor(t){super(ma(5)),this.value=t}},fE=class extends Error{constructor(t){super(ma(6))}},hE=class extends Error{constructor(t){super(ma(7))}},bt=class extends Error{constructor(t){super(ma(8))}},Rb=class extends Error{constructor(t){super(ma(9))}};const Jl="__SEROVAL_REFS__",xb=new Map,jr=new Map;function Ob(t){return xb.has(t)}function pE(t){return jr.has(t)}function mE(t){if(Ob(t))return xb.get(t);throw new dE(t)}function gE(t){if(pE(t))return jr.get(t);throw new fE(t)}typeof globalThis<"u"?Object.defineProperty(globalThis,Jl,{value:jr,configurable:!0,writable:!1,enumerable:!1}):typeof window<"u"?Object.defineProperty(window,Jl,{value:jr,configurable:!0,writable:!1,enumerable:!1}):typeof self<"u"?Object.defineProperty(self,Jl,{value:jr,configurable:!0,writable:!1,enumerable:!1}):typeof global<"u"&&Object.defineProperty(global,Jl,{value:jr,configurable:!0,writable:!1,enumerable:!1});function xh(t){return t instanceof EvalError?1:t instanceof RangeError?2:t instanceof ReferenceError?3:t instanceof SyntaxError?4:t instanceof TypeError?5:t instanceof URIError?6:0}function vE(t){const e=YT[xh(t)];return t.name!==e?{name:t.name}:t.constructor.name!==e?{name:t.constructor.name}:{}}function Lb(t,e){let a=vE(t);const r=Object.getOwnPropertyNames(t);for(let o=0,c=r.length,u;o<c;o++)u=r[o],u!=="name"&&u!=="message"&&(u==="stack"?e&4&&(a=a||{},a[u]=t[u]):(a=a||{},a[u]=t[u]));return a}function Nb(t){return Object.isFrozen(t)?3:Object.isSealed(t)?2:Object.isExtensible(t)?0:1}function yE(t){switch(t){case Number.POSITIVE_INFINITY:return XT;case Number.NEGATIVE_INFINITY:return eE}return t!==t?tE:Object.is(t,-0)?WT:Le(0,void 0,t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function zb(t){return Le(1,void 0,Di(t),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function bE(t){return Le(3,void 0,""+t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function wE(t){return Le(4,t,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function _E(t,e){const a=e.valueOf();return Le(5,t,a!==a?"":e.toISOString(),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function Fa(t,e,a){return Le(36,t,a.toString(),e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function SE(t,e){return Le(6,t,void 0,Di(e.source),e.flags,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function TE(t,e){return Le(17,t,Eb[e],void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function EE(t,e){return Le(18,t,Di(mE(e)),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function CE(t,e,a){return Le(25,t,a,Di(e),void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function AE(t,e,a){return Le(9,t,void 0,void 0,void 0,void 0,void 0,a,void 0,void 0,Nb(e),void 0)}function kE(t,e){return Le(21,t,void 0,void 0,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0)}const Oh=1e6;function RE(t,e,a){if(e.length>Oh)throw new ji(e);return Le(15,t,void 0,e.constructor.name,void 0,void 0,void 0,void 0,a,e.byteOffset,void 0,e.length)}function xE(t,e,a){if(e.length>Oh)throw new ji(e);return Le(16,t,void 0,e.constructor.name,void 0,void 0,void 0,void 0,a,e.byteOffset,void 0,e.length)}function OE(t,e,a){if(e.byteLength>Oh)throw new ji(e);return Le(20,t,void 0,void 0,void 0,void 0,void 0,void 0,a,e.byteOffset,void 0,e.byteLength)}function LE(t,e,a){return Le(13,t,xh(e),void 0,Di(e.message),a,void 0,void 0,void 0,void 0,void 0,void 0)}function NE(t,e,a){return Le(14,t,xh(e),void 0,Di(e.message),a,void 0,void 0,void 0,void 0,void 0,void 0)}function zE(t,e){return Le(7,t,void 0,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0,void 0)}function qE(t,e){return Le(28,void 0,void 0,void 0,void 0,void 0,void 0,[t,e],void 0,void 0,void 0,void 0)}function DE(t,e){return Le(30,void 0,void 0,void 0,void 0,void 0,void 0,[t,e],void 0,void 0,void 0,void 0)}function jE(t,e,a){return Le(31,t,void 0,void 0,void 0,void 0,void 0,a,e,void 0,void 0,void 0)}function PE(t,e){return Le(32,t,void 0,void 0,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0)}function ME(t,e){return Le(33,t,void 0,void 0,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0)}function UE(t,e){return Le(34,t,void 0,void 0,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0)}function BE(t,e,a,r){return Le(35,t,a,void 0,void 0,void 0,void 0,e,void 0,void 0,void 0,r)}var IE=class{constructor(t,e){this.value=t,this.replacement=e}};const Lh=()=>{const t={p:0,s:0,f:0};return t.p=new Promise((e,a)=>{t.s=e,t.f=a}),t},FE=t=>e=>()=>{let a=0;const r={[t](){return r},next(){if(a>e.d)return{done:!0,value:void 0};const o=a++,c=e.v[o];if(o===e.t)throw c;return{done:o===e.d,value:c}}};return r},$E=(t,e)=>a=>()=>{let r=0,o=-1,c=!1;const u=[],d=[],p={finalize(g=0,v=d.length){for(;g<v;g++)d[g].s({done:!0,value:void 0})}};a.on({next(g){const v=d.shift();v&&v.s({done:!1,value:g}),u.push(g)},throw(g){const v=d.shift();v&&v.f(g),p.finalize(),o=u.length,c=!0,u.push(g)},return(g){const v=d.shift();v&&v.s({done:!0,value:g}),p.finalize(),o=u.length,u.push(g)}});const m={[t](){return m},next(){if(o===-1){const b=r++;if(b>=u.length){const w=e();return d.push(w),w.p}return{done:!1,value:u[b]}}if(r>o)return{done:!0,value:void 0};const g=r++,v=u[g];if(g!==o)return{done:!1,value:v};if(c)throw v;return{done:!0,value:v}}};return m},HE=t=>{const e=atob(t),a=e.length,r=new Uint8Array(a);for(let o=0;o<a;o++)r[o]=e.charCodeAt(o);return r.buffer};var qb=class{constructor(t,e,a){this.v=t,this.t=e,this.d=a}};function Db(t){return t instanceof qb}function jb(t,e,a){return new qb(t,e,a)}function GE(t){const e=[];let a=-1,r=-1;const o=t[ha]();for(;;)try{const c=o.next();
13if(e.push(c.value),c.done){r=e.length-1;break}}catch(c){a=e.length,r=a,e.push(c);break}return jb(e,a,r)}const VE=FE(ha);function KE(t){return VE(t)}const YE={},QE={},JE={0:{},1:{},2:{},3:{},4:{},5:{}};function Pb(t,e){if(e.has(t))throw new TypeError("Cannot initialize the same private elements twice on an object")}function ZE(t,e){Pb(t,e),e.add(t)}function Vs(t,e,a){Pb(t,e),e.set(t,a)}function Pr(t,e,a){if(typeof t=="function"?t===e:t.has(e))return arguments.length<3?e:a;throw new TypeError("Private element is not present on this object")}function He(t,e){return t.get(Pr(t,e))}function Er(t,e,a){return t.set(Pr(t,e),a),a}var Mr=new WeakMap,ia=new WeakMap,ra=new WeakMap,hc=new WeakMap,gn=new WeakMap,Ks=new WeakSet,Mb=class{constructor(){ZE(this,Ks),Vs(this,Mr,[]),Vs(this,ia,[]),Vs(this,ra,!0),Vs(this,hc,!1),Vs(this,gn,0)}on(t){let e=He(ra,this),a=0;if(e){for(;a<He(gn,this)&&He(ia,this)[a];a++);if(a===He(gn,this)){var r;Er(gn,this,(r=He(gn,this),r++,r))}He(ia,this)[a]=t}return Pr(Ks,this,WE).call(this,t),()=>{if(He(ra,this)&&e){for(e=!1,He(ia,this)[a]=void 0;He(gn,this)>0&&!He(ia,this)[He(gn,this)-1];){var o;Er(gn,this,(o=He(gn,this),o--,o))}He(ia,this).length=He(gn,this)}}}next(t){He(ra,this)&&(He(Mr,this).push(t),Pr(Ks,this,Cf).call(this,t,"next"))}throw(t){He(ra,this)&&(He(Mr,this).push(t),Pr(Ks,this,Cf).call(this,t,"throw"),Er(ra,this,!1),Er(hc,this,!1),He(ia,this).length=0)}return(t){He(ra,this)&&(He(Mr,this).push(t),Pr(Ks,this,Cf).call(this,t,"return"),Er(ra,this,!1),Er(hc,this,!0),He(ia,this).length=0)}};function Cf(t,e){for(let r=0;r<He(gn,this);r++){var a;(a=He(ia,this)[r])===null||a===void 0||a[e](t)}}function WE(t){for(let e=0,a=He(Mr,this).length;e<a;e++){const r=He(Mr,this)[e];!He(ra,this)&&e===a-1?t[He(hc,this)?"return":"throw"](r):t.next(r)}}function Nh(t){return t instanceof Mb}function Ao(){return new Mb}function XE(t,e){const a=Ao(),r=t[fa]();let o=!1,c=!1;async function u(){try{for(;!o;){const d=await r.next();if(d.done){c=!0,a.return(d.value);break}a.next(d.value)}}catch(d){c=!0,a.throw(d)}}return u().catch(()=>{}),a}const eC=$E(fa,Lh);function tC(t){return eC(t)}async function nC(t){try{return[1,await t]}catch(e){return[0,e]}}function aC(t,e){var a;return{plugins:e.plugins,mode:t,marked:new Set,features:127^(e.disabledFeatures||0),refs:e.refs||new Map,depthLimit:e.depthLimit||1e3,compactArrayBufferViews:(a=e.compactArrayBufferViews)!==null&&a!==void 0?a:!1}}function pc(t,e){t.marked.add(e)}function iC(t,e){const a=t.refs.size;return t.refs.set(e,a),a}function Bc(t,e){const a=t.refs.get(e);return a!=null?(pc(t,a),{type:1,value:wE(a)}):{type:0,value:iC(t,e)}}function zh(t,e){const a=Bc(t,e);return a.type===1?a:Ob(e)?{type:2,value:EE(a.value,e)}:a}function xi(t,e){const a=zh(t,e);if(a.type!==0)return a.value;if(e in Eb)return TE(a.value,e);throw new ji(e)}function Ic(t,e){const a=Bc(t,JE[e]);return a.type===1?a.value:Le(26,a.value,e,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0)}function rC(t){const e=Bc(t,YE);return e.type===1?e.value:Le(27,e.value,void 0,void 0,void 0,void 0,void 0,void 0,xi(t,ha),void 0,void 0,void 0)}function sC(t){const e=Bc(t,QE);return e.type===1?e.value:Le(29,e.value,void 0,void 0,void 0,void 0,void 0,[Ic(t,1),xi(t,fa)],void 0,void 0,void 0,void 0)}function oC(t,e,a,r){return Le(a?11:10,t,void 0,void 0,void 0,r,void 0,void 0,void 0,void 0,Nb(e),void 0)}function lC(t,e,a,r){return Le(8,e,void 0,void 0,void 0,void 0,{k:a,v:r},void 0,Ic(t,0),void 0,void 0,void 0)}function qh(t,e){if(!t.compactArrayBufferViews)return e;const a=new Uint8Array(e.buffer,e.byteOffset,e.byteLength).slice().buffer,r=e.constructor;return new r(a)}function cC(t){if(typeof Buffer<"u")return Buffer.from(t).toString("base64");const e=new Uint8Array(t);if(typeof e.toBase64=="function")return e.toBase64();let a="";for(let r=0,o=e.length;r<o;r++)a+=String.fromCharCode(e[r]);return btoa(a)}function uC(t,e,a){return Le(19,e,cC(a),void 0,void 0,void 0,void 0,void 0,Ic(t,5),void 0,void 0,void 0)}function dC(t,e){return{base:aC(t,e),child:void 0}}var fC=class{constructor(t,e){this._p=t,this.depth=e}parse(t){return mt(this._p,this.depth,t)}};async function hC(t,e,a){const r=[];for(let o=0,c=a.length;o<c;o++)o in a?r[o]=await mt(t,e,a[o]):r[o]=0;return r}async function pC(t,e,a,r){return AE(a,r,await hC(t,e,r))}async function Dh(t,e,a){const r=Object.entries(a),o=[],c=[];for(let u=0,d=r.length;u<d;u++)o.push(Di(r[u][0])),c.push(await mt(t,e,r[u][1]));return ha in a&&(o.push(xi(t.base,ha)),c.push(qE(rC(t.base),await mt(t,e,GE(a))))),fa in a&&(o.push(xi(t.base,fa)),c.push(DE(sC(t.base),await mt(t,e,XE(a))))),$r in a&&(o.push(xi(t.base,$r)),c.push(zb(a[$r]))),Fr in a&&(o.push(xi(t.base,Fr)),c.push(a[Fr]?Cb:Ab)),{k:o,v:c}}async function Af(t,e,a,r,o){return oC(a,r,o,await Dh(t,e,r))}async function mC(t,e,a,r){return kE(a,await mt(t,e,r.valueOf()))}async function gC(t,e,a,r){return r=qh(t.base,r),RE(a,r,await mt(t,e,r.buffer))}async function vC(t,e,a,r){return r=qh(t.base,r),xE(a,r,await mt(t,e,r.buffer))}async function yC(t,e,a,r){return r=qh(t.base,r),OE(a,r,await mt(t,e,r.buffer))}async function Ty(t,e,a,r){const o=Lb(r,t.base.features);return LE(a,r,o?await Dh(t,e,o):void 0)}async function bC(t,e,a,r){const o=Lb(r,t.base.features);return NE(a,r,o?await Dh(t,e,o):void 0)}async function wC(t,e,a,r){const o=[],c=[];for(const[u,d]of r.entries())o.push(await mt(t,e,u)),c.push(await mt(t,e,d));return lC(t.base,a,o,c)}async function _C(t,e,a,r){const o=[];for(const c of r.keys())o.push(await mt(t,e,c));return zE(a,o)}async function Ub(t,e,a,r){const o=t.base.plugins;if(o)for(let c=0,u=o.length;c<u;c++){const d=o[c];if(d.parse.async&&d.test(r))return CE(a,d.tag,await d.parse.async(r,new fC(t,e),{id:a}))}}async function SC(t,e,a,r){const[o,c]=await nC(r);return Le(12,a,o,void 0,void 0,void 0,void 0,void 0,await mt(t,e,c),void 0,void 0,void 0)}function TC(t,e,a,r,o){const c=[],u=a.on({next:d=>{pc(this.base,e),mt(this,t,d).then(p=>{c.push(PE(e,p))},p=>{o(p),u()})},throw:d=>{pc(this.base,e),mt(this,t,d).then(p=>{c.push(ME(e,p)),r(c),u()},p=>{o(p),u()})},return:d=>{pc(this.base,e),mt(this,t,d).then(p=>{c.push(UE(e,p)),r(c),u()},p=>{o(p),u()})}})}async function EC(t,e,a,r){return jE(a,Ic(t.base,4),await new Promise(TC.bind(t,e,a,r)))}async function CC(t,e,a,r){const o=[];for(let c=0,u=r.v.length;c<u;c++)o[c]=await mt(t,e,r.v[c]);return BE(a,o,r.t,r.d)}async function AC(t,e,a,r){if(Array.isArray(r))return pC(t,e,a,r);if(Nh(r))return EC(t,e,a,r);if(Db(r))return CC(t,e,a,r);let o=r.constructor;if(o!==void 0&&typeof o!="function"){const d=Object.getPrototypeOf(r);o=d===null?void 0:d.constructor}if(o===IE)return mt(t,e,r.replacement);const c=await Ub(t,e,a,r);if(c)return c;switch(o){case Object:return Af(t,e,a,r,!1);case void 0:return Af(t,e,a,r,!0);case Date:return _E(a,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Ty(t,e,a,r);case Number:case Boolean:case String:case BigInt:return mC(t,e,a,r);case ArrayBuffer:return uC(t.base,a,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return gC(t,e,a,r);case DataView:return yC(t,e,a,r);case Map:return wC(t,e,a,r);case Set:return _C(t,e,a,r)}if(o===Promise||r instanceof Promise)return SC(t,e,a,r);const u=t.base.features;if(u&32&&o===RegExp)return SE(a,r);if(u&16)switch(o){case BigInt64Array:case BigUint64Array:return vC(t,e,a,r)}if(u&1&&typeof AggregateError<"u"&&(o===AggregateError||r instanceof AggregateError))return bC(t,e,a,r);if(u&64&&typeof Temporal<"u")switch(o){case Temporal.Instant:return Fa(a,0,r);case Temporal.Duration:return Fa(a,1,r);case Temporal.PlainDate:return Fa(a,2,r);case Temporal.PlainDateTime:return Fa(a,3,r);case Temporal.PlainMonthDay:return Fa(a,4,r);case Temporal.PlainTime:return Fa(a,5,r);case Temporal.PlainYearMonth:return Fa(a,6,r);case Temporal.ZonedDateTime:return Fa(a,7,r)}if(r instanceof Error)return Ty(t,e,a,r);if(ha in r||fa in r)return Af(t,e,a,r,!!o);throw new ji(r)}
13async function kC(t,e,a){const r=zh(t.base,a);if(r.type!==0)return r.value;const o=await Ub(t,e,r.value,a);if(o)return o;throw new ji(a)}async function mt(t,e,a){if(e>=t.base.depthLimit)throw new Rb(t.base.depthLimit);switch(typeof a){case"boolean":return a?Cb:Ab;case"undefined":return JT;case"string":return zb(a);case"number":return yE(a);case"bigint":return bE(a);case"object":if(a){const r=zh(t.base,a);return r.type===0?await AC(t,e+1,r.value,a):r.value}return ZT;case"symbol":return xi(t.base,a);case"function":return kC(t,e,a);default:throw new ji(a)}}async function RC(t,e){try{return await mt(t,0,e)}catch(a){throw a instanceof Sy?a:new Sy(a)}}function Bb(t,e){for(let a=0,r=e.length;a<r;a++){const o=e[a];t.has(o)||(t.add(o),o.extends&&Bb(t,o.extends))}}function Ib(t){if(t){const e=new Set;return Bb(e,t),[...e]}}function xC(t){switch(t){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new hE(t)}}function OC(t){switch(t){case"constructor":case"__proto__":case"prototype":case"__defineGetter__":case"__defineSetter__":case"__lookupGetter__":case"__lookupSetter__":return!1;default:return!0}}function LC(t){switch(t){case fa:case Fr:case $r:case ha:return!0;default:return!1}}const NC=1e6,zC=512,qC=1e4,DC=2e4;function Fb(t,e){switch(e){case 3:return Object.freeze(t);case 1:return Object.preventExtensions(t);case 2:return Object.seal(t);default:return t}}const jC=1e3;function PC(t,e){var a,r;const o=(a=e.maxBase64Length)!==null&&a!==void 0?a:NC;if(!Number.isSafeInteger(o)||o<0)throw new RangeError("maxBase64Length must be a non-negative safe integer");const c=e.refs||new Map;return"types"in c||Object.assign(c,{types:new Map}),{mode:t,plugins:e.plugins,refs:c,features:(r=e.features)!==null&&r!==void 0?r:127^(e.disabledFeatures||0),depthLimit:e.depthLimit||jC,maxBase64Length:o}}function MC(t){return{mode:2,base:PC(2,t),child:void 0}}var UC=class{constructor(t,e){this._p=t,this.depth=e}deserialize(t){return Ye(this._p,this.depth,t)}};function $b(t,e){if(e<0||!Number.isFinite(e)||!Number.isInteger(e))throw new bt({t:4,i:e});if(t.refs.has(e))throw new Error("Conflicted ref id: "+e)}function Hb(t){return!!t&&(typeof t=="object"||typeof t=="function")&&"then"in t&&typeof t.then=="function"}function BC(t,e,a){return $b(t.base,e),t.state.marked.has(e)&&t.base.refs.set(e,a),a}function IC(t,e,a){return $b(t.base,e),t.base.refs.set(e,a),a}function ht(t,e,a){return t.mode===1?BC(t,e,a):IC(t,e,a)}function Gf(t,e,a){if(Object.hasOwn(e,a))return e[a];throw new bt(t)}function FC(t,e){return ht(t,e.i,gE(ii(e.s)))}function ei(t,e){if(!Array.isArray(e))throw new bt(t)}function $C(t,e,a){const r=a.a;ei(a,r);const o=r.length,c=ht(t,a.i,new Array(o));for(let u=0,d;u<o;u++)d=r[u],d&&(c[u]=Ye(t,e,d));return Fb(c,a.o),c}function Ey(t,e,a){OC(e)?t[e]=a:Object.defineProperty(t,e,{value:a,configurable:!0,enumerable:!0,writable:!0})}function HC(t,e,a,r,o){if(typeof r=="string")Ey(a,ii(r),Ye(t,e,o));else{const c=Ye(t,e,r);switch(typeof c){case"string":Ey(a,c,Ye(t,e,o));break;case"symbol":LC(c)&&(a[c]=Ye(t,e,o));break;default:throw new bt(r)}}}function Gb(t,e,a){t.base.refs.types.set(e,a)}function Fc(t,e,a,r){if(t.base.refs.types.get(a)!==r)throw new bt(e)}function Vb(t,e,a,r){const o=a.k;if(ei(a,o),ei(a,a.v),o.length>0)for(let c=0,u=a.v,d=o.length;c<d;c++)HC(t,e,r,o[c],u[c]);return r}function GC(t,e,a){const r=ht(t,a.i,a.t===10?{}:Object.create(null));return Vb(t,e,a.p,r),Fb(r,a.o),r}function VC(t,e){return ht(t,e.i,new Date(e.s))}function KC(t,e){if(!(t.base.features&64))throw new Rh(e);let a;switch(e.c){case 0:a=Temporal.Instant.from(e.s);break;case 1:a=Temporal.Duration.from(e.s);break;case 2:a=Temporal.PlainDate.from(e.s);break;case 3:a=Temporal.PlainDateTime.from(e.s);break;case 4:a=Temporal.PlainMonthDay.from(e.s);break;case 5:a=Temporal.PlainTime.from(e.s);break;case 6:a=Temporal.PlainYearMonth.from(e.s);break;case 7:a=Temporal.ZonedDateTime.from(e.s);break;default:throw new bt(e)}return ht(t,e.i,a)}function YC(t,e){if(t.base.features&32){const a=ii(e.c);if(a.length>DC)throw new bt(e);return ht(t,e.i,new RegExp(a,e.m))}throw new Rh(e)}function QC(t,e,a){const r=ht(t,a.i,new Set);ei(a,a.a);for(let o=0,c=a.a,u=c.length;o<u;o++)r.add(Ye(t,e,c[o]));return r}function JC(t,e,a){const r=ht(t,a.i,new Map);ei(a,a.e.k),ei(a,a.e.v);for(let o=0,c=a.e.k,u=a.e.v,d=c.length;o<d;o++)r.set(Ye(t,e,c[o]),Ye(t,e,u[o]));return r}function ZC(t,e){if(typeof e.s!="string")throw new bt(e);if(e.s.length>t.base.maxBase64Length)throw new RangeError("ArrayBuffer exceeds maxBase64Length ("+t.base.maxBase64Length+")");const a=ii(e.s);let r;if(a.length<zC||typeof Buffer>"u")r=HE(a);else{const o=atob(a);r=new ArrayBuffer(o.length),Buffer.from(r).write(o,"latin1")}return ht(t,e.i,r)}function WC(t,e,a){var r;const o=xC(a.c),c=Ye(t,e,a.f);if(!(c instanceof ArrayBuffer))throw new bt(a);const u=(r=a.b)!==null&&r!==void 0?r:0;if(u<0||u>c.byteLength)throw new bt(a);return ht(t,a.i,new o(c,u,a.l))}function XC(t,e,a){var r;const o=Ye(t,e,a.f);if(!(o instanceof ArrayBuffer))throw new bt(a);const c=(r=a.b)!==null&&r!==void 0?r:0;if(c<0||c>o.byteLength)throw new bt(a);return ht(t,a.i,new DataView(o,c,a.l))}function Kb(t,e,a,r){if(a.p){const o=Vb(t,e,a.p,{});Object.defineProperties(r,Object.getOwnPropertyDescriptors(o))}return r}function eA(t,e,a){return Kb(t,e,a,ht(t,a.i,new AggregateError([],ii(a.m))))}function tA(t,e,a){const r=Gf(a,QT,a.s);return Kb(t,e,a,ht(t,a.i,new r(ii(a.m))))}function nA(t,e,a){const r=Lh(),o=ht(t,a.i,r.p),c=Ye(t,e,a.f);if(Hb(c))throw new bt(a.f);return a.s?r.s(c):r.f(c),o}function aA(t,e,a){return ht(t,a.i,Object(Ye(t,e,a.f)))}function iA(t,e,a){const r=t.base.plugins;if(r){const o=ii(a.c);for(let c=0,u=r.length;c<u;c++){const d=r[c];if(d.tag===o)return ht(t,a.i,d.deserialize(a.s,new UC(t,e),{id:a.i}))}}throw new uE(a.c)}function rA(t,e){const a=ht(t,e.i,ht(t,e.s,Lh()).p);return Gb(t,e.s,22),a}function sA(t,e,a){const r=t.base.refs.get(a.i);if(r){Fc(t,a,a.i,22);const o=Ye(t,e,a.a[1]);if(Hb(o))throw new bt(a.a[1]);a.t===23?r.s(o):r.f(o);return}throw new Uc("Promise")}function oA(t,e,a){Ye(t,e,a.a[0]);const r=Ye(t,e,a.a[1]);if(!Db(r))throw new bt(a.a[1]);return KE(r)}function lA(t,e,a){Ye(t,e,a.a[0]);const r=Ye(t,e,a.a[1]);if(!Nh(r))throw new bt(a.a[1]);return tC(r)}function cA(t,e,a){const r=ht(t,a.i,Ao());
13Gb(t,a.i,31);const o=a.a;ei(a,o);const c=o.length;if(c)for(let u=0;u<c;u++)Ye(t,e,o[u]);return r}function uA(t,e,a){const r=t.base.refs.get(a.i);if(r){Fc(t,a,a.i,31),r.next(Ye(t,e,a.f));return}throw new Uc("Stream")}function dA(t,e,a){const r=t.base.refs.get(a.i);if(r){Fc(t,a,a.i,31),r.throw(Ye(t,e,a.f));return}throw new Uc("Stream")}function fA(t,e,a){const r=t.base.refs.get(a.i);if(r){Fc(t,a,a.i,31),r.return(Ye(t,e,a.f));return}throw new Uc("Stream")}function hA(t,e,a){Ye(t,e,a.f)}function pA(t,e,a){Ye(t,e,a.a[1])}function Cy(t,e){return Number.isInteger(t)&&t>=-1&&t<e}function mA(t,e,a){ei(a,a.a);const r=a.a.length;if(!(Cy(a.s,r)&&Cy(a.l,r)))throw new bt(a);const o=ht(t,a.i,jb([],a.s,a.l));for(let c=0;c<r;c++)o.v[c]=Ye(t,e,a.a[c]);return o}function Ye(t,e,a){if(e>t.base.depthLimit)throw new Rb(t.base.depthLimit);switch(e+=1,a.t){case 2:return Gf(a,KT,a.s);case 0:return Number(a.s);case 1:return ii(String(a.s));case 3:if(String(a.s).length>qC)throw new bt(a);return BigInt(a.s);case 4:return t.base.refs.get(a.i);case 18:return FC(t,a);case 9:return $C(t,e,a);case 10:case 11:return GC(t,e,a);case 5:return VC(t,a);case 6:return YC(t,a);case 7:return QC(t,e,a);case 8:return JC(t,e,a);case 19:return ZC(t,a);case 16:case 15:return WC(t,e,a);case 20:return XC(t,e,a);case 14:return eA(t,e,a);case 13:return tA(t,e,a);case 12:return nA(t,e,a);case 17:return Gf(a,VT,a.s);case 21:return aA(t,e,a);case 25:return iA(t,e,a);case 22:return rA(t,a);case 23:case 24:return sA(t,e,a);case 28:return oA(t,e,a);case 30:return lA(t,e,a);case 31:return cA(t,e,a);case 32:return uA(t,e,a);case 33:return dA(t,e,a);case 34:return fA(t,e,a);case 27:return hA(t,e,a);case 29:return pA(t,e,a);case 35:return mA(t,e,a);case 36:return KC(t,a);default:throw new Rh(a)}}function gA(t,e){try{return Ye(t,0,e)}catch(a){throw new cE(a)}}function vA(t,e){const a=Ib(e.plugins);return gA(MC({maxBase64Length:e.maxBase64Length,plugins:a,refs:e.refs,features:e.features,disabledFeatures:e.disabledFeatures,depthLimit:e.depthLimit}),t)}async function yA(t,e={}){const a=Ib(e.plugins),r=dC(1,{compactArrayBufferViews:e.compactArrayBufferViews,plugins:a,disabledFeatures:e.disabledFeatures});return{t:await RC(r,t),f:r.base.features,m:Array.from(r.base.marked)}}function bA(t){return{tag:"$TSR/t/"+t.key,test:t.test,parse:{sync(e,a){return{v:a.parse(t.toSerializable(e))}},async async(e,a){return{v:await a.parse(t.toSerializable(e))}},stream(e,a){return{v:a.parse(t.toSerializable(e))}}},serialize:void 0,deserialize(e,a){return t.fromSerializable(a.deserialize(e.v))}}}const wA={tag:"$TSR/Error",test(t){return t instanceof Error},parse:{sync(t,e){return{message:e.parse(t.message)}},async async(t,e){return{message:await e.parse(t.message)}},stream(t,e){return{message:e.parse(t.message)}}},serialize(t,e){return"new Error("+e.serialize(t.message)+")"},deserialize(t,e){return new Error(e.deserialize(t.message))}};var _A=class{constructor(t,e){this.stream=t,this.hint=e?.hint??"binary"}};function Yb(t){const e=[];for(let a=0;a<t.length;a+=32768)e.push(String.fromCharCode.apply(null,t.subarray(a,a+32768)));return btoa(e.join(""))}function Qb(t){const e=atob(t),a=new Uint8Array(e.length);for(let r=0;r<e.length;r++)a[r]=e.charCodeAt(r);return a}const SA=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});function TA(t){try{return"t"+SA.decode(t)}catch{return"b"+Yb(t)}}const EA=new TextEncoder;function CA(t){const e=t.slice(1);return t[0]==="t"?EA.encode(e):Qb(e)}function AA(t,e,a){a?.throwIfAborted();const r=Ao(),o=t.getReader();let c=!0;const u=()=>{c=!1,a?.removeEventListener("abort",p),o.releaseLock()},d=m=>c?(o.cancel(m).catch(()=>{}),u(),!0):!1,p=()=>{d(a.reason)&&r.throw(a.reason)};return a?.addEventListener("abort",p),(async()=>{try{for(;c;){const{done:m,value:g}=await o.read();if(!c)return;if(m){u(),r.return(void 0);return}r.next(e(g))}}catch(m){d(m)&&r.throw(m)}})(),[r,d]}function kA(t,e){let a,r=!1;return new ReadableStream({start(o){const c=t.on({next(u){if(!r)try{o.enqueue(e(u))}catch(d){r=!0;const p=a;a=void 0,p?.(),o.error(d)}},throw(u){r||(r=!0,a=void 0,o.error(u))},return(){r||(r=!0,a=void 0,o.close())}});r?c():a=c},cancel(){const o=a;a=void 0,o?.()}})}function Jb(t){return{tag:"tss/RawStream",test:e=>e instanceof _A,parse:{async:async(e,a)=>{const r=await a.parse(e.hint==="text"),[o]=AA(e.stream,e.hint==="text"?TA:Yb,t);
13return{text:r,stream:await a.parse(o)}}},serialize:void 0,deserialize:void 0}}const RA=Jb(),xA={tag:"tss/RawStream",test:()=>!1,parse:{},serialize:void 0,deserialize(t,e){return kA(e.deserialize(t.stream),e.deserialize(t.text)?CA:Qb)}},Ha={},Zb=t=>new ReadableStream({start(e){t.on({next(a){try{e.enqueue(a)}catch{}},throw(a){e.error(a)},return(){try{e.close()}catch{}}})}}),OA={tag:"seroval-plugins/web/ReadableStreamFactory",test(t){return t===Ha},parse:{sync(){return Ha},async async(){return await Promise.resolve(Ha)},stream(){return Ha}},serialize(){return Zb.toString()},deserialize(){return Ha}};async function LA(t,e){try{for(;;){const a=await e.read();if(a.done){t.return(a.value),e.releaseLock();break}t.next(a.value)}}catch(a){e.releaseLock(),t.throw(a)}}function NA(t){t.cancel().catch(()=>{}),t.releaseLock()}function Ay(t){const e=Ao(),a=t.getReader(),r=NA.bind(null,a);return LA(e,a).catch(r),[e,r]}const zA={tag:"seroval/plugins/web/ReadableStream",extends:[OA],test(t){return typeof ReadableStream>"u"?!1:t instanceof ReadableStream},parse:{sync(t,e){return{factory:e.parse(Ha),stream:e.parse(Ao())}},async async(t,e){return{factory:await e.parse(Ha),stream:await e.parse(Ay(t)[0])}},stream(t,e){const[a,r]=Ay(t);return e.addCleanup(r),{factory:e.parse(Ha),stream:e.parse(a)}}},serialize(t,e){return"("+e.serialize(t.factory)+")("+e.serialize(t.stream)+")"},deserialize(t,e){const a=e.deserialize(t.stream);if(!a||typeof a!="object"||!Nh(a))throw new Error("Expected a stream source.");return Zb(a)}};function Wb(t){return[wA,t?Jb(t):RA,zA]}const qA=Wb();[...qA];function DA(t){return{tag:"tss/RawStream",test:()=>!1,parse:{},serialize:void 0,deserialize(e,a){return t(a.deserialize(e.streamId))}}}function jA(t){return[...H0()?.serializationAdapters?.map(bA)??[],...t]}function Xb(t){return jA(Wb(t))}var ky=new TextDecoder,xn=new Uint8Array,PA=new ByteLengthQueuingStrategy({highWaterMark:0});function MA(t){const e=t.getReader(),a=new Map;let r=0,o,c;const u=()=>{o?.(),o=void 0},d=(v,b)=>{const w=v[1];v[1]=!1,w&&(b===1?w.close():w.error(b[0]))},p=new ReadableStream({start(v){c=v},pull:u,cancel(v){const b=[v===void 0?new Error("Framed response cancelled"):v];r=b,u(),e.cancel(v).catch(()=>{});for(const w of a.values())d(w,b)}});function m(v){const b=a.get(v);if(b)return b;if(a.size>=1024)throw new Error("Too many raw streams");let w;const S=[new ReadableStream({start(T){w=T},cancel(){S[1]!==!1&&(S[1]=null)}},PA),w];return a.set(v,S),r!==0&&d(S,r),S}function g(v){if(v===0||v>>>0!==v)throw new RangeError("Invalid raw stream ID");return m(v)[0]}return(async()=>{let v=xn,b=0;async function w(){for(;b===v.byteLength;){v=xn,b=0;const T=await e.read();if(r!==0||T.done)return!1;v=T.value}return!0}async function S(T,C){if(T===0)return xn;if(!await w()){if(C)return;throw new Error("Incomplete frame")}if(v.byteLength-b>=T){const x=v.subarray(b,b+T);return b+=T,b===v.byteLength&&(v=xn,b=0),x}const A=new Uint8Array(T);let O=0;for(;O<T;){if(!await w())throw new Error("Incomplete frame");const x=Math.min(T-O,v.byteLength-b);A.set(v.subarray(b,b+x),O),b+=x,O+=x}return b===v.byteLength&&(v=xn,b=0),A}try{for(;r===0;){let T=await S(9,!0);if(r!==0)return;if(!T){for(const Z of a.values())if(Z[1])throw new Error("Incomplete raw stream");r=1,c.close();return}const C=T[0],A=(T[1]<<24|T[2]<<16|T[3]<<8|T[4])>>>0,O=(T[5]<<24|T[6]<<16|T[7]<<8|T[8])>>>0;if(T=xn,C>3||C===0!=(A===0)||O>16777216||C===2&&O!==0)throw new Error("Invalid frame");const x=C===0?void 0:m(A);if(x?.[1]===!1)throw new Error("Raw stream already ended");let B=await S(O);if(r!==0)return;if(!x){const Z=ky.decode(B);for(B=xn,c.enqueue(Z);r===0&&c.desiredSize<=0;)await new Promise(M=>{o=M});continue}if(C===1){const Z=x[1];if(Z){if(-Z.desiredSize>134217728){Z.error(new Error(`Raw stream ${A} has too many unread bytes`)),x[1]=null,B=xn;continue}const M=B.byteLength*4<B.buffer.byteLength?B.slice():B;B=xn,Z.enqueue(M)}}else d(x,C===2?1:[new Error(ky.decode(B))])}}catch(T){if(r===0){const C=[T];r=C,e.cancel(T).catch(()=>{}),c.error(T);for(const A of a.values())d(A,C)}}finally{v=xn,e.releaseLock()}})(),[p,g]}const Nn=Symbol.for("TSR_DEFERRED_PROMISE");function UA(t,e){const a=t;return a[Nn]||(a[Nn]={status:"pending"},a.then(r=>{a[Nn].status="success",a[Nn].data=r}).catch(r=>{a[Nn].status="error",a[Nn].error={data:xT(r),__isServerError:!0}})),a}const BA="Error preloading route! ☝️";function ew(t,e){if(t)return typeof t=="string"?t:t[e]}function IA(t){return t?.scriptFormat??"module"}function FA(t,e,a){const r=$A(e),o=ew(a,"script")??r.crossOrigin;return{...IA(t)==="iife"?{rel:"preload",as:"script"}:{rel:"modulepreload"},href:r.href,...o?{crossOrigin:o}:{}}}function $A(t){return typeof t=="string"?{href:t,crossOrigin:void 0}:t}function Zl(t,e){if(e.length===0)return;if(e.length===1){t.push(e[0]);return}const a=new Set;for(const r of e){const o=JSON.stringify(r);
13a.has(o)||(a.add(o),t.push(r))}}function HA(t){return typeof t=="string"?{href:t,crossOrigin:void 0}:t}function GA(t,e,a,r){const o=lb(t),c=[],u=[];for(const d of o)for(const p of Array.isArray(d.scripts)?d.scripts:[]){if(!p)continue;const{children:m,...g}=p;c.push({tag:"script",attrs:{...g,...r,nonce:a},children:m})}if(e)for(const d of o)for(const p of e.routes[d.routeId]?.scripts??[])u.push({tag:"script",attrs:{...p.attrs,nonce:a},children:p.children});return[c,u]}function VA([t,e],a){return[...t,...e]}var tw=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(t){if(this.init=e=>{this.originalIndex=e,this._branch=void 0;const a=this.options,r=!a?.path&&!a?.id;this.parentRoute=this.options.getParentRoute?.(),r?this._path=Ir:this.parentRoute||ro();let o=r?Ir:a?.path;o&&o!=="/"&&(o=J0(o));const c=a?.id||o,u=r?Ir:Br((this.parentRoute.id==="__root__"?"":this.parentRoute.id)+"/"+(c??""));o==="__root__"&&(o="/");const d=u==="__root__"?"/":o===void 0?this.parentRoute.fullPath:Br(this.parentRoute.fullPath+"/"+o);this._path=o,this._id=u,this._fullPath=d,this._to=qn(d)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e=="object"&&e!==null&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>ao({from:this.fullPath,...e}),this.options=t||{},this.isRoot=!t?.getParentRoute,t?.id&&t?.path)throw new Error("Route cannot have both an 'id' and a 'path' option.")}},KA=class extends tw{constructor(t){super(t)}};var uo;function Vf(t,e,a){try{return vA(t,e)}catch(r){throw aw(a),r}}async function nw(t){t.length>0&&(await Promise.allSettled(t),t.length=0)}function aw(t){for(const e of t)e.catch(()=>{});t.length=0}var YA=Object.prototype.hasOwnProperty;function iw(t){for(const e in t)if(YA.call(t,e))return!0;return!1}async function QA(t,e,a){uo||(uo=Xb());const r=e[0],o=r.fetch??a,c=r.data instanceof FormData,u=new Headers(r.headers);if(u.set("x-tsr-serverFn","true"),c||u.set("accept",`${F1}, application/x-ndjson, application/json`),r.method==="GET"){if(c)throw new Error("FormData is not supported with GET requests");const p=await rw(r);if(p!==void 0){const m=ab({payload:p});t.includes("?")?t+=`&${m}`:t+=`?${m}`}}let d;return r.method==="POST"&&(d=await JA(r),typeof d=="string"&&u.set("content-type","application/json")),ZA(()=>o(t,{method:r.method,headers:u,signal:r.signal,body:d}))}async function rw(t){let e;return t.data!==void 0&&(e={data:t.data}),t.context&&iw(t.context)&&((e??={}).context=t.context),e?sw(e,t.signal):void 0}async function sw(t,e){e?.throwIfAborted();let a;try{a=await yA(t,{plugins:e?Xb(e):uo})}finally{e?.throwIfAborted()}return JSON.stringify(a)}async function JA(t){if(t.data instanceof FormData){let e;return t.context&&iw(t.context)&&(e=await sw(t.context,t.signal)),e!==void 0&&t.data.set(I1,e),t.data}return rw(t)}async function ZA(t){let e;try{e=await t()}catch(r){if(r instanceof Response)e=r;else throw r}if(e.headers.get("x-tss-raw")==="true")return e;const a=e.headers.get("content-type");if(a||ro(),e.headers.get("x-tss-serialized")){let r;if(a.includes("application/x-tss-framed")){const o=/;\s*v=(\d+)/.exec(a)?.[1];if(o&&+o!=1)throw new Error(`Unsupported framed protocol version ${o}`);if(!e.body)throw new Error("No response body for framed response");const[c,u]=MA(e.body);r=await WA(c,[DA(u),...uo])}else if(a.includes("application/json")){const o=await e.json(),c=[];r=Vf(o,{plugins:uo},c),await nw(c)}if(r||ro(),r instanceof Error)throw r;return r}if(a.includes("application/json")){const r=await e.json(),o=$1(r);if(o)throw o;if(zi(r))throw r;return r}if(!e.ok)throw new Error(await e.text());return e}async function WA(t,e){const a=t.getReader(),r={refs:new Map,plugins:e},o=d=>{a.cancel(d).catch(()=>{})};let c;const u=[];try{const d=await a.read();if(d.done)throw new Error("Stream ended before first object");c=Vf(JSON.parse(d.value),r,u)}catch(d){throw o(d),a.releaseLock(),d}return(async()=>{const d=[];try{for(;;){const p=await a.read();if(p.done)return;Vf(JSON.parse(p.value),r,d),aw(d)}}catch(p){o(p),console.error("Stream processing error:",p)}finally{a.releaseLock()}})(),await nw(u),c}function XA(t){const e="/_serverFn/"+t;return Object.assign((...o)=>{const c=H0()?.serverFns?.fetch;return QA(e,o,c??fetch)},{url:e,serverFnMeta:{id:t},[Uf]:!0})}var ek={key:"$TSS/serverfn",test:t=>typeof t!="function"||!(Uf in t)?!1:!!t[Uf],toSerializable:({serverFnMeta:t})=>({functionId:t.id}),fromSerializable:({functionId:t})=>XA(t)},_c=re.use,ow=re.useLayoutEffect;function tk({promise:t}){if(_c)return _c(t);const e=UA(t);if(e[Nn].status==="pending")throw e;if(e[Nn].status==="error")throw e[Nn].error;return e[Nn].data}function nk(t){const e=V.jsx(ak,{...t});
13return t.fallback?V.jsx(re.Suspense,{fallback:t.fallback,children:e}):e}function ak(t){const e=tk(t);return t.children(e)}var jh=class extends re.Component{constructor(...t){super(...t),this.state={error:0},this.reset=()=>{this.setState({error:0})}}static getDerivedStateFromProps(t,e){const a=t.getResetKey();return e.error&&e.resetKey!==a?{resetKey:a,error:0}:{resetKey:a}}static getDerivedStateFromError(t){return{error:[t]}}componentDidCatch(t,e){this.props.onCatch?.(t,e)}render(){const t=this.state.error;return t?re.createElement(this.props.errorComponent??ik,{error:t[0],reset:this.reset}):this.props.children}};function ik({error:t}){const[e,a]=re.useState(!1);return V.jsxs("div",{style:{padding:".5rem",maxWidth:"100%"},children:[V.jsxs("div",{style:{display:"flex",alignItems:"center",gap:".5rem"},children:[V.jsx("strong",{style:{fontSize:"1rem"},children:"Something went wrong!"}),V.jsx("button",{style:{appearance:"none",fontSize:".6em",border:"1px solid currentColor",padding:".1rem .2rem",fontWeight:"bold",borderRadius:".25rem"},onClick:()=>a(r=>!r),children:e?"Hide Error":"Show Error"})]}),V.jsx("div",{style:{height:".25rem"}}),e?V.jsx("div",{children:V.jsx("pre",{style:{fontSize:".7em",border:"1px solid red",borderRadius:".25rem",padding:".3rem",color:"red",overflow:"auto"},children:t?.message?V.jsx("code",{children:t.message}):null})}):null]})}var Ry=()=>!0,rk=()=>!1;function sk({children:t,fallback:e=null}){return V.jsx(Co.Fragment,{children:Ph()?t:e})}function Ph(t=!0){return Co.useSyncExternalStore(ok,Ry,t?rk:Ry)}function ok(){return()=>{}}var lw=re.createContext(null);function xt(t){return re.useContext(lw)}var Mh=re.createContext(void 0),lk=re.createContext(void 0);function ck({update:t,notify:e,unwatched:a}){return{link:r,unlink:o,propagate:c,checkDirty:u,shallowPropagate:d};function r(m,g,v){const b=g.depsTail;if(b!==void 0&&b.dep===m)return;const w=b!==void 0?b.nextDep:g.deps;if(w!==void 0&&w.dep===m){w.version=v,g.depsTail=w;return}const S=m.subsTail;if(S!==void 0&&S.version===v&&S.sub===g)return;const T=g.depsTail=m.subsTail={version:v,dep:m,sub:g,prevDep:b,nextDep:w,prevSub:S,nextSub:void 0};w!==void 0&&(w.prevDep=T),b!==void 0?b.nextDep=T:g.deps=T,S!==void 0?S.nextSub=T:m.subs=T}function o(m,g=m.sub){const v=m.dep,b=m.prevDep,w=m.nextDep,S=m.nextSub,T=m.prevSub;return w!==void 0?w.prevDep=b:g.depsTail=b,b!==void 0?b.nextDep=w:g.deps=w,S!==void 0?S.prevSub=T:v.subsTail=T,T!==void 0?T.nextSub=S:(v.subs=S)===void 0&&a(v),w}function c(m){let g=m.nextSub,v;e:do{const b=m.sub;let w=b.flags;if(w&60?w&12?w&4?!(w&48)&&p(m,b)?(b.flags=w|40,w&=1):w=0:b.flags=w&-9|32:w=0:b.flags=w|32,w&2&&e(b),w&1){const S=b.subs;if(S!==void 0){const T=(m=S).nextSub;T!==void 0&&(v={value:g,prev:v},g=T);continue}}if((m=g)!==void 0){g=m.nextSub;continue}for(;v!==void 0;)if(m=v.value,v=v.prev,m!==void 0){g=m.nextSub;continue e}break}while(!0)}function u(m,g){let v,b=0,w=!1;e:do{const S=m.dep,T=S.flags;if(g.flags&16)w=!0;else if((T&17)===17){if(t(S)){const C=S.subs;C.nextSub!==void 0&&d(C),w=!0}}else if((T&33)===33){(m.nextSub!==void 0||m.prevSub!==void 0)&&(v={value:m,prev:v}),m=S.deps,g=S,++b;continue}if(!w){const C=m.nextDep;if(C!==void 0){m=C;continue}}for(;b--;){const C=g.subs,A=C.nextSub!==void 0;if(A?(m=v.value,v=v.prev):m=C,w){if(t(g)){A&&d(C),g=m.sub;continue}w=!1}else g.flags&=-33;g=m.sub;const O=m.nextDep;if(O!==void 0){m=O;continue e}}return w}while(!0)}function d(m){do{const g=m.sub,v=g.flags;(v&48)===32&&(g.flags=v|16,(v&6)===2&&e(g))}while((m=m.nextSub)!==void 0)}function p(m,g){let v=g.depsTail;for(;v!==void 0;){if(v===m)return!0;v=v.prevDep}return!1}}function uk(t,e,a){const r=typeof t=="object",o=r?t:void 0;return{next:(r?t.next:t)?.bind(o),error:(r?t.error:e)?.bind(o),complete:(r?t.complete:a)?.bind(o)}}const Kf=[];let mc=0;const{link:xy,unlink:dk,propagate:fk,checkDirty:cw,shallowPropagate:Oy}=ck({update(t){return t._update()},notify(t){Kf[Yf++]=t,t.flags&=-3},unwatched(t){t.depsTail!==void 0&&(t.depsTail=void 0,t.flags=17,Sc(t))}});let Wl=0,Yf=0,yn,Qf=0;function hk(t){try{++Qf,t()}finally{--Qf||uw()}}function Sc(t){const e=t.depsTail;let a=e!==void 0?e.nextDep:t.deps;for(;a!==void 0;)a=dk(a,t)}function uw(){if(!(Qf>0)){for(;Wl<Yf;){const t=Kf[Wl];Kf[Wl++]=void 0,t.notify()}Wl=0,Yf=0}}function Ly(t,e){const a=typeof t=="function",r=t,o={_snapshot:a?void 0:t,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:a?0:1,get(){return yn!==void 0&&xy(o,yn,mc),o._snapshot},subscribe(c){const u=uk(c),d={current:!1},p=pk(()=>{o.get(),d.current?(yn=void 0,u.next?.(o._snapshot)):d.current=!0});return{unsubscribe:()=>{p.stop()}}},_update(c){const u=yn,d=e?.compare??Object.is;if(a)yn=o,++mc,o.depsTail=void 0;else if(c===void 0)return!1;a&&(o.flags=5);try{const p=o._snapshot,m=typeof c=="function"?c(p):c===void 0&&a?r(p):c;return p===void 0||!d(p,m)?(o._snapshot=m,!0):!1}finally{yn=u,a&&(o.flags&=-5),Sc(o)}}};return a?(o.flags=17,o.get=function(){const c=o.flags;
13if(c&16||c&32&&cw(o.deps,o)){if(o._update()){const u=o.subs;u!==void 0&&Oy(u)}}else c&32&&(o.flags=c&-33);return yn!==void 0&&xy(o,yn,mc),o._snapshot}):o.set=function(c){if(o._update(c)){const u=o.subs;u!==void 0&&(fk(u),Oy(u),uw())}},o}function pk(t){const e=()=>{const r=yn;yn=a,++mc,a.depsTail=void 0,a.flags=6;try{return t()}finally{yn=r,a.flags&=-5,Sc(a)}},a={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:6,notify(){const r=this.flags;r&16||r&32&&cw(this.deps,this)?e():this.flags=2},stop(){this.flags=0,this.depsTail=void 0,Sc(this)}};return e(),a}var kf={exports:{}},Rf={},xf={exports:{}},Of={};var Ny;function mk(){if(Ny)return Of;Ny=1;var t=Eo();function e(v,b){return v===b&&(v!==0||1/v===1/b)||v!==v&&b!==b}var a=typeof Object.is=="function"?Object.is:e,r=t.useState,o=t.useEffect,c=t.useLayoutEffect,u=t.useDebugValue;function d(v,b){var w=b(),S=r({inst:{value:w,getSnapshot:b}}),T=S[0].inst,C=S[1];return c(function(){T.value=w,T.getSnapshot=b,p(T)&&C({inst:T})},[v,w,b]),o(function(){return p(T)&&C({inst:T}),v(function(){p(T)&&C({inst:T})})},[v]),u(w),w}function p(v){var b=v.getSnapshot;v=v.value;try{var w=b();return!a(v,w)}catch{return!0}}function m(v,b){return b()}var g=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?m:d;return Of.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:g,Of}var zy;function gk(){return zy||(zy=1,xf.exports=mk()),xf.exports}var qy;function vk(){if(qy)return Rf;qy=1;var t=Eo(),e=gk();function a(m,g){return m===g&&(m!==0||1/m===1/g)||m!==m&&g!==g}var r=typeof Object.is=="function"?Object.is:a,o=e.useSyncExternalStore,c=t.useRef,u=t.useEffect,d=t.useMemo,p=t.useDebugValue;return Rf.useSyncExternalStoreWithSelector=function(m,g,v,b,w){var S=c(null);if(S.current===null){var T={hasValue:!1,value:null};S.current=T}else T=S.current;S=d(function(){function A(M){if(!O){if(O=!0,x=M,M=b(M),w!==void 0&&T.hasValue){var N=T.value;if(w(N,M))return B=N}return B=M}if(N=B,r(x,M))return N;var Y=b(M);return w!==void 0&&w(N,Y)?(x=M,N):(x=M,B=Y)}var O=!1,x,B,Z=v===void 0?null:v;return[function(){return A(g())},Z===null?void 0:function(){return A(Z())}]},[g,v,b,w]);var C=o(m,S[0],S[1]);return u(function(){T.hasValue=!0,T.value=C},[C]),p(C),C},Rf}var Dy;function yk(){return Dy||(Dy=1,kf.exports=vk()),kf.exports}var bk=yk();function wk(t,e){return t===e}function Pn(t,e=r=>r,a){const r=a?.compare??wk,o=re.useCallback(u=>{const{unsubscribe:d}=t.subscribe(u);return d},[t]),c=re.useCallback(()=>t.get(),[t]);return bk.useSyncExternalStoreWithSelector(o,c,c,e,r)}var jy={};function _k(t,e){const a=re.useRef();return r=>{const o=t?.select?t.select(r):r;return t?.structuralSharing??e.options.defaultStructuralSharing?a.current=Qa(a.current,o):o}}function Pi(t){const e=xt(),a=re.useContext(t.from?lk:Mh),r=t.from??a,o=e.stores.getMatchStore(r),c=_k(t,e),u=Pn(o,d=>d?c(d):jy);if(u!==jy)return u;(t.shouldThrow??!0)&&ro()}function dw(t){return Pi({from:t.from,strict:t.strict,structuralSharing:t.structuralSharing,select:e=>t.select?t.select(e.loaderData):e.loaderData})}function fw(t){const{select:e,...a}=t;return Pi({...a,select:r=>e?e(r.loaderDeps):r.loaderDeps})}function hw(t){return Pi({from:t.from,shouldThrow:t.shouldThrow,structuralSharing:t.structuralSharing,strict:t.strict,select:e=>{const a=t.strict===!1?e.params:e._strictParams;return t.select?t.select(a):a}})}function pw(t){return Pi({from:t.from,strict:t.strict,shouldThrow:t.shouldThrow,structuralSharing:t.structuralSharing,select:e=>t.select?t.select(e.search):e.search})}function mw(t){const e=xt();return re.useCallback(a=>e.navigate({...a,from:a.from??t?.from}),[t?.from,e])}function gw(t){return Pi({...t,select:e=>t.select?t.select(e.context):e.context})}function Sk(...t){const e=re.useRef(t),a=e.current;return t.forEach((r,o)=>{Tn(a[o],r,!1,!0)||(a[o]=r)}),e.current}function Xl(t,e){t.preloadRoute(e).catch(a=>{console.warn(a),console.warn(BA)})}var Tk={compare:(t,e)=>t[0]===e[0]&&t[1]===e[1]};function Ek(t,e){const a=typeof t=="string"&&io(t);if(a)return e.has(a)?t:null}function Ck(t,e,a,r,o){const c=iy(t.pathname,r),u=iy(e.pathname,r);return(a?.exact?c!==u:!(c.startsWith(u)&&(c.length===u.length||c[u.length]==="/")))||(a?.includeSearch??!0)&&!Tn(t.search,e.search,!a?.exact,a?.explicitUndef
13ined)?!1:a?.includeHash?o&&t.hash===e.hash:!0}function Ak(t,e,a){const r=xt(),o=re.useRef(null),c=re.useCallback(he=>{if(o.current=he,typeof e=="function")return e(he);e&&(e.current=he)},[e]),{activeOptions:u,to:d,preload:p,preloadDelay:m,hashScrollIntoView:g,replace:v,startTransition:b,resetScroll:w,viewTransition:S,ignoreBlocker:T,disabled:C,target:A,onClick:O,onBlur:x,onFocus:B,onMouseEnter:Z,onMouseLeave:M,onTouchStart:N}=t,Y=Ph(!!u?.includeHash),[te,ue,H]=Sk(t.search,t.params,u),[G,ee]=re.useMemo(()=>[t,{...t}],[r,t.from,t._fromLocation,t.hash,t.to,te,ue,t.state,t.mask,t.unsafeRelative]),ge=re.useMemo(()=>{const he=Ek(d,r.protocolAllowlist);if(he!==void 0){const En=[he??void 0];return()=>En}let Pe,Ve;return En=>{G._fromLocation||(ee._fromLocation=En);const ri=r.buildLocation(ee),Mn=Lk(ri,r,C);return(!Pe||Pe[0]!==Mn)&&(Pe=[Mn,!(C||Mn&&!io(Mn))&&void 0],Ve=[Mn,!0]),Pe[1]!==void 0&&Ck(En,ri,H,r.basepath,Y)?Ve:Pe}},[H,C,Y,G,ee,r,d]),[ce,j]=Pn(r.stores.location,ge,Tk),J=j===void 0&&ce,fe=C||ce===void 0,je=re.useRef(!1),ke=t.reloadDocument||J||fe?!1:p??r.options.defaultPreload,R=m??r.options.defaultPreloadDelay??0,F=re.useCallback(he=>{const Pe=he?.isIntersecting;if(!(Pe??ke==="intent")){Pe===!1&&Lf(o);return}if(!R){Xl(r,G);return}Xs.has(o)||Xs.set(o,setTimeout(()=>{Xs.delete(o),Xl(r,G)},R))},[r,G,o,ke,R]);re.useEffect(()=>{if(!ke)return;ke==="render"&&!je.current&&(je.current=!0,Xl(r,G));let he=!0,Pe;return ke==="viewport"&&o.current&&typeof IntersectionObserver=="function"&&(Pe=new IntersectionObserver(Ve=>{he&&F(Ve.pop())},{rootMargin:"100px"}),Pe.observe(o.current)),()=>{he=!1,Pe?.disconnect(),Lf(o)}},[r,G,ke,F,o]);const Q=xk(t,a);if(Q.ref=e?c:o,J)return Q.href=J,Q;const ae=he=>{const Pe=A??he.currentTarget.getAttribute("target");!fe&&!(he.metaKey||he.altKey||he.ctrlKey||he.shiftKey)&&!he.defaultPrevented&&(!Pe||Pe==="_self")&&he.button===0&&(he.preventDefault(),r.navigate({...G,replace:v,resetScroll:w,hashScrollIntoView:g,startTransition:b,viewTransition:S,ignoreBlocker:T}))},ve=()=>{ke==="intent"&&Xl(r,G)},Te=()=>{ke==="intent"&&Lf(o)};return Q.onClick=Cr(O,ae),Q.onBlur=Cr(x,Te),Q.onFocus=Cr(B,F),Q.onMouseEnter=Cr(Z,F),Q.onMouseLeave=Cr(M,Te),Q.onTouchStart=Cr(N,ve),Ok(Q,t,j,ce,fe,a)}var kk={},Rk={className:"active"},vw=new Set(["to","params","search","hash","state","mask","from","unsafeRelative","_fromLocation","reloadDocument","preload","preloadDelay","preloadIntentProximity","hashScrollIntoView","replace","startTransition","resetScroll","viewTransition","ignoreBlocker","activeProps","inactiveProps","activeOptions","_asChild"]);function xk(t,e){const a={};for(const r in t)vw.has(r)||r==="type"&&e!==void 0||r==="disabled"&&e==="a"||(a[r]=t[r]);return a}function Ok(t,e,a,r,o,c){const{activeProps:u,inactiveProps:d,className:p,style:m,target:g}=e,v=V0(a?u:d,{})??(a?Rk:kk);Object.assign(t,v),t.href=r,c!=="a"&&(t.disabled=o),t.target=g;const b=v.style;(m||b)&&(t.style=m&&b?{...m,...b}:m||b);const w=v.className;return(p||w)&&(t.className=p?w?`${p} ${w}`:p:w),o&&(t.role="link",t["aria-disabled"]=!0),a&&(t["data-status"]="active",t["aria-current"]="page"),t}var Xs=new WeakMap,Lf=t=>{clearTimeout(Xs.get(t)),Xs.delete(t)},Cr=(t,e)=>t?a=>a.defaultPrevented||(t(a),a.defaultPrevented||e(a)):e;function Lk(t,e,a){if(a)return;const r=t.maskedLocation??t,o=r.external?r.publicHref:e.history.createHref(r.publicHref)||"/";if(!((r.external||o!==r.publicHref)&&Q0(o,e.protocolAllowlist)))return o}var Tc=re.memo(re.forwardRef((t,e)=>{const a=t._asChild||"a",r=Ak(t,e,a),o=typeof t.children=="function"?t.children({isActive:r["data-status"]==="active"}):t.children;return re.createElement(a,r,o)}),Nk);function Nk(t,e){let a=0;for(const r in e)if(a++,t[r]!==e[r]&&(!vw.has(r)||!Tn(t[r],e[r],!1,!0)))return!1;for(const r in t)a--;return a===0}var zk=class extends tw{constructor(e){super(e),this.useMatch=a=>Pi({...a,from:this.id}),this.useRouteContext=a=>gw({...a,from:this.id}),this.useSearch=a=>pw({...a,from:this.id}),this.useParams=a=>hw({...a,from:this.id}),this.useLoaderDeps=a=>fw({...a,from:this.id}),this.useLoaderData=a=>dw({...a,from:this.id}),this.useNavigate=()=>mw({from:this.fullPath}),this.Link=Co.forwardRef((a,r)=>V.jsx(Tc,{ref:r,from:this.fullPath,...a}))}};function qk(t){return new zk(t)}function Dk(){return t=>Pk(t)}var jk=class extends KA{constructor(t){super(t),this.useMatch=e=>Pi({...e,from:this.id}),this.useRouteContext=e=>gw({...e,from:this.id}),this.useSearch=e=>pw({...e,from:this.id}),this.useParams=e=>hw({...e,from:this.id}),this.useLoaderDeps=e=>fw({...e,from:this.id}),this.useLoaderData=e=>dw({...e,from:this.id}),this.useNavigate=()=>mw({from:this.fullPath}),this.Link=Co.forwardRef((e,a)=>V.jsx(Tc,{ref:a,from:this.fullPath,...e}))}};function Pk(t){return new jk(t)}function Qe(t){return e=>{const a=qk(e);return a.isRoot=!1,a}}function Je(t,e){let a,r,o;const c=()=>(a||(o=void 0,a=t().then(d=>{a=void 0,u.preload=void 0,r=d[e]}).catch(d=>{a=void 0,o=d}
13)),a),u=function(p){if(o){if(G1(o)&&typeof sessionStorage<"u"){const m=`tanstack_router_reload:${o.message}`;if(!sessionStorage.getItem(m))throw sessionStorage.setItem(m,"1"),window.location.reload(),new Promise(()=>{})}throw o}if(!r)if(_c)_c(c());else throw c();return re.createElement(r,p)};return u.preload=c,u}function Mk(t){const e=xt(),a=`not-found-${Pn(e.stores.location,r=>r.pathname)}-${Pn(e.stores.status)}`;return V.jsx(jh,{getResetKey:()=>a,onCatch:(r,o)=>{if(zi(r))t.onCatch?.(r,o);else throw r},errorComponent:({error:r})=>{if(zi(r))return t.fallback?.(r);throw r},children:t.children})}function Uk(){return V.jsx("p",{children:"Not Found"})}function Bk({children:t}){return xt(),null}function yw(t,e,a){return e.options.notFoundComponent?V.jsx(e.options.notFoundComponent,{...a}):t.options.defaultNotFoundComponent?V.jsx(t.options.defaultNotFoundComponent,{...a}):V.jsx(Uk,{})}function $c(t,e){const a=e?.options.pendingComponent??t.options.defaultPendingComponent;return a?V.jsx(a,{}):null}var Ik=(t,e)=>t[0]===e[0]&&t[1]===e[1],bw=(t,e,a)=>!e.isRoot||e.options.shellComponent||e.options.wrapInSuspense||a===!1||a==="data-only"||!t.ssr,ww=re.memo(function({routeId:e}){const a=xt();return V.jsx(Fk,{router:a,match:Pn(a.stores.getMatchStore(e))})});function Fk({router:t,match:e}){const a=t.routesById[e.routeId],r=$c(t,a),o=a.options.errorComponent??t.options.defaultErrorComponent,c=a.options.onCatch??t.options.defaultOnCatch,u=a.isRoot?a.options.notFoundComponent??t.options.notFoundRoute?.options.component:a.options.notFoundComponent,d=e.ssr===!1||e.ssr==="data-only",p=bw(t,a,e.ssr)&&(a.options.wrapInSuspense??r??(a.options.errorComponent?.preload||d));let m=V.jsx($k,{match:e});d&&(m=V.jsx(sk,{fallback:r,children:m})),u&&(m=V.jsx(Mk,{fallback:b=>{if(b.routeId??=e.routeId,b.routeId!==e.routeId)throw b;return re.createElement(u,b)},children:m})),o&&(m=V.jsx(jh,{getResetKey:()=>e,errorComponent:o,onCatch:(b,w)=>{if(zi(b))throw b.routeId??=e.routeId,b;c?.(b,w)},children:m})),p&&(m=V.jsx(re.Suspense,{fallback:r,children:m}));const g=null,v=a.isRoot?a.options.shellComponent:void 0;return V.jsx(Mh.Provider,{value:e.routeId,children:v?V.jsxs(v,{children:[m,g]}):V.jsxs(V.Fragment,{children:[m,g]})})}var $k=re.memo(function({match:e}){const a=xt(),r=e.routeId,o=a.routesById[r],c=re.useMemo(()=>{const d=(o.options.remountDeps??a.options.defaultRemountDeps)?.({routeId:r,loaderDeps:e.loaderDeps,params:e._strictParams,search:e._strictSearch});return d?JSON.stringify(d):void 0},[r,e.loaderDeps,e._strictParams,e._strictSearch,o.options.remountDeps,a.options.defaultRemountDeps]),u=re.useMemo(()=>{const d=o.options.component??a.options.defaultComponent;return d?V.jsx(d,{},c):V.jsx(_w,{})},[c,o.options.component,a.options.defaultComponent]);if(e.status==="pending"){if(a.ssr&&!bw(a,o,e.ssr))return u;if(a._tx)throw a._tx[5];return $c(a,o)}if(e.status==="notFound")return yw(a,o,e.error);if(e.status==="error")throw e.error;return u}),_w=re.memo(function(){const e=xt(),a=re.useContext(Mh);let r,o,c;{const d=e.stores.getMatchStore(a);[r,o]=Pn(d,p=>[!!p._notFound,p.error],{compare:Ik}),c=Pn(e.stores.ids,p=>p[p.indexOf(a)+1])}if(r)return yw(e,e.routesById[a],o);if(!c)return null;const u=V.jsx(ww,{routeId:c});return a===Ir?V.jsx(re.Suspense,{fallback:$c(e),children:u}):u});function Sw(t,e){const a=t[1];t.length=0,a?.(e)}function Hk({t}){const e=xt(),a=e._rendered??=[];return e.startTransition=(r,o)=>new Promise(c=>{Sw(a,!1),a.push(o,c),t(e),re.startTransition(r)}),ow(()=>{const r=e.history.subscribe(e.load);e.updateLatestLocation();const o=e.latestLocation,c=e.buildLocation({to:o.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});if(qn(o.publicHref)!==qn(c.publicHref))return e.commitLocation({...c,replace:!0,ignoreBlocker:!0}),r;const u=e.stores.resolvedLocation.get();return u?.href===o.href&&u.state.__TSR_key===o.state.__TSR_key?a.push(e.stores.matches.get(),d=>{d&&e.emit({type:"onRendered",...Pc(u,u)})}):e._tx||e.load({sync:!0}).catch(console.error),r},[e,e.history]),null}function Gk(){const t=xt(),e=t.routesById[Ir],a=$c(t,e),r=V.jsxs(V.Fragment,{children:[V.jsx(Hk,{t:re.useState()[1]}),t.ssr?V.jsx(Py,{}):V.jsx(re.Suspense,{fallback:a,children:V.jsx(Py,{})})]});return t.options.InnerWrap?V.jsx(t.options.InnerWrap,{children:r}):r}function Py(){const t=xt(),e=t._rendered,a=Pn(t.stores.matches,u=>e[0]??u),r=a[0],o=r?.routeId;ow(()=>{e[0]===a&&Sw(e,!0)},[e,a]);const c=o?V.jsx(ww,{routeId:o}):null;return t.options.disableGlobalCatchBoundary?c:V.jsx(jh,{getResetKey:()=>r,onCatch:void 0,children:c})}var Vk=t=>({createMutableStore:Ly,createReadonlyStore:Ly,batch:hk}
13),Kk=t=>new Yk(t),Yk=class extends LT{constructor(t){super(t,Vk)}};function Qk({router:t,children:e,...a}){K0(a)&&t.update({...t.options,...a,context:{...t.options.context,...a.context}});const r=V.jsx(lw.Provider,{value:t,children:e});return t.options.Wrap?V.jsx(t.options.Wrap,{children:r}):r}function Jk({router:t,...e}){return V.jsx(Qk,{router:t,...e,children:V.jsx(Gk,{})})}function My(t,e){if(e)for(const[a,r]of Object.entries(e))a!=="suppressHydrationWarning"&&r!==void 0&&r!==!1&&t.setAttribute(a,typeof r=="boolean"?"":String(r))}function Tw(t){const{attrs:e,children:a,nonce:r,preventScriptHoist:o}=t,c=re.useMemo(()=>a===void 0?void 0:{__html:a},[a]);switch(t.tag){case"title":return V.jsx("title",{...e,suppressHydrationWarning:!0,children:a});case"meta":return V.jsx("meta",{...e,suppressHydrationWarning:!0});case"link":return V.jsx("link",{...e,precedence:e?.precedence??(e?.rel==="stylesheet"?"default":void 0),nonce:r,suppressHydrationWarning:!0});case"style":return t.inlineCss,V.jsx("style",{...e,dangerouslySetInnerHTML:c,nonce:r});case"script":return V.jsx(Zk,{attrs:e,preventScriptHoist:o,children:a});default:return null}}function Zk({attrs:t,children:e,preventScriptHoist:a}){xt();const r=Ph(),o=re.useMemo(()=>e===void 0?void 0:{__html:e},[e]),c=typeof t?.type=="string"&&t.type!==""&&t.type!=="text/javascript"&&t.type!=="module";if(re.useEffect(()=>{if(!c){if(t?.src){const u=document.createElement("a");u.href=t.src;const d=u.href;for(const m of document.scripts)if(m.src===d)return;const p=document.createElement("script");return My(p,t),document.head.appendChild(p),()=>p.remove()}if(typeof e=="string"){const u=typeof t?.type=="string"?t.type:"text/javascript",d=typeof t?.nonce=="string"?t.nonce:void 0;for(const m of document.scripts){if(m.hasAttribute("src"))continue;const g=m.getAttribute("type")??"text/javascript",v=m.getAttribute("nonce")??void 0;if(m.textContent===e&&g===u&&v===d)return}const p=document.createElement("script");return p.textContent=e,My(p,t),document.head.appendChild(p),()=>p.remove()}}},[t,e,c]),c&&typeof e=="string")return V.jsx("script",{...t,suppressHydrationWarning:!0,dangerouslySetInnerHTML:o});if(!r){if(t?.src)return V.jsx("script",{...t,suppressHydrationWarning:!0});if(typeof e=="string")return V.jsx("script",{...t,dangerouslySetInnerHTML:o,suppressHydrationWarning:!0})}return null}function Wk(t,e,a,r){a=lb(a);const o=a.map(T=>T.meta).filter(T=>T!==void 0),c=[],u={};let d;for(let T=o.length-1;T>=0;T--){const C=o[T];for(let A=C.length-1;A>=0;A--){const O=C[A];if(O)if(O.title)d||(d={tag:"title",children:O.title});else if("script:ld+json"in O)try{const x=JSON.stringify(O["script:ld+json"]);c.push({tag:"script",attrs:{type:"application/ld+json"},children:Z1(x)})}catch{}else{const x=O.name??O.property;if(x){if(u[x])continue;u[x]=!0}c.push({tag:"meta",attrs:{...O,nonce:e}})}}}d&&c.push(d),e&&c.push({tag:"meta",attrs:{property:"csp-nonce",content:e}}),c.reverse();const p=a.flatMap(T=>T.links??[]).filter(T=>T!==void 0).map(T=>({tag:"link",attrs:{...T,nonce:e}})),m=t.ssr?.manifest,g=[];m&&(a.forEach(T=>{m.routes[T.routeId]?.css?.forEach(C=>{const A=HA(C);g.push({tag:"link",attrs:{rel:"stylesheet",...A,crossOrigin:ew(r,"stylesheet")??A.crossOrigin,suppressHydrationWarning:!0,nonce:e}})})}),m.inlineStyle&&g.push({tag:"style",attrs:{...m.inlineStyle.attrs,nonce:e},children:m.inlineStyle.children,inlineCss:!0}));const v=[];m&&a.forEach(T=>{m.routes[T.routeId]?.preloads?.forEach(C=>{v.push({tag:"link",attrs:{...FA(m,C,r),nonce:e}})})});const b=a.flatMap(T=>T.styles??[]).filter(T=>T!==void 0).map(({children:T,...C})=>({tag:"style",attrs:{...C,nonce:e},children:T})),w=a.flatMap(T=>T.headScripts??[]).filter(T=>T!==void 0).map(({children:T,...C})=>({tag:"script",attrs:{...C,nonce:e},children:T})),S=[];return Zl(S,c),S.push(...v),Zl(S,p),S.push(...g),Zl(S,b),Zl(S,w),S}var Xk=t=>{const e=xt(),a=e.options.ssr?.nonce,r=re.useCallback(o=>Wk(e,a,o,t),[t,a,e]);return Pn(e.stores.matches,r,{compare:Tn})};function eR(t){const e=Xk(t.assetCrossOrigin),a=xt().options.ssr?.nonce;return V.jsx(V.Fragment,{children:e.map(r=>re.createElement(Tw,{...r,key:`tsr-meta-${JSON.stringify(r)}`,nonce:a}))})}var tR={suppressHydrationWarning:!0},nR=()=>{const t=xt(),e=t.options.ssr?.nonce,a=o=>{const c=GA(o,t.ssr?.manifest,e,tR);for(const u of c[1])if(typeof u.attrs?.src=="string"){const d=u;d.preventScriptHoist=!0}return c},r=o=>VA(a(o));
13return aR(Pn(t.stores.matches,r,{compare:Tn}))};function aR(t){return V.jsx(V.Fragment,{children:t.map((e,a)=>re.createElement(Tw,{...e,key:`tsr-scripts-${e.tag}-${a}`}))})}var Oi=(t,e)=>{const a={type:"request",...e||t},r=o=>Oi({},Object.assign(a,{validator:o,inputValidator:o}));return{options:a,middleware:o=>Oi({},Object.assign(a,{middleware:o})),validator:r,inputValidator:r,client:o=>Oi({},Object.assign(a,{client:o})),server:o=>Oi({},Object.assign(a,{server:o}))}};function Ew(t,e){for(let a=0,r=e.length;a<r;a++){const o=e[a];t.has(o)||(t.add(o),o.extends&&Ew(t,o.extends))}}var iR=t=>({getOptions:async()=>{const e=await t();if(e.serializationAdapters){const a=new Set;Ew(a,e.serializationAdapters),e.serializationAdapters=Array.from(a)}return e},createMiddleware:Oi}),Uy=function(){return Uy=Object.assign||function(e){for(var a,r=1,o=arguments.length;r<o;r++){a=arguments[r];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(e[c]=a[c])}return e},Uy.apply(this,arguments)};function Hc(t,e){var a={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(a[r]=t[r]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(a[r[o]]=t[r[o]]);return a}function rR(t,e,a,r){function o(c){return c instanceof a?c:new a(function(u){u(c)})}return new(a||(a=Promise))(function(c,u){function d(g){try{m(r.next(g))}catch(v){u(v)}}function p(g){try{m(r.throw(g))}catch(v){u(v)}}function m(g){g.done?c(g.value):o(g.value).then(d,p)}m((r=r.apply(t,e||[])).next())})}function lz(t,e,a){if(a||arguments.length===2)for(var r=0,o=e.length,c;r<o;r++)(c||!(r in e))&&(c||(c=Array.prototype.slice.call(e,0,r)),c[r]=e[r]);return t.concat(c||Array.prototype.slice.call(e))}const sR=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);class Uh extends Error{constructor(e,a="FunctionsError",r){super(e),this.name=a,this.context=r}toJSON(){return{name:this.name,message:this.message,context:this.context}}}class oR extends Uh{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e)}}class By extends Uh{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e)}}class Iy extends Uh{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e)}}var Jf;(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2"})(Jf||(Jf={}));class lR{constructor(e,{headers:a={},customFetch:r,region:o=Jf.Any}={}){this.url=e,this.headers=a,this.region=o,this.fetch=sR(r)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return rR(this,arguments,void 0,function*(a,r={}){var o;let c,u;try{const{headers:d,method:p,body:m,signal:g,timeout:v}=r;let b={},{region:w}=r;w||(w=this.region);const S=new URL(`${this.url}/${a}`);w&&w!=="any"&&(b["x-region"]=w,S.searchParams.set("forceFunctionRegion",w));let T;m&&(d&&!Object.prototype.hasOwnProperty.call(d,"Content-Type")||!d)?typeof Blob<"u"&&m instanceof Blob||m instanceof ArrayBuffer?(b["Content-Type"]="application/octet-stream",T=m):typeof m=="string"?(b["Content-Type"]="text/plain",T=m):typeof FormData<"u"&&m instanceof FormData?T=m:(b["Content-Type"]="application/json",T=JSON.stringify(m)):m&&typeof m!="string"&&!(typeof Blob<"u"&&m instanceof Blob)&&!(m instanceof ArrayBuffer)&&!(typeof FormData<"u"&&m instanceof FormData)?T=JSON.stringify(m):T=m;let C=g;v&&(u=new AbortController,c=setTimeout(()=>u.abort(),v),g?(C=u.signal,g.addEventListener("abort",()=>u.abort())):C=u.signal);const A=yield this.fetch(S.toString(),{method:p||"POST",headers:Object.assign(Object.assign(Object.assign({},b),this.headers),d),body:T,signal:C}).catch(Z=>{throw new oR(Z)}),O=A.headers.get("x-relay-error");
13if(O&&O==="true")throw new By(A);if(!A.ok)throw new Iy(A);let x=((o=A.headers.get("Content-Type"))!==null&&o!==void 0?o:"text/plain").split(";")[0].trim(),B;return x==="application/json"?B=yield A.json():x==="application/octet-stream"||x==="application/pdf"?B=yield A.blob():x==="text/event-stream"?B=A:x==="multipart/form-data"?B=yield A.formData():B=yield A.text(),{data:B,error:null,response:A}}catch(d){return{data:null,error:d,response:d instanceof Iy||d instanceof By?d.context:void 0}}finally{c&&clearTimeout(c)}})}}const Cw=3,Fy=t=>Math.min(1e3*2**t,3e4),cR=[520,503],Aw=["GET","HEAD","OPTIONS"];var uR=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};function $y(t,e){return new Promise(a=>{if(e?.aborted){a();return}const r=setTimeout(()=>{e?.removeEventListener("abort",o),a()},t);function o(){clearTimeout(r),a()}e?.addEventListener("abort",o)})}function dR(t,e,a,r){return!(!r||a>=Cw||!Aw.includes(t)||!cR.includes(e))}var fR=class{constructor(t){var e,a,r,o,c;this.shouldThrowOnError=!1,this.retryEnabled=!0,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:!1,this.signal=t.signal,this.isMaybeSingle=(a=t.isMaybeSingle)!==null&&a!==void 0?a:!1,this.shouldStripNulls=(r=t.shouldStripNulls)!==null&&r!==void 0?r:!1,this.urlLengthLimit=(o=t.urlLengthLimit)!==null&&o!==void 0?o:8e3,this.retryEnabled=(c=t.retry)!==null&&c!==void 0?c:!0,t.fetch?this.fetch=t.fetch:this.fetch=fetch}throwOnError(){return this.shouldThrowOnError=!0,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=!0,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var a=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){const u=this.headers.get("Accept");u==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!u||u==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped")}const r=this.fetch;let c=(async()=>{let u=0;for(;;){const m=new Headers(a.headers);u>0&&m.set("X-Retry-Count",String(u));let g;try{g=await r(a.url.toString(),{method:a.method,headers:m,body:JSON.stringify(a.body,(v,b)=>typeof b=="bigint"?b.toString():b),signal:a.signal})}catch(v){if(v?.name==="AbortError"||v?.code==="ABORT_ERR"||!Aw.includes(a.method))throw v;if(a.retryEnabled&&u<Cw){const b=Fy(u);u++,await $y(b,a.signal);continue}throw v}if(dR(a.method,g.status,u,a.retryEnabled)){var d,p;const v=(d=(p=g.headers)===null||p===void 0?void 0:p.get("Retry-After"))!==null&&d!==void 0?d:null,b=v!==null?Math.max(0,parseInt(v,10)||0)*1e3:Fy(u);await g.text(),u++,await $y(b,a.signal);continue}return await a.processResponse(g)}})();return this.shouldThrowOnError||(c=c.catch(u=>{var d;let p="",m="",g="";const v=u?.cause;if(v){var b,w,S,T;const O=(b=v?.message)!==null&&b!==void 0?b:"",x=(w=v?.code)!==null&&w!==void 0?w:"";p=`${(S=u?.name)!==null&&S!==void 0?S:"FetchError"}: ${u?.message}`,p+=`
14
15Caused by: ${(T=v?.name)!==null&&T!==void 0?T:"Error"}: ${O}`,x&&(p+=` (${x})`),v?.stack&&(p+=`
16${v.stack}`)}else{var C;p=(C=u?.stack)!==null&&C!==void 0?C:""}const A=this.url.toString().length;return u?.name==="AbortError"||u?.code==="ABORT_ERR"?(g="",m="Request was aborted (timeout or manual cancellation)",A>this.urlLengthLimit&&(m+=`. Note: Your request URL is ${A} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):(v?.name==="HeadersOverflowError"||v?.code==="UND_ERR_HEADERS_OVERFLOW")&&(g="",m="HTTP headers exceeded server limits (typically 16KB)",A>this.urlLengthLimit&&(m+=`. Your request URL is ${A} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:!1,error:{message:`${(d=u?.
16name)!==null&&d!==void 0?d:"FetchError"}: ${u?.message}`,details:p,hint:m,code:g},data:null,count:null,status:0,statusText:""}})),c.then(t,e)}async processResponse(t){var e=this;let a=null,r=null,o=null,c=t.status,u=t.statusText;if(t.ok){var d,p;if(e.method!=="HEAD"){var m;const b=await t.text();b===""||(e.headers.get("Accept")==="text/csv"||e.headers.get("Accept")&&(!((m=e.headers.get("Accept"))===null||m===void 0)&&m.includes("application/vnd.pgrst.plan+text"))?r=b:r=JSON.parse(b))}const g=(d=e.headers.get("Prefer"))===null||d===void 0?void 0:d.match(/count=(exact|planned|estimated)/),v=(p=t.headers.get("content-range"))===null||p===void 0?void 0:p.split("/");g&&v&&v.length>1&&(o=parseInt(v[1])),e.isMaybeSingle&&Array.isArray(r)&&(r.length>1?(a={code:"PGRST116",details:`Results contain ${r.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},r=null,o=null,c=406,u="Not Acceptable"):r.length===1?r=r[0]:r=null)}else{const g=await t.text();try{a=JSON.parse(g),Array.isArray(a)&&t.status===404&&(r=[],a=null,c=200,u="OK")}catch{t.status===404&&g===""?(c=204,u="No Content"):a={message:g}}if(a&&e.shouldThrowOnError)throw new uR(a)}return{success:a===null,error:a,data:r,count:o,status:c,statusText:u}}returns(){return this}overrideTypes(){return this}},hR=class extends fR{select(t){let e=!1;const a=(t??"*").split("").map(r=>/\s/.test(r)&&!e?"":(r==='"'&&(e=!e),r)).join("");return this.url.searchParams.set("select",a),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=!0,nullsFirst:a,foreignTable:r,referencedTable:o=r}={}){const c=o?`${o}.order`:"order",u=this.url.searchParams.get(c);return this.url.searchParams.set(c,`${u?`${u},`:""}${t}.${e?"asc":"desc"}${a===void 0?"":a?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:a=e}={}){const r=typeof a>"u"?"limit":`${a}.limit`;return this.url.searchParams.set(r,`${t}`),this}range(t,e,{foreignTable:a,referencedTable:r=a}={}){const o=typeof r>"u"?"offset":`${r}.offset`,c=typeof r>"u"?"limit":`${r}.limit`;return this.url.searchParams.set(o,`${t}`),this.url.searchParams.set(c,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=!0,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=!1,verbose:e=!1,settings:a=!1,buffers:r=!1,wal:o=!1,format:c="text"}={}){var u;const d=[t?"analyze":null,e?"verbose":null,a?"settings":null,r?"buffers":null,o?"wal":null].filter(Boolean).join("|"),p=(u=this.headers.get("Accept"))!==null&&u!==void 0?u:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${c}; for="${p}"; options=${d};`),c==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}};const Hy=new RegExp("[,()]");var Lr=class extends hR{eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){const a=Array.from(new Set(e)).map(r=>typeof r=="string"&&Hy.test(r)?`"${r}"`:`${r}`).join(",");return this.url.searchParams.append(t,`in.(${a})`),this}notIn(t,e){const a=Array.from(new Set(e)).map(r=>typeof r=="string"&&Hy.test(r)?`"${r}"`:`${r}`).join(",");return this.url.searchParams.append(t,`not.in.(${a})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:a,type:r}={}){let o="";r==="plain"?o="pl":r==="phrase"?o="ph":r==="websearch"&&(o="w");const c=a===void 0?"":`(${a})`;return this.url.searchParams.append(t,`${o}fts${c}.${e}`),this}match(t){return Object.entries(t).filter(([e,a])=>
16a!==void 0).forEach(([e,a])=>{this.url.searchParams.append(e,`eq.${a}`)}),this}not(t,e,a){return this.url.searchParams.append(t,`not.${e}.${a}`),this}or(t,{foreignTable:e,referencedTable:a=e}={}){const r=a?`${a}.or`:"or";return this.url.searchParams.append(r,`(${t})`),this}filter(t,e,a){return this.url.searchParams.append(t,`${e}.${a}`),this}},pR=class{constructor(t,{headers:e={},schema:a,fetch:r,urlLengthLimit:o=8e3,retry:c}){this.url=t,this.headers=new Headers(e),this.schema=a,this.fetch=r,this.urlLengthLimit=o,this.retry=c}cloneRequestState(){return{url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){const{head:a=!1,count:r}=e??{},o=a?"HEAD":"GET";let c=!1;const u=(t??"*").split("").map(m=>/\s/.test(m)&&!c?"":(m==='"'&&(c=!c),m)).join(""),{url:d,headers:p}=this.cloneRequestState();return d.searchParams.set("select",u),r&&p.append("Prefer",`count=${r}`),new Lr({method:o,url:d,headers:p,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:a=!0}={}){var r;const o="POST",{url:c,headers:u}=this.cloneRequestState();if(e&&u.append("Prefer",`count=${e}`),a||u.append("Prefer","missing=default"),Array.isArray(t)){const d=t.reduce((p,m)=>p.concat(Object.keys(m)),[]);if(d.length>0){const p=[...new Set(d)].map(m=>`"${m}"`);c.searchParams.set("columns",p.join(","))}}return new Lr({method:o,url:c,headers:u,schema:this.schema,body:t,fetch:(r=this.fetch)!==null&&r!==void 0?r:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:a=!1,count:r,defaultToNull:o=!0}={}){var c;const u="POST",{url:d,headers:p}=this.cloneRequestState();if(p.append("Prefer",`resolution=${a?"ignore":"merge"}-duplicates`),e!==void 0&&d.searchParams.set("on_conflict",e),r&&p.append("Prefer",`count=${r}`),o||p.append("Prefer","missing=default"),Array.isArray(t)){const m=t.reduce((g,v)=>g.concat(Object.keys(v)),[]);if(m.length>0){const g=[...new Set(m)].map(v=>`"${v}"`);d.searchParams.set("columns",g.join(","))}}return new Lr({method:u,url:d,headers:p,schema:this.schema,body:t,fetch:(c=this.fetch)!==null&&c!==void 0?c:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var a;const r="PATCH",{url:o,headers:c}=this.cloneRequestState();return e&&c.append("Prefer",`count=${e}`),new Lr({method:r,url:o,headers:c,schema:this.schema,body:t,fetch:(a=this.fetch)!==null&&a!==void 0?a:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;const a="DELETE",{url:r,headers:o}=this.cloneRequestState();return t&&o.append("Prefer",`count=${t}`),new Lr({method:a,url:r,headers:o,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};function fo(t){"@babel/helpers - typeof";return fo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},fo(t)}function mR(t,e){if(fo(t)!="object"||!t)return t;var a=t[Symbol.toPrimitive];if(a!==void 0){var r=a.call(t,e);if(fo(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function gR(t){var e=mR(t,"string");return fo(e)=="symbol"?e:e+""}function vR(t,e,a){return(e=gR(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function Gy(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),a.push.apply(a,r)}return a}function ec(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?arguments[e]:{};e%2?Gy(Object(a),!0).forEach(function(r){vR(t,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):Gy(Object(a)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))})}return t}var yR=class kw{constructor(e,{headers:a={},schema:r,fetch:o,timeout:c,urlLengthLimit:u=8e3,retry:d}={}){this.url=e,this.headers=new Headers(a),this.schemaName=r,this.urlLengthLimit=u;const p=o??globalThis.fetch;c!==void 0&&c>0?this.fetch=(m,g)=>{const v=new AbortController,b=setTimeout(()=>v.abort(),c),w=g?.signal;if(w){if(w.aborted)return clearTimeout(b),p(m,g);const S=()=>{clearTimeout(b),v.abort()};return w.addEventListener("abort",S,{once:!0}),p(m,ec(ec({},g),{},{signal:v.signal})).finally(()=>{clearTimeout(b),w.removeEventListener("abort",S)})}return p(m,ec(ec({},g),{},{signal:v.signal})).finally(()=>clearTimeout(b))}:this.fetch=p,this.retry=d}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new pR(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new kw(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,a={},{head:r=!1,get:o=!1,count:c}={}){var u;let d;const p=new URL(`${this.url}/rpc/${e}`);let m;const g=w=>w!==null&&typeof w=="object"&&(!Array.isArray(w)||w.some(g)),v=r&&Object.values(a).some(g);v?(d="POST",m=a):r||o?(d=r?"HEAD":"GET",Object.entries(a).filter(([w,S])=>S!==void 0).map(([w,S])=>[w,Array.isArray(S)?`{${S.join(",")}}`:`${S}
16`]).forEach(([w,S])=>{p.searchParams.append(w,S)})):(d="POST",m=a);const b=new Headers(this.headers);return v?b.set("Prefer",c?`count=${c},return=minimal`:"return=minimal"):c&&b.set("Prefer",`count=${c}`),new Lr({method:d,url:p,headers:b,schema:this.schemaName,body:m,fetch:(u=this.fetch)!==null&&u!==void 0?u:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};class bR{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return{type:"native",wsConstructor:WebSocket};const a=globalThis;if(typeof globalThis<"u"&&typeof a.WebSocket<"u")return{type:"native",wsConstructor:a.WebSocket};const r=typeof global<"u"?global:void 0;if(r&&typeof r.WebSocket<"u")return{type:"native",wsConstructor:r.WebSocket};if(typeof globalThis<"u"&&typeof a.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return{type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&a.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return{type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};const o=globalThis.process;if(o){const c=o.versions;if(c&&c.node){const u=c.node,d=parseInt(u.replace(/^v/,"").split(".")[0]);return d>=22?typeof globalThis.WebSocket<"u"?{type:"native",wsConstructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${d} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${d} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
17import ws from "ws"
18new RealtimeClient(url, { transport: ws })`}}}return{type:"unsupported",error:"Unknown JavaScript runtime without WebSocket support.",workaround:"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation."}}static getWebSocketConstructor(){const e=this.detectEnvironment();if(e.wsConstructor)return e.wsConstructor;let a=e.error||"WebSocket not supported in this environment.";throw e.workaround&&(a+=`
19
20Suggested solution: ${e.workaround}`),new Error(a)}static isWebSocketSupported(){try{const e=this.detectEnvironment();return e.type==="native"||e.type==="ws"}catch{return!1}}}const wR="2.105.4",_R=`realtime-js/${wR}`,SR="1.0.0",Rw="2.0.0",TR=Rw,ER=1e4,CR=100,Ga={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},xw={close:"phx_close",error:"phx_error",join:"phx_join",leave:"phx_leave",access_token:"access_token"},Zf={connecting:"connecting",closing:"closing",closed:"closed"};class AR{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[]}encode(e,a){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return a(this._binaryEncodeUserBroadcastPush(e));let r=[e.join_ref,e.ref,e.topic,e.event,e.payload];return a(JSON.stringify(r))}_binaryEncodeUserBroadcastPush(e){var a;return this._isArrayBuffer((a=e.payload)===null||a===void 0?void 0:a.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var a,r;const o=(r=(a=e.payload)===null||a===void 0?void 0:a.payload)!==null&&r!==void 0?r:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,o)}_encodeJsonUserBroadcastPush(e){var a,r;const o=(r=(a=e.payload)===null||a===void 0?void 0:a.payload)!==null&&r!==void 0?r:{},u=new TextEncoder().encode(JSON.stringify(o)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,u)}_encodeUserBroadcastPush(e,a,r){var o,c;const u=e.topic,d=(o=e.ref)!==null&&o!==void 0?o:"",p=(c=e.join_ref)!==null&&c!==void 0?c:"",m=e.payload.event,g=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},v=Object.keys(g).length===0?"":JSON.stringify(g);if(p.length>255)throw new Error(`joinRef length ${p.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`ref length ${d.length} exceeds maximum of 255`);if(u.length>255)throw new Error(`topic length ${u.length} exceeds maximum of 255`);if(m.length>255)throw new Error(`userEvent length ${m.length} exceeds maximum of 255`);if(v.length>255)throw new Error(`metadata length ${v.length} exceeds maximum of 255`);const b=this.USER_BROADCAST_PUSH_META_LENGTH+p.length+d.length+u.length+m.length+v.length,w=new ArrayBuffer(this.HEADER_LENGTH+b);let S=new DataView(w),T=0;S.setUint8(T++,this.KINDS.userBroadcastPush),S.setUint8(T++,p.length),S.setUint8(T++,d.length),S.setUint8(T++,u.length),S.setUint8(T++,m.length),S.setUint8(T++,v.length),S.setUint8(T++,a),Array.from(p,A=>S.setUint8(T++,A.charCodeAt(0))),Array.from(d,A=>S.setUint8(T++,A.charCodeAt(0))),Array.from(u,A=>S.setUint8(T++,A.charCodeAt(0))),Array.from(m,A=>S.setUint8(T++,A.charCodeAt(0))),Array.from(v,A=>S.setUint8(T++,A.charCodeAt(0)));var C=new Uint8Array(w.byteLength+r.byteLength);return C.set(new Uint8Array(w),0),C.set(new Uint8Array(r),w.byteLength),C.buffer}decode(e,a){if(this._isArrayBuffer(e)){let r=this._binaryDecode(e);return a(r)}if(typeof e=="string"){const r=JSON.parse(e),[o,c,u,d,p]=r;return a({join_ref:o,ref:c,topic:u,event:d,payload:p})}return a({})}_binaryDecode(e){const a=new DataView(e),r=a.getUint8(0),o=new TextDecoder;if(r===this.KINDS.userBroadcast)return this._decodeUserBroadcast(e,a,o)}_decodeUserBroadcast(e,a,r){const o=a.getUint8(1),c=a.getUint8(2),u=a.getUint8(3),d=a.getUint8(4);let p=this.HEADER_LENGTH+4;const m=r.decode(e.slice(p,p+o));p=p+o;const g=r.decode(e.slice(p,p+c));p=p+c;const v=r.decode(e.slice(p,p+u));p=p+u;const b=e.slice(p,e.byteLength),w=d===this.JSON_ENCODING?JSON.parse(r.decode(b)):b,S={type:this.BROADCAST_EVENT,event:g,payload:w};return u>0&&(S.meta=JSON.parse(v)),{join_ref:null,ref:null,topic:m,event:this.BROADCAST_EVENT,payload:S}}_isArrayBuffer(e){var a;return e instanceof ArrayBuffer||((a=e?.constructor)===null||a===void 0?void 0:a.name)==="ArrayBuffer"}_pick(e,a){return!e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([r])=>a.includes(r)))}}var Ke;(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.t
20srange="tsrange",t.tstzrange="tstzrange"})(Ke||(Ke={}));const Vy=(t,e,a={})=>{var r;const o=(r=a.skipTypes)!==null&&r!==void 0?r:[];return e?Object.keys(e).reduce((c,u)=>(c[u]=kR(u,t,e,o),c),{}):{}},kR=(t,e,a,r)=>{const o=e.find(d=>d.name===t),c=o?.type,u=a[t];return c&&!r.includes(c)?Ow(c,u):Wf(u)},Ow=(t,e)=>{if(t.charAt(0)==="_"){const a=t.slice(1,t.length);return LR(e,a)}switch(t){case Ke.bool:return RR(e);case Ke.float4:case Ke.float8:case Ke.int2:case Ke.int4:case Ke.int8:case Ke.numeric:case Ke.oid:return xR(e);case Ke.json:case Ke.jsonb:return OR(e);case Ke.timestamp:return NR(e);case Ke.abstime:case Ke.date:case Ke.daterange:case Ke.int4range:case Ke.int8range:case Ke.money:case Ke.reltime:case Ke.text:case Ke.time:case Ke.timestamptz:case Ke.timetz:case Ke.tsrange:case Ke.tstzrange:return Wf(e);default:return Wf(e)}},Wf=t=>t,RR=t=>{switch(t){case"t":return!0;case"f":return!1;default:return t}},xR=t=>{if(typeof t=="string"){const e=parseFloat(t);if(!Number.isNaN(e))return e}return t},OR=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},LR=(t,e)=>{if(typeof t!="string")return t;const a=t.length-1,r=t[a];if(t[0]==="{"&&r==="}"){let c;const u=t.slice(1,a);try{c=JSON.parse("["+u+"]")}catch{c=u?u.split(","):[]}return c.map(d=>Ow(e,d))}return t},NR=t=>typeof t=="string"?t.replace(" ","T"):t,Lw=t=>{const e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};var eo=t=>typeof t=="function"?t:function(){return t},zR=typeof self<"u"?self:null,Nr=typeof window<"u"?window:null,Ln=zR||Nr||globalThis,qR="2.0.0",DR=1e4,jR=1e3,zn={connecting:0,open:1,closing:2,closed:3},Bt={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},sa={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},Xf={longpoll:"longpoll",websocket:"websocket"},PR={complete:4},eh="base64url.bearer.phx.",tc=class{constructor(t,e,a,r){this.channel=t,this.event=e,this.payload=a||function(){return{}},this.receivedResp=null,this.timeout=r,this.timeoutTimer=null,this.recHooks=[],this.sent=!1,this.ref=void 0}resend(t){this.timeout=t,this.reset(),this.send()}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}destroy(){this.cancelRefEvent(),this.cancelTimeout()}matchReceive({status:t,response:e,_ref:a}){this.recHooks.filter(r=>r.status===t).forEach(r=>r.callback(e))}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t)}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e})}},Nw=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}},MR=class{constructor(t,e,a){this.state=Bt.closed,this.topic=t,this.params=eo(e||{}),this.socket=a,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new tc(this,sa.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new Nw(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive("ok",()=>{this.state=Bt.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(r=>r.send()),this.pushBuffer=[]}),this.joinPush.receive("error",r=>{this.state=Bt.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,r),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=Bt.closed,this.socket.remove(this)}),this.onError(r=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,r),this.isJoining()&&this.joinPush.reset(),this.state=Bt.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new tc(this,sa.leave,eo({}),this.timeout).send(),this.state=Bt.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(sa.reply,(r,o)=>{this.trigger(this.replyEventName(o),r)})}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=!0,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Bt.closed,this.bindings=[]}onClose(t){this.on(sa.close,t)}onError(t){return this.on(sa.error,e=>t(e))}on(t,e){let a=this.bindingRef++;return this.bindings.push({event:t,ref:a,callback:e}),a}off(t,e){this.bindings=this.bindings.filter(a=>!(a.event===t&&(typeof e>"u"||e===a.ref)))}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,a=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let r=new tc(this,t,function(){return e},a);return this.canPush()?r.send():(r.startTimeout(),this.pushBuffer.push(r)),r}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=Bt.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(sa.close,"leave")},a=new tc(this,sa.leave,eo({}),t);return a.receive("ok",()=>e()).receive("timeout",()=>e()),a.send(),this.canPush()||a.trigger("ok",{}),a}onMessage(t,e,a){return e}filterBindings(t,e,a){return!0}isMember(t,e,a,r){return this.topic!==t?!1:r&&r!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:a,joinRef:r}),!1):!0}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=Bt.joining,this.joinPush.resend(t))}trigger(t,e,a,r){let o=this.onMessage(t,e,a,r);if(e&&!o)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let c=this.bindings.filter(u=>u.event===t&&this.filterBindings(u,e,a));for(let u=0;u<c.length;u++)c[u].callback(o,a,r||this.joinRef())}replyEventName(t){return`chan_reply_${t}`}isClosed(){return this.state===Bt.closed}isErrored(){return this.state===Bt.errored}isJoined(){return this.state===Bt.joined}isJoining(){return this.state===Bt.joining}isLeaving(){return this.state===Bt.leaving}},Ec=class{static request(t,e,a,r,o,c,u){if(Ln.XDomainRequest){let d=new Ln.XDomainRequest;return this.xdomainRequest(d,t,e,r,o,c,u)}else if(Ln.XMLHttpRequest){let d=new Ln.XMLHttpRequest;return this.xhrRequest(d,t,e,a,r,o,c,u)}else{if(Ln.fetch&&Ln.AbortController)return this.fetchRequest(t,e,a,r,o,c,u);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,a,r,o,c,u){let d={method:t,headers:a,body:r},p=null;return o&&(p=new AbortController,setTimeout(()=>p.abort(),o),d.signal=p.signal),Ln.fetch(e,d).then(m=>m.text()).then(m=>this.parseJSON(m)).then(m=>u&&u(m)).catch(m=>{m.name==="AbortError"&&c?c():u&&u(null)}),p}static xdomainRequest(t,e,a,r,o,c,u){return t.timeout=o,t.open(e,a),t.onload=()=>{let d=this.parseJSON(t.responseText);u&&u(d)},c&&(t.ontimeout=c),t.onprogress=()=>{},t.send(r),t}static xhrRequest(t,e,a,r,o,c,u,d){t.open(e,a,!0),t.timeout=c;
vendor: 2,301 bytes, line 20
20for(let[p,m]of Object.entries(r))t.setRequestHeader(p,m);return t.onerror=()=>d&&d(null),t.onreadystatechange=()=>{if(t.readyState===PR.complete&&d){let p=this.parseJSON(t.responseText);d(p)}},u&&(t.ontimeout=u),t.send(o),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let a=[];for(var r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;let o=e?`${e}[${r}]`:r,c=t[r];typeof c=="object"?a.push(this.serialize(c,o)):a.push(encodeURIComponent(o)+"="+encodeURIComponent(c))}return a.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let a=t.match(/\?/)?"&":"?";return`${t}${a}${this.serialize(e)}`}},UR=t=>{let e="",a=new Uint8Array(t),r=a.byteLength;for(let o=0;o<r;o++)e+=String.fromCharCode(a[o]);return btoa(e)},Ar=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(eh)&&(this.authToken=atob(e[1].slice(eh.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.reqs=new Set,this.awaitingBatchAck=!1,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=zn.connecting,setTimeout(()=>this.poll(),0)}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+Xf.websocket),"$1/"+Xf.longpoll)}endpointURL(){return Ec.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,a){this.close(t,e,a),this.readyState=zn.connecting}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",!1)}isActive(){return this.readyState===zn.open||this.readyState===zn.connecting}poll(){const t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:a,token:r,messages:o}=e;if(a===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",!1);return}this.token=r}else a=0;switch(a){case 200:o.forEach(c=>{setTimeout(()=>this.onmessage({data:c}),0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=zn.open,this.onopen({}),this.poll();break;
20case 403:this.onerror(403),this.close(1008,"forbidden",!1);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${a}`)}})}send(t){typeof t!="string"&&(t=UR(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null},0))}batchSend(t){this.awaitingBatchAck=!0,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
21`),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=!1,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",!1)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[])})}close(t,e,a){for(let o of this.reqs)o.abort();this.readyState=zn.closed;let r=Object.assign({code:1e3,reason:void 0,wasClean:!0},{code:t,reason:e,wasClean:a});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",r)):this.onclose(r)}ajax(t,e,a,r,o){let c,u=()=>{this.reqs.delete(c),r()};c=Ec.request(t,this.endpointURL(),e,a,this.timeout,u,d=>{this.reqs.delete(c),this.isActive()&&o(d)}),this.reqs.add(c)}},BR=class Qs{constructor(e,a={}){let r=a.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(r.state,o=>{let{onJoin:c,onLeave:u,onSync:d}=this.caller;this.joinRef=this.channel.joinRef(),this.state=Qs.syncState(this.state,o,c,u),this.pendingDiffs.forEach(p=>{this.state=Qs.syncDiff(this.state,p,c,u)}),this.pendingDiffs=[],d()}),this.channel.on(r.diff,o=>{let{onJoin:c,onLeave:u,onSync:d}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(o):(this.state=Qs.syncDiff(this.state,o,c,u),d())})}onJoin(e){this.caller.onJoin=e}onLeave(e){this.caller.onLeave=e}onSync(e){this.caller.onSync=e}list(e){return Qs.list(this.state,e)}inPendingSyncState(){return!this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,a,r,o){let c=this.clone(e),u={},d={};return this.map(c,(p,m)=>{a[p]||(d[p]=m)}),this.map(a,(p,m)=>{let g=c[p];if(g){let v=m.metas.map(T=>T.phx_ref),b=g.metas.map(T=>T.phx_ref),w=m.metas.filter(T=>b.indexOf(T.phx_ref)<0),S=g.metas.filter(T=>v.indexOf(T.phx_ref)<0);w.length>0&&(u[p]=m,u[p].metas=w),S.length>0&&(d[p]=this.clone(g),d[p].metas=S)}else u[p]=m}),this.syncDiff(c,{joins:u,leaves:d},r,o)}static syncDiff(e,a,r,o){let{joins:c,leaves:u}=this.clone(a);return r||(r=function(){}),o||(o=function(){}),this.map(c,(d,p)=>{let m=e[d];if(e[d]=this.clone(p),m){let g=e[d].metas.map(b=>b.phx_ref),v=m.metas.filter(b=>g.indexOf(b.phx_ref)<0);e[d].metas.unshift(...v)}r(d,m,p)}),this.map(u,(d,p)=>{let m=e[d];if(!m)return;let g=p.metas.map(v=>v.phx_ref);m.metas=m.metas.filter(v=>g.indexOf(v.phx_ref)<0),o(d,m,p),m.metas.length===0&&delete e[d]}),e}static list(e,a){return a||(a=function(r,o){return o}),this.map(e,(r,o)=>a(r,o))}static map(e,a){return Object.getOwnPropertyNames(e).map(r=>a(r,e[r]))}static clone(e){return JSON.parse(JSON.stringify(e))}},nc={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let a=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(a))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[a,r,o,c,u]=JSON.parse(t);return e({join_ref:a,ref:r,topic:o,event:c,payload:u})}},binaryEncode(t){let{join_ref:e,ref:a,event:r,topic:o,payload:c}=t,u=this.META_LENGTH+e.length+a.length+o.length+r.length,d=new ArrayBuffer(this.HEADER_LENGTH+u),p=new DataView(d),m=0;p.setUint8(m++,this.KINDS.push),p.setUint8(m++,e.length),p.setUint8(m++,a.length),p.setUint8(m++,o.length),p.setUint8(m++,r.length),Array.from(e,v=>p.setUint8(m++,v.charCodeAt(0))),Array.from(a,v=>p.setUint8(m++,v.charCodeAt(0))),Array.from(o,v=>p.setUint8(m++,v.charCodeAt(0))),Array.from(r,v=>p.setUint8(m++,v.charCodeAt(0)));var g=new Uint8Array(d.byteLength+c.byteLength);return g.set(new Uint8Array(d),0),g.set(new Uint8Array(c),d.byteLength),g.buffer},binaryDecode(t){let e=new DataView(t),a=e.getUint8(0),r=new TextDecoder;switch(a){case this.KINDS.push:return this.decodePush(t,e,r);case this.KINDS.reply:return this.decodeReply(t,e,r);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,r)}},decodePush(t,e,a){let r=e.getUint8(1),o=e.getUint8(2),c=e.getUint8(3),u=this.HEADER_LENGTH+this.META_LENGTH-1,d=a.decode(t.slice(u,u+r));u=u+r;let p=a.decode(t.slice(u,u+o));u=u+o;let m=a.decode(t.slice(u,u+c));u=u+c;let g=t.slice(u,t.byteLength);return{join_ref:d,ref:null,topic:p,event:m,payload:g}},decodeReply(t,e,a){let r=e.getUint8(1),o=e.getUint8(2),c=e.getUint8(3),u=e.getUint8(4),d=this.HEADER_LENGTH+this.META_LENGTH,p=a.decode(t.slice(d,d+r));d=d+r;let m=a.decode(t.slice(d,d+o));d=d+o;let g=a.decode(t.slice(d,d+c));d=d+c;let v=a.decode(t.slice(d,d+u));d=d+u;let b=t.slice(d,t.byteLength),w={status:v,response:b};return{join_ref:p,ref:m,topic:g,event:sa.reply,payload:w}},decodeBroadcast(t,e,a){let r=e.getUint8(1),o=e.getUint8(2),c=this.HEADER_LENGTH+2,u=a.decode(t.slice(c,c+r));c=c+r;
21let d=a.decode(t.slice(c,c+o));c=c+o;let p=t.slice(c,t.byteLength);return{join_ref:null,ref:null,topic:u,event:d,payload:p}}},IR=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||DR,this.transport=e.transport||Ln.WebSocket||Ar,this.conn=void 0,this.primaryPassedHealthCheck=!1,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null;let a=null;try{a=Ln&&Ln.sessionStorage}catch{}this.sessionStore=e.sessionStorage||a,this.establishedConnections=0,this.defaultEncoder=nc.encode.bind(nc),this.defaultDecoder=nc.decode.bind(nc),this.closeWasClean=!0,this.disconnecting=!1,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=!1,this.encode=void 0,this.decode=void 0,this.transport!==Ar?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;Nr&&Nr.addEventListener&&(Nr.addEventListener("pagehide",o=>{this.conn&&(this.disconnect(),r=this.connectClock)}),Nr.addEventListener("pageshow",o=>{r===this.connectClock&&(r=null,this.connect())}),Nr.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=!0:(this.pageHidden=!1,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()))})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??!0,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=o=>e.rejoinAfterMs?e.rejoinAfterMs(o):[1e3,2e3,5e3][o-1]||1e4,this.reconnectAfterMs=o=>e.reconnectAfterMs?e.reconnectAfterMs(o):[10,50,100,150,200,250,500,1e3,2e3][o-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(o,c,u)=>{console.log(`${o}: ${c}`,u)}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=eo(e.params||{}),this.endPoint=`${t}/${Xf.websocket}`,this.vsn=e.vsn||qR,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new Nw(()=>{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect()})},this.reconnectAfterMs),this.authToken=e.authToken}getLongPollTransport(){return Ar}replaceTransport(t){this.connectClock++,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Ec.appendParams(Ec.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,a){this.connectClock++,this.disconnecting=!0,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=!1,t&&t()},e,a)}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=eo(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==Ar?this.connectWithF
vendor: 4,353 bytes, line 21
21allback(Ar,this.longPollFallbackMs):this.transportConnect())}log(t,e,a){this.logger&&this.logger(t,e,a)}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t}ping(t){if(!this.isConnected())return!1;let e=this.makeRef(),a=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let r=this.onMessage(o=>{o.ref===e&&(this.off([r]),t(Date.now()-a))});return!0}transportName(t){return t===Ar?"LongPoll":t.name}transportConnect(){this.connectClock++,this.closeWasClean=!1;let t;this.authToken&&(t=["phoenix",`${eh}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e)}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e)}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let a=!1,r=!0,o,c,u=this.transportName(t),d=p=>{this.log("transport",`falling back to ${u}...`,p),this.off([o,c]),r=!1,this.replaceTransport(t),this.transportConnect()};if(this.getSession(`phx:fallback:${u}`))return d("memorized");this.fallbackTimer=setTimeout(d,e),c=this.onError(p=>{this.log("transport","error",p),r&&!a&&(clearTimeout(this.fallbackTimer),d(p))}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(a=!0,!r){let p=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${p}`,"true"),this.log("transport",`established ${p} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(d,e),this.ping(p=>{this.log("transport","connected to primary after",p),this.primaryPassedHealthCheck=!0,clearTimeout(this.fallbackTimer)})}),this.transportConnect()}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer)}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.disconnecting=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open")}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout")}catch(t){this.log("error","error in heartbeat callback",t)}this.triggerChanError(new Error("heartbeat timeout")),this.closeWasClean=!1,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),jR,"heartbeat timeout")}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(t,e,a){if(!this.conn)return t&&t();const r=this.conn;this.waitForBufferDone(r,()=>{e?r.close(e,a||""):r.close(),this.waitForSocketClosed(r,()=>{this.conn===r&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t()})})}waitForBufferDone(t,e,a=1){if(a===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,a+1)},150*a)}waitForSocketClosed(t,e,a=1){if(a===5||t.readyState===zn.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,a+1)},150*a)}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(t),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t)}onConnError(t){this.hasLogger()&&this.log("transport","error",t);let e=this.transport,a=this.establishedConnections;this.triggerStateCallbacks("error",t,e,a),(e===this.transport||a>0)&&this.triggerChanError(t)}
21triggerChanError(t){this.channels.forEach(e=>{e.isErrored()||e.isLeaving()||e.isClosed()||e.trigger(sa.error,t)})}connectionState(){switch(this.conn&&this.conn.readyState){case zn.connecting:return"connecting";case zn.open:return"open";case zn.closing:return"closing";default:return"closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t)}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([a])=>t.indexOf(a)===-1)}channel(t,e={}){let a=new MR(t,e,this);return this.channels.push(a),a}push(t){if(this.hasLogger()){let{topic:e,event:a,payload:r,ref:o,join_ref:c}=t;this.log("push",`${e} ${a} (${c}, ${o})`,r)}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)))}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected")}catch(t){this.log("error","error in heartbeat callback",t)}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent")}catch(t){this.log("error","error in heartbeat callback",t)}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs)}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}onConnMessage(t){this.decode(t.data,e=>{let{topic:a,event:r,payload:o,ref:c,join_ref:u}=e;if(c&&c===this.pendingHeartbeatRef){const d=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(o.status==="ok"?"ok":"error",d)}catch(p){this.log("error","error in heartbeat callback",p)}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}this.hasLogger()&&this.log("receive",`${o.status||""} ${a} ${r} ${c&&"("+c+")"||""}`.trim(),o);for(let d=0;d<this.channels.length;d++){const p=this.channels[d];p.isMember(a,r,o,u)&&p.trigger(r,o,c,u)}this.triggerStateCallbacks("message",e)})}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([a,r])=>{try{r(...e)}catch(o){this.log("error",`error in ${t} callback`,o)}})}catch(a){this.log("error",`error triggering ${t} callbacks`,a)}}leaveOpenTopic(t){let e=this.channels.find(a=>a.topic===t&&(a.isJoined()||a.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave())}};class to{constructor(e,a){const r=$R(a);this.presence=new BR(e.getChannel(),r),this.presence.onJoin((o,c,u)=>{const d=to.onJoinPayload(o,c,u);e.getChannel().trigger("presence",d)}),this.presence.onLeave((o,c,u)=>{const d=to.onLeavePayload(o,c,u);e.getChannel().trigger("presence",d)}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"})})}get state(){return to.transformState(this.presence.state)}static transformState(e){return e=FR(e),Object.getOwnPropertyNames(e).reduce((a,r)=>{const o=e[r];return a[r]=gc(o),a},{})}static onJoinPayload(e,a,r){const o=Ky(a),c=gc(r);return{event:"join",key:e,currentPresences:o,newPresences:c}}static onLeavePayload(e,a,r){const o=Ky(a),c=gc(r);return{event:"leave",key:e,currentPresences:o,leftPresences:c}}}function gc(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function FR(t){return JSON.parse(JSON.stringify(t))}function $R(t){return t?.events&&{events:t.events}}function Ky(t){return t?.metas?gc(t):[]}var Yy;(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave"})(Yy||(Yy={}));class HR{get state(){return this.presenceAdapter.state}constructor(e,a){this.channel=e,this.presenceAdapter=new to(this.channel.channelAdapter,a)}}function GR(t){if(t instanceof Error)return t;if(typeof t=="string")return new Error(t);if(t&&typeof t=="object"){const e=t;
21if(typeof e.code=="number"){const a=typeof e.reason=="string"&&e.reason?` (${e.reason})`:"";return new Error(`socket closed: ${e.code}${a}`,{cause:t})}return new Error("channel error: transport failure",{cause:t})}return new Error("channel error: connection lost")}class VR{constructor(e,a,r){const o=KR(r);this.channel=e.getSocket().channel(a,o),this.socket=e}get state(){return this.channel.state}set state(e){this.channel.state=e}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,a){return this.channel.on(e,a)}off(e,a){this.channel.off(e,a)}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown()}onClose(e){this.channel.onClose(e)}onError(e){return this.channel.onError(e)}push(e,a,r){let o;try{o=this.channel.push(e,a,r)}catch{throw new Error(`tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`)}if(this.channel.pushBuffer.length>CR){const c=this.channel.pushBuffer.shift();c.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${c.event}`,c.payload())}return o}updateJoinPayload(e){const a=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},a),e)}canPush(){return this.socket.isConnected()&&this.state===Ga.joined}isJoined(){return this.state===Ga.joined}isJoining(){return this.state===Ga.joining}isClosed(){return this.state===Ga.closed}isLeaving(){return this.state===Ga.leaving}updateFilterBindings(e){this.channel.filterBindings=e}updatePayloadTransform(e){this.channel.onMessage=e}getChannel(){return this.channel}}function KR(t){return{config:Object.assign({broadcast:{ack:!1,self:!1},presence:{key:"",enabled:!1},private:!1},t.config)}}var Qy;(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE"})(Qy||(Qy={}));var Ur;(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system"})(Ur||(Ur={}));var oa;(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR"})(oa||(oa={}));class no{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,a={config:{}},r){var o,c;if(this.topic=e,this.params=a,this.socket=r,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:!1,self:!1},presence:{key:"",enabled:!1},private:!1},a.config),this.channelAdapter=new VR(this.socket.socketAdapter,e,this.params),this.presence=new HR(this),this._onClose(()=>{this.socket._remove(this)}),this._updateFilterTransform(),this.broadcastEndpointURL=Lw(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||!1,!this.private&&(!((c=(o=this.params.config)===null||o===void 0?void 0:o.broadcast)===null||c===void 0)&&c.replay))throw new Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`)}subscribe(e,a=this.timeout){var r,o,c;if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){const{config:{broadcast:u,presence:d,private:p}}=this.params,m=(o=(r=this.bindings.postgres_changes)===null||r===void 0?void 0:r.map(w=>w.filter))!==null&&o!==void 0?o:[],g=!!this.bindings[Ur.PRESENCE]&&this.bindings[Ur.PRESENCE].length>0||((c=this.params.config.presence)===null||c===void 0?void 0:c.enabled)===!0,v={},b={broadcast:u,presence:Object.assign(Object.assign({},d),{enabled:g}),postgres_changes:m,private:p};this.socket.accessTokenValue&&(v.access_token=this.socket.accessTokenValue),this._onError(w=>{e?.(oa.CHANNEL_ERROR,GR(w))}),this._onClose(()=>e?.(oa.CLOSED)),this.updateJoinPayload(Object.assign({config:b},v)),this._updateFilterMessage(),this.channelAdapter.subscribe(a).receive("ok",async({postgres_changes:w})=>{if(this.socket._isManualToken()||this.socket.setAuth(),w===void 0){e?.(oa.SUBSCRIBED);return}this._updatePostgresBindings(w,e)}).receive("error",w=>{this.state=Ga.errored;const S=Object.values(w).join(", ")||"error";e?.(oa.CHANNEL_ERROR,new Error(S,{cause:w}))}).receive("timeout",()=>{e?.(oa.TIMED_OUT)})}return this}_updatePostgresBindings(e,a){var r;const o=this.bindings.postgres_changes,c=(r=o?.length)!==null&&r!==void 0?r:0,u=[];for(let d=0;d<c;d++){const p=o[d],{filter:{event:m,schema:g,table:v,filter:b}}=p,w=e&&e[d];if(w&&w.event===m&&no.isFilterValueEqual(w.schema,g)&&no.isFilterValueEqual(w.table,v)&&no.isFilterValueEqual(w.filter,b))u.push(Object.assign(Object.assign({},p),{id:w.id}));else{this.unsubscribe(),this.state=Ga.errored,a?.(oa.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=u,this.state!=Ga.errored&&a&&a(oa.SUBSCRIBED)}presenceState(){return this.presence.state}async track(e,a={}){return await this.send({type:"presence",event:"track",payload:e},a.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,a,r){const o=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),c=e===Ur.PRESENCE||e===Ur.POSTGRES_CHANGES;if(o&&c)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,a,r)}async httpSend(e,a,r={}){var o;if(a==null)return Promise.reject(new Error("Payload is required for httpSend()"));const c={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(c.Authorization=`Bearer ${this.socket.accessTokenValue}`);const u={method:"POST",headers:c,body:JSON.stringify({messages:[{topic:this.subTopic,event:e,payload:a,private:this.private}]})},d=await this._fetchWithTimeout(this.broadcastEndpointURL,u,(o=r.timeout)!==null&&o!==void 0?o:this.timeout);if(d.status===202)return{success:!0};let p=d.statusText;
21try{const m=await d.json();p=m.error||m.message||p}catch{}return Promise.reject(new Error(p))}async send(e,a={}){var r,o;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.");const{event:c,payload:u}=e,d={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(d.Authorization=`Bearer ${this.socket.accessTokenValue}`);const p={method:"POST",headers:d,body:JSON.stringify({messages:[{topic:this.subTopic,event:c,payload:u,private:this.private}]})};try{const m=await this._fetchWithTimeout(this.broadcastEndpointURL,p,(r=a.timeout)!==null&&r!==void 0?r:this.timeout);return await((o=m.body)===null||o===void 0?void 0:o.cancel()),m.ok?"ok":"error"}catch(m){return m instanceof Error&&m.name==="AbortError"?"timed out":"error"}}else return new Promise(c=>{var u,d,p;const m=this.channelAdapter.push(e.type,e,a.timeout||this.timeout);e.type==="broadcast"&&!(!((p=(d=(u=this.params)===null||u===void 0?void 0:u.config)===null||d===void 0?void 0:d.broadcast)===null||p===void 0)&&p.ack)&&c("ok"),m.receive("ok",()=>c("ok")),m.receive("error",()=>c("error")),m.receive("timeout",()=>c("timed out"))})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e)}async unsubscribe(e=this.timeout){return new Promise(a=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>a("ok")).receive("timeout",()=>a("timed out")).receive("error",()=>a("error"))})}teardown(){this.channelAdapter.teardown()}async _fetchWithTimeout(e,a,r){const o=new AbortController,c=setTimeout(()=>o.abort(),r),u=await this.socket.fetch(e,Object.assign(Object.assign({},a),{signal:o.signal}));return clearTimeout(c),u}_on(e,a,r){const o=e.toLocaleLowerCase(),c=this.channelAdapter.on(e,r),u={type:o,filter:a,callback:r,ref:c};return this.bindings[o]?this.bindings[o].push(u):this.bindings[o]=[u],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e)}_onError(e){this.channelAdapter.onError(e)}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,a,r)=>{var o,c,u,d,p,m,g;const v=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(v,r))return!1;const b=(o=this.bindings[v])===null||o===void 0?void 0:o.find(w=>w.ref===e.ref);if(!b)return!0;if(["broadcast","presence","postgres_changes"].includes(v))if("id"in b){const w=b.id,S=(c=b.filter)===null||c===void 0?void 0:c.event;return w&&((u=a.ids)===null||u===void 0?void 0:u.includes(w))&&(S==="*"||S?.toLocaleLowerCase()===((d=a.data)===null||d===void 0?void 0:d.type.toLocaleLowerCase()))}else{const w=(m=(p=b?.filter)===null||p===void 0?void 0:p.event)===null||m===void 0?void 0:m.toLocaleLowerCase();return w==="*"||w===((g=a?.event)===null||g===void 0?void 0:g.toLocaleLowerCase())}else return b.type.toLocaleLowerCase()===v})}_notThisChannelEvent(e,a){const{close:r,error:o,leave:c,join:u}=xw;return a&&[r,o,c,u].includes(e)&&a!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,a,r)=>{if(typeof a=="object"&&"ids"in a){const o=a.data,{schema:c,table:u,commit_timestamp:d,type:p,errors:m}=o;return Object.assign(Object.assign({},{schema:c,table:u,commit_timestamp:d,eventType:p,new:{},old:{},errors:m}),this._getPayloadRecords(o))}return a})}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(const a in e.bindings)for(const r of e.bindings[a])this._on(r.type,r.filter,r.callback)}static isFilterValueEqual(e,a){return(e??void 0)===(a??void 0)}_getPayloadRecords(e){const a={new:{},old:{}};return(e.type==="INSERT"||e.type==="UPDATE")&&(a.new=Vy(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(a.old=Vy(e.columns,e.old_record)),a}}class YR{constructor(e,a){this.socket=new IR(e,a)}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect()}disconnect(e,a,r,o=1e4){return new Promise(c=>{setTimeout(()=>c("timeout"),o),this.socket.disconnect(()=>{e(),c("ok")},a,r)})}push(e){this.socket.push(e)}log(e,a,r){this.socket.log(e,a,r)}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e)}onClose(e){this.socket.onClose(e)}onError(e){this.socket.onError(e)}onMessage(e){this.socket.onMessage(e)}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==Zf.connecting}isDisconnecting(){return this.socket.connectionState()==Zf.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat()}getSocket(){return this.socket}}const Jy={HEARTBEAT_INTERVAL:25e3},QR=[1e3,2e3,5e3,1e4],JR=1e4;function ZR(){const t=new Map;return{get length(){return t.size},clear(){t.clear()},getItem(e){return t.has(e)?t.get(e):null},key(e){var a;return(a=Array.from(t.keys())[e])!==null&&a!==void 0?a:null},removeItem(e){t.delete(e)},setItem(e,a){t.set(e,String(a))}}}function WR(){try{if(typeof globalThis<"u"&&globalThis.sessionStorage)return globalThis.sessionStorage}catch{}return ZR()}const XR=`
22  addEventListener("message", (e) => {
23    if (e.data.event === "start") {
24      setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
25    }
26  });`;class e2{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,a){var r;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={}
26,this.ref=0,this.serializer=new AR,this._manuallySetToken=!1,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._pendingDisconnectTimer=null,this._disconnectOnEmptyChannelsAfterMs=0,this._resolveFetch=c=>c?(...u)=>c(...u):(...u)=>fetch(...u),!(!((r=a?.params)===null||r===void 0)&&r.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=a.params.apikey;const o=this._initializeOptions(a);this.socketAdapter=new YR(e,o),this.httpEndpoint=Lw(e),this.fetch=this._resolveFetch(a?.fetch)}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect()}catch(e){const a=e.message;throw a.includes("Node.js")?new Error(`${a}
27
28To use Realtime in Node.js, you need to provide a WebSocket implementation:
29
30Option 1: Use Node.js 22+ which has native WebSocket support
31Option 2: Install and provide the "ws" package:
32
33  npm install ws
34
35  import ws from "ws"
36  const client = new RealtimeClient(url, {
37    ...options,
38    transport: ws
39  })`):new Error(`WebSocket not available: ${a}`)}this._handleNodeJsRaceCondition()}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,a){return this._cancelPendingDisconnect(),this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker()},e,a)}getChannels(){return this.channels}async removeChannel(e){const a=await e.unsubscribe();return a==="ok"&&e.teardown(),a}async removeAllChannels(){const e=this.channels.map(async r=>{const o=await r.unsubscribe();return r.teardown(),o}),a=await Promise.all(e);return await this.disconnect(),a}log(e,a,r){this.socketAdapter.log(e,a,r)}connectionState(){return this.socketAdapter.connectionState()||Zf.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,a={config:{}}){const r=`realtime:${e}`,o=this.getChannels().find(c=>c.topic===r);if(o)return o;{const c=new no(`realtime:${e}`,a,this);return this._cancelPendingDisconnect(),this.channels.push(c),c}}push(e){this.socketAdapter.push(e)}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise}finally{this._authPromise=null}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat()}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e)}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(a=>a.topic!==e.topic),this.channels.length===0&&(this.log("transport","no channels remaining, scheduling disconnect"),this._schedulePendingDisconnect())}_schedulePendingDisconnect(){if(this._cancelPendingDisconnect(),this._disconnectOnEmptyChannelsAfterMs===0){this.log("transport","disconnecting immediately - no channels"),this.disconnect();return}
39this._pendingDisconnectTimer=setTimeout(()=>{this._pendingDisconnectTimer=null,this.channels.length===0&&(this.log("transport","deferred disconnect fired - no channels, disconnecting"),this.disconnect())},this._disconnectOnEmptyChannelsAfterMs),this.log("transport",`deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`)}_cancelPendingDisconnect(){this._pendingDisconnectTimer!==null&&(this.log("transport","pending disconnect cancelled - channel activity detected"),clearTimeout(this._pendingDisconnectTimer),this._pendingDisconnectTimer=null)}async _performAuth(e=null){let a,r=!1;if(e)a=e,r=!0;else if(this.accessToken)try{a=await this.accessToken()}catch(o){this.log("error","Error fetching access token from callback",o),a=this.accessTokenValue}else a=this.accessTokenValue;r?this._manuallySetToken=!0:this.accessToken&&(this._manuallySetToken=!1),this.accessTokenValue!=a&&(this.accessTokenValue=a,this.channels.forEach(o=>{const c={access_token:a,version:_R};a&&o.updateJoinPayload(c),o.joinedOnce&&o.channelAdapter.isJoined()&&o.channelAdapter.push(xw.access_token,{access_token:a})}))}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(a=>{this.log("error",`Error setting auth in ${e}`,a)})}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(a=>{this.log("error","error waiting for auth on connect",a)}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat()}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker()}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null)})}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen()}_wrapHeartbeatCallback(e){return(a,r)=>{a=="sent"&&this._setAuthSafely(),e&&e(a,r)}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");const e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=a=>{this.log("worker","worker error",a.message),this._terminateWorker(),this.disconnect()},this.workerRef.onmessage=a=>{a.data.event==="keepAlive"&&this.sendHeartbeat()},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs})}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0)}_workerObjectUrl(e){let a;if(e)a=e;else{const r=new Blob([XR],{type:"application/javascript"});a=URL.createObjectURL(r)}return a}_initializeOptions(e){var a,r,o,c,u,d,p,m,g,v,b,w;this.worker=(a=e?.worker)!==null&&a!==void 0?a:!1,this.accessToken=(r=e?.accessToken)!==null&&r!==void 0?r:null;const S={};S.timeout=(o=e?.timeout)!==null&&o!==void 0?o:ER,S.heartbeatIntervalMs=(c=e?.heartbeatIntervalMs)!==null&&c!==void 0?c:Jy.HEARTBEAT_INTERVAL,this._disconnectOnEmptyChannelsAfterMs=(u=e?.disconnectOnEmptyChannelsAfterMs)!==null&&u!==void 0?u:2*((d=e?.heartbeatIntervalMs)!==null&&d!==void 0?d:Jy.HEARTBEAT_INTERVAL),S.transport=(p=e?.transport)!==null&&p!==void 0?p:bR.getWebSocketConstructor(),S.params=e?.params,S.logger=e?.logger,S.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),S.sessionStorage=(m=e?.sessionStorage)!==null&&m!==void 0?m:WR(),S.reconnectAfterMs=(g=e?.reconnectAfterMs)!==null&&g!==void 0?g:(O=>QR[O-1]||JR);let T,C;const A=(v=e?.vsn)!==null&&v!==void 0?v:TR;switch(A){case SR:T=(O,x)=>x(JSON.stringify(O)),C=(O,x)=>x(JSON.parse(O));break;case Rw:T=this.serializer.encode.bind(this.serializer),C=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${S.vsn}`)}if(S.vsn=A,S.encode=(b=e?.encode)!==null&&b!==void 0?b:T,S.decode=(w=e?.decode)!==null&&w!==void 0?w:C,S.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,S.params=Object.assign(Object.assign({},S.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e?.workerUrl,S.autoSendHeartbeat=!this.worker}return S}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect()}}
39var ho=class extends Error{constructor(t,e){super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&e.icebergType?.includes("CommitState")===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function t2(t,e,a){const r=new URL(e,t);if(a)for(const[o,c]of Object.entries(a))c!==void 0&&r.searchParams.set(o,c);return r.toString()}async function n2(t){return!t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function a2(t){const e=t.fetchImpl??globalThis.fetch;return{async request({method:a,path:r,query:o,body:c,headers:u}){const d=t2(t.baseUrl,r,o),p=await n2(t.auth),m=await e(d,{method:a,headers:{...c?{"Content-Type":"application/json"}:{},...p,...u},body:c?JSON.stringify(c):void 0}),g=await m.text(),v=(m.headers.get("content-type")||"").includes("application/json"),b=v&&g?JSON.parse(g):g;if(!m.ok){const w=v?b:void 0,S=w?.error;throw new ho(S?.message??`Request failed with status ${m.status}`,{status:m.status,icebergType:S?.type,icebergCode:S?.code,details:w})}return{status:m.status,headers:m.headers,data:b}}}}function ac(t){return t.join("�")}var i2=class{constructor(t,e=""){this.client=t,this.prefix=e}async listNamespaces(t){const e=t?{parent:ac(t.namespace)}:void 0;return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(r=>({namespace:r}))}async createNamespace(t,e){const a={namespace:t.namespace,properties:e?.properties};return(await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:a})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${ac(t.namespace)}`})}async loadNamespaceMetadata(t){return{properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${ac(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${ac(t.namespace)}`}),!0}catch(e){if(e instanceof ho&&e.status===404)return!1;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(a){if(a instanceof ho&&a.status===409)return;throw a}}};function kr(t){return t.join("�")}var r2=class{constructor(t,e="",a){this.client=t,this.prefix=e,this.accessDelegation=a}async listTables(t){return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){const a={};return this.accessDelegation&&(a["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables`,body:e,headers:a})).data.metadata}async updateTable(t,e){const a=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables/${t.name}`,body:e});return{"metadata-location":a.data["metadata-location"],metadata:a.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables/${t.name}`,query:{purgeRequested:String(e?.purge??!1)}})}async loadTable(t){const e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){const e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${kr(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(a){if(a instanceof ho&&a.status===404)return!1;throw a}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(a){if(a instanceof ho&&a.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw a}}},s2=class{constructor(t){let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);const a=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=a2({baseUrl:a,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=t.accessDelegation?.join(","),this.namespaceOps=new i2(this.client,e),this.tableOps=new r2(this.client,e,this.accessDelegation)}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t)}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}
39async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e)}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};function po(t){"@babel/helpers - typeof";return po=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},po(t)}function o2(t,e){if(po(t)!="object"||!t)return t;var a=t[Symbol.toPrimitive];if(a!==void 0){var r=a.call(t,e);if(po(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function l2(t){var e=o2(t,"string");return po(e)=="symbol"?e:e+""}function c2(t,e,a){return(e=l2(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function Zy(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),a.push.apply(a,r)}return a}function me(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?arguments[e]:{};e%2?Zy(Object(a),!0).forEach(function(r){c2(t,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):Zy(Object(a)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))})}return t}var Gc=class extends Error{constructor(t,e="storage",a,r){super(t),this.__isStorageError=!0,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=a,this.statusCode=r}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};function Vc(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}var th=class extends Gc{constructor(t,e,a,r="storage"){super(t,r,e,a),this.name=r==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=a}toJSON(){return me({},super.toJSON())}},zw=class extends Gc{constructor(t,e,a="storage"){super(t,a),this.name=a==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e}};function Cc(t,e,a){const r=me({},t),o=e.toLowerCase();for(const c of Object.keys(r))c.toLowerCase()===o&&delete r[c];return r[o]=a,r}function u2(t){const e={};for(const[a,r]of Object.entries(t))e[a.toLowerCase()]=r;return e}const d2=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),f2=t=>{if(typeof t!="object"||t===null)return!1;const e=Object.getPrototypeOf(t);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},nh=t=>{if(Array.isArray(t))return t.map(a=>nh(a));if(typeof t=="function"||t!==Object(t))return t;const e={};return Object.entries(t).forEach(([a,r])=>{const o=a.replace(/([-_][a-z])/gi,c=>c.toUpperCase().replace(/[-_]/g,""));e[o]=nh(r)}),e},h2=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?!1:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),Wy=t=>{if(typeof t=="object"&&t!==null){const e=t;if(typeof e.msg=="string")return e.msg;if(typeof e.message=="string")return e.message;if(typeof e.error_description=="string")return e.error_description;if(typeof e.error=="string")return e.error;if(typeof e.error=="object"&&e.error!==null){const a=e.error;if(typeof a.message=="string")return a.message}}return JSON.stringify(t)},p2=async(t,e,a,r)=>{if(t!==null&&typeof t=="object"&&"json"in t&&typeof t.json=="function"){const o=t;let c=parseInt(String(o.status),10);Number.isFinite(c)||(c=500),o.json().then(u=>{const d=u?.statusCode||u?.code||c+"";e(new th(Wy(u),c,d,r))}).catch(()=>{const u=c+"";e(new th(o.statusText||`HTTP ${c} error`,c,u,r))})}else e(new zw(Wy(t),t,r))},m2=(t,e,a,r)=>{const o={method:t,headers:e?.headers||{}};if(t==="GET"||t==="HEAD"||!r)return me(me({},o),a);if(f2(r)){var c;const u=e?.headers||{};let d;for(const[p,m]of Object.entries(u))p.toLowerCase()==="content-type"&&(d=m);o.headers=Cc(u,"Content-Type",(c=d)!==null&&c!==void 0?c:"application/json"),o.body=JSON.stringify(r)}else o.body=r;return e?.duplex&&(o.duplex=e.duplex),me(me({},o),a)};async function Ys(t,e,a,r,o,c,u){return new Promise((d,p)=>{t(a,m2(e,r,o,c)).then(m=>{if(!m.ok)throw m;if(r?.noResolveJson)return m;if(u==="vectors"){const g=m.headers.get("content-type");if(m.headers.get("content-length")==="0"||m.status===204)return{};if(!g||!g.includes("application/json"))return{}}return m.json()}).then(m=>d(m)).catch(m=>p2(m,p,r,u))})}function qw(t="storage"){return{get:async(e,a,r,o)=>Ys(e,"GET",a,r,o,void 0,t),post:async(e,a,r,o,c)=>Ys(e,"POST",a,o,c,r,t),put:async(e,a,r,o,c)=>Ys(e,"PUT",a,o,c,r,t),head:async(e,a,r,o)=>Ys(e,"HEAD",a,me(me({},r),{},{noResolveJson:!0}),o,void 0,t),remove:async(e,a,r,o,c)=>Ys(e,"DELETE",a,o,c,r,t)}}const g2=qw("storage"),{get:mo,post:bn,put:ah,head:v2,remove:Bh}=g2,Zt=qw("vectors");var Qr=class{constructor(t,e={},a,r="storage"){this.shouldThrowOnError=!1,this.url=t,this.headers=u2(e),this.fetch=d2(a),this.namespace=r}throwOnError(){return this.shouldThrowOnError=!0,this}setHeader(t,e){return this.headers=Cc(this.headers,t,e),this}async handleOperation(t){var e=this;try{return{data:await t(),error:null}}catch(a){if(e.shouldThrowOnError)throw a;if(Vc(a))return{data:null,error:a};throw a}}},y2=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e}then(t,e){return this.execute().then(t,e)}async execute(){var t=this;try{return{data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Vc(e))return{data:null,error:e};throw e}}};let Dw;Dw=Symbol.toStringTag;var b2=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[Dw]="BlobDownloadBuilder",this.promise=null}asStream(){return new y2(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return{data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Vc(e))return{data:null,error:e};throw e}}};const w2={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},Xy={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:!1};var _2=class extends Qr{constructor(t,e={},a,r){super(t,e,r,"storage"),this.bucketId=a}async uploadOrUpdate(t,e,a,r){var o=this;return o.handleOperation(async()=>{let c;const u=me(me({},Xy),r);let d=me(me({},o.headers),t==="POST"&&{"x-upsert":String(u.upsert)});const p=u.metadata;
39if(typeof Blob<"u"&&a instanceof Blob?(c=new FormData,c.append("cacheControl",u.cacheControl),p&&c.append("metadata",o.encodeMetadata(p)),c.append("",a)):typeof FormData<"u"&&a instanceof FormData?(c=a,c.has("cacheControl")||c.append("cacheControl",u.cacheControl),p&&!c.has("metadata")&&c.append("metadata",o.encodeMetadata(p))):(c=a,d["cache-control"]=`max-age=${u.cacheControl}`,d["content-type"]=u.contentType,p&&(d["x-metadata"]=o.toBase64(o.encodeMetadata(p))),(typeof ReadableStream<"u"&&c instanceof ReadableStream||c&&typeof c=="object"&&"pipe"in c&&typeof c.pipe=="function")&&!u.duplex&&(u.duplex="half")),r?.headers)for(const[b,w]of Object.entries(r.headers))d=Cc(d,b,w);const m=o._removeEmptyFolders(e),g=o._getFinalPath(m),v=await(t=="PUT"?ah:bn)(o.fetch,`${o.url}/object/${g}`,c,me({headers:d},u?.duplex?{duplex:u.duplex}:{}));return{path:m,id:v.Id,fullPath:v.Key}})}async upload(t,e,a){return this.uploadOrUpdate("POST",t,e,a)}async uploadToSignedUrl(t,e,a,r){var o=this;const c=o._removeEmptyFolders(t),u=o._getFinalPath(c),d=new URL(o.url+`/object/upload/sign/${u}`);return d.searchParams.set("token",e),o.handleOperation(async()=>{let p;const m=me(me({},Xy),r);let g=me(me({},o.headers),{"x-upsert":String(m.upsert)});const v=m.metadata;if(typeof Blob<"u"&&a instanceof Blob?(p=new FormData,p.append("cacheControl",m.cacheControl),v&&p.append("metadata",o.encodeMetadata(v)),p.append("",a)):typeof FormData<"u"&&a instanceof FormData?(p=a,p.has("cacheControl")||p.append("cacheControl",m.cacheControl),v&&!p.has("metadata")&&p.append("metadata",o.encodeMetadata(v))):(p=a,g["cache-control"]=`max-age=${m.cacheControl}`,g["content-type"]=m.contentType,v&&(g["x-metadata"]=o.toBase64(o.encodeMetadata(v))),(typeof ReadableStream<"u"&&p instanceof ReadableStream||p&&typeof p=="object"&&"pipe"in p&&typeof p.pipe=="function")&&!m.duplex&&(m.duplex="half")),r?.headers)for(const[b,w]of Object.entries(r.headers))g=Cc(g,b,w);return{path:c,fullPath:(await ah(o.fetch,d.toString(),p,me({headers:g},m?.duplex?{duplex:m.duplex}:{}))).Key}})}async createSignedUploadUrl(t,e){var a=this;return a.handleOperation(async()=>{let r=a._getFinalPath(t);const o=me({},a.headers);e?.upsert&&(o["x-upsert"]="true");const c=await bn(a.fetch,`${a.url}/object/upload/sign/${r}`,{},{headers:o}),u=new URL(a.url+c.url),d=u.searchParams.get("token");if(!d)throw new Gc("No token returned by API");return{signedUrl:u.toString(),path:t,token:d}})}async update(t,e,a){return this.uploadOrUpdate("PUT",t,e,a)}async move(t,e,a){var r=this;return r.handleOperation(async()=>await bn(r.fetch,`${r.url}/object/move`,{bucketId:r.bucketId,sourceKey:t,destinationKey:e,destinationBucket:a?.destinationBucket},{headers:r.headers}))}async copy(t,e,a){var r=this;return r.handleOperation(async()=>({path:(await bn(r.fetch,`${r.url}/object/copy`,{bucketId:r.bucketId,sourceKey:t,destinationKey:e,destinationBucket:a?.destinationBucket},{headers:r.headers})).Key}))}async createSignedUrl(t,e,a){var r=this;return r.handleOperation(async()=>{let o=r._getFinalPath(t);const c=typeof a?.transform=="object"&&a.transform!==null&&Object.keys(a.transform).length>0;let u=await bn(r.fetch,`${r.url}/object/sign/${o}`,me({expiresIn:e},c?{transform:a.transform}:{}),{headers:r.headers});const d=new URLSearchParams;a?.download&&d.set("download",a.download===!0?"":a.download),a?.cacheNonce!=null&&d.set("cacheNonce",String(a.cacheNonce));const p=d.toString();return{signedUrl:encodeURI(`${r.url}${u.signedURL}${p?`&${p}`:""}`)}})}async createSignedUrls(t,e,a){var r=this;return r.handleOperation(async()=>{const o=await bn(r.fetch,`${r.url}/object/sign/${r.bucketId}`,{expiresIn:e,paths:t},{headers:r.headers}),c=new URLSearchParams;a?.download&&c.set("download",a.download===!0?"":a.download),a?.cacheNonce!=null&&c.set("cacheNonce",String(a.cacheNonce));const u=c.toString();return o.map(d=>me(me({},d),{},{signedUrl:d.signedURL?encodeURI(`${r.url}${d.signedURL}${u?`&${u}`:""}`):null}))})}download(t,e,a){const r=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",o=new URLSearchParams;e?.transform&&this.applyTransformOptsToQuery(o,e.transform),e?.cacheNonce!=null&&o.set("cacheNonce",String(e.cacheNonce));const c=o.toString(),u=this._getFinalPath(t),d=()=>mo(this.fetch,`${this.url}/${r}/${u}${c?`?${c}`:""}`,{headers:this.headers,noResolveJson:!0},a);return new b2(d,this.shouldThrowOnError)}async info(t){var e=this;const a=e._getFinalPath(t);return e.handleOperation(async()=>nh(await mo(e.fetch,`${e.url}/object/info/${a}`,{headers:e.headers})))}async exists(t){var e=this;const a=e._getFinalPath(t);try{return await v2(e.fetch,`${e.url}/object/${a}`,{headers:e.headers}),{data:!0,error:null}}catch(o){if(e.shouldThrowOnError)throw o;if(Vc(o)){var r;const c=o instanceof th?o.status:o instanceof zw?(r=o.originalError)===null||r===void 0?void 0:r.status:void 0;if(c!==void 0&&[400,404].includes(c))return{data:!1,error:o}}throw o}}getPublicUrl(t,e){const a=this._getFinalPath(t),r=new URLSearchParams;e?.download&&r.set("download",e.download===!0?"":e.download),e?.transform&&this.applyTransformOptsToQuery(r,e.transform),e?.cacheNonce!=null&&r.set("cacheNonce",String(e.cacheNonce));const o=r.toString(),c=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return{data:{publicUrl:encodeURI(`${this.url}/${c}/public/${a}`)+(o?`?${o}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await Bh(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async list(t,e,a){var r=this;return r.handleOperation(async()=>{const o=me(me(me({},w2),e),{},{prefix:t||""});return await bn(r.fetch,`${r.url}/object/list/${r.bucketId}`,o,{headers:r.headers},a)})}async listV2(t,e){var a=this;return a.handleOperation(async()=>{const r=me({},t);return await bn(a.fetch,`${a.url}/object/list-v2/${a.bucketId}`,r,{headers:a.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return`${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("qual
39ity",e.quality.toString()),t}};const S2="2.105.4",ko={"X-Client-Info":`storage-js/${S2}`};var T2=class extends Qr{constructor(t,e={},a,r){const o=new URL(t);r?.useNewHostname&&/supabase\.(co|in|red)$/.test(o.hostname)&&!o.hostname.includes("storage.supabase.")&&(o.hostname=o.hostname.replace("supabase.","storage.supabase."));const c=o.href.replace(/\/$/,""),u=me(me({},ko),e);super(c,u,a,"storage")}async listBuckets(t){var e=this;return e.handleOperation(async()=>{const a=e.listBucketOptionsToQueryString(t);return await mo(e.fetch,`${e.url}/bucket${a}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await mo(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:!1}){var a=this;return a.handleOperation(async()=>await bn(a.fetch,`${a.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:a.headers}))}async updateBucket(t,e){var a=this;return a.handleOperation(async()=>await ah(a.fetch,`${a.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:a.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await bn(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Bh(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}listBucketOptionsToQueryString(t){const e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},E2=class extends Qr{constructor(t,e={},a){const r=t.replace(/\/$/,""),o=me(me({},ko),e);super(r,o,a,"storage")}async createBucket(t){var e=this;return e.handleOperation(async()=>await bn(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{const a=new URLSearchParams;t?.limit!==void 0&&a.set("limit",t.limit.toString()),t?.offset!==void 0&&a.set("offset",t.offset.toString()),t?.sortColumn&&a.set("sortColumn",t.sortColumn),t?.sortOrder&&a.set("sortOrder",t.sortOrder),t?.search&&a.set("search",t.search);const r=a.toString(),o=r?`${e.url}/bucket?${r}`:`${e.url}/bucket`;return await mo(e.fetch,o,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Bh(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!h2(t))throw new Gc("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");const a=new s2({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),r=this.shouldThrowOnError;return new Proxy(a,{get(o,c){const u=o[c];return typeof u!="function"?u:async(...d)=>{try{return{data:await u.apply(o,d),error:null}}catch(p){if(r)throw p;return{data:null,error:p}}}}})}},C2=class extends Qr{constructor(t,e={},a){const r=t.replace(/\/$/,""),o=me(me({},ko),{},{"Content-Type":"application/json"},e);super(r,o,a,"vectors")}async createIndex(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var a=this;return a.handleOperation(async()=>await Zt.post(a.fetch,`${a.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:a.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var a=this;return a.handleOperation(async()=>await Zt.post(a.fetch,`${a.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:a.headers})||{})}},A2=class extends Qr{constructor(t,e={},a){const r=t.replace(/\/$/,""),o=me(me({},ko),{},{"Content-Type":"application/json"},e);super(r,o,a,"vectors")}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");
39if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},k2=class extends Qr{constructor(t,e={},a){const r=t.replace(/\/$/,""),o=me(me({},ko),{},{"Content-Type":"application/json"},e);super(r,o,a,"vectors")}async createBucket(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Zt.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},R2=class extends k2{constructor(t,e={}){super(t,e.headers||{},e.fetch)}from(t){return new x2(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,a=this;return e().call(a,t)}async getBucket(t){var e=()=>super.getBucket,a=this;return e().call(a,t)}async listBuckets(t={}){var e=()=>super.listBuckets,a=this;return e().call(a,t)}async deleteBucket(t){var e=()=>super.deleteBucket,a=this;return e().call(a,t)}},x2=class extends C2{constructor(t,e,a,r){super(t,e,r),this.vectorBucketName=a}async createIndex(t){var e=()=>super.createIndex,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,a=this;return e().call(a,a.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,a=this;return e().call(a,a.vectorBucketName,t)}index(t){return new O2(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},O2=class extends A2{constructor(t,e,a,r,o){super(t,e,o),this.vectorBucketName=a,this.indexName=r}async putVectors(t){var e=()=>super.putVectors,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName,indexName:a.indexName}))}async getVectors(t){var e=()=>super.getVectors,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName,indexName:a.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName,indexName:a.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName,indexName:a.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,a=this;return e().call(a,me(me({},t),{},{vectorBucketName:a.vectorBucketName,indexName:a.indexName}))}},L2=class extends T2{constructor(t,e={},a,r){super(t,e,a,r)}from(t){return new _2(this.url,this.headers,t,this.fetch)}get vectors(){return new R2(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new E2(this.url+"/iceberg",this.headers,this.fetch)}};const jw="2.105.4",zr=30*1e3,ih=3,Nf=ih*zr,N2="http://localhost:9999",z2="supabase.auth.token",q2={"X-Client-Info":`gotrue-js/${jw}`},rh="X-Supabase-Api-Version",Pw={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},D2=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,j2=600*1e3;class go extends Error{constructor(e,a,r){super(e),this.__isAuthError=!0,this.name="AuthError",this.status=a,this.code=r}toJSON(){return{name:this.name,message:this.message,status:this.status,code:this.code}}}function W(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}class P2 extends go{constructor(e,a,r){super(e,a,r),this.name="AuthApiError",this.status=a,this.code=r}}function M2(t){return W(t)&&t.name==="AuthApiError"}class _n extends go{constructor(e,a){super(e),this.name="AuthUnknownError",this.originalError=a}}class ga extends go{constructor(e,a,r,o){super(e,r,o),this.name=a,this.status=r}}class yt extends ga{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0)}}function ic(t){return W(t)&&t.name==="AuthSessionMissingError"}class Rr extends ga{constructor(){super("Auth session or user missing","AuthInvalidToken
39ResponseError",500,void 0)}}class rc extends ga{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0)}}class sc extends ga{constructor(e,a=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=a}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}}function U2(t){return W(t)&&t.name==="AuthImplicitGrantRedirectError"}class e0 extends ga{constructor(e,a=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=a}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}}class B2 extends ga{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found")}}class sh extends ga{constructor(e,a){super(e,"AuthRetryableFetchError",a,void 0)}}function zf(t){return W(t)&&t.name==="AuthRetryableFetchError"}class t0 extends ga{constructor(e,a,r){super(e,"AuthWeakPasswordError",a,"weak_password"),this.reasons=r}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}}class oh extends ga{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt")}}const Ac="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),n0=` 	
40\r=`.split(""),I2=(()=>{const t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<n0.length;e+=1)t[n0[e].charCodeAt(0)]=-2;for(let e=0;e<Ac.length;e+=1)t[Ac[e].charCodeAt(0)]=e;return t})();function a0(t,e,a){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){const r=e.queue>>e.queuedBits-6&63;a(Ac[r]),e.queuedBits-=6}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){const r=e.queue>>e.queuedBits-6&63;a(Ac[r]),e.queuedBits-=6}}function Mw(t,e,a){const r=I2[t];if(r>-1)for(e.queue=e.queue<<6|r,e.queuedBits+=6;e.queuedBits>=8;)a(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else{if(r===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function i0(t){const e=[],a=u=>{e.push(String.fromCodePoint(u))},r={utf8seq:0,codepoint:0},o={queue:0,queuedBits:0},c=u=>{H2(u,r,a)};for(let u=0;u<t.length;u+=1)Mw(t.charCodeAt(u),o,c);return e.join("")}function F2(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function $2(t,e){for(let a=0;a<t.length;a+=1){let r=t.charCodeAt(a);if(r>55295&&r<=56319){const o=(r-55296)*1024&65535;r=(t.charCodeAt(a+1)-56320&65535|o)+65536,a+=1}F2(r,e)}}function H2(t,e,a){if(e.utf8seq===0){if(t<=127){a(t);return}for(let r=1;r<6;r+=1)if((t>>7-r&1)===0){e.utf8seq=r;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&a(e.codepoint)}}function Hr(t){const e=[],a={queue:0,queuedBits:0},r=o=>{e.push(o)};for(let o=0;o<t.length;o+=1)Mw(t.charCodeAt(o),a,r);return new Uint8Array(e)}function G2(t){const e=[];return $2(t,a=>e.push(a)),new Uint8Array(e)}function Li(t){const e=[],a={queue:0,queuedBits:0},r=o=>{e.push(o)};return t.forEach(o=>a0(o,a,r)),a0(null,a,r),e.join("")}function V2(t){return Math.round(Date.now()/1e3)+t}function K2(){return Symbol("auth-callback")}const At=()=>typeof window<"u"&&typeof document<"u",Ci={tested:!1,writable:!1},Uw=()=>{if(!At())return!1;try{if(typeof globalThis.localStorage!="object")return!1}catch{return!1}if(Ci.tested)return Ci.writable;const t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),Ci.tested=!0,Ci.writable=!0}catch{Ci.tested=!0,Ci.writable=!1}return Ci.writable};function Y2(t){const e={},a=new URL(t);if(a.hash&&a.hash[0]==="#")try{new URLSearchParams(a.hash.substring(1)).forEac
40h((o,c)=>{e[c]=o})}catch{}return a.searchParams.forEach((r,o)=>{e[o]=r}),e}const Bw=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),Q2=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",qr=async(t,e,a)=>{await t.setItem(e,JSON.stringify(a))},Ai=async(t,e)=>{const a=await t.getItem(e);if(!a)return null;try{return JSON.parse(a)}catch{return null}},Ct=async(t,e)=>{await t.removeItem(e)};class Kc{constructor(){this.promise=new Kc.promiseConstructor((e,a)=>{this.resolve=e,this.reject=a})}}Kc.promiseConstructor=Promise;function oc(t){const e=t.split(".");if(e.length!==3)throw new oh("Invalid JWT structure");for(let r=0;r<e.length;r++)if(!D2.test(e[r]))throw new oh("JWT not in base64url format");return{header:JSON.parse(i0(e[0])),payload:JSON.parse(i0(e[1])),signature:Hr(e[2]),raw:{header:e[0],payload:e[1]}}}async function J2(t){return await new Promise(e=>{setTimeout(()=>e(null),t)})}function Z2(t,e){return new Promise((r,o)=>{(async()=>{for(let c=0;c<1/0;c++)try{const u=await t(c);if(!e(c,null,u)){r(u);return}}catch(u){if(!e(c,u)){o(u);return}}})()})}function W2(t){return("0"+t.toString(16)).substr(-2)}function X2(){const e=new Uint32Array(56);if(typeof crypto>"u"){const a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",r=a.length;let o="";for(let c=0;c<56;c++)o+=a.charAt(Math.floor(Math.random()*r));return o}return crypto.getRandomValues(e),Array.from(e,W2).join("")}async function ex(t){const a=new TextEncoder().encode(t),r=await crypto.subtle.digest("SHA-256",a),o=new Uint8Array(r);return Array.from(o).map(c=>String.fromCharCode(c)).join("")}async function tx(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;const a=await ex(t);return btoa(a).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function xr(t,e,a=!1){const r=X2();let o=r;a&&(o+="/recovery"),await qr(t,`${e}-code-verifier`,o);const c=await tx(r);return[c,r===c?"plain":"s256"]}const nx=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;function ax(t){const e=t.headers.get(rh);if(!e||!e.match(nx))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function ix(t){if(!t)throw new Error("Missing exp claim");const e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function rx(t){switch(t){case"RS256":return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case"ES256":return{name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}const sx=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function aa(t){if(!sx.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function vn(t){if(!t.passkey)throw new Error("@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).")}function qf(){const t={};return new Proxy(t,{get:(e,a)=>{if(a==="__isUserNotAvailableProxy")return!0;if(typeof a=="symbol"){const r=a.toString();if(r==="Symbol(Symbol.toPrimitive)"||r==="Symbol(Symbol.toStringTag)"||r==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${a}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,a)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${a}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,a)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${a}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function ox(t,e){return new Proxy(t,{get:(a,r,o)=>{if(r==="__isInsecureUserWarningProxy")return!0;
40if(typeof r=="symbol"){const c=r.toString();if(c==="Symbol(Symbol.toPrimitive)"||c==="Symbol(Symbol.toStringTag)"||c==="Symbol(util.inspect.custom)"||c==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(a,r,o)}return!e.value&&typeof r=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=!0),Reflect.get(a,r,o)}})}function r0(t){return JSON.parse(JSON.stringify(t))}const ki=t=>{if(typeof t=="object"&&t!==null){const e=t;if(typeof e.msg=="string")return e.msg;if(typeof e.message=="string")return e.message;if(typeof e.error_description=="string")return e.error_description;if(typeof e.error=="string")return e.error}return JSON.stringify(t)},lx=[502,503,504,520,521,522,523,524,530];async function s0(t){var e;if(!Q2(t))throw new sh(ki(t),0);if(lx.includes(t.status))throw new sh(ki(t),t.status);let a;try{a=await t.json()}catch(c){throw new _n(ki(c),c)}let r;const o=ax(t);if(o&&o.getTime()>=Pw["2024-01-01"].timestamp&&typeof a=="object"&&a&&typeof a.code=="string"?r=a.code:typeof a=="object"&&a&&typeof a.error_code=="string"&&(r=a.error_code),r){if(r==="weak_password")throw new t0(ki(a),t.status,((e=a.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(r==="session_not_found")throw new yt}else if(typeof a=="object"&&a&&typeof a.weak_password=="object"&&a.weak_password&&Array.isArray(a.weak_password.reasons)&&a.weak_password.reasons.length&&a.weak_password.reasons.reduce((c,u)=>c&&typeof u=="string",!0))throw new t0(ki(a),t.status,a.weak_password.reasons);throw new P2(ki(a),t.status||500,r)}const cx=(t,e,a,r)=>{const o={method:t,headers:e?.headers||{}};return t==="GET"?o:(o.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e?.headers),o.body=JSON.stringify(r),Object.assign(Object.assign({},o),a))};async function ie(t,e,a,r){var o;const c=Object.assign({},r?.headers);c[rh]||(c[rh]=Pw["2024-01-01"].name),r?.jwt&&(c.Authorization=`Bearer ${r.jwt}`);const u=(o=r?.query)!==null&&o!==void 0?o:{};r?.redirectTo&&(u.redirect_to=r.redirectTo);const d=Object.keys(u).length?"?"+new URLSearchParams(u).toString():"",p=await ux(t,e,a+d,{headers:c,noResolveJson:r?.noResolveJson},{},r?.body);return r?.xform?r?.xform(p):{data:Object.assign({},p),error:null}}async function ux(t,e,a,r,o,c){const u=cx(e,r,o,c);let d;try{d=await t(a,Object.assign({},u))}catch(p){throw console.error(p),new sh(ki(p),0)}if(d.ok||await s0(d),r?.noResolveJson)return d;try{return await d.json()}catch(p){await s0(p)}}function un(t){var e;let a=null;hx(t)&&(a=Object.assign({},t),t.expires_at||(a.expires_at=V2(t.expires_in)));const r=(e=t.user)!==null&&e!==void 0?e:t;return{data:{session:a,user:r},error:null}}function o0(t){const e=un(t);return!e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((a,r)=>a&&typeof r=="string",!0)&&(e.data.weak_password=t.weak_password),e}function Va(t){var e;return{data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function dx(t){return{data:t,error:null}}function fx(t){const{action_link:e,email_otp:a,hashed_token:r,redirect_to:o,verification_type:c}=t,u=Hc(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),d={action_link:e,email_otp:a,hashed_token:r,redirect_to:o,verification_type:c},p=Object.assign({},u);return{data:{properties:d,user:p},error:null}}function l0(t){return t}function hx(t){return!!t.access_token&&!!t.refresh_token&&!!t.expires_in}const Df=["global","local","others"];class px{constructor({url:e="",headers:a={},fetch:r,experimental:o}){this.url=e,this.headers=a,this.fetch=Bw(r),this.experimental=o??{},this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)},this.passkey={listPasskeys:this._adminListPasskeys.bind(this),deletePasskey:this._adminDeletePasskey.bind(this)}}async signOut(e,a=Df[0]){if(Df.indexOf(a)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${Df.join(", ")}`);try{return await ie(this.fetch,"POST",`${this.url}/logout?scope=${a}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(r){if(W(r))return{data:null,error:r};throw r}}async inviteUserByEmail(e,a={}){try{return await ie(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:a.data},headers:this.headers,redirectTo:a.redirectTo,xform:Va})}catch(r){if(W(r))return{data:{user:null},error:r};throw r}}async generateLink(e){try{const{options:a}=e,r=Hc(e,["options"]),o=Object.assign(Object.assign({},r),a);return"newEmail"in r&&(o.new_email=r?.newEmail,delete o.newEmail),await ie(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:o,headers:this.headers,xform:fx,redirectTo:a?.redirectTo})}catch(a){if(W(a))return{data:{properties:null,user:null},error:a};throw a}}async createUser(e){try{return await ie(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:Va})}catch(a){if(W(a))return{data:{user:null},error:a};throw a}}async listUsers(e){var a,r,o,c,u,d,p;try{const m={nextPage:null,lastPage:0,total:0},g=await ie(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(r=(a=e?.page)===null||a===void 0?void 0:a.toString())!==null&&r!==void 0?r:"",per_page:(c=(o=e?.perPage)===null||o===void 0?void 0:o.toString())!==null&&c!==void 0?c:""},xform:l0});if(g.error)throw g.error;const v=await g.json(),b=(u=g.headers.get("x-total-count"))!==null&&u!==void 0?u:0,w=(p=(d=g.headers.get("link"))===null||d===void 0?void 0:d.split(","))!==null&&p!==void 0?p:[];return w.length>0&&(w.forEach(S=>{const T=parseInt(S.split(";")[0].split("=")[1].substring(0,1)),C=JSON.parse(S.split(";")[1].split("=")[1]);m[`${C}Page`]=T}),m.total=parseInt(b)),{data:Object.assign(Object.assign({},v),m),error:null}}catch(m){if(W(m))return{data:{users:[]},error:m};throw m}}async getUserById(e){aa(e);try{return await ie(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:Va})}catch(a){if(W(a))return{data:{user:null},error:a};throw a}}async updateUserById(e,a){aa(e);try{return await ie(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:a,headers:this.headers,xform:Va})}catch(r){if(W(r))return{data:{user:null},error:r};throw r}}async deleteUser(e,a=!1){aa(e);
40try{return await ie(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:a},xform:Va})}catch(r){if(W(r))return{data:{user:null},error:r};throw r}}async _listFactors(e){aa(e.userId);try{const{data:a,error:r}=await ie(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:o=>({data:{factors:o},error:null})});return{data:a,error:r}}catch(a){if(W(a))return{data:null,error:a};throw a}}async _deleteFactor(e){aa(e.userId),aa(e.id);try{return{data:await ie(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(a){if(W(a))return{data:null,error:a};throw a}}async _listOAuthClients(e){var a,r,o,c,u,d,p;try{const m={nextPage:null,lastPage:0,total:0},g=await ie(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(r=(a=e?.page)===null||a===void 0?void 0:a.toString())!==null&&r!==void 0?r:"",per_page:(c=(o=e?.perPage)===null||o===void 0?void 0:o.toString())!==null&&c!==void 0?c:""},xform:l0});if(g.error)throw g.error;const v=await g.json(),b=(u=g.headers.get("x-total-count"))!==null&&u!==void 0?u:0,w=(p=(d=g.headers.get("link"))===null||d===void 0?void 0:d.split(","))!==null&&p!==void 0?p:[];return w.length>0&&(w.forEach(S=>{const T=parseInt(S.split(";")[0].split("=")[1].substring(0,1)),C=JSON.parse(S.split(";")[1].split("=")[1]);m[`${C}Page`]=T}),m.total=parseInt(b)),{data:Object.assign(Object.assign({},v),m),error:null}}catch(m){if(W(m))return{data:{clients:[]},error:m};throw m}}async _createOAuthClient(e){try{return await ie(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _getOAuthClient(e){try{return await ie(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _updateOAuthClient(e,a){try{return await ie(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:a,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(W(r))return{data:null,error:r};throw r}}async _deleteOAuthClient(e){try{return await ie(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(a){if(W(a))return{data:null,error:a};throw a}}async _regenerateOAuthClientSecret(e){try{return await ie(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _listCustomProviders(e){try{const a={};return e?.type&&(a.type=e.type),await ie(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:a,xform:r=>{var o;return{data:{providers:(o=r?.providers)!==null&&o!==void 0?o:[]},error:null}}})}catch(a){if(W(a))return{data:{providers:[]},error:a};throw a}}async _createCustomProvider(e){try{return await ie(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _getCustomProvider(e){try{return await ie(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _updateCustomProvider(e,a){try{return await ie(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:a,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(W(r))return{data:null,error:r};throw r}}async _deleteCustomProvider(e){try{return await ie(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(a){if(W(a))return{data:null,error:a};throw a}}async _adminListPasskeys(e){vn(this.experimental),aa(e.userId);try{return await ie(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/passkeys`,{headers:this.headers,xform:a=>({data:a,error:null})})}catch(a){if(W(a))return{data:null,error:a};throw a}}async _adminDeletePasskey(e){vn(this.experimental),aa(e.userId),aa(e.passkeyId);
40try{return await ie(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/passkeys/${e.passkeyId}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(a){if(W(a))return{data:null,error:a};throw a}}}function c0(t={}){return{getItem:e=>t[e]||null,setItem:(e,a)=>{t[e]=a},removeItem:e=>{delete t[e]}}}const On={debug:!!(globalThis&&Uw()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")};class Iw extends Error{constructor(e){super(e),this.isAcquireTimeout=!0}}class u0 extends Iw{}async function mx(t,e,a){On.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",t,e);const r=new globalThis.AbortController;let o;e>0&&(o=setTimeout(()=>{r.abort(),On.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",t)},e)),await Promise.resolve();try{return await globalThis.navigator.locks.request(t,e===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:r.signal},async c=>{if(c){clearTimeout(o),On.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",t,c.name);try{return await a()}finally{On.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",t,c.name)}}else{if(e===0)throw On.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",t),new u0(`Acquiring an exclusive Navigator LockManager lock "${t}" immediately failed`);if(On.debug)try{const u=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(u,null,"  "))}catch(u){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",u)}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),clearTimeout(o),await a()}})}catch(c){if(e>0&&clearTimeout(o),c!==null&&typeof c=="object"&&"name"in c&&c.name==="AbortError"&&e>0){if(r.signal.aborted)return On.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock",t),console.warn(`@supabase/gotrue-js: Lock "${t}" was not released within ${e}ms. This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). Forcefully acquiring the lock to recover.`),await Promise.resolve().then(()=>globalThis.navigator.locks.request(t,{mode:"exclusive",steal:!0},async u=>{if(u){On.debug&&console.log("@supabase/gotrue-js: navigatorLock: recovered (stolen)",t,u.name);try{return await a()}finally{On.debug&&console.log("@supabase/gotrue-js: navigatorLock: released (stolen)",t,u.name)}}else return console.warn("@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true"),await a()}));throw On.debug&&console.log("@supabase/gotrue-js: navigatorLock: lock was stolen by another request",t),new u0(`Lock "${t}" was released because another request stole it`)}throw c}}function gx(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch{typeof self<"u"&&(self.globalThis=self)}}function Fw(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function vx(t){return parseInt(t,16)}function yx(t){const e=new TextEncoder().encode(t);return"0x"+Array.from(e,r=>r.toString(16).padStart(2,"0")).join("")}function bx(t){var e;const{chainId:a,domain:r,expirationTime:o,issuedAt:c=new Date,nonce:u,notBefore:d,requestId:p,resources:m,scheme:g,uri:v,version:b}=t;{if(!Number.isInteger(a))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${a}`);if(!r)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(u&&u.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${u}`);if(!v)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(b!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${b}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
41`))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`)}const w=Fw(t.address),S=g?`${g}://${r}
41`:r,T=t.statement?`${t.statement}
42`:"",C=`${S} wants you to sign in with your Ethereum account:
43${w}
44
45${T}`;let A=`URI: ${v}
46Version: ${b}
47Chain ID: ${a}${u?`
48Nonce: ${u}`:""}
49Issued At: ${c.toISOString()}`;if(o&&(A+=`
50Expiration Time: ${o.toISOString()}`),d&&(A+=`
51Not Before: ${d.toISOString()}`),p&&(A+=`
52Request ID: ${p}`),m){let O=`
53Resources:`;for(const x of m){if(!x||typeof x!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${x}`);O+=`
54- ${x}`}A+=O}return`${C}
55${A}`}class dt extends Error{constructor({message:e,code:a,cause:r,name:o}){var c;super(e,{cause:r}),this.__isWebAuthnError=!0,this.name=(c=o??(r instanceof Error?r.name:void 0))!==null&&c!==void 0?c:"Unknown Error",this.code=a}toJSON(){return{name:this.name,message:this.message,code:this.code}}}class kc extends dt{constructor(e,a){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:a,message:e}),this.name="WebAuthnUnknownError",this.originalError=a}}function wx({error:t,options:e}){var a,r,o;const{publicKey:c}=e;if(!c)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new dt({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((a=c.authenticatorSelection)===null||a===void 0?void 0:a.requireResidentKey)===!0)return new dt({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((r=c.authenticatorSelection)===null||r===void 0?void 0:r.userVerification)==="required")return new dt({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((o=c.authenticatorSelection)===null||o===void 0?void 0:o.userVerification)==="required")return new dt({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else{if(t.name==="InvalidStateError")return new dt({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new dt({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return c.pubKeyCredParams.filter(d=>d.type==="public-key").length===0?new dt({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new dt({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){const u=window.location.hostname;if($w(u)){if(c.rp.id!==u)return new dt({message:`The RP ID "${c.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new dt({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(c.user.id.byteLength<1||c.user.id.byteLength>64)return new dt({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new dt({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new dt({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function _x({error:t,options:e}){const{publicKey:a}=e;if(!a)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new dt({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else{if(t.name==="NotAllowedError")return new dt({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){const r=window.location.hostname;if($w(r)){if(a.rpId!==r)return new dt({message:`The RP ID "${a.rpId}
55" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new dt({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new dt({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new dt({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}class Sx{createNewAbortSignal(){if(this.controller){const a=new Error("Cancelling existing WebAuthn API call for new one");a.name="AbortError",this.controller.abort(a)}const e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){const e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0}}}const lh=new Sx;function d0(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);const{challenge:e,user:a,excludeCredentials:r}=t,o=Hc(t,["challenge","user","excludeCredentials"]),c=Hr(e).buffer,u=Object.assign(Object.assign({},a),{id:Hr(a.id).buffer}),d=Object.assign(Object.assign({},o),{challenge:c,user:u});if(r&&r.length>0){d.excludeCredentials=new Array(r.length);for(let p=0;p<r.length;p++){const m=r[p];d.excludeCredentials[p]=Object.assign(Object.assign({},m),{id:Hr(m.id).buffer,type:m.type||"public-key",transports:m.transports})}}return d}function f0(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);const{challenge:e,allowCredentials:a}=t,r=Hc(t,["challenge","allowCredentials"]),o=Hr(e).buffer,c=Object.assign(Object.assign({},r),{challenge:o});if(a&&a.length>0){c.allowCredentials=new Array(a.length);for(let u=0;u<a.length;u++){const d=a[u];c.allowCredentials[u]=Object.assign(Object.assign({},d),{id:Hr(d.id).buffer,type:d.type||"public-key",transports:d.transports})}}return c}function h0(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();const a=t;return{id:t.id,rawId:t.id,response:{attestationObject:Li(new Uint8Array(t.response.attestationObject)),clientDataJSON:Li(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=a.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function p0(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();const a=t,r=t.getClientExtensionResults(),o=t.response;return{id:t.id,rawId:t.id,response:{authenticatorData:Li(new Uint8Array(o.authenticatorData)),clientDataJSON:Li(new Uint8Array(o.clientDataJSON)),signature:Li(new Uint8Array(o.signature)),userHandle:o.userHandle?Li(new Uint8Array(o.userHandle)):void 0},type:"public-key",clientExtensionResults:r,authenticatorAttachment:(e=a.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function $w(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function Rc(){var t,e;return!!(At()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator?.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator?.credentials)===null||e===void 0?void 0:e.get)=="function")}async function Hw(t){try{const e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new kc("Browser returned unexpected credential type",e)}:{data:null,error:new kc("Empty credential response",e)}}catch(e){return{data:null,error:wx({error:e,options:t})}}}async function Gw(t){try{const e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new kc("Browser returned unexpected credential type",e)}:{data:null,error:new kc("Empty credential response",e)}}catch(e){return{data:null,error:_x({error:e,options:t})}}}const Tx={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:!1,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},Ex={userVerification:"preferred",hints:["security-key"],attestation:"direct"};function xc(...t){const e=o=>o!==null&&typeof o=="object"&&!Array.isArray(o),a=o=>o instanceof ArrayBuffer||ArrayBuffer.isView(o),r={};
55for(const o of t)if(o)for(const c in o){const u=o[c];if(u!==void 0)if(Array.isArray(u))r[c]=u;else if(a(u))r[c]=u;else if(e(u)){const d=r[c];e(d)?r[c]=xc(d,u):r[c]=xc(u)}else r[c]=u}return r}function Cx(t,e){return xc(Tx,t,e||{})}function Ax(t,e){return xc(Ex,t,e||{})}class kx{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this)}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:a,friendlyName:r,signal:o},c){var u;try{const{data:d,error:p}=await this.client.mfa.challenge({factorId:e,webauthn:a});if(!d)return{data:null,error:p};const m=o??lh.createNewAbortSignal();if(d.webauthn.type==="create"){const{user:g}=d.webauthn.credential_options.publicKey;if(!g.name){const v=r;if(v)g.name=`${g.id}:${v}`;else{const w=(await this.client.getUser()).data.user,S=((u=w?.user_metadata)===null||u===void 0?void 0:u.name)||w?.email||w?.id||"User";g.name=`${g.id}:${S}`}}g.displayName||(g.displayName=g.name)}switch(d.webauthn.type){case"create":{const g=Cx(d.webauthn.credential_options.publicKey,c?.create),{data:v,error:b}=await Hw({publicKey:g,signal:m});return v?{data:{factorId:e,challengeId:d.id,webauthn:{type:d.webauthn.type,credential_response:v}},error:null}:{data:null,error:b}}case"request":{const g=Ax(d.webauthn.credential_options.publicKey,c?.request),{data:v,error:b}=await Gw(Object.assign(Object.assign({},d.webauthn.credential_options),{publicKey:g,signal:m}));return v?{data:{factorId:e,challengeId:d.id,webauthn:{type:d.webauthn.type,credential_response:v}},error:null}:{data:null,error:b}}}}catch(d){return W(d)?{data:null,error:d}:{data:null,error:new _n("Unexpected error in challenge",d)}}}async _verify({challengeId:e,factorId:a,webauthn:r}){return this.client.mfa.verify({factorId:a,challengeId:e,webauthn:r})}async _authenticate({factorId:e,webauthn:{rpId:a=typeof window<"u"?window.location.hostname:void 0,rpOrigins:r=typeof window<"u"?[window.location.origin]:void 0,signal:o}={}},c){if(!a)return{data:null,error:new go("rpId is required for WebAuthn authentication")};try{if(!Rc())return{data:null,error:new _n("Browser does not support WebAuthn",null)};const{data:u,error:d}=await this.challenge({factorId:e,webauthn:{rpId:a,rpOrigins:r},signal:o},{request:c});if(!u)return{data:null,error:d};const{webauthn:p}=u;return this._verify({factorId:e,challengeId:u.challengeId,webauthn:{type:p.type,rpId:a,rpOrigins:r,credential_response:p.credential_response}})}catch(u){return W(u)?{data:null,error:u}:{data:null,error:new _n("Unexpected error in authenticate",u)}}}async _register({friendlyName:e,webauthn:{rpId:a=typeof window<"u"?window.location.hostname:void 0,rpOrigins:r=typeof window<"u"?[window.location.origin]:void 0,signal:o}={}},c){if(!a)return{data:null,error:new go("rpId is required for WebAuthn registration")};try{if(!Rc())return{data:null,error:new _n("Browser does not support WebAuthn",null)};const{data:u,error:d}=await this._enroll({friendlyName:e});if(!u)return await this.client.mfa.listFactors().then(g=>{var v;return(v=g.data)===null||v===void 0?void 0:v.all.find(b=>b.factor_type==="webauthn"&&b.friendly_name===e&&b.status!=="unverified")}).then(g=>g?this.client.mfa.unenroll({factorId:g?.id}):void 0),{data:null,error:d};const{data:p,error:m}=await this._challenge({factorId:u.id,friendlyName:u.friendly_name,webauthn:{rpId:a,rpOrigins:r},signal:o},{create:c});return p?this._verify({factorId:u.id,challengeId:p.challengeId,webauthn:{rpId:a,rpOrigins:r,type:p.webauthn.type,credential_response:p.webauthn.credential_response}}):{data:null,error:m}}catch(u){return W(u)?{data:null,error:u}:{data:null,error:new _n("Unexpected error in register",u)}}}}gx();const Rx={url:N2,storageKey:z2,autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,headers:q2,flowType:"implicit",debug:!1,hasCustomAuthorizationHeader:!1,throwOnError:!1,lockAcquireTimeout:5e3,skipAutoInitialize:!1,experimental:{}};async function m0(t,e,a){return await a()}const Or={};class vo{get jwks(){var e,a;return(a=(e=Or[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&a!==void 0?a:{keys:[]}}set jwks(e){Or[this.storageKey]=Object.assign(Object.assign({},Or[this.storageKey]),{jwks:e})}get jwks_cached_at(){var e,a;return(a=(e=Or[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&a!==void 0?a:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){Or[this.storageKey]=Object.assign(Object.assign({},Or[this.storageKey]),{cachedAt:e})}constructor(e){var a,r,o,c;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=!0,this.hasCustomAuthorizationHeader=!1,this.suppressGetSessionWarning=!1,this.lockAcquired=!1,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;const u=Object.assign(Object.assign({},Rx),e);if(this.storageKey=u.storageKey,this.instanceID=(a=vo.nextInstanceID[this.storageKey])!==null&&a!==void 0?a:0,vo.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!u.debug,typeof u.debug=="function"&&(this.logger=u.debug),this.instanceID>0&&At()){const d=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(d),this.logDebugMessages&&console.trace(d)}if(this.persistSession=u.persistSession,this.autoRefreshToken=u.autoRefreshToken,this.experimental=(r=u.experimental)!==null&&r!==void 0?r:{},this.admin=new px({url:u.url,headers:u.headers,fetch:u.fetch,experimental:this.experimental}),this.url=u.url,this.headers=u.headers,this.fetch=Bw(u.fetch),this.lock=u.lock||m0,this.detectSessionInUrl=u.detectSessionInUrl,this.flowType=u.flowType,this.hasCustomAuthorizationHeader=u.hasCu
55stomAuthorizationHeader,this.throwOnError=u.throwOnError,this.lockAcquireTimeout=u.lockAcquireTimeout,u.lock?this.lock=u.lock:this.persistSession&&At()&&(!((o=globalThis?.navigator)===null||o===void 0)&&o.locks)?this.lock=mx:this.lock=m0,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new kx(this)},this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.passkey={startRegistration:this._startPasskeyRegistration.bind(this),verifyRegistration:this._verifyPasskeyRegistration.bind(this),startAuthentication:this._startPasskeyAuthentication.bind(this),verifyAuthentication:this._verifyPasskeyAuthentication.bind(this),list:this._listPasskeys.bind(this),update:this._updatePasskey.bind(this),delete:this._deletePasskey.bind(this)},this.persistSession?(u.storage?this.storage=u.storage:Uw()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=c0(this.memoryStorage)),u.userStorage&&(this.userStorage=u.userStorage)):(this.memoryStorage={},this.storage=c0(this.memoryStorage)),At()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey)}catch(d){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",d)}(c=this.broadcastChannel)===null||c===void 0||c.addEventListener("message",async d=>{this._debug("received broadcast notification from other tab or client",d);try{await this._notifyAllSubscribers(d.data.event,d.data.session,!1)}catch(p){this._debug("#broadcastChannel","error",p)}})}u.skipAutoInitialize||this.initialize().catch(d=>{this._debug("#initialize()","error",d)})}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return`GoTrueClient@${this.storageKey}:${this.instanceID} (${jw}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var e;try{let a={},r="none";if(At()&&(a=Y2(window.location.href),this._isImplicitGrantCallback(a)?r="implicit":await this._isPKCECallback(a)&&(r="pkce")),At()&&this.detectSessionInUrl&&r!=="none"){const{data:o,error:c}=await this._getSessionFromURL(a,r);if(c){if(this._debug("#_initialize()","error detecting session from URL",c),U2(c)){const p=(e=c.details)===null||e===void 0?void 0:e.code;if(p==="identity_already_exists"||p==="identity_not_found"||p==="single_identity_not_deletable")return{error:c}}return{error:c}}const{session:u,redirectType:d}=o;return this._debug("#_initialize()","detected session in URL",u,"redirect type",d),await this._saveSession(u),setTimeout(async()=>{d==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",u):await this._notifyAllSubscribers("SIGNED_IN",u)},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(a){return W(a)?this._returnResult({error:a}):this._returnResult({error:new _n("Unexpected error during initialization",a)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end")}}async signInAnonymously(e){var a,r,o;try{const c=await ie(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(r=(a=e?.options)===null||a===void 0?void 0:a.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:(o=e?.options)===null||o===void 0?void 0:o.captchaToken}},xform:un}),{data:u,error:d}=c;if(d||!u)return this._returnResult({data:{user:null,session:null},error:d});const p=u.session,m=u.user;return u.session&&(await this._saveSession(u.session),await this._notifyAllSubscribers("SIGNED_IN",p)),this._returnResult({data:{user:m,session:p},error:null})}catch(c){if(W(c))return this._returnResult({data:{user:null,session:null},error:c});throw c}}async signUp(e){var a,r,o;try{let c;if("email"in e){const{email:g,password:v,options:b}=e;let w=null,S=null;this.flowType==="pkce"&&([w,S]=await xr(this.storage,this.storageKey)),c=await ie(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:b?.emailRedirectTo,body:{email:g,password:v,data:(a=b?.data)!==null&&a!==void 0?a:{},gotrue_meta_security:{captcha_token:b?.captchaToken},code_challenge:w,code_challenge_method:S},xform:un})}else if("phone"in e){const{phone:g,password:v,options:b}=e;c=await ie(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:g,password:v,data:(r=b?.data)!==null&&r!==void 0?r:{},channel:(o=b?.channel)!==null&&o!==void 0?o:"sms",gotrue_meta_security:{captcha_token:b?.captchaToken}},xform:un})}else throw new rc("You must provide either an email or phone number and a password");const{data:u,error:d}=c;if(d||!u)return await Ct(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:d});const p=u.session,m=u.user;return u.session&&(await this._saveSession(u.session),await this._notifyAllSubscribers("SIGNED_IN",p)),this._returnResult({data:{user:m,session:p},error:null})}catch(c){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(c))return this._returnResult({data:{user:null,session:null},error:c});throw c}}async signInWithPassword(e){try{let a;if("email"in e){const{email:c,password:u,options:d}=e;a=await ie(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:c,password:u,gotrue_meta_security:{captcha_token:d?.captchaToken}},xform:o0})}else if("phone"in e){const{phone:c,password:u,options:d}=e;a=await ie(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:c,password:u,gotrue_meta_security:{captcha_token:d?.captchaToken}},xform:o0})}else throw new rc("You must provide either an email or phone number and a password");const{data:r,error:o}=a;if(o)return this._returnResult({data:{user:null,session:null},error:o});if(!r||!r.session||!r.user){const c=new Rr;return this._returnResult({data:{user:null,session:null},error:c})}return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers("SIGNED_IN",r.session)),this._returnResult({data:Object.assign({user:r.user,session:r.session},r.weak_password?{weakPassword:r.weak_password}:null),error:o})}catch(a){if(W(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async signInWithOAuth(e){var a,r,o,c;return await this._handleProviderSignIn(e.provider,{redirectTo:(a=e.options)===null||a===void 0?void 0:a.redirectTo,scopes:(r=e.options)===null||r===void 0?void 0:r.scopes,queryParams:(o=e.options)===null||o===void 0?void 0:o.queryParams,skipBrowserRedirect:(c=e.options)===null||c===void 0?void 0:c.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e))}async signInWithWeb3(e){const{chain:a}=e;switch(a){case"ethereum":return await this.signInWithEthereum(e);case"solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${a}"`)}}async signInWithEthereum(e){var a,r,o,c,u,d,p,m,g,v,b;let w,S;if("message"in e)w=e.message,S=e.signature;else{const{chain:T,wallet:C,statement:A,options:O}=e;let x;if(At())if(typeof C=="object")x=C;else{const te=window;if("ethereum"in te&&typeof te.ethereum=="object"&&"request"in te.ethereum&&typeof te.ethereum.request=="function")x=te.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else{if(typeof C!="object"||!O?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");x=C}const B=new URL((a=O?.url)!==null&&a!==void 0?a:window.location.href),Z=await x.request({method:"eth_requestAccounts"}).then(te=>
55te).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!Z||Z.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");const M=Fw(Z[0]);let N=(r=O?.signInWithEthereum)===null||r===void 0?void 0:r.chainId;if(!N){const te=await x.request({method:"eth_chainId"});N=vx(te)}const Y={domain:B.host,address:M,statement:A,uri:B.href,version:"1",chainId:N,nonce:(o=O?.signInWithEthereum)===null||o===void 0?void 0:o.nonce,issuedAt:(u=(c=O?.signInWithEthereum)===null||c===void 0?void 0:c.issuedAt)!==null&&u!==void 0?u:new Date,expirationTime:(d=O?.signInWithEthereum)===null||d===void 0?void 0:d.expirationTime,notBefore:(p=O?.signInWithEthereum)===null||p===void 0?void 0:p.notBefore,requestId:(m=O?.signInWithEthereum)===null||m===void 0?void 0:m.requestId,resources:(g=O?.signInWithEthereum)===null||g===void 0?void 0:g.resources};w=bx(Y),S=await x.request({method:"personal_sign",params:[yx(w),M]})}try{const{data:T,error:C}=await ie(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:w,signature:S},!((v=e.options)===null||v===void 0)&&v.captchaToken?{gotrue_meta_security:{captcha_token:(b=e.options)===null||b===void 0?void 0:b.captchaToken}}:null),xform:un});if(C)throw C;if(!T||!T.session||!T.user){const A=new Rr;return this._returnResult({data:{user:null,session:null},error:A})}return T.session&&(await this._saveSession(T.session),await this._notifyAllSubscribers("SIGNED_IN",T.session)),this._returnResult({data:Object.assign({},T),error:C})}catch(T){if(W(T))return this._returnResult({data:{user:null,session:null},error:T});throw T}}async signInWithSolana(e){var a,r,o,c,u,d,p,m,g,v,b,w;let S,T;if("message"in e)S=e.message,T=e.signature;else{const{chain:C,wallet:A,statement:O,options:x}=e;let B;if(At())if(typeof A=="object")B=A;else{const M=window;if("solana"in M&&typeof M.solana=="object"&&("signIn"in M.solana&&typeof M.solana.signIn=="function"||"signMessage"in M.solana&&typeof M.solana.signMessage=="function"))B=M.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else{if(typeof A!="object"||!x?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");B=A}const Z=new URL((a=x?.url)!==null&&a!==void 0?a:window.location.href);if("signIn"in B&&B.signIn){const M=await B.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},x?.signInWithSolana),{version:"1",domain:Z.host,uri:Z.href}),O?{statement:O}:null));let N;if(Array.isArray(M)&&M[0]&&typeof M[0]=="object")N=M[0];else if(M&&typeof M=="object"&&"signedMessage"in M&&"signature"in M)N=M;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in N&&"signature"in N&&(typeof N.signedMessage=="string"||N.signedMessage instanceof Uint8Array)&&N.signature instanceof Uint8Array)S=typeof N.signedMessage=="string"?N.signedMessage:new TextDecoder().decode(N.signedMessage),T=N.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else{if(!("signMessage"in B)||typeof B.signMessage!="function"||!("publicKey"in B)||typeof B!="object"||!B.publicKey||!("toBase58"in B.publicKey)||typeof B.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");S=[`${Z.host} wants you to sign in with your Solana account:`,B.publicKey.toBase58(),...O?["",O,""]:[""],"Version: 1",`URI: ${Z.href}`,`Issued At: ${(o=(r=x?.signInWithSolana)===null||r===void 0?void 0:r.issuedAt)!==null&&o!==void 0?o:new Date().toISOString()}`,...!((c=x?.signInWithSolana)===null||c===void 0)&&c.notBefore?[`Not Before: ${x.signInWithSolana.notBefore}`]:[],...!((u=x?.signInWithSolana)===null||u===void 0)&&u.expirationTime?[`Expiration Time: ${x.signInWithSolana.expirationTime}`]:[],...!((d=x?.signInWithSolana)===null||d===void 0)&&d.chainId?[`Chain ID: ${x.signInWithSolana.chainId}`]:[],...!((p=x?.signInWithSolana)===null||p===void 0)&&p.nonce?[`Nonce: ${x.signInWithSolana.nonce}`]:[],...!((m=x?.signInWithSolana)===null||m===void 0)&&m.requestId?[`Request ID: ${x.signInWithSolana.requestId}`]:[],...!((v=(g=x?.signInWithSolana)===null||g===void 0?void 0:g.resources)===null||v===void 0)&&v.length?["Resources",...x.signInWithSolana.resources.map(N=>`- ${N}`)]:[]].join(`
56`);const M=await B.signMessage(new TextEncoder().encode(S),"utf8");if(!M||!(M instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");T=M}}try{const{data:C,error:A}=await ie(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:S,signature:Li(T)},!((b=e.options)===null||b===void 0)&&b.captchaToken?{gotrue_meta_security:{captcha_token:(w=e.options)===null||w===void 0?void 0:w.captchaToken}}:null),xform:un});if(A)throw A;if(!C||!C.session||!C.user){const O=new Rr;return this._returnResult({data:{user:null,session:null},error:O})}return C.session&&(await this._saveSession(C.session),await this._notifyAllSubscribers("SIGNED_IN",C.session)),this._returnResult({data:Object.assign({},C),error:A})}catch(C){if(W(C))return this._returnResult({data:{user:null,session:null},error:C});throw C}}async _exchangeCodeForSession(e){const a=await Ai(this.storage,`${this.storageKey}-code-verifier`),[r,o]=(a??"").split("/");try{if(!r&&this.flowType==="pkce")throw new B2;const{data:c,error:u}=await ie(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:r},xform:un});if(await Ct(this.storage,`${this.storageKey}-code-verifier`),u)throw u;if(!c||!c.session||!c.user){const d=new Rr;return this._returnResult({data:{user:null,session:null,redirectType:null},error:d})}return c.session&&(await this._saveSession(c.session),await this._notifyAllSubscribers(o==="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",c.session)),this._returnResult({data:Object.assign(Object.assign({},c),{redirectType:o??null}),error:u})}catch(c){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(c))return this._returnResult({data:{user:null,session:null,redirectType:null},error:c});throw c}}async signInWithIdToken(e){try{const{options:a,provider:r,token:o,access_token:c,nonce:u}=e,d=await ie(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:r,id_token:o,access_token:c,nonce:u,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:un}),{data:p,error:m}=d;if(m)return this._returnResult({data:{user:null,session:null},error:m});if(!p||!p.session||!p.user){const g=new Rr;return this._returnResult({data:{user:null,session:null},error:g})}return p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("SIGNED_IN",p.session)),this._returnResult({data:p,error:m})}catch(a){if(W(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async signInWithOtp(e){var a,r,o,c,u;try{if("email"in e){const{email:d,options:p}=e;let m=null,g=null;this.flowType==="pkce"&&([m,g]=await xr(this.storage,this.storageKey));const{error:v}=await ie(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:d,data:(a=p?.data)!==null&&a!==void 0?a:{},create_user:(r=p?.shouldCreateUser)!==null&&r!==void 0?r:!0,gotrue_meta_security:{captcha_token:p?.captchaToken},code_challenge:m,code_challenge_method:g},redirectTo:p?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:v})}if("phone"in e){const{phone:d,options:p}=e,{data:m,error:g}=await ie(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:d,data:(o=p?.data)!==null&&o!==void 0?o:{},create_user:(c=p?.shouldCreateUser)!==null&&c!==void 0?c:!0,gotrue_meta_security:{captcha_token:p?.captchaToken},channel:(u=p?.channel)!==null&&u!==void 0?u:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:m?.message_id},error:g})}throw new rc("You must provide either an email or phone number.")}catch(d){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(d))return this._returnResult({data:{user:null,session:null},error:d});throw d}}async verifyOtp(e){var a,r;try{let o,c;"options"in e&&(o=(a=e.options)===null||a===void 0?void 0:a.redirectTo,c=(r=e.options)===null||r===void 0?void 0:r.captchaToken);const{data:u,error:d}=await ie(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:c}}),redirectTo:o,xform:un});if(d)throw d;if(!u)throw new Error("An error occurred on token verification.");const p=u.session,m=u.user;return p?.access_token&&(await this._saveSession(p),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",p)),this._returnResult({data:{user:m,session:p},error:null})}catch(o){if(W(o))return this._returnResult({data:{user:null,session:null},error:o});throw o}}async signInWithSSO(e){var a,r,o,c,u;try{let d=null,p=null;this.flowType==="pkce"&&([d,p]=await xr(this.storage,this.storageKey));const m=await ie(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(r=(a=e.options)===null||a===void 0?void 0:a.redirectTo)!==null&&r!==void 0?r:void 0}),!((o=e?.options)===null||o===void 0)&&o.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:d,code_challenge_method:p}),headers:this.headers,xform:dx});return!((c=m.data)===null||c===void 0)&&c.url&&At()&&!(!((u=e.options)===null||u===void 0)&&u.skipBrowserRedirect)&&window.location.assign(m.data.url),this._returnResult(m)}catch(d){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(d))return this._returnResult({data:null,error:d});throw d}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{const{data:{session:a},error:r}=e;if(r)throw r;if(!a)throw new yt;const{error:o}=await ie(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:a.access_token});return this._returnResult({data:{user:null,session:null},error:o})})}catch(e){if(W(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{const a=`${this.url}/resend`;if("email"in e){const{email:r,type:o,options:c}=e,{error:u}=await ie(this.fetch,"POST",a,{headers:this.headers,body:{email:r,type:o,gotrue_meta_security:{captcha_token:c?.captchaToken}},redirectTo:c?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:u})}else if("phone"in e){const{phone:r,type:o,options:c}=e,{data:u,error:d}=await ie(this.fetch,"POST",a,{headers:this.headers,body:{phone:r,type:o,gotrue_meta_security:{captcha_token:c?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:u?.message_id},error:d})}throw new rc("You must provide either an email or phone number and a type")}catch(a){if(W(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async getSession(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async a=>a))}async _acquireLock(e,a){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){const r=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),o=(async()=>(await r,await a()))();return this.pendingInLock.push((async()=>{try{await o}catch{}})()),o}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;const r=a();for(this.pendingInLock.push((async()=>{try{await r}catch{}})()),await r;this.pendingInLock.length;){const o=[...this.pendingInLock];await Promise.all(o),this.pendingInLock.splice(0,o.length)}return await r}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1}})}finally{this._debug("#_acquireLock","end")}}async _useSession(e){this._debug("#_useSession","begin");try{const a=await this.__loadSession();return await e(a)}finally{this._debug("#_useSession","end")}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null;const a=await Ai(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",a),a!==null&&(this._isValidSession(a)?e=a:(this._debug("#getSession()","session from storage is not val
56id"),await this._removeSession())),!e)return{data:{session:null},error:null};const r=e.expires_at?e.expires_at*1e3-Date.now()<Nf:!1;if(this._debug("#__loadSession()",`session has${r?"":" not"} expired`,"expires_at",e.expires_at),!r){if(this.userStorage){const u=await Ai(this.userStorage,this.storageKey+"-user");u?.user?e.user=u.user:e.user=qf()}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){const u={value:this.suppressGetSessionWarning};e.user=ox(e.user,u),u.value&&(this.suppressGetSessionWarning=!0)}return{data:{session:e},error:null}}const{data:o,error:c}=await this._callRefreshToken(e.refresh_token);return c?this._returnResult({data:{session:null},error:c}):this._returnResult({data:{session:o},error:null})}finally{this._debug("#__loadSession()","end")}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;const a=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser());return a.data.user&&(this.suppressGetSessionWarning=!0),a}async _getUser(e){try{return e?await ie(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:Va}):await this._useSession(async a=>{var r,o,c;const{data:u,error:d}=a;if(d)throw d;return!(!((r=u.session)===null||r===void 0)&&r.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new yt}:await ie(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(c=(o=u.session)===null||o===void 0?void 0:o.access_token)!==null&&c!==void 0?c:void 0,xform:Va})})}catch(a){if(W(a))return ic(a)&&(await this._removeSession(),await Ct(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:a});throw a}}async updateUser(e,a={}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,a))}async _updateUser(e,a={}){try{return await this._useSession(async r=>{const{data:o,error:c}=r;if(c)throw c;if(!o.session)throw new yt;const u=o.session;let d=null,p=null;this.flowType==="pkce"&&e.email!=null&&([d,p]=await xr(this.storage,this.storageKey));const{data:m,error:g}=await ie(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:a?.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:d,code_challenge_method:p}),jwt:u.access_token,xform:Va});if(g)throw g;return u.user=m.user,await this._saveSession(u),await this._notifyAllSubscribers("USER_UPDATED",u),this._returnResult({data:{user:u.user},error:null})})}catch(r){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(r))return this._returnResult({data:{user:null},error:r});throw r}}async setSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new yt;const a=Date.now()/1e3;let r=a,o=!0,c=null;const{payload:u}=oc(e.access_token);if(u.exp&&(r=u.exp,o=r<=a),o){const{data:d,error:p}=await this._callRefreshToken(e.refresh_token);if(p)return this._returnResult({data:{user:null,session:null},error:p});if(!d)return{data:{user:null,session:null},error:null};c=d}else{const{data:d,error:p}=await this._getUser(e.access_token);if(p)return this._returnResult({data:{user:null,session:null},error:p});c={access_token:e.access_token,refresh_token:e.refresh_token,user:d.user,token_type:"bearer",expires_in:r-a,expires_at:r},await this._saveSession(c),await this._notifyAllSubscribers("SIGNED_IN",c)}return this._returnResult({data:{user:c.user,session:c},error:null})}catch(a){if(W(a))return this._returnResult({data:{session:null,user:null},error:a});throw a}}async refreshSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async a=>{var r;if(!e){const{data:u,error:d}=a;if(d)throw d;e=(r=u.session)!==null&&r!==void 0?r:void 0}if(!e?.refresh_token)throw new yt;const{data:o,error:c}=await this._callRefreshToken(e.refresh_token);return c?this._returnResult({data:{user:null,session:null},error:c}):o?this._returnResult({data:{user:o.user,session:o},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(a){if(W(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async _getSessionFromURL(e,a){var r;try{if(!At())throw new sc("No browser detected.");
56if(e.error||e.error_description||e.error_code)throw new sc(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(a){case"implicit":if(this.flowType==="pkce")throw new e0("Not a valid PKCE flow url.");break;case"pkce":if(this.flowType==="implicit")throw new sc("Not a valid implicit grant flow url.");break;default:}if(a==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new e0("No code detected.");const{data:x,error:B}=await this._exchangeCodeForSession(e.code);if(B)throw B;const Z=new URL(window.location.href);return Z.searchParams.delete("code"),window.history.replaceState(window.history.state,"",Z.toString()),{data:{session:x.session,redirectType:(r=x.redirectType)!==null&&r!==void 0?r:null},error:null}}const{provider_token:o,provider_refresh_token:c,access_token:u,refresh_token:d,expires_in:p,expires_at:m,token_type:g}=e;if(!u||!p||!d||!g)throw new sc("No session defined in URL");const v=Math.round(Date.now()/1e3),b=parseInt(p);let w=v+b;m&&(w=parseInt(m));const S=w-v;S*1e3<=zr&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${S}s, should have been closer to ${b}s`);const T=w-b;v-T>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",T,w,v):v-T<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",T,w,v);const{data:C,error:A}=await this._getUser(u);if(A)throw A;const O={provider_token:o,provider_refresh_token:c,access_token:u,expires_in:b,expires_at:w,refresh_token:d,token_type:g,user:C.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:O,redirectType:e.type},error:null})}catch(o){if(W(o))return this._returnResult({data:{session:null,redirectType:null},error:o});throw o}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error_description)}async _isPKCECallback(e){const a=await Ai(this.storage,`${this.storageKey}-code-verifier`);return!!(e.code&&a)}async signOut(e={scope:"global"}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async a=>{var r;const{data:o,error:c}=a;if(c&&!ic(c))return this._returnResult({error:c});const u=(r=o.session)===null||r===void 0?void 0:r.access_token;if(u){const{error:d}=await this.admin.signOut(u,e);if(d&&!(M2(d)&&(d.status===404||d.status===401||d.status===403)||ic(d)))return this._returnResult({error:d})}return e!=="others"&&(await this._removeSession(),await Ct(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){const a=K2(),r={id:a,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",a),this.stateChangeEmitters.delete(a)}};return this._debug("#onAuthStateChange()","registered callback with id",a),this.stateChangeEmitters.set(a,r),(async()=>(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(a)})))(),{data:{subscription:r}}}async _emitInitialSession(e){return await this._useSession(async a=>{var r,o;try{const{data:{session:c},error:u}=a;if(u)throw u;await((r=this.stateChangeEmitters.get(e))===null||r===void 0?void 0:r.callback("INITIAL_SESSION",c)),this._debug("INITIAL_SESSION","callback id",e,"session",c)}catch(c){await((o=this.stateChangeEmitters.get(e))===null||o===void 0?void 0:o.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",c),ic(c)?console.warn(c):console.error(c)}})}async resetPasswordForEmail(e,a={}){let r=null,o=null;this.flowType==="pkce"&&([r,o]=await xr(this.storage,this.storageKey,!0));try{return await ie(this.fetch,"POST",`${this.url}/recover`,{body:{email:e,code_challenge:r,code_challenge_method:o,gotrue_meta_security:{captcha_token:a.captchaToken}},headers:this.headers,redirectTo:a.redirectTo})}catch(c){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(c))return this._returnResult({data:null,error:c});throw c}}async getUserIdentities(){var e;try{const{data:a,error:r}=await this.getUser();if(r)throw r;return this._returnResult({data:{identities:(e=a.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async linkIdentity(e){return"token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var a;try{const{data:r,error:o}=await this._useSession(async c=>{var u,d,p,m,g;const{data:v,error:b}=c;if(b)throw b;const w=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(u=e.options)===null||u===void 0?void 0:u.redirectTo,scopes:(d=e.options)===null||d===void 0?void 0:d.scopes,queryParams:(p=e.options)===null||p===void 0?void 0:p.queryParams,skipBrowserRedirect:!0});return await ie(this.fetch,"GET",w,{headers:this.headers,jwt:(g=(m=v.session)===null||m===void 0?void 0:m.access_token)!==null&&g!==void 0?g:void 0})});if(o)throw o;return At()&&!(!((a=e.options)===null||a===void 0)&&a.skipBrowserRedirect)&&window.location.assign(r?.url),this._returnResult({data:{provider:e.provider,url:r?.url},error:null})}catch(r){if(W(r))return this._returnResult({data:{provider:e.provider,url:null},error:r});throw r}}async linkIdentityIdToken(e){return await this._useSession(async a=>{var r;try{const{error:o,data:{session:c}}=a;if(o)throw o;const{options:u,provider:d,token:p,access_token:m,nonce:g}=e,v=await ie(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(r=c?.access_token)!==null&&r!==void 0?r:void 0,body:{provider:d,id_token:p,access_token:m,nonce:g,link_identity:!0,gotrue_meta_security:{captcha_token:u?.captchaToken}},xform:un}),{data:b,error:w}=v;return w?this._returnResult({data:{user:null,session:null},error:w}
56):!b||!b.session||!b.user?this._returnResult({data:{user:null,session:null},error:new Rr}):(b.session&&(await this._saveSession(b.session),await this._notifyAllSubscribers("USER_UPDATED",b.session)),this._returnResult({data:b,error:w}))}catch(o){if(await Ct(this.storage,`${this.storageKey}-code-verifier`),W(o))return this._returnResult({data:{user:null,session:null},error:o});throw o}})}async unlinkIdentity(e){try{return await this._useSession(async a=>{var r,o;const{data:c,error:u}=a;if(u)throw u;return await ie(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(o=(r=c.session)===null||r===void 0?void 0:r.access_token)!==null&&o!==void 0?o:void 0})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _refreshAccessToken(e){const a=`#_refreshAccessToken(${e.substring(0,5)}...)`;this._debug(a,"begin");try{const r=Date.now();return await Z2(async o=>(o>0&&await J2(200*Math.pow(2,o-1)),this._debug(a,"refreshing attempt",o),await ie(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:un})),(o,c)=>{const u=200*Math.pow(2,o);return c&&zf(c)&&Date.now()+u-r<zr})}catch(r){if(this._debug(a,"error",r),W(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}finally{this._debug(a,"end")}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,a){const r=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:a.redirectTo,scopes:a.scopes,queryParams:a.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",a,"url",r),At()&&!a.skipBrowserRedirect&&window.location.assign(r),{data:{provider:e,url:r},error:null}}async _recoverAndRefresh(){var e,a;const r="#_recoverAndRefresh()";this._debug(r,"begin");try{const o=await Ai(this.storage,this.storageKey);if(o&&this.userStorage){let u=await Ai(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!u&&(u={user:o.user},await qr(this.userStorage,this.storageKey+"-user",u)),o.user=(e=u?.user)!==null&&e!==void 0?e:qf()}else if(o&&!o.user&&!o.user){const u=await Ai(this.storage,this.storageKey+"-user");u&&u?.user?(o.user=u.user,await Ct(this.storage,this.storageKey+"-user"),await qr(this.storage,this.storageKey,o)):o.user=qf()}if(this._debug(r,"session from storage",o),!this._isValidSession(o)){this._debug(r,"session is not valid"),o!==null&&await this._removeSession();return}const c=((a=o.expires_at)!==null&&a!==void 0?a:1/0)*1e3-Date.now()<Nf;if(this._debug(r,`session has${c?"":" not"} expired with margin of ${Nf}s`),c){if(this.autoRefreshToken&&o.refresh_token){const{error:u}=await this._callRefreshToken(o.refresh_token);u&&(console.error(u),zf(u)||(this._debug(r,"refresh failed with a non-retryable error, removing the session",u),await this._removeSession()))}}else if(o.user&&o.user.__isUserNotAvailableProxy===!0)try{const{data:u,error:d}=await this._getUser(o.access_token);!d&&u?.user?(o.user=u.user,await this._saveSession(o),await this._notifyAllSubscribers("SIGNED_IN",o)):this._debug(r,"could not get user data, skipping SIGNED_IN notification")}catch(u){console.error("Error getting user data:",u),this._debug(r,"error getting user data, skipping SIGNED_IN notification",u)}else await this._notifyAllSubscribers("SIGNED_IN",o)}catch(o){this._debug(r,"error",o),console.error(o);return}finally{this._debug(r,"end")}}async _callRefreshToken(e){var a,r;if(!e)throw new yt;if(this.refreshingDeferred)return this.refreshingDeferred.promise;const o=`#_callRefreshToken(${e.substring(0,5)}...)`;this._debug(o,"begin");try{this.refreshingDeferred=new Kc;const{data:c,error:u}=await this._refreshAccessToken(e);if(u)throw u;if(!c.session)throw new yt;await this._saveSession(c.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",c.session);const d={data:c.session,error:null};return this.refreshingDeferred.resolve(d),d}catch(c){if(this._debug(o,"error",c),W(c)){const u={data:null,error:c};return zf(c)||await this._removeSession(),(a=this.refreshingDeferred)===null||a===void 0||a.resolve(u),u}throw(r=this.refreshingDeferred)===null||r===void 0||r.reject(c),c}finally{this.refreshingDeferred=null,this._debug(o,"end")}}async _notifyAllSubscribers(e,a,r=!0){const o=`#_notifyAllSubscribers(${e})`;this._debug(o,"begin",a,`broadcast = ${r}`);try{this.broadcastChannel&&r&&this.broadcastChannel.postMessage({event:e,session:a});const c=[],u=Array.from(this.stateChangeEmitters.values()).map(async d=>{try{await d.callback(e,a)}catch(p){c.push(p)}});if(await Promise.all(u),c.length>0){for(let d=0;d<c.length;d+=1)console.error(c[d]);throw c[0]}}finally{this._debug(o,"end")}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=!0,await Ct(this.storage,`${this.storageKey}-code-verifier`);const a=Object.assign({},e),r=a.user&&a.user.__isUserNotAvailableProxy===!0;if(this.userStorage){!r&&a.user&&await qr(this.userStorage,this.storageKey+"-user",{user:a.user});const o=Object.assign({},a);delete o.user;const c=r0(o);await qr(this.storage,this.storageKey,c)}else{const o=r0(a);await qr(this.storage,this.storageKey,o)}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=!1,await Ct(this.storage,this.storageKey),await Ct(this.storage,this.storageKey+"-code-verifier"),await Ct(this.storage,this.storageKey+"-user"),this.userStorage&&await Ct(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null)}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");const e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&At()&&window?.removeEventListener&&window.removeEventListener("visibilitychange",e)}
56catch(a){console.error("removing visibilitychange callback failed",a)}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");const e=setInterval(()=>this._autoRefreshTokenTick(),zr);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);const a=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick()},0);this.autoRefreshTickTimeout=a,a&&typeof a=="object"&&typeof a.unref=="function"?a.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(a)}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");const e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);const a=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,a&&clearTimeout(a)}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh()}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh()}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{const e=Date.now();try{return await this._useSession(async a=>{const{data:{session:r}}=a;if(!r||!r.refresh_token||!r.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}const o=Math.floor((r.expires_at*1e3-e)/zr);this._debug("#_autoRefreshTokenTick()",`access token expires in ${o} ticks, a tick lasts ${zr}ms, refresh threshold is ${ih} ticks`),o<=ih&&await this._callRefreshToken(r.refresh_token)})}catch(a){console.error("Auto refresh tick failed with error. This is likely a transient error.",a)}}finally{this._debug("#_autoRefreshTokenTick()","end")}})}catch(e){if(e instanceof Iw)this._debug("auto refresh token tick lock not available");else throw e}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!At()||!window?.addEventListener)return this.autoRefreshToken&&this.startAutoRefresh(),!1;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1)}catch(e){this._debug("#visibilityChangedCallback","error",e)}},window?.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0)}catch(e){console.error("_handleVisibilityChange",e)}}async _onVisibilityChanged(e){const a=`#_onVisibilityChanged(${e})`;this._debug(a,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),e||(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(a,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh()}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh()}async _getUrlForProvider(e,a,r){const o=[`provider=${encodeURIComponent(a)}`];if(r?.redirectTo&&o.push(`redirect_to=${encodeURIComponent(r.redirectTo)}`),r?.scopes&&o.push(`scopes=${encodeURIComponent(r.scopes)}`),this.flowType==="pkce"){const[c,u]=await xr(this.storage,this.storageKey),d=new URLSearchParams({code_challenge:`${encodeURIComponent(c)}`,code_challenge_method:`${encodeURIComponent(u)}`});o.push(d.toString())}if(r?.queryParams){const c=new URLSearchParams(r.queryParams);o.push(c.toString())}return r?.skipBrowserRedirect&&o.push(`skip_http_redirect=${r.skipBrowserRedirect}`),`${e}?${o.join("&")}`}async _unenroll(e){try{return await this._useSession(async a=>{var r;const{data:o,error:c}=a;return c?this._returnResult({data:null,error:c}):await ie(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(r=o?.session)===null||r===void 0?void 0:r.access_token})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _enroll(e){try{return await this._useSession(async a=>{var r,o;const{data:c,error:u}=a;if(u)return this._returnResult({data:null,error:u});const d=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:p,error:m}=await ie(this.fetch,"POST",`${this.url}/factors`,{body:d,headers:this.headers,jwt:(r=c?.session)===null||r===void 0?void 0:r.access_token});return m?this._returnResult({data:null,error:m}):(e.factorType==="totp"&&p.type==="totp"&&(!((o=p?.totp)===null||o===void 0)&&o.qr_code)&&(p.totp.qr_code=`data:image/svg+xml;utf-8,${p.totp.qr_code}`),this._returnResult({data:p,error:null}))})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _verify(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async a=>{var r;const{data:o,error:c}=a;if(c)return this._returnResult({data:null,error:c});const u=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?h0(e.webauthn.credential_response):p0(e.webauthn.credential_response)})}:{code:e.code}),{data:d,error:p}=await ie(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:u,headers:this.headers,jwt:(r=o?.session)===null||r===void 0?void 0:r.access_token});return p?this._returnResult({data:null,error:p}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+d.expires_in},d)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",d),this._returnResult({data:d,error:p}))})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}})}async _challenge(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async a=>{var r;const{data:o,error:c}=a;if(c)return this._returnResult({data:null,error:c});const u=await ie(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(r=o?.session)===null||r===void 0?void 0:r.access_token});if(u.error)return u;const{data:d}=u;if(d.type!=="webauthn")return{data:d,error:null};switch(d.webauthn.type){case"create":return{data:Object.assign(Object.assign({},d),{webauthn:Object.assign(Object.assign({},d.webauthn),{credential_options:Object.assign(Object.assign({},d.webauthn.credential_options),{publicKey:d0(d.webauthn.credential_options.publicKey)})})}),error:null};case"request":return{data:Object.assign(Object.assign({},d),{webauthn:Object.assign(Object.assign({},d.webauthn),{credential_options:Object.assign(Object.assign({},d.webauthn.credential_options),{publicKey:f0(d.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}})}async _challengeAndVerify(e){const{data:a,error:r}=await this._challenge({factorId:e.factorId});return r?this._returnResult({data:null,error:r}):await this._verify({factorId:e.factorId,challengeId:a.id,code:e.code})}async _listFactors(){var e;const{data:{user:a},error:r}=await this.getUser();if(r)return{data:null,error:r};const o={all:[],phone:[],totp:[],webauthn:[]};for(const c of(e=a?.factors)!==null&&e!==void 0?e:[])o.all.push(c),c.status==="verified"&&o[c.factor_type].push(c);return{data:o,error:null}}async _getAuthenticatorAssuranceLevel(e){var a,r,o,c;if(e)try{const{payload:w}=oc(e);let S=null;w.aal&&(S=w.aal);let T=S;const{data:{user:C},error:A}=await this.getUser(e);if(A)return this._returnResult({data:null,error:A});
56((r=(a=C?.factors)===null||a===void 0?void 0:a.filter(B=>B.status==="verified"))!==null&&r!==void 0?r:[]).length>0&&(T="aal2");const x=w.amr||[];return{data:{currentLevel:S,nextLevel:T,currentAuthenticationMethods:x},error:null}}catch(w){if(W(w))return this._returnResult({data:null,error:w});throw w}const{data:{session:u},error:d}=await this.getSession();if(d)return this._returnResult({data:null,error:d});if(!u)return{data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};const{payload:p}=oc(u.access_token);let m=null;p.aal&&(m=p.aal);let g=m;((c=(o=u.user.factors)===null||o===void 0?void 0:o.filter(w=>w.status==="verified"))!==null&&c!==void 0?c:[]).length>0&&(g="aal2");const b=p.amr||[];return{data:{currentLevel:m,nextLevel:g,currentAuthenticationMethods:b},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async a=>{const{data:{session:r},error:o}=a;return o?this._returnResult({data:null,error:o}):r?await ie(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:r.access_token,xform:c=>({data:c,error:null})}):this._returnResult({data:null,error:new yt})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _approveAuthorization(e,a){try{return await this._useSession(async r=>{const{data:{session:o},error:c}=r;if(c)return this._returnResult({data:null,error:c});if(!o)return this._returnResult({data:null,error:new yt});const u=await ie(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:o.access_token,body:{action:"approve"},xform:d=>({data:d,error:null})});return u.data&&u.data.redirect_url&&At()&&!a?.skipBrowserRedirect&&window.location.assign(u.data.redirect_url),u})}catch(r){if(W(r))return this._returnResult({data:null,error:r});throw r}}async _denyAuthorization(e,a){try{return await this._useSession(async r=>{const{data:{session:o},error:c}=r;if(c)return this._returnResult({data:null,error:c});if(!o)return this._returnResult({data:null,error:new yt});const u=await ie(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:o.access_token,body:{action:"deny"},xform:d=>({data:d,error:null})});return u.data&&u.data.redirect_url&&At()&&!a?.skipBrowserRedirect&&window.location.assign(u.data.redirect_url),u})}catch(r){if(W(r))return this._returnResult({data:null,error:r});throw r}}async _listOAuthGrants(){try{return await this._useSession(async e=>{const{data:{session:a},error:r}=e;return r?this._returnResult({data:null,error:r}):a?await ie(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:a.access_token,xform:o=>({data:o,error:null})}):this._returnResult({data:null,error:new yt})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async a=>{const{data:{session:r},error:o}=a;return o?this._returnResult({data:null,error:o}):r?(await ie(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new yt})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async fetchJwk(e,a={keys:[]}){let r=a.keys.find(d=>d.kid===e);if(r)return r;const o=Date.now();if(r=this.jwks.keys.find(d=>d.kid===e),r&&this.jwks_cached_at+j2>o)return r;const{data:c,error:u}=await ie(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(u)throw u;return!c.keys||c.keys.length===0||(this.jwks=c,this.jwks_cached_at=o,r=c.keys.find(d=>d.kid===e),!r)?null:r}async getClaims(e,a={}){try{let r=e;if(!r){const{data:w,error:S}
56=await this.getSession();if(S||!w.session)return this._returnResult({data:null,error:S});r=w.session.access_token}const{header:o,payload:c,signature:u,raw:{header:d,payload:p}}=oc(r);a?.allowExpired||ix(c.exp);const m=!o.alg||o.alg.startsWith("HS")||!o.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(o.kid,a?.keys?{keys:a.keys}:a?.jwks);if(!m){const{error:w}=await this.getUser(r);if(w)throw w;return{data:{claims:c,header:o,signature:u},error:null}}const g=rx(o.alg),v=await crypto.subtle.importKey("jwk",m,g,!0,["verify"]);if(!await crypto.subtle.verify(g,v,u,G2(`${d}.${p}`)))throw new oh("Invalid JWT signature");return{data:{claims:c,header:o,signature:u},error:null}}catch(r){if(W(r))return this._returnResult({data:null,error:r});throw r}}async signInWithPasskey(e){var a,r,o;vn(this.experimental);try{if(!Rc())return this._returnResult({data:null,error:new _n("Browser does not support WebAuthn",null)});const{data:c,error:u}=await this._startPasskeyAuthentication({options:{captchaToken:(a=e?.options)===null||a===void 0?void 0:a.captchaToken}});if(u||!c)return this._returnResult({data:null,error:u});const d=f0(c.options),p=(o=(r=e?.options)===null||r===void 0?void 0:r.signal)!==null&&o!==void 0?o:lh.createNewAbortSignal(),{data:m,error:g}=await Gw({publicKey:d,signal:p});if(g||!m)return this._returnResult({data:null,error:g??new _n("WebAuthn ceremony failed",null)});const v=p0(m);return this._verifyPasskeyAuthentication({challengeId:c.challenge_id,credential:v})}catch(c){if(W(c))return this._returnResult({data:null,error:c});throw c}}async registerPasskey(e){var a,r;vn(this.experimental);try{if(!Rc())return this._returnResult({data:null,error:new _n("Browser does not support WebAuthn",null)});const{data:o,error:c}=await this._startPasskeyRegistration();if(c||!o)return this._returnResult({data:null,error:c});const u=d0(o.options),d=(r=(a=e?.options)===null||a===void 0?void 0:a.signal)!==null&&r!==void 0?r:lh.createNewAbortSignal(),{data:p,error:m}=await Hw({publicKey:u,signal:d});if(m||!p)return this._returnResult({data:null,error:m??new _n("WebAuthn ceremony failed",null)});const g=h0(p);return this._verifyPasskeyRegistration({challengeId:o.challenge_id,credential:g})}catch(o){if(W(o))return this._returnResult({data:null,error:o});throw o}}async _startPasskeyRegistration(){vn(this.experimental);try{return await this._useSession(async e=>{const{data:{session:a},error:r}=e;if(r)return this._returnResult({data:null,error:r});if(!a)return this._returnResult({data:null,error:new yt});const{data:o,error:c}=await ie(this.fetch,"POST",`${this.url}/passkeys/registration/options`,{headers:this.headers,jwt:a.access_token,body:{}});return c?this._returnResult({data:null,error:c}):this._returnResult({data:o,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyRegistration(e){vn(this.experimental);try{return await this._useSession(async a=>{const{data:{session:r},error:o}=a;if(o)return this._returnResult({data:null,error:o});if(!r)return this._returnResult({data:null,error:new yt});const{data:c,error:u}=await ie(this.fetch,"POST",`${this.url}/passkeys/registration/verify`,{headers:this.headers,jwt:r.access_token,body:{challenge_id:e.challengeId,credential:e.credential}});return u?this._returnResult({data:null,error:u}):this._returnResult({data:c,error:null})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _startPasskeyAuthentication(e){var a;vn(this.experimental);try{const{data:r,error:o}=await ie(this.fetch,"POST",`${this.url}/passkeys/authentication/options`,{headers:this.headers,body:{gotrue_meta_security:{captcha_token:(a=e?.options)===null||a===void 0?void 0:a.captchaToken}}});return o?this._returnResult({data:null,error:o}):this._returnResult({data:r,error:null})}catch(r){if(W(r))return this._returnResult({data:null,error:r});throw r}}async _verifyPasskeyAuthentication(e){vn(this.experimental);try{const{data:a,error:r}=await ie(this.fetch,"POST",`${this.url}/passkeys/authentication/verify`,{headers:this.headers,body:{challenge_id:e.challengeId,credential:e.credential},xform:un});return r?this._returnResult({data:null,error:r}):(a.session&&(await this._saveSession(a.session),await this._notifyAllSubscribers("SIGNED_IN",a.session)),this._returnResult({data:a,error:null}))}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _listPasskeys(){vn(this.experimental);try{return await this._useSession(async e=>{const{data:{session:a},error:r}=e;if(r)return this._returnResult({data:null,error:r});if(!a)return this._returnResult({data:null,error:new yt});const{data:o,error:c}=await ie(this.fetch,"GET",`${this.url}/passkeys`,{headers:this.headers,jwt:a.access_token,xform:u=>({data:u,error:null})});return c?this._returnResult({data:null,error:c}):this._returnResult({data:o,error:null})})}catch(e){if(W(e))return this._returnResult({data:null,error:e});throw e}}async _updatePasskey(e){vn(this.experimental);try{return await this._useSession(async a=>{const{data:{session:r},error:o}=a;if(o)return this._returnResult({data:null,error:o});if(!r)return this._returnResult({data:null,error:new yt});const{data:c,error:u}=await ie(this.fetch,"PATCH",`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:r.access_token,body:{friendly_name:e.friendlyName}});return u?this._returnResult({data:null,error:u}):this._returnResult({data:c,error:null})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}async _deletePasskey(e){vn(this.experimental);try{return await this._useSession(async a=>{const{data:{session:r},error:o}=a;if(o)return this._returnResult({data:null,error:o});if(!r)return this._returnResult({data:null,error:new yt});const{error:c}
56=await ie(this.fetch,"DELETE",`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:r.access_token,noResolveJson:!0});return c?this._returnResult({data:null,error:c}):this._returnResult({data:null,error:null})})}catch(a){if(W(a))return this._returnResult({data:null,error:a});throw a}}}vo.nextInstanceID={};const xx=vo,Ox="2.105.4";let Js="";typeof Deno<"u"?Js="deno":typeof document<"u"?Js="web":typeof navigator<"u"&&navigator.product==="ReactNative"?Js="react-native":Js="node";const Lx={"X-Client-Info":`supabase-js-${Js}/${Ox}`},Nx={headers:Lx},zx={schema:"public"},qx={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:"implicit"},Dx={};function yo(t){"@babel/helpers - typeof";return yo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},yo(t)}function jx(t,e){if(yo(t)!="object"||!t)return t;var a=t[Symbol.toPrimitive];if(a!==void 0){var r=a.call(t,e);if(yo(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Px(t){var e=jx(t,"string");return yo(e)=="symbol"?e:e+""}function Mx(t,e,a){return(e=Px(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function g0(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),a.push.apply(a,r)}return a}function at(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?arguments[e]:{};e%2?g0(Object(a),!0).forEach(function(r){Mx(t,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):g0(Object(a)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))})}return t}const Ux=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),Bx=()=>Headers,Ix=(t,e,a)=>{const r=Ux(a),o=Bx();return async(c,u)=>{var d;const p=(d=await e())!==null&&d!==void 0?d:t;let m=new o(u?.headers);return m.has("apikey")||m.set("apikey",t),m.has("Authorization")||m.set("Authorization",`Bearer ${p}`),r(c,at(at({},u),{},{headers:m}))}};function Fx(t){return t.endsWith("/")?t:t+"/"}function $x(t,e){var a,r;const{db:o,auth:c,realtime:u,global:d}=t,{db:p,auth:m,realtime:g,global:v}=e,b={db:at(at({},p),o),auth:at(at({},m),c),realtime:at(at({},g),u),storage:{},global:at(at(at({},v),d),{},{headers:at(at({},(a=v?.headers)!==null&&a!==void 0?a:{}),(r=d?.headers)!==null&&r!==void 0?r:{})}),accessToken:async()=>""};return t.accessToken?b.accessToken=t.accessToken:delete b.accessToken,b}function Hx(t){const e=t?.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(Fx(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}var Gx=class extends xx{constructor(t){super(t)}},Vx=class{constructor(t,e,a){var r,o;this.supabaseUrl=t,this.supabaseKey=e;const c=Hx(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",c),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",c),this.storageUrl=new URL("storage/v1",c),this.functionsUrl=new URL("functions/v1",c);const u=`sb-${c.hostname.split(".")[0]}-auth-token`,d={db:zx,realtime:Dx,auth:at(at({},qx),{},{storageKey:u}),global:Nx},p=$x(a??{},d);if(this.storageKey=(r=p.auth.storageKey)!==null&&r!==void 0?r:"",this.headers=(o=p.global.headers)!==null&&o!==void 0?o:{},p.accessToken)this.accessToken=p.accessToken,this.auth=new Proxy({},{get:(g,v)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(v)} is not possible`)}});else{var m;this.auth=this._initSupabaseAuthClient((m=p.auth)!==null&&m!==void 0?m:{},this.headers,p.global.fetch)}this.fetch=Ix(e,this._getAccessToken.bind(this),p.global.fetch),this.realtime=this._initRealtimeClient(at({headers:this.headers,accessToken:this._getAccessToken.bind(this),fetch:this.fetch},p.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(g=>this.realtime.setAuth(g)).catch(g=>console.warn("Failed to set initial Realtime auth token:",g)),this.rest=new yR(new URL("rest/v1",c).href,{headers:this.headers,schema:p.db.schema,fetch:this.fetch,timeout:p.db.timeout,urlLengthLimit:p.db.urlLengthLimit}),this.storage=new L2(this.storageUrl.href,this.headers,this.fetch,a?.storage),p.accessToken||this._listenForAuthEvents()}get functions(){return new lR(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},a={head:!1,get:!1,count:void 0}){return this.rest.rpc(t,e,a)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,a;if(t.accessToken)return await t.accessToken();const{data:r}=await t.auth.getSession();return(e=(a=r.session)===null||a===void 0?void 0:a.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:a,storage:r,userStorage:o,storageKey:c,flowType:u,lock:d,debug:p,throwOnError:m,experimental:g,lockAcquireTimeout:v,skipAutoInitialize:b},w,S){const T={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new Gx({url:this.authUrl.href,headers:at(at({},T),w),storageKey:c,autoRefreshToken:t,persistSession:e,detectSessionInUrl:a,storage:r,userStorage:o,flowType:u,lock:d,debug:p,throwOnError:m,experimental:g,fetch:S,lockAcquireTimeout:v,skipAutoInitialize:b,hasCustomAuthorizationHeader:Object.keys(this.headers).some(C=>C.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new e2(this.realtimeUrl.href,at(at({},t),{},{params:at(at({},{apikey:this.supabaseKey}),t?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e?.access_token)})}_handleTokenChanged(t,e,a){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==a?(this.changedAccessToken=a,this.realtime.setAuth(a)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0)}};const Kx=(t,e,a)=>new Vx(t,e,a);function Yx(){if(typeof window<"u")return!1;const t=globalThis.process;if(!t)return!1;const e=t.version;if(e==null)return!1;const a=e.match(/^v(\d+)\./);return a?parseInt(a[1],10)<=18:!1}Yx()&&console.warn("⚠️  Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to N
56ode.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");function Qx(){if(typeof window>"u")return;const t=location.hostname,a=["lovableproject.com","lovableproject-dev.com","lovable.app","gpt-eng.com","gptengineer.run"].some(C=>t===C||t.endsWith("."+C)),r="[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}",o=a?t.match(new RegExp("^(?:id-preview(?:-[a-z0-9]+)?|project)--("+r+")(?:-dev)?(?=\\.|$)","i"))?.[1]??t.match(new RegExp("^("+r+")(?=[.-])","i"))?.[1]:void 0,c=window.parent&&window.parent!==window;if(!o||!c)return localStorage;const u=t.endsWith(".lovableproject-dev.com")||t.endsWith(".gpt-eng.com"),d=u?/^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$|^http:\/\/localhost:3000$/:/^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$/,p=location.ancestorOrigins&&location.ancestorOrigins[0]||(document.referrer?new URL(document.referrer).origin:""),m=p&&d.test(p)?[p]:u?["https://lovable.dev","http://localhost:3000"]:["https://lovable.dev"],g="lovable-preview-auth:result",v=2e3,b=()=>Math.random().toString(36).slice(2)+Date.now().toString(36),w=(C,A,O)=>new Promise(x=>{const B=b();let Z=!1,M;const N=ue=>{Z||(Z=!0,clearTimeout(M),window.removeEventListener("message",Y),x(ue))},Y=ue=>{if(m.indexOf(ue.origin)<0)return;const H=ue.data;H&&H.type===g&&H.requestId===B&&N(H)};window.addEventListener("message",Y);const te={type:C,requestId:B,projectId:o,key:A};O!==void 0&&(te.value=O);for(const ue of m)window.parent.postMessage(te,ue);M=setTimeout(()=>N(null),v)});let S=!0;const T=250;return{getItem:async C=>{let A=await w("lovable-preview-auth:get",C);return!A&&S&&(await new Promise(O=>setTimeout(O,T)),A=await w("lovable-preview-auth:get",C)),S=!1,A&&A.ok&&typeof A.value=="string"?A.value===""?(localStorage.removeItem(C),null):A.value:localStorage.getItem(C)},setItem:(C,A)=>(localStorage.setItem(C,A),w("lovable-preview-auth:set",C,A).then(O=>{O&&O.ok&&typeof O.value=="string"&&localStorage.getItem(C)===A&&(O.value===""?localStorage.removeItem(C):localStorage.setItem(C,O.value))})),removeItem:C=>(localStorage.removeItem(C),w("lovable-preview-auth:remove",C).then(()=>{}))}}function Jx(){return Kx("https://uaysuyuhjwdyzzvedkyl.supabase.co","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InVheXN1eXVoandkeXp6dmVka3lsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Nzg4MDY5NTgsImV4cCI6MjA5NDM4Mjk1OH0.ZaB_SCHZhMrlyJ5x2-dOCry8fwqBP9StSYpXsSUaKnY",{auth:{storage:Qx(),persistSession:!0,autoRefreshToken:!0}})}let jf;const Oc=new Proxy({},{get(t,e,a){return jf||(jf=Jx()),Reflect.get(jf,e,a)}}),Zx=Oi({type:"function"}).client(async({next:t})=>{const{data:e}=await Oc.auth.getSession(),a=e.session?.access_token;return t({headers:a?{Authorization:`Bearer ${a}`}:{}})}),Wx=Oi(),v0=iR(()=>({functionMiddleware:[Zx],requestMiddleware:[Wx]}));var Yc=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Xx=class extends Yc{#e;#n;#t;constructor(){super(),this.#t=t=>{if(typeof window<"u"&&window.addEventListener){const e=()=>t();return window.addEventListener("visibilitychange",e,!1),()=>{window.removeEventListener("visibilitychange",e)}}}}onSubscribe(){this.#n||this.setEventListener(this.#t)}onUnsubscribe(){this.hasListeners()||(this.#n?.(),this.#n=void 0)}setEventListener(t){this.#t=t,this.#n?.(),this.#n=t(e=>{typeof e=="boolean"?this.setFocused(e):this.onFocus()})}setFocused(t){this.#e!==t&&(this.#e=t,this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(e=>{e(t)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},Vw=new Xx,eO={setTimeout:(t,e)=>setTimeout(t,e),clearTimeout:t=>clearTimeout(t),setInterval:(t,e)=>setInterval(t,e),clearInterval:t=>clearInterval(t)},tO=class{#e=eO;#n=!1;setTimeoutProvider(t){this.#e=t}setTimeout(t,e){return this.#e.setTimeout(t,e)}clearTimeout(t){this.#e.clearTimeout(t)}setInterval(t,e){return this.#e.setInterval(t,e)}clearInterval(t){this.#e.clearInterval(t)}},ch=new tO;function nO(t){setTimeout(t,0)}var aO=typeof window>"u"||"Deno"in globalThis;function wn(){}function iO(t,e){return typeof t=="function"?t(e):t}function rO(t){return typeof t=="number"&&t>=0&&t!==1/0}function sO(t,e){return Math.max(t+(e||0)-Date.now(),0)}function uh(t,e){return typeof t=="function"?t(e):t}function oO(t,e){return typeof t=="function"?t(e):t}function y0(t,e){const{type:a="all",exact:r,fetchStatus:o,predicate:c,queryKey:u,stale:d}=t;if(u){if(r){if(e.queryHash!==Ih(u,e.options))return!1}else if(!wo(e.queryKey,u))return!1}if(a!=="all"){const p=e.isActive();if(a==="active"&&!p||a==="inactive"&&p)return!1}return!(typeof d=="boolean"&&e.isStale()!==d||o&&o!==e.state.fetchStatus||c&&!c(e))}function b0(t,e){const{exact:a,status:r,predicate:o,mutationKey:c}=t;if(c){if(!e.options.mutationKey)return!1;if(a){if(bo(e.options.mutationKey)!==bo(c))return!1}else if(!wo(e.options.mutationKey,c))return!1}return!(r&&e.state.status!==r||o&&!o(e))}function Ih(t,e){return(e?.queryKeyHashFn||bo)(t)}function bo(t){return JSON.stringify(t,(e,a)=>dh(a)?Object.keys(a).sort().reduce((r,o)=>(r[o]=a[o],r),{}):a)}function wo(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(a=>wo(t[a],e[a])):!1}var lO=Object.prototype.hasOwnProperty;function Kw(t,e,a=0){if(t===e)return t;if(a>500)return e;const r=w0(t)&&w0(e);if(!r&&!(dh(t)&&dh(e)))return e;const c=(r?t:Object.keys(t)).length,u=r?e:Object.keys(e),d=u.length,p=r?new Array(d):{};let m=0;for(let g=0;g<d;g++){const v=r?g:u[g],b=t[v],w=e[v];
vendor: 22,318 bytes, line 56
56if(b===w){p[v]=b,(r?g<c:lO.call(t,v))&&m++;continue}if(b===null||w===null||typeof b!="object"||typeof w!="object"){p[v]=w;continue}const S=Kw(b,w,a+1);p[v]=S,S===b&&m++}return c===d&&m===c?t:p}function cz(t,e){if(!e||Object.keys(t).length!==Object.keys(e).length)return!1;for(const a in t)if(t[a]!==e[a])return!1;return!0}function w0(t){return Array.isArray(t)&&t.length===Object.keys(t).length}function dh(t){if(!_0(t))return!1;const e=t.constructor;if(e===void 0)return!0;const a=e.prototype;return!(!_0(a)||!a.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(t)!==Object.prototype)}function _0(t){return Object.prototype.toString.call(t)==="[object Object]"}function cO(t){return new Promise(e=>{ch.setTimeout(e,t)})}function uO(t,e,a){return typeof a.structuralSharing=="function"?a.structuralSharing(t,e):a.structuralSharing!==!1?Kw(t,e):e}function dO(t,e,a=0){const r=[...t,e];return a&&r.length>a?r.slice(1):r}function fO(t,e,a=0){const r=[e,...t];return a&&r.length>a?r.slice(0,-1):r}var Fh=Symbol();function Yw(t,e){return!t.queryFn&&e?.initialPromise?()=>e.initialPromise:!t.queryFn||t.queryFn===Fh?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}function uz(t,e){return typeof t=="function"?t(...e):!!t}function hO(t,e,a){let r=!1,o;return Object.defineProperty(t,"signal",{enumerable:!0,get:()=>(o??=e(),r||(r=!0,o.aborted?a():o.addEventListener("abort",a,{once:!0})),o)}),t}var Qw=(()=>{let t=()=>aO;return{isServer(){return t()},setIsServer(e){t=e}}})();function pO(){let t,e;const a=new Promise((o,c)=>{t=o,e=c});a.status="pending",a.catch(()=>{});function r(o){Object.assign(a,o),delete a.resolve,delete a.reject}return a.resolve=o=>{r({status:"fulfilled",value:o}),t(o)},a.reject=o=>{r({status:"rejected",reason:o}),e(o)},a}var mO=nO;function gO(){let t=[],e=0,a=d=>{d()},r=d=>{d()},o=mO;const c=d=>{e?t.push(d):o(()=>{a(d)})},u=()=>{const d=t;t=[],d.length&&o(()=>{r(()=>{d.forEach(p=>{a(p)})})})};return{batch:d=>{let p;e++;try{p=d()}finally{e--,e||u()}return p},batchCalls:d=>(...p)=>{c(()=>{d(...p)})},schedule:c,setNotifyFunction:d=>{a=d},setBatchNotifyFunction:d=>{r=d},setScheduler:d=>{o=d}}}var Lt=gO(),vO=class extends Yc{#e=!0;#n;#t;constructor(){super(),this.#t=t=>{if(typeof window<"u"&&window.addEventListener){const e=()=>t(!0),a=()=>t(!1);return window.addEventListener("online",e,!1),window.addEventListener("offline",a,!1),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",a)}}}}onSubscribe(){this.#n||this.setEventListener(this.#t)}onUnsubscribe(){this.hasListeners()||(this.#n?.(),this.#n=void 0)}setEventListener(t){this.#t=t,this.#n?.(),this.#n=t(this.setOnline.bind(this))}setOnline(t){this.#e!==t&&(this.#e=t,this.listeners.forEach(a=>{a(t)}))}isOnline(){return this.#e}},Lc=new vO;function yO(t){return Math.min(1e3*2**t,3e4)}function Jw(t){return(t??"online")==="online"?Lc.isOnline():!0}var fh=class extends Error{constructor(t){super("CancelledError"),this.revert=t?.revert,this.silent=t?.silent}};function Zw(t){let e=!1,a=0,r;const o=pO(),c=()=>o.status!=="pending",u=T=>{if(!c()){const C=new fh(T);b(C),t.onCancel?.(C)}},d=()=>{e=!0},p=()=>{e=!1},m=()=>Vw.isFocused()&&(t.networkMode==="always"||Lc.isOnline())&&t.canRun(),g=()=>Jw(t.networkMode)&&t.canRun(),v=T=>{c()||(r?.(),o.resolve(T))},b=T=>{c()||(r?.(),o.reject(T))},w=()=>new Promise(T=>{r=C=>{(c()||m())&&T(C)},t.onPause?.()}).then(()=>{r=void 0,c()||t.onContinue?.()}),S=()=>{if(c())return;let T;const C=a===0?t.initialPromise:void 0;try{T=C??t.fn()}catch(A){T=Promise.reject(A)}Promise.resolve(T).then(v).catch(A=>{if(c())return;const O=t.retry??(Qw.isServer()?0:3),x=t.retryDelay??yO,B=typeof x=="function"?x(a,A):x,Z=O===!0||typeof O=="number"&&a<O||typeof O=="function"&&O(a,A);if(e||!Z){b(A);return}a++,t.onFail?.(a,A),cO(B).then(()=>m()?void 0:w()).then(()=>{e?b(A):S()})})};return{promise:o,status:()=>o.status,cancel:u,continue:()=>(r?.(),o),cancelRetry:d,continueRetry:p,canStart:g,start:()=>(g()?S():w().then(S),o)}}var Ww=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),rO(this.gcTime)&&(this.#e=ch.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(Qw.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e!==void 0&&(ch.clearTimeout(this.#e),this.#e=void 0)}},bO=class extends Ww{#e;#n;#t;#i;#a;#r;#s;constructor(t){super(),this.#s=!1,this.#r=t.defaultOptions,this.setOptions(t.options),this.observers=[],this.#i=t.client,this.#t=this.#i.getQueryCache(),this.queryKey=t.queryKey,this.queryHash=t.queryHash,this.#e=T0(this.options),this.state=t.state??this.#e,this.scheduleGc()}get meta(){return this.options.meta}get promise(){return this.#a?.promise}setOptions(t){if(this.options={...this.#r,...t},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const e=T0(this.options);e.data!==void 0&&(this.setState(S0(e.data,e.dataUpdatedAt)),this.#e=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#t.remove(this)}setData(t,e){const a=uO(this.state.data,t,this.options);return this.#o({data:a,type:"success",dataUpdatedAt:e?.updatedAt,manual:e?.manual}),a}setState(t,e){this.#o({type:"setState",state:t,setStateOptions:e})}cancel(t){const e=this.#a?.promise;return this.#a?.cancel(t),e?e.then(wn).catch(wn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#e}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>oO(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Fh||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>uh(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!sO(this.state.dataUpdatedAt,t)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),this.#t.notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(e=>e!==t),this.observers.length||(this.#a&&(this.#s||this.#l()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#t.notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}#l(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"}invalidate(){this.state.isInvalidated||this.#o({type:"invalidate"})}async fetch(t,e){if(this.state.fetchStatus!=="idle"&&this.#a?.status()!=="rejected"){if(this.state.data!==void 0&&e?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(t&&this.setOptions(t),!this.options.queryFn){const d=this.observers.find(p=>p.options.queryFn);d&&this.setOptions(d.options)}const a=new AbortController,r=d=>{Object.defineProperty(d,"signal",{enumerable:!0,get:()=>(this.#s=!0,a.signal)})},o=()=>{const d=Yw(this.options,e),m=(()=>{const g={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(g),g})();return this.#s=!1,this.options.persister?this.options.persister(d,m,this):d(m)},u=(()=>{const d={fetchOptions:e,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:o};return r(d),d})();this.options.behavior?.onFetch(u,this),this.#n=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==u.fetchOptions?.meta)&&this.#o({type:"fetch",meta:u.fetchOptions?.meta}),this.#a=Zw({initialPromise:e?.initialPromise,fn:u.fetchFn,onCancel:d=>{d instanceof fh&&d.revert&&this.setState({...this.#n,fetchStatus:"idle"}),a.abort()},onFail:(d,p)=>{this.#o({type:"failed",failureCount:d,error:p})},onPause:()=>{this.#o({type:"pause"})},onContinue:()=>{this.#o({type:"continue"})},retry:u.options.retry,retryDelay:u.options.retryDelay,networkMode:u.options.networkMode,canRun:()=>!0});try{const d=await this.#a.start();if(d===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(d),this.#t.config.onSuccess?.(d,this),this.#t.config.onSettled?.(d,this.state.error,this),d}catch(d){if(d instanceof fh){if(d.silent)return this.#a.promise;if(d.revert){if(this.state.data===void 0)throw d;return this.state.data}}throw this.#o({type:"error",error:d}),this.#t.config.onError?.(d,this),this.#t.config.onSettled?.(this.state.data,d,this),d}finally{this.scheduleGc()}}#o(t){const e=a=>{switch(t.type){case"failed":return{...a,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...a,fetchStatus:"paused"};case"continue":return{...a,fetchStatus:"fetching"};case"fetch":return{...a,...wO(a.data,this.options),fetchMeta:t.meta??null};case"success":const r={...a,...S0(t.data,t.dataUpdatedAt),dataUpdateCount:a.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return this.#n=t.manual?r:void 0,r;case"error":const o=t.error;return{...a,error:o,errorUpdateCount:a.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:a.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...a,isInvalidated:!0};case"setState":return{...a,...t.state}}};this.state=e(this.state),Lt.batch(()=>{this.observers.forEach(a=>{a.onQueryUpdate()}),this.#t.notify({query:this,type:"updated",action:t})})}};function wO(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:Jw(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function S0(t,e){return{data:t,dataUpdatedAt:e??Date.now(),error:null,isInvalidated:!1,status:"success"}}function T0(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,a=e!==void 0,r=a?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:a?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:a?"success":"pending",fetchStatus:"idle"}}function E0(t){return{onFetch:(e,a)=>{const r=e.options,o=e.fetchOptions?.meta?.fetchMore?.direction,c=e.state.data?.pages||[],u=e.state.data?.pageParams||[];let d={pages:[],pageParams:[]},p=0;const m=async()=>{let g=!1;const v=S=>{hO(S,()=>e.signal,()=>g=!0)},b=Yw(e.options,e.fetchOptions),w=async(S,T,C)=>{if(g)return Promise.reject();if(T==null&&S.pages.length)return Promise.resolve(S);const O=(()=>{const M={client:e.client,queryKey:e.queryKey,pageParam:T,direction:C?"backward":"forward",meta:e.options.meta};return v(M),M})(),x=await b(O),{maxPages:B}=e.options,Z=C?fO:dO;return{pages:Z(S.pages,x,B),pageParams:Z(S.pageParams,T,B)}};if(o&&c.length){const S=o==="backward",T=S?_O:C0,C={pages:c,pageParams:u},A=T(r,C);d=await w(C,A,S)}else{const S=t??c.length;do{const T=p===0?u[0]??r.initialPageParam:C0(r,d);if(p>0&&T==null)break;d=await w(d,T),p++}while(p<S)}return d};e.options.persister?e.fetchFn=()=>e.options.persister?.(m,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},a):e.fetchFn=m}}}function C0(t,{pages:e,pageParams:a}){const r=e.length-1;return e.length>0?t.getNextPageParam(e[r],e,a[r],a):void 0}function _O(t,{pages:e,pageParams:a}){return e.length>0?t.getPreviousPageParam?.(e[0],e,a[0],a):void 0}var SO=class extends Ww{#e;#n;#t;#i;constructor(t){super(),this.#e=t.client,this.mutationId=t.mutationId,this.#t=t.mutationCache,this.#n=[],this.state=t.state||TO(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){this.#n.includes(t)||(this.#n.push(t),this.clearGcTimeout(),this.#t.notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){this.#n=this.#n.filter(e=>e!==t),this.scheduleGc(),this.#t.notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){this.#n.length||(this.state.status==="pending"?this.scheduleGc():this.#t.remove(this))}continue(){return this.#i?.continue()??this.execute(this.state.variables)}async execute(t){const e=()=>{this.#a({type:"continue"})},a={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#i=Zw({fn:()=>this.options.mutationFn?this.options.mutationFn(t,a):Promise.reject(new Error("No mutationFn found")),onFail:(c,u)=>{this.#a({type:"failed",failureCount:c,error:u})},onPause:()=>{this.#a({type:"pause"})},onContinue:e,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#t.canRun(this)});const r=this.state.status==="pending",o=!this.#i.canStart();try{if(r)e();else{this.#a({type:"pending",variables:t,isPaused:o}),this.#t.config.onMutate&&await this.#t.config.onMutate(t,this,a);const u=await this.options.onMutate?.(t,a);u!==this.state.context&&this.#a({type:"pending",context:u,variables:t,isPaused:o})}const c=await this.#i.start();return await this.#t.config.onSuccess?.(c,t,this.state.context,this,a),await this.options.onSuccess?.(c,t,this.state.context,a),await this.#t.config.onSettled?.(c,null,this.state.variables,this.state.context,this,a),await this.options.onSettled?.(c,null,t,this.state.context,a),this.#a({type:"success",data:c}),c}catch(c){try{await this.#t.config.onError?.(c,t,this.state.context,this,a)}catch(u){Promise.reject(u)}try{await this.options.onError?.(c,t,this.state.context,a)}catch(u){Promise.reject(u)}try{await this.#t.config.onSettled?.(void 0,c,this.state.variables,this.state.context,this,a)}catch(u){Promise.reject(u)}try{await this.options.onSettled?.(void 0,c,t,this.state.context,a)}catch(u){Promise.reject(u)}throw this.#a({type:"error",error:c}),c}finally{this.#t.runNext(this)}}#a(t){const e=a=>{switch(t.type){case"failed":return{...a,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...a,isPaused:!0};case"continue":return{...a,isPaused:!1};case"pending":return{...a,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...a,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...a,data:void 0,error:t.error,failureCount:a.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=e(this.state),Lt.batch(()=>{this.#n.forEach(a=>{a.onMutationUpdate(t)}),this.#t.notify({mutation:this,type:"updated",action:t})})}};function TO(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var EO=class extends Yc{constructor(t={}){super(),this.config=t,this.#e=new Set,this.#n=new Map,this.#t=0}#e;#n;#t;build(t,e,a){const r=new SO({client:t,mutationCache:this,mutationId:++this.#t,options:t.defaultMutationOptions(e),state:a});return this.add(r),r}add(t){this.#e.add(t);const e=lc(t);if(typeof e=="string"){const a=this.#n.get(e);a?a.push(t):this.#n.set(e,[t])}this.notify({type:"added",mutation:t})}remove(t){if(this.#e.delete(t)){const e=lc(t);if(typeof e=="string"){const a=this.#n.get(e);if(a)if(a.length>1){const r=a.indexOf(t);r!==-1&&a.splice(r,1)}else a[0]===t&&this.#n.delete(e)}}this.notify({type:"removed",mutation:t})}canRun(t){const e=lc(t);if(typeof e=="string"){const r=this.#n.get(e)?.find(o=>o.state.status==="pending");return!r||r===t}else return!0}runNext(t){const e=lc(t);return typeof e=="string"?this.#n.get(e)?.find(r=>r!==t&&r.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){Lt.batch(()=>{this.#e.forEach(t=>{this.notify({type:"removed",mutation:t})}),this.#e.clear(),this.#n.clear()})}getAll(){return Array.from(this.#e)}find(t){const e={exact:!0,...t};return this.getAll().find(a=>b0(e,a))}findAll(t={}){return this.getAll().filter(e=>b0(t,e))}notify(t){Lt.batch(()=>{this.listeners.forEach(e=>{e(t)})})}resumePausedMutations(){const t=this.getAll().filter(e=>e.state.isPaused);return Lt.batch(()=>Promise.all(t.map(e=>e.continue().catch(wn))))}};function lc(t){return t.options.scope?.id}var CO=class extends Yc{constructor(t={}){super(),this.config=t,this.#e=new Map}#e;build(t,e,a){const r=e.queryKey,o=e.queryHash??Ih(r,e);let c=this.get(o);return c||(c=new bO({client:t,queryKey:r,queryHash:o,options:t.defaultQueryOptions(e),state:a,defaultOptions:t.getQueryDefaults(r)}),this.add(c)),c}add(t){this.#e.has(t.queryHash)||(this.#e.set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const e=this.#e.get(t.queryHash);e&&(t.destroy(),e===t&&this.#e.delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Lt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return this.#e.get(t)}getAll(){return[...this.#e.values()]}find(t){const e={exact:!0,...t};return this.getAll().find(a=>y0(e,a))}findAll(t={}){const e=this.getAll();return Object.keys(t).length>0?e.filter(a=>y0(t,a)):e}notify(t){Lt.batch(()=>{this.listeners.forEach(e=>{e(t)})})}onFocus(){Lt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Lt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},AO=class{#e;#n;#t;#i;#a;#r;#s;#l;constructor(t={}){this.#e=t.queryCache||new CO,this.#n=t.mutationCache||new EO,this.#t=t.defaultOptions||{},this.#i=new Map,this.#a=new Map,this.#r=0}mount(){this.#r++,this.#r===1&&(this.#s=Vw.subscribe(async t=>{t&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#l=Lc.subscribe(async t=>{t&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#r--,this.#r===0&&(this.#s?.(),this.#s=void 0,this.#l?.(),this.#l=void 0)}isFetching(t){return this.#e.findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return this.#n.findAll({...t,status:"pending"}).length}getQueryData(t){const e=this.defaultQueryOptions({queryKey:t});return this.#e.get(e.queryHash)?.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),a=this.#e.build(this,e),r=a.state.data;return r===void 0?this.fetchQuery(t):(t.revalidateIfStale&&a.isStaleByTime(uh(e.staleTime,a))&&this.prefetchQuery(e),Promise.resolve(r))}getQueriesData(t){return this.#e.findAll(t).map(({queryKey:e,state:a})=>{const r=a.data;return[e,r]})}setQueryData(t,e,a){const r=this.defaultQueryOptions({queryKey:t}),c=this.#e.get(r.queryHash)?.state.data,u=iO(e,c);if(u!==void 0)return this.#e.build(this,r).setData(u,{...a,manual:!0})}setQueriesData(t,e,a){return Lt.batch(()=>this.#e.findAll(t).map(({queryKey:r})=>[r,this.setQueryData(r,e,a)]))}getQueryState(t){const e=this.defaultQueryOptions({queryKey:t});return this.#e.get(e.queryHash)?.state}removeQueries(t){const e=this.#e;Lt.batch(()=>{e.findAll(t).forEach(a=>{e.remove(a)})})}resetQueries(t,e){const a=this.#e;return Lt.batch(()=>(a.findAll(t).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...t},e)))}cancelQueries(t,e={}){const a={revert:!0,...e},r=Lt.batch(()=>this.#e.findAll(t).map(o=>o.cancel(a)));return Promise.all(r).then(wn).catch(wn)}invalidateQueries(t,e={}){return Lt.batch(()=>(this.#e.findAll(t).forEach(a=>{a.invalidate()}),t?.refetchType==="none"?Promise.resolve():this.refetchQueries({...t,type:t?.refetchType??t?.type??"active"},e)))}refetchQueries(t,e={}){const a={...e,cancelRefetch:e.cancelRefetch??!0},r=Lt.batch(()=>this.#e.findAll(t).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let c=o.fetch(void 0,a);return a.throwOnError||(c=c.catch(wn)),o.state.fetchStatus==="paused"?Promise.resolve():c}));return Promise.all(r).then(wn)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const a=this.#e.build(this,e);return a.isStaleByTime(uh(e.staleTime,a))?a.fetch(e):Promise.resolve(a.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(wn).catch(wn)}fetchInfiniteQuery(t){return t.behavior=E0(t.pages),this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(wn).catch(wn)}ensureInfiniteQueryData(t){return t.behavior=E0(t.pages),this.ensureQueryData(t)}resumePausedMutations(){return Lc.isOnline()?this.#n.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#n}getDefaultOptions(){return this.#t}setDefaultOptions(t){this.#t=t}setQueryDefaults(t,e){this.#i.set(bo(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...this.#i.values()],a={};return e.forEach(r=>{wo(t,r.queryKey)&&Object.assign(a,r.defaultOptions)}),a}setMutationDefaults(t,e){this.#a.set(bo(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...this.#a.values()],a={};return e.forEach(r=>{wo(t,r.mutationKey)&&Object.assign(a,r.defaultOptions)}),a}defaultQueryOptions(t){if(t._defaulted)return t;const e={...this.#t.queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=Ih(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.queryFn===Fh&&(e.enabled=!1),e}defaultMutationOptions(t){return t?._defaulted?t:{...this.#t.mutations,...t?.mutationKey&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){this.#e.clear(),this.#n.clear()}},Xw=re.createContext(void 0),dz=t=>{const e=re.useContext(Xw);if(!e)throw new Error("No QueryClient set, use QueryClientProvider to set one");return e},kO=({client:t,children:e})=>(re.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),V.jsx(Xw.Provider,{value:t,children:e}));const RO="/assets/styles-DBsjvVtm.css",dn={};Object.assign(dn,{fr:{nav:{annonces:"Annonces",home:"Accueil",cours:"Cours",about:"À propos",prof:"Professeurs",tarifs:"Tarifs",ateliers:"Ateliers",services:"Services",contact:"Contact",paiement:"Paiement",avis:"Avis",ressources:"Ressources",faq:"FAQ",book:"Réserver",tagline:"Tutorat",account:"Mon compte",login:"Connexion",carte:"C
56arte interactive"},paiement:{kicker:"Paiement",h1:"Régler votre cours",intro:"Deux options de paiement sont disponibles selon la devise souhaitée. Scannez le QR code correspondant depuis votre application bancaire.",revolutTitle:"Revolut — Euros (€)",revolutDesc:"Pour les transferts en euros depuis l'Europe ou tout compte Revolut. Compte : @renaudg82.",ctbcTitle:"CTBC (China Trust) — Dollars taïwanais (NT$)",ctbcDesc:"Pour les transferts en dollars taïwanais. CTBC Bank (822) — Agence Gongguan (0347) — Compte : 347540420845.",note:"Après votre paiement, merci d'envoyer une confirmation à [email protected]."},avis:{kicker:"Avis",h1:"Ce que disent mes élèves.",intro:"Retrouvez ci-dessous les avis Google laissés par mes élèves. Vous pouvez aussi consulter ma fiche Google Maps et y déposer votre propre avis.",cta:"Laisser un avis sur Google"},footer:{desc:"Cours particuliers de français à Taipei et en ligne. 法文家教",nav:"Navigation",contact:"Contact",city:"Taipei, Taïwan",rights:"Tous droits réservés",backToTop:"Retour en haut"},lang:{switch:"語言 / Language",fr:"Français",zh:"繁體中文",en:"English"},auth:{title:"Espace client",subtitle:"Connectez-vous pour consulter votre solde et l'historique de vos cours.",google:"Continuer avec Google",apple:"Continuer avec Apple",or:"ou",email:"Email",password:"Mot de passe",submit:"Se connecter",submitting:"Connexion…",forgot:"Mot de passe oublié ?",note:"Les comptes sont créés par le professeur. Contactez-nous si vous n'avez pas encore reçu votre invitation.",howKicker:"Première connexion",howSubtitle:"méthode à suivre si vous n'avez pas de compte Google ou Apple",howTitle:"Créez votre mot de passe en 5 étapes",howSteps:["Cliquez sur « Mot de passe oublié ? »","Saisissez votre adresse email","Cliquez sur le lien reçu par email (vérifiez les spams)","Choisissez votre mot de passe","Votre compte est créé 🎉"],forgotTitle:"Mot de passe oublié",forgotSent:"Si un compte existe pour cette adresse, vous recevrez un email avec un lien pour réinitialiser votre mot de passe.",forgotSubmit:"Envoyer le lien",resetTitle:"Nouveau mot de passe",resetNew:"Nouveau mot de passe",resetConfirm:"Confirmer le mot de passe",resetSubmit:"Mettre à jour",resetSaving:"Enregistrement…",errMismatch:"Les mots de passe ne correspondent pas.",errShort:"Le mot de passe doit faire au moins 8 caractères."},home:{badge:"Tuteur privé de français · Taipei",h1a:"Le français,",h1b:"avec élégance.",intro:"Cours particuliers de français à Taïwan et en ligne. Une approche vivante et personnalisée, du premier bonjour jusqu'au DELF C2. 法文家教,從 A1 到 C2。",ctaTrial:"Cours d'essai",ctaCourses:"Découvrir les cours",f1t:"Conversation d'abord",f1d:"Parler dès le premier cours. Méthode immersive adaptée aux apprenants sinophones.",f2t:"Programme sur mesure",f2d:"Voyage, études, travail, DELF/DALF — vos objectifs guident chaque leçon.",f3t:"Culture francophone",f3d:"Cinéma, gastronomie, chanson — apprendre la langue à travers la culture.",quote:"« Une langue différente, c'est une vision différente de la vie. »",ctaH2:"Prêt à commencer ?",ctaP:"Réservez votre cours d'essai (90 min) pour 1 000 NT$. L'occasion d'évaluer votre niveau et de bâtir un programme adapté.",ctaBtn:"Réserver mon essai"},cours:{kicker:"Programmes",h1a:"Du premier",h1b:"bonjour",h1c:"à la maîtrise.",intro:"Tous les cours suivent le Cadre Européen Commun de Référence (CECRL), de A1 à C2. Chaque programme est adapté à vos objectifs : voyage, études, travail, certification ou plaisir.",levelsTitle:"Les six niveaux",durationLabel:"Durée indicative",formatsTitle:"Les formats",formatsIntro:"Choisissez le cadre qui vous ressemble. Vous pouvez aussi alterner.",onlineReqBtn:"Conditions techniques",onlineReqTitle:"Minimum requis pour les cours en ligne",onlineReqCancel:"Si les conditions techniques ne sont pas réunies, le professeur se donne le droit d'annuler le pack.",onlineReqItems:["Internet haut débit minimum 30 Mo/s","Micro et casque de bonne qualité (filaire recommandé)","Environnement étudiant silencieux obligatoire","La webcam n'est pas obligatoire"],speedTest:{btn:"Tester ma vitesse internet",running:"Test en cours…",ok:"Parfait, votre connexion est suffisante pour les cours en ligne.",low:"Votre connexion est inférieure à 30 Mbps. Nous recommandons de vous rapprocher de votre box, de passer en filaire (Ethernet) ou de contacter votre fournisseur avant de réserver un pack en ligne.",error:"Test impossible pour le moment. Réessayez dans un instant.",disclaimer:"Test indicatif — mesuré via le serveur Cloudflare le plus proche."},lessonsTitle:"Exemples de leçons",lessonsIntro:"Un aperçu concret de ce que nous pouvons faire ensemble. Chaque leçon est entièrement personnalisable.",absenceTitle:"Annulations et absences",absenceItems:["
56Si vous annulez le cours 3 h ou plus avant le début du cours, celui-ci ne sera pas décompté.","Annulation moins de 3 h avant le cours, celui-ci sera décompté.","Si vous vous présentez avec du retard, le cours ne finira pas plus tard.","Si vous avez oublié de vous rendre au cours, le cours sera décompté."],ctaH2:"Pas sûr de votre niveau ?",ctaP:"L'évaluation de niveau (1 h) à 1 000 NT$ vous situe précisément sur l'échelle CECRL et oriente votre programme.",ctaBtn:"Réserver mon évaluation",levels:[{name:"Découverte",duration:"≈ 60 h",can:"Se présenter, commander un café, comprendre des phrases simples.",topics:["Alphabet & prononciation","Articles & genres","Verbes être / avoir / aller"]},{name:"Survie",duration:"≈ 80 h",can:"Décrire son environnement, raconter une journée, voyager.",topics:["Passé composé & imparfait","Pronoms COD/COI","Vie quotidienne"]},{name:"Seuil",duration:"≈ 100 h",can:"Débattre, donner son avis, écrire un texte argumenté simple.",topics:["Subjonctif présent","Conditionnel","Articulateurs logiques"]},{name:"Avancé",duration:"≈ 120 h",can:"Comprendre l'essentiel d'un texte complexe, s'exprimer spontanément.",topics:["Subjonctif passé","Discours rapporté","Nuances lexicales"]},{name:"Autonome",duration:"≈ 150 h",can:"Comprendre des textes longs, s'exprimer avec aisance et précision.",topics:["Style soutenu","Idiomes & registres","Argumentation académique"]},{name:"Maîtrise",duration:"Sur mesure",can:"Comprendre sans effort et restituer faits et arguments avec finesse.",topics:["Littérature & essais","Traduction fine","Rhétorique"]}],formats:[{title:"En ligne",desc:"Via Google Meet. Tableau interactif partagé, ressources envoyées après chaque cours.",perks:["Partout dans le monde","Enregistrement disponible","Flexibilité d'horaire (UTC+8)"]},{title:"Présentiel à Taipei",desc:"Dans un café tranquille (Guting, Gongguan ou Zhonghe) ou à votre domicile / bureau.",perks:["Immersion conviviale","Idéal pour conversation","Métro accessible"]},{title:"Flexible",desc:"Combinez présentiel et en ligne selon vos besoins avec un système d'unités.",perks:["Alternance libre","Unités utilisables à la carte","Packs 20, 30 ou 100 unités"]}],lessons:[{title:"Au café : commander comme un Parisien",duration:"60 min",items:["Vocabulaire des boissons et viennoiseries","Formules de politesse : « Je voudrais… s'il vous plaît »","Jeu de rôle : serveur / client","Mini-vidéo authentique : commande au comptoir"]},{title:"Raconter un voyage récent",duration:"60 min",items:["Révision du passé composé vs imparfait","Vocabulaire des transports & hébergements","Expression orale : « Le week-end dernier, je suis allé(e)… »","Production écrite : carte postale de 80 mots"]},{title:"Donner son avis sur un film",duration:"75 min",items:["Lexique de la critique : émouvant, prévisible, captivant…","Subjonctif après « Je ne pense pas que »","Visionnage d'une bande-annonce (Amélie / Intouchables)","Débat structuré entre apprenants"]},{title:"Rédiger un email professionnel",duration:"90 min",items:["Registre formel vs neutre","Formules d'ouverture et de clôture","Atelier : répondre à une offre d'emploi","Correction collective et reformulation"]},{title:"Préparation DALF — essai argumenté",duration:"90 min",items:["Méthodologie de la synthèse de documents","Connecteurs logiques avancés","Étude d'un article du Monde Diplomatique","Production écrite chronométrée 250 mots"]},{title:"Analyse littéraire : un poème de Prévert",duration:"90 min",items:["Lecture expressive et figures de style","Contexte historique et culturel","Discussion : intentions de l'auteur","Écriture créative inspirée du poème"]}]},about:{why:{kicker:"Pourquoi nous ?",h1:"L'excellence sur-mesure",sub:"Une pédagogie pensée pour VOTRE réussite",philo:"Notre philosophie est simple : nous mettons notre expertise entièrement au service de nos étudiants. Chaque parcours est unique, chaque réussite l'est aussi.",chooseTitle:"🌟 Pourquoi choisir notre école ?",chooseText:"Là où le système traditionnel impose un cadre rigide et un rythme unique à tous, nous plaçons l'humain, la flexibilité et l'individualisation au cœur de notre démarche.",privateTitle:"🎯 La puissance des cours privés & de la flexibilité",privateText:"Nous croyons fermement que l'apprentissage individuel est le seul moyen d'atteindre des performances d'exception, sans contrainte et à votre rythme.",limitTitle:"⚠️ La limite des méthodes classiques",limitText:"De nombreux établissements regroupent dans une même classe des étudiants aux niveaux très différents et imposent un rythme fixe et rigide. Résultat ?",points:[{t:"Flexibilité horaire totale",d:"Planifiez vos cours selon votre emploi du temps et vos disponibilités, pour un apprentissage sans stress qui s'adapte à votre vie."},{t:"Méthodes d'enseignement sur-mesure",d:"Nous adaptons nos outils, supports et approches pédagogiques en fonction de votre style d'apprentissage (visuel, pratique, théorique)."},{t:"Professeur 100 % dédié",d:"Vos lacunes sont immédiatement identifiées et vos points forts maximisés grâce à une attention exclusive."},{t:"Des résultats d'exception",d:"Une progression accélérée pour viser — et obtenir — les meilleurs résultats possibles."}],limits:["Des horaires imposés peu adaptés à votre rythme personnel.","Des méthodes génériques qui ne conviennent pas à tous les profils d'apprentissage.","Des compromis permanents : les élèves avancés s'ennuient tandis que ceux en difficulté sont dépassés, générant de la frustration au lieu de la satisfaction."]},kicker:"Qui suis-je",h1a:"Bonjour,",h1b:"je suis votre tuteur.",p1:"Français de naissance et installé à Taipei depuis plusieurs années, j'enseigne le français aux apprenants sinophones — adultes, étudiants et enfants — avec une méthode adaptée à leur langue maternelle et à leurs objectifs.",p2:"Diplômé en lettres et ayant une grande expérience de l'enseignement du Français Langue Étrangère (FLE), j'ai accompagné des centaines d'élèves vers la certification DELF/DALF/TCF, leur
56s études, leur travail, leur vie en France ou simplement le plaisir de converser leurs acquis.",p3a:"Mon approche :",p3b:"parler dès le premier cours",p3c:", comprendre la culture pour mieux maîtriser la langue, et progresser à votre rythme dans un cadre chaleureux.",stats:[{n:"18+",l:"années d'enseignement"},{n:"500+",l:"élèves en cours particuliers"},{n:"5 000+",l:"élèves en classe"},{n:"A1 à C2",l:"préparation DELF/DALF"}]},cartePage:{kicker:"France",h1:"Carte interactive",intro:"Survolez ou touchez le nom d'une ville pour ouvrir son office de tourisme officiel et préparer votre prochain voyage en français.",mapAlt:"Carte illustrée de France avec ses principales villes",officeOf:"Office de tourisme de"},notFound:{h1:"Page introuvable",p:"Cette page n'existe pas ou a été déplacée.",home:"Accueil",contact:"Contact"},faq:{searchPlaceholder:"Rechercher une question ou un mot-clé…",noResults:"Aucun résultat pour",allCategories:"Tout",filterToggle:"Filtres",countOne:"question",countMany:"questions",kicker:"FAQ",h1:"Vos questions, nos réponses.",intro:"Vous trouverez ci-dessous les questions les plus fréquemment posées par les élèves. Si vous ne trouvez pas votre réponse, n'hésitez pas à nous contacter directement.",ctaH2:"Une question reste sans réponse ?",ctaP:"Je suis là pour vous aider. Écrivez-moi et je vous répondrai sous 24 heures.",ctaBtn:"Me contacter",categories:[{title:"Tarifs à la demande (à la minute)",items:[{q:"Comment fonctionne la formule « À la demande » ?",a:"La formule « À la demande » est facturée à la minute : 20 NT$/min en présentiel et 16 NT$/min en ligne. Vous choisissez librement la durée totale que vous souhaitez acheter (de 1 à 99 999 minutes)."},{q:"Y a-t-il une durée minimale par cours ?",a:"Les durées minimales indiquées (par exemple 90 min en présentiel et 60 min en ligne) sont de simples recommandations pour que le cours reste efficace. Aucun blocage : vous saisissez librement le nombre de minutes souhaité."},{q:"Puis-je acheter du temps en présentiel ET en ligne ?",a:"Oui. En choisissant le format flexible, vous achetez deux crédits temps distincts : un crédit présentiel et un crédit en ligne, gérés séparément."},{q:"Comment suivre mon crédit temps restant ?",a:"Dans votre espace « Mon compte », un graphique et un panneau « Crédit à la minute » affichent le temps acheté, consommé et restant, séparément pour le présentiel et le en ligne. Les minutes sont déduites automatiquement après chaque cours."}]},{title:"Cours enfants",items:[{q:"Combien d'enfants peuvent suivre un cours ensemble ?",a:"Jusqu'à 2 enfants peuvent partager un cours. Le tarif partagé correspond à 1,3 × le tarif d'un seul enfant (et non le double)."},{q:"Mes deux enfants ont plus de 3 ans d'écart, peuvent-ils suivre le cours ensemble ?",a:"Non. Si l'écart d'âge dépasse 3 ans, le cours doit être individuel afin de garantir une pédagogie adaptée à chacun. Le calculateur signale ce cas et bloque la réservation groupée."},{q:"Existe-t-il des réductions sur les packs enfants ?",a:"Oui : 10 heures = 5 % de réduction, 20 heures = 10 %, 30 heures = 15 %. Le choix se fait directement dans le calculateur enfants."}]},{title:"Espace étudiant & documents",items:[{q:"Comment accéder à mon espace personnel ?",a:"Rendez-vous sur la page Connexion et identifiez-vous par email et mot de passe, ou via Google. Les comptes sont créés par l'école : si vous n'en avez pas encore, contactez-nous."},{q:"J'ai oublié mon mot de passe, que faire ?",a:"Cliquez sur « Mot de passe oublié ? » sur la page Connexion, saisissez votre email et suivez le lien reçu. Vérifiez vos spams si l'email n'apparaît pas sous quelques minutes."},{q:"Que puis-je voir dans « Mon compte » ?",a:"Vos packs actifs, vos unités et/ou minutes restantes, l'historique de vos cours et de vos paiements, vos documents pédagogiques et vos justificatifs de paiement."},{q:"Faut-il signer un contrat ?",a:"Oui, un contrat d'étudiant est à lire et à accepter. Il est téléchargeable en haut de cette page en anglais et en chinois traditionnel."},{q:"Comment réserver après avoir utilisé un calculateur ?",a:"Les calculateurs (flexible personnalisé, enfants, à la demande, paiement échelonné) pré-remplissent automatiquement le formulaire de contact avec votre configuration : il ne reste qu'à envoyer."},{q:"Puis-je joindre un fichier au formulaire de contact ?",a:"Non, l'envoi de pièces jointes n'est pas disponible depuis le formulaire. Envoyez vos documents par email ou via LINE après votre premier message."}]},{title:"Général",items:[{q:"Qui peut prendre des cours ?",a:"Tout le monde ! Adultes, étudiants, enfants, professionnels et entreprises. Chaque programme est adapté à vos objectifs, votre niveau et votre rythme."},{q:"Quels sont les horaires des cours ?",a:"Cours en face-à-face : lundi au dimanche, 8h30–21h. Cours en ligne : lundi au dimanche, 9h30–21h. Les horaires précis sont fixés ensemble selon vos disponibilités et celles du professeur."},{q:"Puis-je alterner entre présentiel et en ligne ?",a:"Oui, avec les packs flexibles. Le maximum de cours en ligne dépend du pack : 8 pour le pack 20 unités, 12 pour le pack 30 unités, et 36 pour le pack 100 unités. Au-delà, chaque cours en ligne vaut 2 unités."},{q:"Les cours sont-ils individuels ou en groupe ?",a:"Les cours sont exclusivement individuels pour garantir une progression personnalisée et un maximum de temps de parole. Seuls les ateliers et les formations en entreprise peuvent réunir plusieurs participants."},{q:"Puis-je choisir mon professeur ?",a:"Actuellement Renaud et Marjorie assurent les cours. V
56ous pouvez indiquer votre préférence lors de la réservation, selon la disponibilité."},{q:"Pourquoi choisir Parlons Français plutôt qu'un institut classique ?",a:"Nous plaçons l'individualisation au centre : cours 100 % privés, méthodes adaptées à votre style d'apprentissage, flexibilité horaire et suivi personnalisé. Contrairement aux instituts traditionnels, vous progressez à votre rythme sans ralentir sur le groupe."},{q:"Proposez-vous des formations en entreprise ?",a:"Oui, nous proposons des formations en entreprise pour atteindre le niveau A2 ou B1. Elles sont dispensées uniquement en présentiel dans un rayon de 8 km autour de l'école. Au-delà, l'entreprise prend en charge les frais de taxi ou Uber. Les tarifs sont sur la page Tarifs, section Entreprise."}]},{title:"Cours & Niveaux",items:[{q:"Comment savoir mon niveau ?",a:"Je propose une évaluation de niveau (1 h, 1 000 NT$) qui vous situe précisément sur l'échelle CECRL. Vous pouvez aussi faire les tests gratuits dans la section Ressources."},{q:"Quelle est la différence entre le cours d'essai et l'évaluation de niveau ?",a:"Le cours d'essai (90 min, 1 000 NT$) est une vraie leçon pour découvrir la méthode et échanger en français. L'évaluation de niveau (1 h, 1 000 NT$) est un test ciblé pour vous situer précisément sur l'échelle CECRL."},{q:"Combien de temps faut-il pour passer le DELF B2 ?",a:"Cela dépend de votre point de départ et de votre rythme. En moyenne, un élève passant de A2 à B2 suit environ 120 à 150 heures de cours."},{q:"Faut-il acheter un manuel ?",a:"Non, tous les supports pédagogiques sont inclus et personnalisés. J'envoie les ressources après chaque cours."},{q:"Puis-je annuler un cours ?",a:"Oui, si vous annulez 3 heures ou plus avant le début du cours, il n'est pas décompté. En dessous de 3h, le cours est décompté."},{q:"Que se passe-t-il si je suis en retard ou absent ?",a:"Si vous arrivez en retard, le cours ne finira pas plus tard et le temps perdu n'est pas rattrapé. Si vous ne vous présentez pas du tout, le cours sera décompté."}]},{title:"Paiement & Remboursement",items:[{q:"Quels sont les modes de paiement acceptés ?",a:"Virement bancaire en NT$ (CTBC : Bank 822, agence Gongguan 0347, compte 347540420845) ou en euros (Revolut : @renaudg82). Les coordonnées complètes sont sur la page Paiement."},{q:"Puis-je payer en plusieurs fois ?",a:"Les packs 40 cours (présentiel) et 100 unités (flexible) sont payables en 2 fois : 50% au premier cours, 50% dans les 60 jours suivants."},{q:"Comment fonctionne le paiement en plusieurs fois étendu ?",a:`Le paiement échelonné est disponible pour tout achat d'un montant minimum de 15 000 NT$, sur une durée de 2 à 6 mois maximum.
57
58• De 2 à 4 mois : 0 % d'intérêt.
59• 5 ou 6 mois : intérêt de 5 % appliqué sur la somme totale.
60
61Le paiement doit être effectué par virement bancaire entre le 1er et le 5 de chaque mois. En cas de retard ou de non-paiement, le professeur suspend les cours sans possibilité de remboursement du solde restant.
62
63Un calculateur est disponible sur la page Paiement pour estimer votre mensualité.`},{q:"Y a-t-il un remboursement si je change d'avis ?",a:"Oui : 100% dans les 7 jours, 75% dans les 14 jours, 50% dans les 30 jours. Passé ce délai, les cours restants sont transférables à une autre personne dans un délai de 30 jours."},{q:"Les packs ont-ils une date d'expiration ?",a:"Non, il n'y a pas de limite de temps. Vous utilisez vos cours à votre rythme, avec une moyenne minimale d'1 cours par mois sur l'année."},{q:"Puis-je offrir un pack ou un atelier en cadeau ?",a:"Oui. Précisez-le dans le formulaire de contact : le pack ou l'atelier sera réservé au nom du bénéficiaire et le contrat établi en conséquence."}]},{title:"Cours en ligne",items:[{q:"Quelle connexion internet faut-il ?",a:"Un débit minimum de 30 Mbps est recommandé. Vous pouvez tester votre connexion depuis la page Cours."},{q:"La webcam est-elle obligatoire ?",a:"Non, seul un bon micro et un casque sont requis. La webcam est optionnelle selon votre préférence."},{q:"Les cours en ligne sont-ils retranscrits et/ou enregistrés en audio et/ou vidéo ?",a:`Oui, pour la retranscription écrite : celle-ci vous sera envoyée par email.
64
65Non, pour l'enregistrement audio ou vidéo.
66
67Cependant, nous laissons la liberté à l'étudiant de pouvoir le faire de lui-même pour l'audio.
68
69Concernant l'enregistrement vidéo, nous le refusons catégoriquement. Par conséquent, toute vidéo de cours pouvant être accessible sur quelque plateforme que ce soit donnera lieu à des poursuites judiciaires.`}]},{title:"Face-à-face",items:[{q:"Où se déroulent les cours en face-à-face ?",a:"Dans un café tranquille aux alentours de Guting, Gongguan ou Zhonghe, à votre domicile, à votre bureau ou dans notre établissement. Le lieu doit respecter le rayon de déplacement sans surcoût (Zhonghe–Banqiao–Guting–Gongguan). Vous pouvez consulter la carte interactive pour visualiser la zone."},{q:"Quelles sont les conditions pour les cours en face-à-face ?",a:`1 — Le lieu de rendez-vous doit se situer dans un rayon entre Zhonghe, Banqiao, Guting et Gongguan (15 à 20 min de scooter maximum).
70
712 — Le professeur peut se déplacer plus loin moyennant une majoration de 10% du prix du pack.
72
733 — La distance maximale est de 35 min en scooter. Au-delà, l'option en ligne sera demandée. Si l'étudiant refuse, le professeur se verra dans l'obligation de refuser le tutorat.
74
754 — Si l'étudiant vient sur place pour tous les cours en face-à-face, une remise de 10% sur le pack sera accordée.`}]},{title:"Ateliers",items:[{q:"Quels ateliers proposez-vous ?",a:"Nous proposons quatre ateliers : Desserts (crêpes, mousse au chocolat…), Jeux de société (belote, tarot…), Débat (niveaux B1 à C2) et Culture française (film, série, chanson selon votre niveau)."},{q:"Les ateliers sont-ils inclus dans les packs de cours ?",a:"Non. Les ateliers sont payés individuellement et ne sont pas décomptés d'un pack de cours."},{q:"Puis-je choisir le contenu de l'atelier culture ?",a:"Oui, selon votre niveau et vos goûts, nous choisissons ensemble un film, une série, une mini-série ou une chanson à étudier."},{q:"Dois-je apporter du matériel pour l'atelier cuisine ?",a:"Les ingrédients sont fournis. En revanche, le contenant n'est pas fourni : pensez à apporter une boîte ou un récipient pour emporter vos desserts."},{q:"Puis-je offrir un atelier en cadeau ?",a:"Oui, contactez-nous pour organiser un bon cadeau. L'atelier sera réservé au nom du bénéficiaire."}]},{title:"Cours flexibles",items:[{q:"Comment fonctionne le système d'unités ?",a:"Chaque cours en ligne dure 60 min et consomme 1 unité. Chaque cours présentiel dure 90 min et consomme 2 unités. Vous utilisez vos unités selon vos besoins, sans limite de temps."},{q:"Quelle est la différence entre un cours présentiel et un cours en ligne en unités ?",a:"Un cours en ligne = 1 unité (60 min). Un cours présentiel = 2 unités (90 min). Vous pouvez librement alterner les deux formats selon votre planning."},{q:"Puis-je changer de format (présentiel / en ligne) à chaque cours ?",a:"Oui, c'est tout l'intérêt du pack flexible. Vous choisissez le format de chaque cours lors de la réservation, selon votre emploi du temps et vos envies."},{q:"Quel pack flexible choisir selon mon rythme ?",a:"Le pack 20 unités convient à un rythme léger (environ 10 cours en ligne ou 5 présentiels). Le pack 30 unités est le plus populaire. Le pack 100 unités est idéal pour un projet sur le long terme, avec paiement en 2 fois."},{q:"Que se passe-t-il si je dépasse le ratio des cours en ligne ?",a:"Si vous dépassez le ratio des cours en ligne alors chaque nouveau cours en ligne vaudra 2 unités au lieu de 1."},{q:"Comment fonctionne le calculateur « Personnalisé » ?",a:`La 4e formule flexible « Personnalisé » vous permet de composer votre propre pack en indiquant votre nombre de cours en ligne et en face-à-face.
76
77Tarifs à l'unité :
78• Cours en ligne (60 min) : 900 NT$
79• Cours présentiel dans l'établissement (90 min) : 1 300 NT$
80• Cours présentiel à domicile ou au café (90 min) : 1 500 NT$
81
82Minimum requis : 4 cours en face-à-face et 2 cours en ligne. Le calculateur est disponible directement sur la page Tarifs, section Flexible.`}]}]},prof:{kicker:"Professeurs",h1a:"Vos",h1b:"professeurs.",teachers:[{name:"Renaud",bio:["2005 — Diplômé de Paris VII, Master II en lettres classiques et sociologie","Assistant d'éducation en collège parisien","Tuteur à Paris VII","Professeur de français pour étudiants étrangers à Paris VII","Professeur à l'Alliance Française de Taipei pendant 5 ans","Certifié pour le DELF / DALF / TCF","Plus de 18 ans d'expérience (plus de 20 000 heures d'enseignement) acquises dans différentes structures scolaires"]},{name:"Marjorie",bio:["2011 — Diplômée de Lyon III, Licence de chinois","Professeure : du niveau débutant au B2 pendant 8 ans à Tian Ken 天肯法語","Professeure : du niveau débutant au B2 à l'Alliance Française de Taipei","Plus de 12 ans d'expérience (plus de 12 000 heures d'enseignement) acquises"]}]},tarifs:{kicker:"Tarifs",h1:"Des prix clairs, sans surprise.",intro1:"Cours d'essai (90 min) à",intro2:"1 000 NT$",intro3:". Évaluation de niveau 
82(1 h) également à 1 000 NT$. Pas d'engagement, pas de frais cachés.",popular:"Populaire",choose:"Choisir cette formule",note:"*Moyenne de 1 cours par mois minimum. Cette moyenne est calculée sur 1 an.",refundTitle:"Conditions de remboursement",refundPolicy:["Dans les 7 jours après le paiement : remboursement 100 %","Dans les 14 jours après le paiement : remboursement 75 %","Dans les 30 jours après le paiement : remboursement 50 %","Après 30 jours : aucun remboursement ne sera accordé, cependant l'étudiant a la liberté de vendre les cours restants à une autre personne dans un délai de 30 jours."],bookingNote:"Seuls les étudiants ayant pris un pack ont une priorité concernant la réservation de créneaux horaires. Les cours d'essais et les cours uniques ne sont déterminés que selon les créneaux restants selon la disponibilité et l'accord du professeur.",f2fConditionsTitle:"Conditions pour le face-à-face",f2fConditions:["Le lieu de rendez-vous pour les cours en face-à-face doit se situer dans un rayon entre Zhonghe, Banqiao, Guting et Gongguan soit 15 à 20 minutes de scooter maximum.","Le professeur peut se déplacer plus loin pour tous les cours en face-à-face moyennant une majoration de 10% du prix du pack.","La distance maximale de déplacement du professeur est de 35 minutes en scooter. Au-delà l'option en ligne sera demandée. Si l'étudiant refuse alors le professeur se verra dans l'obligation de refuser le tutorat.","Si l'étudiant souhaite venir sur place pour tous les cours en face-à-face alors une remise de 10% sur le pack sera accordée."],categories:[{id:"presentiel",title:"Présentiel",subtitle:"Cours en face à face à Taipei — 90 minutes par séance.",plans:[{name:"Cours unique",price:"1 400",unit:"NT$ / 90 min",desc:"Une séance ponctuelle pour découvrir ou approfondir.",perks:["1 cours individuel de 90 min","Lieu au choix (café, domicile, bureau)","Support pédagogique inclus"]},{name:"Pack 10 cours",price:"13 000",unit:"NT$",desc:"Idéal pour une progression régulière.",perks:["10 cours de 90 min","Plan d'apprentissage personnalisé","Suivi entre les cours","Pas de limite de temps.*"]},{name:"Pack 20 cours",price:"24 000",unit:"NT$",desc:"L'engagement long terme, le meilleur tarif.",perks:["20 cours de 90 min","Programme structuré complet","Pas de limite de temps.*"]},{name:"Pack 40 cours",price:"40 000",unit:"NT$",desc:"Paiement en 2 fois : 50 % au premier cours, 50 % dans les 60 jours suivant le premier cours.",perks:["40 cours de 90 min","Programme structuré complet","Pas de limite de temps.*","Paiement en 2x"]}]},{id:"enligne",title:"En ligne",subtitle:"Via Google Meet — 60 minutes par séance.",plans:[{name:"Pack 10 cours",price:"8 000",unit:"NT$",desc:"Format souple, parfait pour démarrer en ligne.",perks:["10 cours de 60 min","Tableau interactif partagé","Ressources envoyées après chaque cours","Enregistrement disponible"]},{name:"Pack 20 cours",price:"15 000",unit:"NT$",desc:"Pour s'installer dans une routine d'apprentissage.",perks:["20 cours de 60 min","Suivi personnalisé","Plan d'apprentissage sur mesure","Tarif préférentiel"]}]},{id:"flexible",title:"Flexible",subtitle:"Système d'unités à utiliser selon vos besoins.",ratioNote:`Le maximum de cours en ligne est le suivant selon les packs :
83• 20 unités : 8 cours en ligne maximum. Ensuite le cours en ligne vaudra 2 unités.
84• 30 unités : 12 cours en ligne maximum. Ensuite le cours en ligne vaudra 2 unités.
85• 100 unités : 36 cours en ligne maximum. Ensuite le cours en ligne vaudra 2 unités.`,plans:[{name:"20 unités",price:"15 000",unit:"NT$",desc:"Combinez librement présentiel et en ligne.",perks:["Cours F2F = 2 unités","Cours en ligne = 1 unité"]},{name:"30 unités",price:"20 000",unit:"NT$",desc:"Le maximum de souplesse au meilleur prix.",perks:["Cours F2F = 2 unités","Cours en ligne = 1 unité"]},{name:"100 unités",price:"60 000",unit:"NT$",desc:"Paiement en 2 fois : 50 % au premier cours, 50 % dans les 60 jours suivant le premier cours.",perks:["Cours F2F = 2 unités","Cours en ligne = 1 unité","Paiement en 2x"]}]},{id:"entreprise",title:"Entreprise",subtitle:"Formations en entreprise pour atteindre le niveau A2 ou B1 selon le niveau de départ des apprenants. Uniquement en présentiel dans un rayon de 8 km autour de l'école. Au-delà, l'entreprise prend en charge les frais de taxi ou Uber.",plans:[{name:"Formule 1",price:"50 000",unit:"NT$",desc:"Maximum 3 apprenants — pack de 45 h (30 × 1 h 30).",perks:["Jusqu'à 3 apprenants","45 heures de cours","30 séances de 1 h 30","Objectif A2 ou B1"]},{name:"Formule 2",price:"65 000",unit:"NT$",desc:"Maximum 5 apprenants — pack de 60 h (40 × 1 h 30).",perks:["Jusqu'à 5 apprenants","60 heures de cours","40 séances de 1 h 30","Objectif A2 ou B1"]},{name:"Formule 3",price:"90 000",unit:"NT$",desc:"Maximum 10 apprenants — pack de 90 h (60 × 1 h 30).",perks:["Jusqu'à 10 apprenants","90 heures de cours","60 séances de 1 h 30","Objectif A2 ou B1"]}]},{id:"enfants",title:"Enfants",subtitle:"Cours particuliers pour enfants de 4 à 14 ans (2 enfants maximum). Utilisez le calculateur ci-dessous pour estimer le prix selon l'âge et le lieu.",plans:[],kids:{childrenLabel:"Nombre d'enfants",oneChild:"1 enfant",twoChildren:"2 enfants",ageLabel:"Âge de l'enfant",locationLabel:"Lieu du cours",atSchool:"Dans notre établissement",atHome:"À domicile (+20 %)",atHomeBadge:"Majoration domicile +20 % incluse",totalLabel:"Estimation du tarif",durationLabel:"Durée",minutes:"min",child:"Enfant",tierNote:"Tarif par enfant selon l'âge.",ageOutOfRange:"Âge entre 4 et 14 ans.",pricingTitle:"Grille tarifaire",years:"ans",ageGapWarning:"Si l'écart d'âge entre les deux enfants dépasse 3 ans, les cours doivent être individuels et non ensemble.",sharedRateNote:"Tarif partagé 2 enfants : 1,3×",packLabel:"Package (heures)",packNone:"Sans pack",packHours:"h",packDiscountBadge:"Réduction pack",perHour:"Tarif horaire",packSavings:"Économies"}}]},contact:{kicker:"Contact",h1:"Parlons de votre projet.",intro:"Écrivez-moi en français, en anglais ou en chinois (中文 OK). Je réponds sous 24 heures.",labels:{Email:"Email",LINE:"LINE / Tél",Lieu:"Lieu",Horaires:"Horaires"}
85,lieuVal:"Taipei · En ligne (monde entier)",horaires:{f2f:"Cours face à face : Lundi au Dimanche de 8h30 à 21h",online:"Cours en ligne : Lundi au Dimanche de 9h30 à 21h"},thanks:"Merci !",thanksP:"Votre message a bien été envoyé. À très bientôt.",firstName:"Prénom",lastName:"Nom",email:"Email",phone:"Téléphone",level:"Niveau actuel",project:"Votre projet",placeholder:"Parlez-moi de vos objectifs…",formatLabel:"Format souhaité",formatOptions:{presentiel:"Présentiel",enligne:"En ligne",flexible:"Flexible"},submit:"Envoyer ma demande",spamNote:"⚠️ Vérifiez bien votre boîte de spams si vous ne recevez pas notre email de confirmation sous quelques minutes.",cuisineDateLabel:"Date souhaitée pour l'atelier cuisine",cuisineDateHelp:"Réservation possible au minimum 7 jours à l'avance.",cuisineDateError:"L'atelier cuisine doit être réservé au minimum 7 jours avant la date souhaitée.",levels:["Débutant complet","A1 — Élémentaire","A2 — Pré-intermédiaire","B1 — Intermédiaire","B2 — Avancé","C1+ — Maîtrise"]},ressources:{kicker:"Ressources gratuites",h1:"Apprendre le français,",h1b:"à votre rythme.",intro:"Une sélection de fiches, de guides et d'outils gratuits pour progresser entre deux cours — ou pour commencer à apprendre le français par vous-même. Tous les contenus sont conçus à Taïwan, pour des apprenants sinophones et francophiles.",downloadLabel:"Télécharger le PDF",uploadLabel:"Envoyer les PDF",uploadHint:"Une fois les tests complétés, envoyez-les moi par email à [email protected] — je vous renverrai votre niveau estimé sous 48 h.",uploadAudioLabel:"Envoyer l'audio",uploadAudioHint:"Enregistrez votre lecture (formats audio courants acceptés : mp3, m4a, wav, ogg…) et envoyez-la moi par email à [email protected]. Le fichier ne doit pas dépasser 20 Mo.",uploadDocLabel:"Envoyer votre production",uploadDocHint:"Rédigez votre production écrite et envoyez-la moi par email à [email protected]. Formats acceptés : Word (.doc, .docx), PDF, OpenOffice (.odt), texte (.txt)… Je vous renverrai une correction commentée sous 48 h.",linkLabel:"Découvrir",comingSoon:"Bientôt disponible",ctaH2:"Envie d'aller plus loin ?",ctaP:"Ces ressources sont une mise en bouche. Pour vraiment progresser, rien ne remplace une vraie conversation. Réservez un cours d'essai à 1 000 NT$.",ctaBtn:"Réserver mon cours d'essai",items:[{tag:"Vocabulaire · A1-A2",title:"Les 100 verbes français les plus utilisés",desc:"Fiche PDF avec traduction, conjugaison au présent et exemple en contexte. L'essentiel pour comprendre 80 % d'une conversation.",href:"/ressources/100-verbes-francais.pdf"},{tag:"Conjugaison · A1-A2",title:"Les 3 groupes de verbes en français",desc:"Fiche PDF claire et illustrée pour comprendre la différence entre les verbes du 1er, 2e et 3e groupe. La base indispensable pour bien démarrer la conjugaison.",href:"/ressources/les_3_groupes_de_verbes.pdf"},{tag:"Voyage · A1-B1",title:"Survivre en France : 50 phrases utiles",desc:"Commander au café, demander son chemin, prendre le métro, réserver un hôtel. Le guide indispensable avant un séjour en France.",href:"/ressources/survivre-en-france-50-phrases.pdf"},{tag:"Grammaire · A2-B1",title:"Passé composé vs imparfait : la règle simple",desc:"La différence enfin claire, avec un schéma visuel et 20 exemples commentés. Le piège n°1 des apprenants sinophones.",href:"/ressources/passe-compose-vs-imparfait.pdf"},{tag:"Évaluation · Tous niveaux",title:"Multitests de niveau express",desc:"Évaluez votre niveau CECRL (A1 à C2) grâce à 3 mini-tests gratuits : conjugaison, grammaire et vocabulaire. Idéal avant de commencer ou de reprendre les cours.",pdfs:[{label:"Conjugaison",href:"/ressources/qcm_conjugaison_A1_C2.pdf"},{label:"Grammaire",href:"/ressources/qcm_grammaire_A1_C2.pdf"},{label:"Vocabulaire",href:"/ressources/qcm_vocabulaire_A1_C2.pdf"}],uploadEmail:"[email protected]"},{tag:"Lecture · A1-B2",title:"Test de lecture progressif A1 → B2",desc:"Quatre textes distincts, un par niveau 
85(A1, A2, B1, B2), pour évaluer votre lecture à voix haute. Enregistrez-vous et envoyez-moi l'audio pour un retour personnalisé.",href:"/ressources/texte_lecture_progressif_A1_B2.pdf",audioUploadEmail:"[email protected]"},{tag:"Production écrite · A1-C2",title:"Test de production écrite A1 → C2",desc:"Six sujets distincts, un par niveau (A1, A2, B1, B2, C1, C2), pour évaluer votre expression écrite. Rédigez votre texte et envoyez-le moi pour une correction personnalisée.",href:"/ressources/sujets_production_ecrite_cecrl.pdf",docUploadEmail:"[email protected]"},{tag:"Vocabulaire · B1-B2",title:"30 faux-amis français-anglais à éviter",desc:"« Actuellement » ne veut pas dire « actually ». Tour d'horizon des pièges les plus courants pour les sinophones passant par l'anglais.",href:"/ressources/faux-amis-francais-anglais.pdf"},{tag:"Culture · B1-C2",title:"10 films français pour apprendre, par niveau",desc:"De Amélie à La Haine, une sélection commentée avec le niveau requis et le vocabulaire à retenir. Apprendre en s'amusant.",href:"/ressources/10-films-francais.pdf"},{tag:"Référence · Tous niveaux",title:"Tableau récapitulatif CECRL (A1 → C2)",desc:"Comprendre en un coup d'œil les 6 niveaux européens : ce que vous savez faire à chaque palier, les heures d'apprentissage moyennes et l'examen DELF/DALF correspondant.",href:"/ressources/cecrl_A1-C2.pdf"}]},ateliers:{kicker:"Ateliers",h1:"Apprendre en s'amusant.",intro:"Découvrez nos ateliers thématiques pour pratiquer le français autrement — cuisine, jeux et débat.",workshops:[{id:"desserts",icon:"cake",title:"Atelier Desserts",desc:"Apprenez à préparer des desserts populaires en France avec un tuteur natif.",items:["Crêpes","Mousse au chocolat","Gâteau au chocolat","Tiramisu","Crème brûlée"],price:"2 000 NT$",note:"Ingrédients fournis — contenant non fourni. / 60 min",warning:"Il est nécessaire de réserver l'atelier cuisine au minimum 7 jours avant la date désirée."},{id:"jeux",icon:"games",title:"Atelier Jeux de société",desc:"Apprenez les règles et le vocabulaire de jeux de cartes et de plateaux français.",items:["Belote","Tarot","Cochon qui rit","Dames","Et bien d'autres…"],price:"1 500 NT$",note:"/ 90 min"},{id:"debat",icon:"debate",title:"Atelier Débat",desc:"Mettez-vous en situation de défendre votre point de vue en français. Construction d'argumentaire guidée.",items:["Préparation du sujet","Construction de l'argumentaire","Expression orale en situation","Feedback personnalisé"],levels:[{level:"B1",price:"1 500 NT$",duration:"90 min"},{level:"B2",price:"1 700 NT$",duration:"90 min"},{level:"C1",price:"2 000 NT$",duration:"90 min"},{level:"C2",price:"3 000 NT$",duration:"120 min"}],price:""},{id:"culture",icon:"culture",title:"Atelier Culture française",desc:"Selon votre niveau, étudiez un film, une série, une mini-série ou une chanson pour enrichir votre vocabulaire et vos références culturelles.",items:["Analyse de film ou série","Étude de chanson française","Vocabulaire thématique","Références culturelles et historiques"],price:"1 500 NT$",note:"/ 90 min"}],ctaP:"Réservez votre atelier dès maintenant. Une expérience immersive pour progresser en français autrement.",ctaBtn:"Réserver mon atelier",packWarning:"Les ateliers ne sont pas inclus dans les packs de cours. Ils sont à payer individuellement."},services:{kicker:"Services",h1:"Vos démarches en France, simplifiées.",intro:"Nous vous accompagnons dans vos démarches administratives et pratiques en France grâce à notre réseau de contacts.",items:[{id:"housing",icon:"building",title:"Trouver un logement",desc:"Nous cherchons un appartement en France pour vous grâce à notre réseau de contacts. Merci de remplir le formulaire de contact afin de nous préciser vos critères (surface, meublé ou non, prix maximum, etc.).",price:"50 % d'un loyer",note:"Tarif variable selon le loyer trouvé"},{id:"school",icon:"school",title:"Inscription scolaire ou formation",desc:"Nous vous aidons dans les démarches administratives et contactons les personnes concernées en France afin de faire avancer et compléter votre dossier au plus vite et clairement.",price:"3 000 NT$",note:"Par dossier"},{id:"dispute",icon:"scale",title:"Gestion de contentieux",desc:"Que ce soit avec votre propriétaire, une administration ou un particulier, si le problème vous semble trop complexe à gérer linguistiquement, nous pouvons faire l'intermédiaire et résoudre votre problème.",price:"1 000 – 3 000 NT$",note:"Minimum 1 000 NT$ par dossier, maximum 3 000 NT$"}],ctaH2:"Besoin d'aide pour une démarche en France ?",ctaP:"Contactez-nous pour nous décrire votre situation. Nous vous répondrons 
85sous 24 heures.",ctaBtn:"Nous contacter"},account:{title:"Mon compte",hello:"Bonjour",welcome:"Bienvenue",adminBtn:"Admin",logout:"Se déconnecter",loading:"Chargement…",balance:"Solde total",unitsRemaining:"unités restantes",myInfo:"Mes informations",edit:"Modifier",save:"Enregistrer",cancel:"Annuler",firstName:"Prénom",lastName:"Nom",phone:"Téléphone",language:"Langue",myPacks:"Mes packs",noPack:"Aucun pack actif.",colPack:"Pack",colRemaining:"Restant / Total",colPrice:"Prix",colPayment:"Paiement",colPurchased:"Acheté le",colExpires:"Expire le",colProof:"Preuve de paiement",lessonsHistory:"Historique des cours",noLesson:"Aucun cours enregistré.",payments:"Paiements",noPayment:"Aucun paiement.",myDocuments:"Mes documents",docsEmpty:"Aucun document pour le moment. Votre professeur déposera ici vos supports de cours.",docsDownload:"Télécharger",docsUpload:"Téléverser un document",docsLoading:"Chargement…",docsNone:"Aucun document.",proofView:"Voir la preuve",proofNone:"Aucune preuve",proofUpload:"Téléverser JPG/PNG",proofInvalid:"Format invalide : JPG ou PNG uniquement.",proofTooLarge:"Fichier trop volumineux (max 5 Mo).",proofDefinitive:"Définitif : non modifiable après envoi.",proofLocked:"Fichier verrouillé",confirmDelete:"Supprimer ce fichier ?",error:"Erreur",timeCredit:{title:"Crédit temps",purchased:"Total acheté",remaining:"Crédit restant",used:"Consommé",perPack:"Par formule",hoursShort:"h",empty:"Aucun crédit temps (formule à la minute) pour le moment."},minuteCredit:{title:"Crédit à la minute",subtitle:"Minutes achetées et restantes, par format",empty:"Aucun pack à la minute pour le moment.",f2f:"Présentiel",online:"En ligne",remaining:"Restant",used:"Consommé",purchased:"Acheté",hoursShort:"h"},ratioTitle:"Ratio en ligne / face à face (packs Flexible)",ratioOnline:"En ligne",ratioF2F:"Face à face",ratioMaxOnline:"Max en ligne inclus",ratioOverLimit:"Limite dépassée : les cours en ligne au-delà valent 2 unités.",ratioRemaining:"restants avant surcoût"}},zh:{nav:{annonces:"公告",home:"首頁",cours:"課程",about:"關於我",prof:"教師團隊",tarifs:"費用",ateliers:"工作坊",services:"服務",contact:"聯絡",paiement:"付款",avis:"評價",ressources:"免費資源",faq:"常見問題",book:"預約",tagline:"家教",account:"我的帳戶",login:"登入",carte:"互動地圖"},paiement:{kicker:"付款",h1:"課程付款方式",intro:"依照您希望使用的幣別,提供以下兩種付款方式。請使用您的銀行 App 掃描對應的 QR code。",revolutTitle:"Revolut — 歐元(€)",revolutDesc:"適用於歐元轉帳(歐洲或任何 Revolut 帳戶)。帳號:@renaudg82。",ctbcTitle:"中國信託 CTBC — 新台幣(NT$)",ctbcDesc:"適用於新台幣轉帳。中國信託銀行(822)— 公館分行(0347)— 帳號:347540420845。",note:"完成付款後,請寄送付款確認至 [email protected]。"},avis:{kicker:"評價",h1:"學生的真實回饋。",intro:"以下是學生在 Google 上留下的評價。歡迎前往 Google Maps 查看,並留下您的å¯
85¶è²´æ„è¦‹ã€‚",cta:"在 Google 留下評價"},footer:{desc:"台北及線上法文家教課程。法文家教",nav:"導覽",contact:"聯絡",city:"台灣 台北",rights:"版權所有",backToTop:"返回頂部"},lang:{switch:"Langue / Language",fr:"Français",zh:"繁體中文",en:"English"},auth:{title:"學生專區",subtitle:"登入即可查看您的餘額與上課紀錄。",google:"使用 Google 繼續",apple:"使用 Apple 繼續",or:"或",email:"電子郵件",password:"密碼",submit:"登入",submitting:"登入中…",forgot:"忘記密碼?",note:"帳號由老師建立。若尚未收到邀請,請與我們聯繫。",howKicker:"第一次登入",howSubtitle:"若您沒有 Google 或 Apple 帳戶,請按照此方法",howTitle:"5 個步驟設定您的密碼",howSteps:["點擊「忘記密碼?」","輸入您的電子郵件","點擊郵件中的連結(請檢查垃圾郵件)","設定您的密碼","帳號建立完成 🎉"],forgotTitle:"忘記密碼",forgotSent:"若該電子郵件已註冊,您將收到重設密碼的連結。",forgotSubmit:"寄送連結",resetTitle:"設定新密碼",resetNew:"新密碼",resetConfirm:"確認密碼",resetSubmit:"更新",resetSaving:"儲存中…",errMismatch:"兩次輸入的密碼不一致。",errShort:"密碼至少需要 8 個字元。"},home:{badge:"母語老師 · 台北",h1a:"優雅地",h1b:"學法文。",intro:"在台灣與線上提供法文家教。從第一句 bonjour 到 DELF C2,採用生動、量身打造的教學方法。法文家教,A1 到 C2 全程陪伴。",ctaTrial:"預約試上",ctaCourses:"查看課程",f1t:"對話優先",f1d:"第一堂課就開口說。針對華語學習者設計的沉浸式教學。",f2t:"客製化課程",f2d:"旅遊、留學、工作、DELF/DALF — 依您的目標安排每一堂課。",f3t:"法語文化",f3d:"電影、美食、香頌 — 透過文化學習語言。",quote:"「不同的語言,是看待人生的不同視角。」",ctaH2:"準備好開始了嗎?",ctaP:"預約 90 分鐘試上課程(1 000 NT$),評估您的程度並規劃合適的課程。",ctaBtn:"預約試上"},cours:{kicker:"課程介紹",h1a:"從第一句",h1b:"bonjour",h1c:"到精通。",intro:"所有課程依照歐洲共同語言參考標準 (CEFR) A1 至 C2 規劃,並依您的目標客製:旅遊、留學、工作、考試或興趣。",levelsTitle:"六個等級",durationLabel:"建議時數",formatsTitle:"上課形式",formatsIntro:"選擇最適合您的形式,也可以混合搭配。",onlineReqBtn:"技術需求",onlineReqTitle:"線上課程最低技術需求",onlineReqCancel:"若技術條件未達標,老師保留取消課程套裝的權利。",onlineReqItems:["寬頻網路最低 30 Mbps","品質良好的麥克風與耳機(建議有線)","學生必須處於安靜的環境","攝影機非強制要求"],speedTest:{btn:"測試我的網路速度",running:"測試中…",ok:"太好了,您的網路速度足以進行線上課程。",low:"您的網速低於 30 Mbps。建議您靠近路由器、改用有線(乙太網路)連線,或在預訂線上課程套裝前聯絡您的網路服務商。",error:"目前無法測試,請稍後再試。",disclaimer:"僅供參考 — 透過最近的 Cloudflare 伺服器測量。"},lessonsTitle:"課程範例",lessonsIntro:"以下範例讓您具體了解可以一起學什麼,每堂課皆可完全客製。",absenceTitle:"取消與缺席",absenceItems:["若於課程開始前 3 小時(含)以上取消,該課程不計入堂數。","若於課程開始前 3 小時內取消,該課程將計入堂數。","若遲到出席,課程不會延後結束。","若忘記出席課程,該課程將計入堂數。"],ctaH2:"不確定自己的程度?",ctaP:"程度評估課程(1 小時,1 000 NT$)幫您準確定位 CEFR 等級並規劃學習方向。",ctaBtn:"預約程度評估",levels:[{name:"入門",duration:"約 60 小時",can:"自我介紹、點咖啡、聽懂簡單句子。",topics:["字母與發音","冠詞與陰陽性","être / avoir / aller 動詞"]},{name:"基礎",duration:"約 80 小時",can:"描述環境、敘述一天、出國旅遊。",topics:["複合過去式與未完成過去式","直接/間接受詞代名詞","日常生活"]},{name:"進階入口",duration:"約 100 小時",can:"討論、表達意見、撰寫簡單議論短文。",topics:["現在虛擬式","條件式","邏輯連接詞"]},{name:"進階",duration:"約 120 小時",can:"理解較複雜文本、自然流暢表達。",topics:["過去虛擬式","間接引述","詞彙細微差別"]},{name:"流利",duration:"約 150 小時",can:"閱讀長篇文章、流暢且精準表達。",topics:["高雅文體","成語與語體","學術論證"]},{name:"精通",duration:"客製安排",can:"毫不費力地理解並精煉地重述事實與論點。",topics:["文學與評論","精緻翻譯","修辭學"]}],formats:[{title:"線上課",desc:"透過 Google Meet 進行,使用互動白板,課後寄送教材。",perks:["全球皆可上課","可錄影回看","彈性時段 (UTC+8)"]},{title:"台北實體課",desc:"於安靜的咖啡館(古亭、公館或中和)或您的住家/辦公室。",perks:["輕鬆面對面","適合會話練習","鄰近捷運"]},{title:"彈性方案",desc:"自由搭配實體與線上課程,依單位系統使用。",perks:["自由交替","依需求使用單元","20 / 30 / 100 å
85–®å…ƒæ–¹æ¡ˆ"]}],lessons:[{title:"在咖啡館:像巴黎人一樣點餐",duration:"60 分鐘",items:["飲品與麵包詞彙","禮貌句型:« Je voudrais… s'il vous plaît »","角色扮演:服務生/顧客","真實短片:櫃檯點餐"]},{title:"敘述最近一次旅行",duration:"60 分鐘",items:["複習複合過去式與未完成過去式","交通與住宿詞彙","口說:「上週末我去了…」","寫作:80 字明信片"]},{title:"對電影發表意見",duration:"75 分鐘",items:["影評詞彙:感人、可預期、扣人心弦…","« Je ne pense pas que » 後的虛擬式","觀賞預告片(艾蜜莉/無法觸碰)","結構化辯論"]},{title:"撰寫商務電子郵件",duration:"90 分鐘",items:["正式與中性語體","開頭與結尾用語","工作坊:回覆求職信","共同修改與改寫"]},{title:"DALF 準備 — 議論文",duration:"90 分鐘",items:["文件綜合方法論","進階邏輯連接詞","研讀《世界外交論衡》文章","限時 250 字寫作"]},{title:"文學賞析:Prévert 的詩",duration:"90 分鐘",items:["朗讀與修辭手法","歷史與文化背景","討論:作者意圖","從詩出發的創意寫作"]}]},about:{why:{kicker:"為什麼選擇我們?",h1:"量身打造的卓越教學",sub:"為「您」的成功而設計的教學法",philo:"我們的理念很簡單:將全部專業完全投入於學生。每個學習歷程都是獨一無二的,每份成果也是。",chooseTitle:"🌟 為什麼選擇我們的法文學校?",chooseText:"傳統體制以僵化的框架與統一的進度要求所有人;我們則把「人」、彈性與個別化放在教學的核心。",privateTitle:"🎯 一對一課程與彈性的力量",privateText:"我們深信,個別化學習是達到卓越表現的唯一途徑——沒有束縛,依您的節奏前進。",limitTitle:"⚠️ 傳統教學方式的侷限",limitText:"許多機構把程度差異很大的學生放在同一班,並強制統一固定的進度。結果呢?",points:[{t:"完全彈性的時間安排",d:"依照您的行程與空檔安排課程,讓學習零壓力並融入您的生活。"},{t:"客製化教學方法",d:"依您的學習風格(視覺型、實作型、理論型)調整教材、工具與教學方式。"},{t:"100% 專屬老師",d:"透過全然的關注,立即找出您的弱點並最大化您的優勢。"},{t:"出色的成果",d:"加速進步,瞄準並取得最好的結果。"}],limits:["被指定的上課時間,往往不符合您個人的節奏。","通用式的教法,無法適合所有學習類型。","不斷的妥協:程度好的學生覺得無聊,跟不上的學生被拋在後面,帶來挫折而非滿足。"]},kicker:"關於我",h1a:"您好,",h1b:"我是您的法文老師。",p1:"土生土長的法國人,在台北定居多年,專為華語學習者(成人、學生與兒童)量身打造法文課程。",p2:"我擁有文學學位,並具備豐富的對外法語教學 (FLE) 經驗,已陪伴數百位學生取得 DELF/DALF/TCF 證書,協助他們順利完成學業、就業、在法國生活,或單純享受運用所學以法文交談的樂趣。",p3a:"我的教學理念:",p3b:"第一堂課就開口說",p3c:",透過文化更深入掌握語言,在溫暖的氛圍中按您的節奏進步。",stats:[{n:"18+",l:"年教學經驗"},{n:"500+",l:"位一對一學生"},{n:"5 000+",l:"位班級學生"},{n:"A1 至 C2",l:"DELF/DALF 備考"}]},cartePage:{kicker:"法國",h1:"互動地圖",intro:"將滑鼠移到城市名稱或點擊,即可開啟該城市的官方旅遊局網站,規劃您的下一趟法語旅程。",mapAlt:"法國主要城市插畫地圖",officeOf:"旅遊局:"},notFound:{h1:"找不到頁面",p:"此頁面不存在或已被移除。",home:"首頁",contact:"聯絡我們"},faq:{searchPlaceholder:"搜尋問題或關鍵字…",noResults:"找不到相關結果:",allCategories:"全部",filterToggle:"篩選",countOne:"個問題",countMany:"個問題",kicker:"常見問題",h1:"您的疑問,我們解答。",intro:"以下為學生最常詢問的問題。若找不到您需要的答案,歡迎直接與我們聯繫。",ctaH2:"還有其他問題?",ctaP:"我很樂意為您解答。請寫信給我,我會在 24 小時內
85回覆。",ctaBtn:"聯絡我們",categories:[{title:"依需求計費(按分鐘)",items:[{q:"「依需求」方案如何計費?",a:"「依需求」方案以分鐘計費:面對面 20 NT$/分鐘,線上 16 NT$/分鐘。您可自由決定購買的總時數(1 至 99,999 分鐘)。"},{q:"每堂課有最低時數嗎?",a:"顯示的最低時數(例如面對面 90 分鐘、線上 60 分鐘)僅為建議,以確保課程效果。系統不會限制,您可自由輸入任何分鐘數。"},{q:"可以同時購買面對面與線上時數嗎?",a:"可以。選擇彈性格式即可分別購買兩種時間額度:面對面額度與線上額度,各自獨立計算。"},{q:"如何查看剩餘時間額度?",a:"在「我的帳戶」中,圖表與「分鐘額度」面板會分別顯示面對面與線上的已購買、已使用與剩餘時間。每堂課後自動扣除。"}]},{title:"兒童課程",items:[{q:"一堂課最多幾位孩子?",a:"最多 2 位孩子可共同上課。共同上課的費用為單人費用的 1.3 倍(而非兩倍)。"},{q:"兩個孩子年齡差超過 3 歲可以一起上課嗎?",a:"不行。若年齡差超過 3 歲,必須改為個別課程,以確保教學適合每位孩子。計算器會提示並停止共同預約。"},{q:"兒童課程有優惠方案嗎?",a:"有:10 小時 5% 折扣、20 小時 10%、30 小時 15%。可直接在兒童計算器中選擇。"}]},{title:"學生專區與文件",items:[{q:"如何登入我的專區?",a:"前往「登入」頁面,使用電子郵件與密碼或 Google 登入。帳號由學校建立,若尚未擁有帳號請與我們聯繫。"},{q:"忘記密碼怎麼辦?",a:"在「登入」頁面點選「忘記密碼?」,輸入您的電子郵件並依照收到的連結操作。若幾分鐘內未收到郵件,請檢查垃圾郵件匣。"},{q:"「我的帳戶」可以看到什麼?",a:"您的有效課程包、剩餘單位或分鐘、上課與付款紀錄、教學文件與付款證明。"},{q:"需要簽合約嗎?",a:"需要。學生合約可在本頁上方下載(英文與繁體中文)。"},{q:"使用計算器後如何預約?",a:"各計算器(自訂彈性、兒童、依需求、分期付款)會自動將您的設定填入聯絡表單,您只需送出即可。"},{q:"可以在聯絡表單附加檔案嗎?",a:"不行,表單不支援附件。請於首次聯絡後以電子郵件或 LINE 傳送文件。"}]},{title:"一般問題",items:[{q:"誰可以上課?",a:"所有人!成人、學生、兒童、專業人士與企業。每個課程都會依照您的目標、程度與進度量身打造。"},{q:"上課時間是什麼時候?",a:"面對面課程:週一至週日 8:30–21:00。線上課程:週一至週日 9:30–21:00。確切時間將依您與老師的時間共同安排。"},{q:"可以實體與線上交替上課嗎?",a:"可以,彈性方案允許您搭配兩種格式。線上課上限依方案而定:20 單位方案最多 8 堂、30 單位方案最多 12 堂、100 單位方案最多 36 堂。超過後每堂線上課將計為 2 單位。"},{q:"課程是一對一還是團體班?",a:"課程皆為一對一個別教學,確保個人化進度與最大的口說練習時間。只有工作坊與企業培訓可能會有多人參與。"},{q:"可以選擇老師嗎?",a:"目前由 Renaud 與 Marjorie 授課。預約時可註明偏好,將視老師時間安排。"},{q:"為什麼選擇 Parlons Français 而不是傳統語言機構?",a:"我們以個人化為核心:100% 私人課程、依您的學習風格調整教學方法、時間彈性且提供專屬追蹤。與傳統機構不同,您可以按照自己的步調前進,不必配合團體進度。"},{q:"有提供企業培訓嗎?",a:"有,我們提供企業法語培訓,目標為 A2 或 B1。僅限學校周圍 8 公里內的實體課程,超出範圍的交通費用由企業負擔(計程車或 Uber)。費用請見 Tarifs 頁面的 Entreprise 區塊。"}]},{title:"課程與程度",items:[{q:"如何知道自己的程度?",a:"我提供程度評估課程(1 小時,1,000 NT$),可精確定位您的 CECRL 程度。您也可以先免費完成資源區的測驗。"}
85,{q:"試聽課程和程度評估有什麼不同?",a:"試聽課程(90 分鐘,1,000 NT$)是一堂真正的課程,讓您認識教學方法並用法文交流。程度評估(1 小時,1,000 NT$)則是針對性測驗,精確定位您的 CECRL 程度。"},{q:"準備 DELF B2 需要多久?",a:"視起點與進度而定。一般來說,從 A2 到 B2 約需 120 至 150 小時的課程。"},{q:"需要購買課本嗎?",a:"不需要,所有教材皆包含在內且為客製化。每堂課後我會寄送學習資源。"},{q:"可以取消課程嗎?",a:"可以。若於課程開始前 3 小時以上取消,該堂課不計入。3 小時內取消則會計入。"},{q:"遲到或缺席會怎樣?",a:"若您遲到,課程不會因此延後結束,遲到的時間無法補回。若完全未出席,該堂課將會計入。"}]},{title:"付款與退款",items:[{q:"有哪些付款方式?",a:"接受台幣(中國信託 CTBC:銀行 822、公館分行 0347、帳號 347540420845)或歐元(Revolut:@renaudg82)銀行轉帳。完整帳戶資訊請見付款頁面。"},{q:"可以分期付款嗎?",a:"40 堂實體課套裝與 100 單位彈性方案可分兩期付款:第一堂課付 50%,第一堂課後 60 天內付清餘款。"},{q:"延長分期付款如何運作?",a:`分期付款適用於總金額 15,000 NT$ 以上的購買,期限最短 2 個月、最長 6 個月。
86
87• 2 至 4 個月:0% 利息。
88• 5 或 6 個月:加收總金額 5% 利息。
89
90每月 1 日至 5 日之間須以銀行轉帳完成付款。若延遲或未付款,老師將暫停課程,且不退還剩餘餘額。
91
92付款頁面提供試算工具,可估算每月金額。`},{q:"如果改變主意可以退款嗎?",a:"可以:7 天內全額退款,14 天內退款 75%,30 天內退款 50%。超過 30 天後,剩餘課程可在 30 天內轉讓給他人。"},{q:"套裝課程有使用期限嗎?",a:"沒有,沒有時間限制。您可依自己的步調使用,惟每年平均每月至少需上 1 堂課。"},{q:"可以購買課程包或工作坊當作禮物嗎?",a:"可以。請在聯絡表單中註明:課程包或工作坊將以受禮者名義預約,合約也會據此建立。"}]},{title:"線上課程",items:[{q:"需要多快的網路?",a:"建議網速至少 30 Mbps。您可以在課程頁面測試您的連線速度。"},{q:"一定要開攝影機嗎?",a:"不需要,只需良好的麥克風與耳機即可。攝影機可依個人喜好決定是否開啟。"},{q:"線上課程會進行文字記錄和/或音訊/影像錄製嗎?",a:`是的,文字記錄會以電子郵件寄送給您。
93
94音訊或影像錄製則不提供。
95
96不過,學生可自行錄音供個人複習使用。
97
98至於影像錄製,我們嚴格禁止;任何課程影片若出現在任何平台上,將會採取法律行動。`}]},{title:"面對面課程",items:[{q:"面對面課程在哪裡進行?",a:"在古亭、公館或中和一帶的安靜咖啡廳、您的住家、辦公室或我們的教室。地點必須位於免額外費用的移動範圍內(中和–板橋–古亭–公館)。您可以使用互動地圖查看範圍。"},{q:"面對面課程有哪些條件?",a:`1 — 上課地點必須位於中和、板橋、古亭與公館之間的區域(車程約 15 至 20 分鐘)。
99
1002 — 老師可前往更遠地點,但套裝價格需加收 10%。
101
1023 — 最遠可接受車程 35 分鐘。超過此範圍將建議改為線上課程。若學生拒絕,老師將不得不拒絕此家教。
103
1044 — 若學生願意自行到老師指定地點上所有面對面課程,套裝價格可享 10% 折扣。`}]},{title:"工作坊",items:[{q:"有哪些工作坊?",a:"我們提供四種工作坊:甜點(可麗餅、巧克力慕斯…)、桌遊(貝洛特、塔羅牌…)、辯論(B1 至 C2 程度)與法國文化(依程度學習電影、影集或歌曲)。"},{q:"工作坊包含在課程套裝內嗎?",a:"不包含。工作坊需單獨付費,不會從課程套裝中扣除。"},{q:"可以自選文化工作坊的內容嗎?",a:"可以,依您的程度和喜好,我們一起挑選要學習的電影、影集、迷你影集或歌曲。"},{q:"烹飪工作坊需要自備容器嗎?",a:"食材由我們提供,但容器不提供:請記得自備餐盒或容器帶è
104µ°ç”œé»žã€‚"},{q:"可以贈送工作坊當作禮物嗎?",a:"可以,請與我們聯繫安排禮券。工作坊將以受禮者名義預約。"}]},{title:"彈性方案",items:[{q:"單位制是如何運作的?",a:"每堂線上課 60 分鐘,消耗 1 單位。每堂實體課 90 分鐘,消耗 2 單位。您可以依需求自由使用,沒有時間限制。"},{q:"實體課和線上課在單位上有什麼差別?",a:"線上課 = 1 單位(60 分鐘)。實體課 = 2 單位(90 分鐘)。您可以依行程自由搭配兩種格式。"},{q:"每次上課都可以更換格式嗎?",a:"可以,這正是彈性方案的核心。您可以在預約時選擇每次的格式,依行程和喜好自由安排。"},{q:"依我的學習頻率,該選哪個彈性方案?",a:"20 單位方案適合輕鬆的學習節奏(約 10 堂線上課或 5 堂實體課)。30 單位方案最受歡迎。100 單位方案適合長期學習專案,且可分兩期付款。"},{q:"如果超過線上課程的比例會怎樣?",a:"若超過線上課程比例,之後每堂線上課將計為 2 單位,而非 1 單位。"},{q:"「客製化」計算機如何使用?",a:`第 4 個彈性方案「客製化」讓您自行組合套裝,輸入線上課與面對面課程的數量即可。
105
106單堂價格:
107• 線上課(60 分鐘):900 NT$
108• 於本校面對面課(90 分鐘):1,300 NT$
109• 到府或於咖啡廳面對面課(90 分鐘):1,500 NT$
110
111最低要求:4 堂面對面課程與 2 堂線上課程。計算機可直接在費用頁面的「彈性」區段使用。`}]}]},prof:{kicker:"教師團隊",h1a:"您的",h1b:"法文老師。",teachers:[{name:"Renaud",bio:["2005 年畢業於巴黎七大,古典文學與社會學雙碩士","曾任巴黎國中教學助理","曾任巴黎七大助教","於巴黎七大教授外國學生法文","於台北法國文化協會(Alliance Française)任教 5 年","DELF / DALF / TCF 認證教師","超過 18 年教學經驗(逾 20,000 小時授課),任教於各類教學機構"]},{name:"Marjorie",bio:["2011 年畢業於里昂三大,中文學士","於天肯法語任教 8 年,教授初級至 B2 課程","於台北法國文化協會(Alliance Française)教授初級至 B2 課程","超過 12 年教學經驗(逾 12,000 小時授課)"]}]},tarifs:{kicker:"費用",h1:"透明價格,沒有意外。",intro1:"試上課程(90 分鐘)",intro2:"1 000 NT$",intro3:"。程度評估課程(1 小時)同樣為 1 000 NT$。無綁約、無隱藏費用。",popular:"熱門",choose:"選擇此方案",note:"*平均每月至少 1 堂課,此平均以 1 年為計算期間。",refundTitle:"退款條件",refundPolicy:["付款後 7 天內:全額退款","付款後 14 天內:退款 75%","付款後 30 天內:退款 50%","超過 30 天:不予退款,但學生可在 30 天內將剩餘課程轉讓給他人。"],bookingNote:"只有購買套裝課程的學生享有優先預約時段的權利。試上課程與單堂課程僅能依據剩餘時段、老師的時間安排與同意來決定。",f2fConditionsTitle:"面對面課程條件",f2fConditions:["面對面上課地點必須位於中和、板橋、古亭與公館之間的區域,車程約 15 至 20 分鐘。","老師可前往更遠地點進行面對面課程,但套裝價格需加收 10%。","老師最遠可接受車程 35 分鐘的地點。超過此範圍將建議改為線上課程。若學生拒絕,老師將不得不拒絕此家教。","若學生願意自行到老師指定地點上所有面對面課程,套裝價格可享 10% 折扣。"],categories:[{id:"presentiel",title:"實體課",subtitle:"台北面對面授課 — 每堂 90 分鐘。",plans:[{name:"單堂課",price:"1 400",unit:"NT$ / 90 分鐘",desc:"單次課程,適合試上或加強。",perks:["1 對 1 課程 90 分鐘","地點可選(咖啡館、住家、辦公室)","含教材"]},{name:"10 堂套裝",price:"13 000",unit:"NT$",desc:"持續穩定學習的最佳選擇。",perks:["10 堂 90 分鐘","個人化學習計畫","課間追蹤","無使用期限。*"]},{name:"20 堂套裝",price:"24 000",unit:"NT$",desc:"長期學習,享最優惠價。",perks:["20 堂 90 分鐘","完整課程規劃","無使用期限。*"]},{name:"40 堂套裝",price:"40 000",unit:"NT$",desc:"分兩次付款:第一次課程付 50%,第一次課程後 60 天內付清餘款 50%。",perks:["40 堂 90 分鐘","完整課程規劃","無使用期限。*","分兩期付款"]}]}
111,{id:"enligne",title:"線上課",subtitle:"透過 Google Meet — 每堂 60 分鐘。",plans:[{name:"10 堂套裝",price:"8 000",unit:"NT$",desc:"彈性入門線上學習。",perks:["10 堂 60 分鐘","互動白板","課後寄送教材","可錄影回看"]},{name:"20 堂套裝",price:"15 000",unit:"NT$",desc:"建立穩定學習節奏。",perks:["20 堂 60 分鐘","個人化追蹤","客製化學習計畫","優惠價格"]}]},{id:"flexible",title:"彈性方案",subtitle:"依需求自由運用的單位制。",ratioNote:`各方案的線上課上限如下:
112• 20 單位:最多 8 堂線上課,超過後每堂線上課將計為 2 單位。
113• 30 單位:最多 12 堂線上課,超過後每堂線上課將計為 2 單位。
114• 100 單位:最多 36 堂線上課,超過後每堂線上課將計為 2 單位。`,plans:[{name:"20 單位",price:"15 000",unit:"NT$",desc:"自由搭配實體與線上課。",perks:["實體課 = 2 單位","線上課 = 1 單位"]},{name:"30 單位",price:"20 000",unit:"NT$",desc:"最大彈性、最佳單價。",perks:["實體課 = 2 單位","線上課 = 1 單位"]},{name:"100 單位",price:"60 000",unit:"NT$",desc:"分兩次付款:第一次課程付 50%,第一次課程後 60 天內付清餘款 50%。",perks:["實體課 = 2 單位","線上課 = 1 單位","分兩期付款"]}]},{id:"entreprise",title:"企業班",subtitle:"企業內訓課程,依學員起始程度達到 A2 或 B1。僅提供實體授課,地點限本校 8 公里內。超過範圍,由企業負擔計程車或 Uber 費用。",plans:[{name:"方案 1",price:"50 000",unit:"NT$",desc:"最多 3 位學員 — 45 小時方案(30 × 1.5 小時)。",perks:["最多 3 位學員","45 小時課程","30 堂 1.5 小時","目標 A2 或 B1"]},{name:"方案 2",price:"65 000",unit:"NT$",desc:"最多 5 位學員 — 60 小時方案(40 × 1.5 小時)。",perks:["最多 5 位學員","60 小時課程","40 堂 1.5 小時","目標 A2 或 B1"]},{name:"方案 3",price:"90 000",unit:"NT$",desc:"最多 10 位學員 — 90 小時方案(60 × 1.5 小時)。",perks:["最多 10 位學員","90 小時課程","60 堂 1.5 小時","目標 A2 或 B1"]}]},{id:"enfants",title:"兒童",subtitle:"4 至 14 歲兒童法文家教(最多 2 位)。使用下方計算機依年齡與上課地點試算費用。",plans:[],kids:{childrenLabel:"兒童人數",oneChild:"1 位兒童",twoChildren:"2 位兒童",ageLabel:"兒童年齡",locationLabel:"上課地點",atSchool:"本校授課",atHome:"到府授課(+20%)",atHomeBadge:"已含到府 +20% 加價",totalLabel:"費用試算",durationLabel:"時長",minutes:"分鐘",child:"兒童",tierNote:"費用依年齡計算。2位兒童合班上課:1.3×較年長者費用。",ageOutOfRange:"年齡須介於 4 至 14 歲。",pricingTitle:"價目表",years:"æ­²",ageGapWarning:"若兩位兒童年齡相差超過 3 歲,課程必須分開個別進行,無法合班上課。",sharedRateNote:"2位兒童合班費用:1.3×"}}]},contact:{kicker:"聯絡",h1:"聊聊您的學習計畫。",intro:"可用法文、英文或中文寫信給我,24 小時內回覆。",labels:{Email:"Email",LINE:"LINE / Tél",Lieu:"地點",Horaires:"上課時間"},lieuVal:"台北 · 線上(全球)",horaires:{f2f:"實體課:週一至週日 8:30 - 21:00",online:"線上課:週一至週日 9:30 - 21:00"},thanks:"謝謝您!",thanksP:"您的訊息已送出,期待很快聯繫您。",firstName:"名字",lastName:"姓氏",email:"電子郵件",phone:"電話",level:"目前程度",project:"您的學習計畫",placeholder:"請告訴我您的目標…",formatLabel:"上課形式",formatOptions:{presentiel:"實體課",enligne:"線上課",flexible:"彈性方案"},submit:"送出",spamNote:"⚠️ 若幾分鐘內未收到確認信,請檢查您的垃圾郵件箱。",cuisineDateLabel:"希望的烹飪工作坊日期",cuisineDateHelp:"請至少於 7 天前預約。",cuisineDateError:"烹飪工作坊必須在預定日期至少 7 天前預約。",levels:["完全初學","A1 — 入門","A2 — 初中級","B1 — 中級","B2 — 中高級","C1+ — 精通"]},ressources:{kicker:"免費學習資源",h1:"用自己的步調,",h1b:"輕鬆學法文。",intro:"為華語學習者特別整理的免費 PDF 講義、學習指南與實用工具,讓您在課程之間也能持續進步,或是先從自學開始。所有內容皆於台灣編寫,最貼近您的學習需求ã€
114‚",downloadLabel:"下載 PDF",uploadLabel:"上傳 PDF",uploadHint:"完成所有測驗後,請將檔案以電子郵件寄至 [email protected],我會在 48 小時內回覆您的程度評估。",uploadAudioLabel:"上傳音檔",uploadAudioHint:"請錄製您的朗讀(接受常見音訊格式:mp3、m4a、wav、ogg…),並寄至 [email protected]。檔案大小請勿超過 20 MB。",uploadDocLabel:"上傳作文",uploadDocHint:"完成寫作後,請以電子郵件寄至 [email protected]。可接受格式:Word(.doc、.docx)、PDF、OpenOffice(.odt)、純文字(.txt)…我會在 48 小時內回覆批改建議。",linkLabel:"前往查看",comingSoon:"即將推出",ctaH2:"想更進一步嗎?",ctaP:"這些資源只是開始。要真正進步,沒有什麼能取代真實的對話。立即預約 1 000 NT$ 的試聽課。",ctaBtn:"預約試聽課",items:[{tag:"單字 · A1-A2",title:"法文最常用的 100 個動詞",desc:"PDF 講義含中文翻譯、現在式變化與例句,掌握之後可聽懂 80% 的日常對話。",href:"/ressources/100-verbes-francais.pdf"},{tag:"動詞變化 · A1-A2",title:"法文動詞的三大類",desc:"清楚易懂的 PDF 講義,搞懂第一類、第二類與第三類動詞的差異,打好法文動詞變化的基礎。",href:"/ressources/les_3_groupes_de_verbes.pdf"},{tag:"旅遊 · A1-B1",title:"法國生存必備:50 句實用法文",desc:"點咖啡、問路、搭地鐵、訂飯店,赴法旅遊前必看的實戰句型懶人包。",href:"/ressources/survivre-en-france-50-phrases.pdf"},{tag:"文法 · A2-B1",title:"複合過去式 vs 未完成過去式:一次搞懂",desc:"用圖解搭配 20 個例句,徹底釐清華語學習者最常搞混的時態。",href:"/ressources/passe-compose-vs-imparfait.pdf"},{tag:"測驗 · 全程度",title:"法文程度快速綜合測驗",desc:"透過 3 份免費小測驗(動詞變化、文法、單字)評估您的 CECRL 法文程度(A1 到 C2),適合想開始學或重返課程的您。",pdfs:[{label:"動詞變化",href:"/ressources/qcm_conjugaison_A1_C2.pdf"},{label:"文法",href:"/ressources/qcm_grammaire_A1_C2.pdf"},{label:"單字",href:"/ressources/qcm_vocabulaire_A1_C2.pdf"}],uploadEmail:"[email protected]"},{tag:"朗讀 · A1-B2",title:"法文朗讀漸進測驗 A1 → B2",desc:"四篇獨立文章,分別對應 A1、A2、B1、B2 四個程度,用於評估您的法文朗讀能力。錄音後將音檔寄給我,我會給予個別回饋。",href:"/ressources/texte_lecture_progressif_A1_B2.pdf",audioUploadEmail:"[email protected]"},{tag:"寫作 · A1-C2",title:"法文寫作測驗 A1 → C2",desc:"六個獨立題目,分別對應 A1、A2、B1、B2、C1、C2 六個程度,用於評估您的法文寫作能力。完成後將作文寄給我,我會提供個別批改。",href:"/ressources/sujets_production_ecrite_cecrl.pdf",docUploadEmail:"[email protected]"},{tag:"單字 · B1-B2",title:"30 個法英假朋友,別再搞錯",desc:"「Actuellement」並不是「actually」。整理透過英文學法文時最容易誤用的字詞。",href:"/ressources/faux-amis-francais-anglais.pdf"},{tag:"文化 · B1-C2",title:"10 部法國電影,依程度推薦",desc:"從《艾蜜莉的異想世界》到《怒火青春》,附上適合的程度與重點單字,看電影也能進步。",href:"/ressources/10-films-francais.pdf"},{tag:"參考 · 全程度",title:"CECRL 程度一覽表 (A1 → C2)",desc:"一目了然掌握歐洲共同語言架構的 6 個程度:每個階段能做什麼、平均所需學習時數,以及對應的 DELF/DALF 檢定。",href:"/ressources/cecrl_A1-C2.pdf"}]},ateliers:{kicker:"工作坊",h1:"在趣味中學習。",intro:"探索我們的主題工作坊,用不同的方式練習法文——烹飪、桌遊與辯論。",workshops:[{id:"desserts",icon:"cake",title:"甜點工作坊",desc:"與母語老師學習製作在法國廣受歡迎的甜點。",items:["可麗餅","巧克力慕斯","巧克力蛋糕","提拉米蘇","烤布蕾"],price:"2 000 NT$",note:"材料提供 — 容器請自備。 / 60 分鐘",warning:"烹飪工作坊需至少提前 7 天預約。"},{id:"jeux",icon:"games",title:"桌遊工作坊",desc:"學習法國紙牌與桌遊規則及相關詞彙。",items:["貝洛特","塔羅牌","笑豬棋","跳棋","還有更多…"],price:"1 500 NT$",note:"/ 90 分鐘"},{id:"debat",icon:"debate",title:"辯論工作坊",desc:"在法語情境中練習捍衛自己的觀點,課堂中引導論點建構。",items:["ä¸
114»é¡Œæº–å‚™","論點建構","情境口語表達","個別回饋"],levels:[{level:"B1",price:"1 500 NT$",duration:"90 分鐘"},{level:"B2",price:"1 700 NT$",duration:"90 分鐘"},{level:"C1",price:"2 000 NT$",duration:"90 分鐘"},{level:"C2",price:"3 000 NT$",duration:"120 分鐘"}],price:""},{id:"culture",icon:"culture",title:"法國文化工作坊",desc:"依據您的程度,學習一部電影、影集、迷你影集或歌曲,豐富您的詞彙與法國文化知識。",items:["電影或影集賞析","法國歌曲學習","主題詞彙","文化與歷史背景"],price:"1 500 NT$",note:"/ 90 分鐘"}],ctaH2:"想試試看嗎?",ctaP:"立即預約您的工作坊。透過沉浸式體驗,用不同方式提升法文能力。",ctaBtn:"預約工作坊",packWarning:"工作坊不包含在課程套裝內,需單獨付費。"},services:{kicker:"服務",h1:"簡化您在法國的手續",intro:"我們透過人脈網絡協助您處理在法國的行政與實務手續。",items:[{id:"housing",icon:"building",title:"尋找法國住宿",desc:"我們透過人脈網絡為您在法國尋找公寓。請填寫聯絡表單,說明您的需求(坪數、家具、最高預算等)。",price:"一個月租金的 50%",note:"依實際找到的租金計算"},{id:"school",icon:"school",title:"學校或培訓機構註冊",desc:"我們協助您完成行政手續,並聯繫法國相關人員,以盡快完整處理您的申請文件。",price:"3 000 NT$",note:"每份文件"},{id:"dispute",icon:"scale",title:"糾紛處理",desc:"無論是房東、行政機關或個人之間的糾紛,若您因語言障礙覺得問題難以處理,我們可以擔任中介協助解決。",price:"1 000 – 3 000 NT$",note:"每份文件最低 1 000 NT$,最高 3 000 NT$"}],ctaH2:"需要在法國辦理某項手續嗎?",ctaP:"請聯絡我們並說明您的情況,我們將在 24 小時內回覆。",ctaBtn:"聯絡我們"},account:{title:"我的帳戶",hello:"您好",welcome:"歡迎",adminBtn:"管理",logout:"登出",loading:"載入中…",balance:"總餘額",unitsRemaining:"剩餘堂數",myInfo:"我的資料",edit:"編輯",save:"儲存",cancel:"取消",firstName:"名字",lastName:"姓氏",phone:"電話",language:"語言",myPacks:"我的課程包",noPack:"尚無有效課程包。",colPack:"課程包",colRemaining:"剩餘 / 總計",colPrice:"價格",colPayment:"付款狀態",colPurchased:"購買日期",colExpires:"到期日",colProof:"付款憑證",lessonsHistory:"課程紀錄",noLesson:"尚無課程紀錄。",payments:"付款紀錄",noPayment:"尚無付款紀錄。",myDocuments:"我的文件",docsEmpty:"目前沒有文件。您的老師會在此分享上課教材。",docsDownload:"下載",docsUpload:"上傳文件",docsLoading:"載入中…",docsNone:"無文件。",proofView:"查看憑證",proofNone:"尚未上傳",proofUpload:"上傳 JPG/PNG",proofInvalid:"格式錯誤:僅限 JPG 或 PNG。",proofTooLarge:"檔案過大(最大 5 MB)。",proofDefinitive:"送出後將無法修改。",proofLocked:"檔案已鎖定",confirmDelete:"刪除此檔案?",error:"錯誤",timeCredit:{title:"時數",purchased:"已購買總時數",remaining:"剩餘時數",used:"已使用",perPack:"各方案",hoursShort:"小時",empty:"目前沒有按分鐘計費的時數。"},minuteCredit:{title:"按分鐘時數",subtitle:"各上課形式已購與剩餘分鐘",empty:"目前沒有按分鐘計費的方案。",f2f:"實體課",online:"線上課",remaining:"剩餘",used:"已使用",purchased:"已購買",hoursShort:"小時"},ratioTitle:"線上 / 實體比例(彈性方案)",ratioOnline:"線上",ratioF2F:"實體",ratioMaxOnline:"含最多線上課",ratioOverLimit:"已超出上限:超過部分每堂線上課將計為 2 單位。",ratioRemaining:"堂剩餘(超過即加倍計費)"}},en:{nav:{annonces:"Announcements",home:"Home",cours:"Courses",about:"About",prof:"Teachers",tarifs:"Pricing",ateliers:"Workshops",services:"Services",contact:"Contact",paiement:"Payment",avis:"Reviews",ressources:"Resources",faq:"FAQ",book:"Book",tagline:"Tutoring",account:"My account",login:"Sign in",carte:"Interactive map"},paiement:{kicker:"Payment",h1:"Pay for your lessons",intro:"Two payment options are available depending on the currency. Scan the matching QR code from your banking app.",revolutTitle:"Revolut — Euros (€)",revolutDesc:"For transfers in euros from Europe or any Revolut account. Account: @renaudg82.",ctbcTitle:"CTBC (China Trust) — Taiwan Dollars (NT$)",ctbcDesc:"For transfers in Taiwan dollars. CTBC Bank (822) — Gongguan Branch (0347) — Account: 347540420845.",n
114ote:"After paying, please send a confirmation to [email protected]."},avis:{kicker:"Reviews",h1:"What my students say.",intro:"Below are the Google reviews left by my students. You can also visit my Google Maps page and leave your own review.",cta:"Leave a Google review"},footer:{desc:"Private French lessons in Taipei and online. 法文家教",nav:"Navigation",contact:"Contact",city:"Taipei, Taiwan",rights:"All rights reserved",backToTop:"Back to top"},lang:{switch:"Language",fr:"Français",zh:"繁體中文",en:"English"},auth:{title:"Student area",subtitle:"Sign in to check your balance and lesson history.",google:"Continue with Google",apple:"Continue with Apple",or:"or",email:"Email",password:"Password",submit:"Sign in",submitting:"Signing in…",forgot:"Forgot your password?",note:"Accounts are created by the teacher. Contact us if you haven't received your invitation yet.",howKicker:"First time here",howSubtitle:"method to follow if you don't have a Google or Apple account",howTitle:"Set up your password in 5 steps",howSteps:["Click “Forgot your password?”","Enter your email address","Click the link you receive by email (check your spam folder)","Choose your password","Your account is ready 🎉"],forgotTitle:"Forgot password",forgotSent:"If an account exists for this address, you'll receive an email with a link to reset your password.",forgotSubmit:"Send the link",resetTitle:"New password",resetNew:"New password",resetConfirm:"Confirm password",resetSubmit:"Update",resetSaving:"Saving…",errMismatch:"Passwords do not match.",errShort:"Password must be at least 8 characters."},home:{badge:"Native tutor · Taipei",h1a:"French,",h1b:"with elegance.",intro:"Private French lessons in Taiwan and online. A lively, tailored approach — from your first bonjour all the way to DELF C2. 法文家教,A1 到 C2。",ctaTrial:"Trial lesson",ctaCourses:"Discover the courses",f1t:"Conversation first",f1d:"Speak from day one. An immersive method designed for Chinese-speaking learners.",f2t:"Tailored programme",f2d:"Travel, study, work, DELF/DALF — your goals shape every lesson.",f3t:"French culture",f3d:"Movie, food, song — learn the language through its culture.",quote:'"A different language is a different vision of life."',ctaH2:"Ready to get started?",ctaP:"Book a 90-minute trial lesson for NT$1,000 to assess your level and design a programme that fits.",ctaBtn:"Book my trial"},cours:{kicker:"Programmes",h1a:"From your first",h1b:"bonjour",h1c:"to mastery.",intro:"All courses follow the Common European Framework (CEFR), from A1 to C2. Each programme is tailored to your goals: travel, study, work, certification or pleasure.",levelsTitle:"The six levels",durationLabel:"Indicative duration",formatsTitle:"Formats",formatsIntro:"Pick the setting that suits you. You can also mix and match.",onlineReqBtn:"Technical requirements",onlineReqTitle:"Minimum requirements for online lessons",onlineReqCancel:"If the technical conditions are not met, the teacher reserves the right to cancel the pack.",onlineReqItems:["High-speed internet — minimum 30 Mbps","Good-quality microphone and headset (wired recommended)","A quiet study environment is mandatory","Webcam is not required"],speedTest:{btn:"Test my internet speed",running:"Testing…",ok:"Great, your connection is fast enough for online lessons.",low:"Your connection is below 30 Mbps. We recommend moving closer to your router, switching to a wired (Ethernet) connection, or contacting your ISP before booking an online pack.",error:"Unable to test right now. Please try again shortly.",disclaimer:"Indicative test — measured via the nearest Cloudflare server."},lessonsTitle:"Sample lessons",lessonsIntro:"A concrete glimpse of what we can do together. Every lesson is fully customisable.",absenceTitle:"Cancellations & absences",absenceItems:["If you cancel 3 hours or more before the lesson starts, it will not be counted.","Cancellation less than 3 hours before the lesson will be counted.","If you arrive late, the lesson will not run past the scheduled end time.","If you forget to attend the lesson, it will be counted."],ctaH2:"Not sure of your level?",ctaP:"A 1-hour level assessment (NT$1,000) places you precisely on the CEFR scale and shapes your programme.",ctaBtn:"Book my assessment",levels:[{name:"Discovery",duration:"≈ 60 h",can:"Introduce yourself, order a coffee, understand simple sentences.",topics:["Alphabet & pronunciation","Articles & gender","Verbs être / avoir / aller"]},{name:"Survival",duration:"≈ 80 h",can:"Describe your surroundings, recount your day, travel.",topics:["Passé composé & imparfait","Object pronouns","Daily life"]},{name:"Threshold",duration:"≈ 100 h",can:"Debate, give opinions, write a simple argued text.",topics:["Present subjunctive","Conditional","Logical connectors"]},{name:"Advanced",duration:"≈ 120 h",can:"Grasp the gist of complex texts, express yourself spontaneously.",topics:["Past subjunctive","Reported speech","Lexical nuances"]},{name:"Autonomous",duration:"≈ 150 h",can:"Understand long texts, express yourself fluently and precisely.",topics:["Formal register","Idioms & registers","Academic argumentation"]},{name:"Mastery",duration:"Custom",can:"Understand effortlessly and convey facts and arguments with finesse.",topics:["Literature & essays","Fine translation","Rhetoric"]}],formats:[{title:"Online",desc:"Via Google Meet. Shared interactive whiteboard, resources sent after each lesson.",perks:["Anywhere in the world","Recording available","Flexible scheduling (UTC+8)"]},{title:"In person in Taipei",desc:"In a quiet café (Guting, Gongguan or Zhonghe) or at your home / office.",perks:["Friendly immersion","Ideal for conversation","Easy metro access"]},{title:"Flexible",desc:"Mix in-person and online as you need with a unit-based system.",perks:["Freely alternate","Units to use as needed","20 / 30 / 100 unit packs"]}],lessons:[{title:"At the café: ordering like a Parisian",duration:"60 min",items:["Drinks and pastries vocabulary","Polite phrases: « Je voudrais… s'il vous plaît »","Role play: server / customer","Authentic short video: counter order"]}
114,{title:"Telling a recent trip",duration:"60 min",items:["Review of passé composé vs imparfait","Transport & accommodation vocabulary",'Speaking: "Last weekend I went…"',"Writing: 80-word postcard"]},{title:"Reviewing a film",duration:"75 min",items:["Review vocabulary: moving, predictable, gripping…",'Subjunctive after "Je ne pense pas que"',"Watch a trailer (Amélie / Intouchables)","Structured debate"]},{title:"Writing a professional email",duration:"90 min",items:["Formal vs neutral register","Opening and closing formulas","Workshop: replying to a job offer","Group correction & rewriting"]},{title:"DALF preparation — argued essay",duration:"90 min",items:["Document synthesis methodology","Advanced logical connectors","Study a Le Monde Diplomatique article","Timed 250-word writing"]},{title:"Literary analysis: a Prévert poem",duration:"90 min",items:["Expressive reading & figures of speech","Historical & cultural context","Discussion: author's intent","Creative writing inspired by the poem"]}]},about:{why:{kicker:"Why us?",h1:"Tailor-made excellence",sub:"A teaching approach designed for YOUR success",philo:"Our philosophy is simple: we place our entire expertise at the service of our students. Every journey is unique, and so is every success.",chooseTitle:"🌟 Why choose our school?",chooseText:"Where the traditional system imposes a rigid framework and one single pace on everyone, we put people, flexibility and individualisation at the heart of our approach.",privateTitle:"🎯 The power of private lessons & flexibility",privateText:"We firmly believe that one-to-one learning is the only way to reach exceptional performance, without constraints and at your own pace.",limitTitle:"⚠️ The limits of conventional methods",limitText:"Many institutions place students of very different levels in the same class and impose a fixed, rigid pace. The result?",points:[{t:"Total scheduling flexibility",d:"Plan your lessons around your own timetable and availability, for stress-free learning that fits your life."},{t:"Tailor-made teaching methods",d:"We adapt our tools, materials and teaching approaches to your learning style (visual, practical, theoretical)."},{t:"A 100% dedicated teacher",d:"Your gaps are identified immediately and your strengths maximised thanks to exclusive attention."},{t:"Exceptional results",d:"Accelerated progress to aim for — and achieve — the best possible results."}],limits:["Imposed timetables that rarely match your personal rhythm.","Generic methods that do not suit every learning profile.","Constant compromise: advanced students get bored while struggling ones fall behind, creating frustration instead of satisfaction."]},kicker:"About me",h1a:"Hello,",h1b:"I'm your tutor.",p1:"Born in France and based in Taipei for several years, I teach French to Chinese-speaking learners — adults, students and children — with a method tailored to their mother tongue and their goals.",p2:"With a degree in literature and extensive experience teaching French as a Foreign Language (FLE), I have guided hundreds of students towards DELF/DALF/TCF certification, their studies, their work, their life in France, or simply the pleasure of putting their skills into conversation.",p3a:"My approach: ",p3b:"speak from the first lesson",p3c:", understand the culture to better master the language, and progress at your own pace in a warm setting.",stats:[{n:"18+",l:"years of teaching"},{n:"500+",l:"private students"},{n:"5,000+",l:"classroom students"},{n:"A1 to C2",l:"DELF/DALF preparation"}]},cartePage:{kicker:"France",h1:"Interactive map",intro:"Hover or tap a city name to open its official tourist office and start planning your next trip in French.",mapAlt:"Illustrated map of France with its main cities",officeOf:"Tourist office of"},notFound:{h1:"Page not found",p:"This page doesn't exist or has been moved.",home:"Home",contact:"Contact"},faq:{searchPlaceholder:"Search a question or keyword…",noResults:"No results for",allCategories:"All",filterToggle:"Filters",countOne:"question",countMany:"questions",kicker:"FAQ",h1:"Your questions, our answers.",intro:"Below are the most frequently asked questions by students. If you can't find your answer, feel free to contact us directly.",ctaH2:"Still have a question?",ctaP:"I'm here to help. Drop me a message and I'll get back to you within 24 hours.",ctaBtn:"Get in touch",categories:[{title:"On-demand pricing (per minute)",items:[{q:"How does the “On demand” formula work?",a:"The on-demand formula 
114is billed per minute: 20 NT$/min face-to-face and 16 NT$/min online. You freely choose the total amount of time you buy (from 1 to 99,999 minutes)."},{q:"Is there a minimum duration per lesson?",a:"The minimum durations shown (e.g. 90 min face-to-face, 60 min online) are recommendations only, so lessons stay effective. Nothing is blocked: enter any number of minutes you like."},{q:"Can I buy both face-to-face and online time?",a:"Yes. With the flexible format you buy two separate time credits: a face-to-face credit and an online credit, tracked independently."},{q:"How do I track my remaining time credit?",a:"In your “My account” area, a chart and a “Minute credit” panel show time purchased, used and remaining, separately for face-to-face and online. Minutes are deducted automatically after each lesson."}]},{title:"Kids' lessons",items:[{q:"How many children can share a lesson?",a:"Up to 2 children can share a lesson. The shared rate is 1.3× the single-child rate (not double)."},{q:"My two children are more than 3 years apart — can they study together?",a:"No. If the age gap is more than 3 years, lessons must be individual so the teaching fits each child. The calculator flags this and blocks the shared booking."},{q:"Are there discounts on kids' packages?",a:"Yes: 10 hours = 5% off, 20 hours = 10%, 30 hours = 15%. You pick the package directly in the kids' calculator."}]},{title:"Student area & documents",items:[{q:"How do I access my student area?",a:"Go to the Login page and sign in with email and password, or with Google. Accounts are created by the school — contact us if you don't have one yet."},{q:"I forgot my password — what should I do?",a:"Click “Forgot password?” on the Login page, enter your email and follow the link you receive. Check your spam folder if the email doesn't arrive within a few minutes."},{q:"What can I see in “My account”?",a:"Your active packs, remaining units and/or minutes, your lesson and payment history, your learning documents and payment receipts."},{q:"Do I need to sign a contract?",a:"Yes, a student contract must be read and accepted. It can be downloaded at the top of this page in English and Traditional Chinese."},{q:"How do I book after using a calculator?",a:"Every calculator (custom flexible, kids, on demand, installment plan) pre-fills the contact form with your configuration — you just have to send it."},{q:"Can I attach a file to the contact form?",a:"No, attachments aren't supported in the form. Send your documents by email or via LINE after your first message."}]},{title:"General",items:[{q:"Who can take lessons?",a:"Everyone! Adults, students, children, professionals and companies. Every programme is tailored to your goals, level and pace."},{q:"What are the lesson hours?",a:"Face-to-face lessons: Monday to Sunday, 8:30 am – 9:00 pm. Online lessons: Monday to Sunday, 9:30 am – 9:00 pm. Exact times are arranged together based on your availability and the teacher's schedule."},{q:"Can I mix in-person and online lessons?",a:"Yes, with the flexible packs. The maximum number of online lessons depends on the pack: 8 for the 20-unit pack, 12 for the 30-unit pack, and 36 for the 100-unit pack. Beyond that, each online lesson counts as 2 units."},{q:"Are lessons individual or group-based?",a:"Lessons are exclusively one-to-one to ensure personalised progress and maximum speaking time. Only workshops and company training can bring several participants together."},{q:"Can I choose my teacher?",a:"Currently Renaud and Marjorie handle the lessons. You can state your preference when booking, subject to availability."},{q:"Why choose Parlons Français over a traditional language school?",a:"We put individualisation at the centre: 100% private lessons, methods adapted to your learning style, flexible scheduling and personalised follow-up. Unlike traditional schools, you progress at your own pace without waiting for the group."},{q:"Do you offer corporate training?",a:"Yes, we offer in-company French training to reach level A2 or B1. It is delivered in person only within an 8 km radius of the school. Beyond that, the company covers taxi or Uber costs. Rates are on the Pricing page, Corporate section."}]},{title:"Courses & Levels",items:[{q:"How do I know my level?",a:"I offer a level assessment (1 hour, NT$1,000) that places you precisely on the CEFR scale. You can also take the free tests in the Resources section."},{q:"What is the difference between the trial lesson and the level assessment?",a:"The trial lesson (90 min, NT$1,000) is a real lesson to discover the method and converse in French. The level assessment (1 hour, NT$1,000) is a targeted test to place you precisely on the CEFR scale."},{q:"How long to reach DELF B2?",a:"It depends on your starting point and pace. On average, moving from A2 to B2 takes about 120 to 150 hours of lessons."},{q:"Do I need to buy a textbook?",a:"No, all teaching materials are included and customised. I send resources after each lesson."},{q:"Can I cancel a lesson?",a:"Yes, if you cancel 3 hours or more before the lesson starts, it will not be counted. Less than 3 hours, the lesson is counted."},{q:"What happens if I'm late or absent?",a:"If you arrive late, the lesson will not finish later and lost time is not made up. If you do not attend at all, the lesson will be counted."}]},{title:"Payment & Refund",items:[{q:"What payment methods are accepted?",a:"Bank transfer in NT$ (CTBC: Bank 822, Gongguan branch 0347, account 347540420845) or euros (Revolut: @renaudg82). Full account details are on the Payment page."},{q:"Can I pay in instalments?",a:"The 40-lesson (in-person) and 100-unit (flexible) packs can be paid in 2 instalments: 50% at the first lesson, 50% within 60 days."},{q:"How does the extended instalment plan work?",a:`Instalment payment is available for any purchase of NT$15,000 or more, spread over 2 to 6 months maximum.
115
116• 2 to 4 months: 0% interest.
117• 5 or 6 months: 5% interest added to the total amount.
118
119Payment must be made by bank transfer between the 1st and the 5th of each month. In case of late or missed payment, the teacher suspends the lessons with 
119no refund of the remaining balance.
120
121A calculator is available on the Payment page to estimate your monthly instalment.`},{q:"Is there a refund if I change my mind?",a:"Yes: 100% within 7 days, 75% within 14 days, 50% within 30 days. After that, remaining lessons can be transferred to another person within 30 days."},{q:"Do packs expire?",a:"No, there is no time limit. You use your lessons at your own pace, with a minimum average of 1 lesson per month over the year."},{q:"Can I buy a pack or workshop as a gift?",a:"Yes. Mention it in the contact form: the pack or workshop will be reserved in the beneficiary's name and the contract drawn up accordingly."}]},{title:"Online Lessons",items:[{q:"What internet speed is required?",a:"A minimum of 30 Mbps is recommended. You can test your connection from the Courses page."},{q:"Is a webcam mandatory?",a:"No, only a good microphone and headset are required. The webcam is optional based on your preference."},{q:"Are online lessons transcribed and/or recorded in audio or video?",a:`Yes for written transcripts: they will be sent to you by email.
122
123No for audio or video recording.
124
125However, students are free to record the audio themselves for personal review.
126
127Video recording is strictly forbidden; any lesson video appearing on any platform will result in legal action.`}]},{title:"In-person lessons",items:[{q:"Where do face-to-face lessons take place?",a:"In a quiet café around Guting, Gongguan or Zhonghe, at your home, your office or at our premises. The location must stay within the no-surcharge travel radius (Zhonghe–Banqiao–Guting–Gongguan). You can check the interactive map to visualise the area."},{q:"What are the conditions for face-to-face lessons?",a:`1 — The meeting place must be within the area between Zhonghe, Banqiao, Guting and Gongguan (15 to 20 minutes by scooter maximum).
128
1292 — The teacher can travel further, subject to a 10% surcharge on the pack price.
130
1313 — The maximum travel distance is 35 minutes by scooter. Beyond that, the online option will be requested. If the student refuses, the teacher will be obliged to decline the tutoring.
132
1334 — If the student comes on-site for all face-to-face lessons, a 10% discount on the pack will be granted.`}]},{title:"Workshops",items:[{q:"What workshops do you offer?",a:"We offer four workshops: Desserts (crêpes, chocolate mousse…), Board games (belote, tarot…), Debate (levels B1 to C2) and French culture (film, series or song adapted to your level)."},{q:"Are workshops included in course packs?",a:"No. Workshops are paid for individually and are not deducted from a course pack."},{q:"Can I choose the content of the culture workshop?",a:"Yes, depending on your level and tastes, we choose together a film, a series, a mini-series or a song to study."},{q:"Do I need to bring anything for the cooking workshop?",a:"Ingredients are provided. However, a container is not provided: remember to bring a box or container to take your desserts home."},{q:"Can I offer a workshop as a gift?",a:"Yes, contact us to arrange a gift voucher. The workshop will be reserved in the beneficiary's name."}]},{title:"Flexible courses",items:[{q:"How does the unit system work?",a:"Each online lesson lasts 60 min and uses 1 unit. Each in-person lesson lasts 90 min and uses 2 units. You use your units as needed, with no time limit."},{q:"What is the difference between an in-person and an online lesson in units?",a:"Online lesson = 1 unit (60 min). In-person lesson = 2 units (90 min). You can freely alternate between the two formats depending on your schedule."},{q:"Can I change format (in-person / online) for each lesson?",a:"Yes, that is the whole point of the flexible pack. You choose the format of each lesson when booking, according to your schedule and preferences."},{q:"Which flexible pack should I choose based on my pace?",a:"The 20-unit pack suits a light pace (about 10 online lessons or 5 in-person). The 30-unit pack is the most popular. The 100-unit pack is ideal for a long-term project, with payment in 2 instalments."},{q:"What happens if I exceed the online lesson ratio?",a:"If you exceed the online lesson ratio, each additional online lesson will count as 2 units instead of 1."},{q:'How does the "Custom" calculator work?',a:`The 4th flexible option "Custom" lets you build your own pack by entering the number of online and face-to-face lessons you want.
134
135Per-lesson pricing:
136• Online lesson (60 min): NT$900
137• In-person lesson at our premises (90 min): NT$1,300
138• In-person lesson at home or in a café (90 min): NT$1,500
139
140Minimum required: 4 face-to-face lessons and 2 online lessons. The calculator is available directly on the Pricing page, Flexible section.`}]}]},prof:{kicker:"Teachers",h1a:"Your",h1b:"teachers.",teachers:[{name:"Renaud",bio:["2005 — Graduated from Paris VII, Master II in classic literature and sociology","Teacher assistant in a Parisian junior high school","Teacher assistant at Paris VII","French teacher to foreign students at Paris VII","Teacher at Alliance Française in Taipei for 5 years","Certified for DELF / DALF / TCF","More than 18 years of experience (over 20,000 teaching hours) acquired in different types of school structures"]},{name:"Marjorie",bio:["2011 — Graduated from Lyon III, Bachelor in Chinese","Teacher: levels from beginner to B2 during 8 years at Tian Ken 天肯法語","Teacher: levels from beginner to B2 at Alliance Française in Taipei","More than 12 years of experience (over 12,000 teaching hours) acquired"]}]},tarifs:{kicker:"Pricing",h1:"Clear prices, no surprises.",intro1:"Trial lesson (90 min) is",intro2:"NT$1,000",intro3:". Level assessment (1 hour) also NT$1,000. No commitment, no hidden fees.",popular:"Popular",choose:"Choose this plan",note:"*Average of at least 1 lesson per month. This average is calculated over 1 year.",refundTitle:"Refund policy",refundPolicy:["Within 7 days of payment: 100% refund","Within 14 days of payment: 75% refund","Within 30 days of payment: 50% refund","After 30 days: no refund will be granted, but the student is free to sell the remaining lessons to another person within 30 days."],bookingNote:"Only students who purchased a lesson pack have priority when booking time slots. Trial lessons and single lessons are scheduled solely based on remaining availability and the teacher's agreement.",f2fConditionsTitle:"Face-to-face conditions",f2fConditions:["The meeting place for face-to-face lessons must be within the area between Zhonghe, Banqiao, Guting and Gongguan, i.e. 15 to 20 minutes by scooter maximum.","The teacher can travel further for face-to-face lessons, subject to a 10% surcharge on the pack price.","The maximum travel distance for the teacher is 35 minutes by scooter. Beyond that, the online option will be requested. If the student refuses, the teacher will be obliged to decline the tutoring.","If the student wishes to come on-site for all face-to-face lessons, a 10% discount on the pack will be granted."],categories:[{id:"presentiel",title:"In person",subtitle:"Face-to-face lessons in Taipei — 90 minutes per session.",plans:[{name:"Single lesson",price:"1,400",unit:"NT$ / 90 min",desc:"A one-off session to try out or to top up.",perks:["1 individual 90-min lesson","Location of your choice (café, home, office)","Teaching materials included"]},{name:"10-lesson pack",price:"13,000",unit:"NT$",desc:"Ideal for steady progress.",perks:["10 lessons of 90 min","Personalised learning plan","Follow-up between lessons","No time limit.*"]},{name:"20-lesson pack",price:"24,000",unit:"NT$",desc:"Long-term commitment, best price.",perks:["20 lessons of 90 min","Full structured programme","No time limit.*"]},{name:"40-lesson pack",price:"40,000",unit:"NT$",desc:"Payable in 2 instalments: 50% at the first lesson, 50% within 60 days of the first lesson.",perks:["40 lessons of 90 min","Full structured programme","No time limit.*","2-instalment payment"]}]},{id:"enligne",title:"Online",subtitle:"Via Google Meet — 60 minutes per session.",plans:[{name:"10-lesson pack",price:"8,000",unit:"NT$",desc:"Flexible format, perfect for getting started online.",perks:["10 lessons of 60 min","Shared interactive whiteboard","Resources sent after each lesson","Recording available"]},{name:"20-lesson pack",price:"15,000",unit:"NT$",desc:"Settle into a learning routine.",perks:["20 lessons of 60 min","Personalised follow-up","Tailored learning plan","Preferential rate"]}]}
140,{id:"flexible",title:"Flexible",subtitle:"Unit-based system to use as you need.",ratioNote:`The maximum number of online lessons per pack is as follows:
141• 20 units: max 8 online lessons. Beyond that, each online lesson counts as 2 units.
142• 30 units: max 12 online lessons. Beyond that, each online lesson counts as 2 units.
143• 100 units: max 36 online lessons. Beyond that, each online lesson counts as 2 units.`,plans:[{name:"20 units",price:"15,000",unit:"NT$",desc:"Mix in-person and online freely.",perks:["F2F lesson = 2 units","Online lesson = 1 unit"]},{name:"30 units",price:"20,000",unit:"NT$",desc:"Maximum flexibility at the best price.",perks:["F2F lesson = 2 units","Online lesson = 1 unit"]},{name:"100 units",price:"60,000",unit:"NT$",desc:"Payable in 2 instalments: 50% at the first lesson, 50% within 60 days of the first lesson.",perks:["F2F lesson = 2 units","Online lesson = 1 unit","2-instalment payment"]}]},{id:"entreprise",title:"Corporate",subtitle:"On-site corporate training to reach A2 or B1 depending on the learners' starting level. In-person only, within an 8 km radius of the school. Beyond that, the company covers taxi or Uber fares.",plans:[{name:"Plan 1",price:"50,000",unit:"NT$",desc:"Up to 3 learners — 45-hour pack (30 × 1.5 h).",perks:["Up to 3 learners","45 hours of lessons","30 sessions of 1.5 h","Goal: A2 or B1"]},{name:"Plan 2",price:"65,000",unit:"NT$",desc:"Up to 5 learners — 60-hour pack (40 × 1.5 h).",perks:["Up to 5 learners","60 hours of lessons","40 sessions of 1.5 h","Goal: A2 or B1"]},{name:"Plan 3",price:"90,000",unit:"NT$",desc:"Up to 10 learners — 90-hour pack (60 × 1.5 h).",perks:["Up to 10 learners","90 hours of lessons","60 sessions of 1.5 h","Goal: A2 or B1"]}]},{id:"enfants",title:"Kids",subtitle:"Private French lessons for children aged 4 to 14 (max. 2 children). Use the calculator below to estimate pricing based on age and location.",plans:[],kids:{childrenLabel:"Number of children",oneChild:"1 child",twoChildren:"2 children",ageLabel:"Child's age",locationLabel:"Lesson location",atSchool:"At our school",atHome:"At home (+20%)",atHomeBadge:"Home visit +20% surcharge included",totalLabel:"Price estimate",durationLabel:"Duration",minutes:"min",child:"Child",tierNote:"Price per child depending on age. For 2 children together: 1.3× the older child's rate.",ageOutOfRange:"Age must be between 4 and 14.",pricingTitle:"Price grid",years:"yrs",ageGapWarning:"If the age gap between the two children exceeds 3 years, lessons must be individual and not together.",sharedRateNote:"Shared rate for 2 children: 1.3×"}}]},contact:{kicker:"Contact",h1:"Let's talk about your project.",intro:"Write to me in French, English or Chinese (中文 OK). I reply within 24 hours.",labels:{Email:"Email",LINE:"LINE / Phone",Lieu:"Location",Horaires:"Opening hours"},lieuVal:"Taipei · Online (worldwide)",horaires:{f2f:"In-person lessons: Mon - Sun 8:30 - 21:00",online:"Online lessons: Mon - Sun 9:30 - 21:00"},thanks:"Thank you!",thanksP:"Your message has been sent. See you very soon.",firstName:"First name",lastName:"Last name",email:"Email",phone:"Phone",level:"Current level",project:"Your project",placeholder:"Tell me about your goals…",formatLabel:"Preferred format",formatOptions:{presentiel:"In person",enligne:"Online",flexible:"Flexible"},submit:"Send my request",spamNote:"⚠️ Please check your spam folder if you don't receive our confirmation email within a few minutes.",cuisineDateLabel:"Preferred date for the cooking workshop",cuisineDateHelp:"Bookings must be made at least 7 days in advance.",cuisineDateError:"The cooking workshop must be booked at least 7 days before the desired date.",levels:["Complete beginner","A1 — Elementary","A2 — Pre-intermediate","B1 — Intermediate","B2 — Upper intermediate","C1+ — Mastery"]},ressources:{kicker:"Free resources",h1:"Learn French,",h1b:"at your own pace.",intro:"A curated set of free PDFs, guides and tools to keep progressing between lessons — or to start learning French on your own. All content is designed in Taiwan, for Mandarin-speaking learners and French enthusiasts.",downloadLabel:"Download PDF",uploadLabel:"Upload PDFs",uploadHint:"Once you've completed the tests, send them back to me by email at [email protected] — I'll reply with your estimated level within 48 hours.",uploadAudioLabel:"Upload audio",uploadAudioHint:"Record yourself reading (common audio formats accepted: mp3, m4a, wav, ogg…) and email the file to [email protected]. File size must not exceed 20 MB.",uploadDocLabel:"Send your writing",uploadDocHint:"Write your text and email it to [email protected]. Accepted formats: Word (.doc, .docx), PDF, OpenOffice (.odt), plain text (.txt)… I'll send back a corrected version with comments within 48 hours.",linkLabel:"Open",comingSoon:"Coming soon",ctaH2:"Want to go further?",ctaP:"These resources are just an appetizer. Real progress comes from real conversation. Book a trial lesson for 1,000 NT$.",ctaBtn:"Book my trial lesson",items:[{tag:"Vocabulary · A1-A2",title:"The 100 most-used French verbs",desc:"PDF cheat sheet with translation, present-tense conjugation and a contextual example. The shortcut to understanding 80% of any conversation.",href:"/ressources/100-verbes-francais.pdf"},{tag:"Conjugation · A1-A2",title:"The 3 groups of French verbs",desc:"A clear, illustrated PDF cheat sheet to understand the difference between 1st, 2nd and 3rd group verbs. The essential foundation for French conjugation.",href:"/ressources/les_3_groupes_de_verbes.pdf"},{tag:"Travel · A1-B1",title:"Survive in France: 50 useful sentences",desc:"Order at a café, ask for directions, take the metro, book a hotel. The must-have guide before any trip to France.",href:"/ressources/survivre-en-france-50-phrases.pdf"},{tag:"Grammar · A2-B1",title:"Passé composé vs imparfait: the simple rule",desc:"The difference finally explained, with a visual diagram and 20 commented examples. The #1 trap for Mandarin-speaking learners.",href:"/ressources/passe-compose-vs-imparfait.pdf"},{tag:"Assessment · All levels",title:"Express multi-test of level",desc:"Assess your CEFR level (A1 to C2) with 3 free mini-tests: conjugation, grammar and vocabulary. Perfect before starting or resuming lessons.",pdfs:[{label:"Conjugation",href:"/ressources/qcm_conjugaison_A1_C2.pdf"},{label:"Grammar",href:"/ressources/qcm_grammaire_A1_C2.pdf"},{label:"Vocabulary",href:"/ressources/qcm_vocabulaire_A1_C2.pdf"}],uploadEmail:"[email protected]"}
143,{tag:"Reading · A1-B2",title:"Progressive reading test A1 → B2",desc:"Four separate texts, one per level (A1, A2, B1, B2), to assess your reading aloud. Record yourself and send me the audio for personalised feedback.",href:"/ressources/texte_lecture_progressif_A1_B2.pdf",audioUploadEmail:"[email protected]"},{tag:"Writing · A1-C2",title:"Written production test A1 → C2",desc:"Six separate prompts, one per level (A1, A2, B1, B2, C1, C2), to assess your writing skills. Write your text and send it to me for personalised feedback.",href:"/ressources/sujets_production_ecrite_cecrl.pdf",docUploadEmail:"[email protected]"},{tag:"Vocabulary · B1-B2",title:"30 French-English false friends to avoid",desc:"“Actuellement” does NOT mean “actually”. The most common traps when learning French via English.",href:"/ressources/faux-amis-francais-anglais.pdf"},{tag:"Culture · B1-C2",title:"10 French films to learn from, by level",desc:"From Amélie to La Haine — a curated list with required level and key vocabulary. Learn while having fun.",href:"/ressources/10-films-francais.pdf"},{tag:"Reference · All levels",title:"CEFR reference table (A1 → C2)",desc:"Understand the 6 European levels at a glance: what you can do at each stage, average study hours and the matching DELF/DALF exam.",href:"/ressources/cecrl_A1-C2.pdf"}]},ateliers:{kicker:"Workshops",h1:"Learn while having fun.",intro:"Discover our themed workshops to practice French in a different way — cooking, board games and debate.",workshops:[{id:"desserts",icon:"cake",title:"Dessert Workshop",desc:"Learn to prepare desserts popular in France with a native tutor.",items:["Crêpes","Chocolate mousse","Chocolate cake","Tiramisu","Crème brûlée"],price:"2 000 NT$",note:"Ingredients provided — container not provided. / 60 min",warning:"Cooking workshops must be booked at least 7 days in advance."},{id:"jeux",icon:"games",title:"Board Game Workshop",desc:"Learn the rules and vocabulary of French card and board games.",items:["Belote","Tarot","Cochon qui rit","Checkers","And more…"],price:"1 500 NT$",note:"/ 90 min"},{id:"debat",icon:"debate",title:"Debate Workshop",desc:"Practice defending your point of view in French, with guided argument construction.",items:["Topic preparation","Argument building","Spoken expression in context","Personalised feedback"],levels:[{level:"B1",price:"1 500 NT$",duration:"90 min"},{level:"B2",price:"1 700 NT$",duration:"90 min"},{level:"C1",price:"2 000 NT$",duration:"90 min"},{level:"C2",price:"3 000 NT$",duration:"120 min"}],price:""},{id:"culture",icon:"culture",title:"French Culture Workshop",desc:"According to your level, study a film, a series, a mini-series or a song to enrich your vocabulary and your French cultural references.",items:["Film or series analysis","French song study","Thematic vocabulary","Cultural and historical references"],price:"1 500 NT$",note:"/ 90 min"}],ctaH2:"Want to give it a try?",ctaP:"Book your workshop now. An immersive experience to improve your French in a different way.",ctaBtn:"Book my workshop",packWarning:"Workshops are not included in course packs. They must be paid for individually."},services:{kicker:"Services",h1:"Your French paperwork, made simple.",intro:"We help you with administrative and practical procedures in France through our network of contacts.",items:[{id:"housing",icon:"building",title:"Find accommodation in France",desc:"We can search for an apartment in France for you through our network of contacts. Please fill in the contact form to tell us what you are looking for (size, furnished or not, maximum price, etc.).",price:"50% of one month's rent",note:"Price varies depen
143ding on the rent found"},{id:"school",icon:"school",title:"School or training enrolment",desc:"We can help you with the administrative procedures and contact the relevant people in France to advance and complete your file as quickly and clearly as possible.",price:"3,000 NT$",note:"Per file"},{id:"dispute",icon:"scale",title:"Dispute management",desc:"Whether it's your landlord, an administration or an individual, if the problem seems too complex to handle because you don't have enough linguistic mastery of the subject, we can act as an intermediary and resolve your problem.",price:"1,000 – 3,000 NT$",note:"Minimum 1,000 NT$ per file, maximum 3,000 NT$"}],ctaH2:"Need help with a procedure in France?",ctaP:"Contact us to describe your situation. We will get back to you within 24 hours.",ctaBtn:"Get in touch"},account:{title:"My account",hello:"Hello",welcome:"Welcome",adminBtn:"Admin",logout:"Sign out",loading:"Loading…",balance:"Total balance",unitsRemaining:"units remaining",myInfo:"My information",edit:"Edit",save:"Save",cancel:"Cancel",firstName:"First name",lastName:"Last name",phone:"Phone",language:"Language",myPacks:"My packs",noPack:"No active pack.",colPack:"Pack",colRemaining:"Remaining / Total",colPrice:"Price",colPayment:"Payment",colPurchased:"Purchased on",colExpires:"Expires on",colProof:"Payment proof",lessonsHistory:"Lesson history",noLesson:"No lesson recorded.",payments:"Payments",noPayment:"No payment.",myDocuments:"My documents",docsEmpty:"No document yet. Your teacher will share your course materials here.",docsDownload:"Download",docsUpload:"Upload a document",docsLoading:"Loading…",docsNone:"No document.",proofView:"View proof",proofNone:"No proof",proofUpload:"Upload JPG/PNG",proofInvalid:"Invalid format: JPG or PNG only.",proofTooLarge:"File too large (max 5 MB).",proofDefinitive:"Final: cannot be changed after upload.",proofLocked:"File locked",confirmDelete:"Delete this file?",error:"Error",timeCredit:{title:"Time credit",purchased:"Total purchased",remaining:"Remaining credit",used:"Used",perPack:"Per bundle",hoursShort:"h",empty:"No time credit (per-minute plan) yet."},minuteCredit:{title:"Per-minute credit",subtitle:"Minutes purchased and remaining, per format",empty:"No per-minute pack yet.",f2f:"In person",online:"Online",remaining:"Remaining",used:"Used",purchased:"Purchased",hoursShort:"h"},ratioTitle:"Online / in-person ratio (Flexible packs)",ratioOnline:"Online",ratioF2F:"In-person",ratioMaxOnline:"Max online included",ratioOverLimit:"Limit exceeded: extra online lessons count as 2 units.",ratioRemaining:"left before extra cost"}}});const xO={nav:{annonces:"お知らせ",home:"ホーム",cours:"コース",about:"プロフィール",prof:"講師",tarifs:"料金",ateliers:"ワークショップ",services:"サービス",contact:"お問い合わせ",paiement:"お支払い",avis:"レビュー",ressources:"リソース",faq:"よくある質問",book:"予約する",tagline:"個人レッスン",account:"マイアカウント",login:"ログイン",carte:"インタラクティブマップ"},lang:{switch:"言語 / Language",fr:"フランス語",zh:"繁体字中国語",en:"英語",ja:"日本語",es:"スペイン語",it:"イタリア語",ko:"韓国語"},auth:{title:"受講者専用ページ",subtitle:"ログインして残高とレッスン履歴をご確認ください。",google:"Google で続ける",apple:"Apple で続ける",or:"または",email:"メールアドレス",password:"パスワード",submit:"ログイン",submitting:"ログイン中…",forgot:"パスワードをお忘れですか?",note:"アカウントは講師が作成します。招待が届いていない場合はご連絡ください。",howKicker:"初回ログイン",howSubtitle:"Google または Apple アカウントをお持ちでない場合は以下の方法をご利用ください",howTitle:"5ステップでパスワードを設定",howSteps:["「パスワードをお忘れですか?」をクリック","メールアドレスを入力","届いたメールのリンクをクリック(迷惑メールもご確認ください)","パスワードを設定","アカウント作成完了 🎉"],forgotTitle:"パスワードの再設定",forgotSent:"このアドレスのアカウントが存在する場合、再設定用リンクをメールでお送りします。",forgotSubmit:"リンクを送信",resetTitle:"新しいパスワード",resetNew:"新しいパスワード",resetConfirm:"パスワードの確認",resetSubmit:"更新する",resetSaving:"保存中…",errMismatch:"パスワードが一致しません。",errShort:"パスワードは8文字以上で入力してください。"},paiement:{kicker:"お支払い",h1:"レッスン料金のお支払い",intro:"ご希望の通貨に応じて2つのお支払い方法をご用意しています。銀行アプリで対応ã
143™ã‚‹QRコードをスキャンしてください。",revolutTitle:"Revolut — ユーロ(€)",revolutDesc:"ヨーロッパまたはRevoltアカウントからのユーロ送金用。アカウント:@renaudg82。",ctbcTitle:"CTBC(中國信託)— ニュー台湾ドル(NT$)",ctbcDesc:"ニュー台湾ドルの送金用。CTBC銀行(822)— 公館支店(0347)— 口座番号:347540420845。",note:"お支払い後、確認のメールを [email protected] までお送りください。"},avis:{kicker:"レビュー",h1:"生徒さんの声。",intro:"以下は生徒さんがGoogleに残してくださったレビューです。Googleマップのページでもご覧いただけ、ご自身のレビューもご投稿いただけます。",cta:"Googleにレビューを書く"},footer:{desc:"台北およびオンラインでのフランス語個人レッスン。",nav:"ナビゲーション",contact:"お問い合わせ",city:"台湾 · 台北",rights:"全著作権所有",backToTop:"トップへ戻る"},home:{badge:"ネイティブ家庭教師 · 台北",h1a:"フランス語を、",h1b:"優雅に。",intro:"台湾およびオンラインでのフランス語個人レッスン。最初の bonjour から DELF C2 まで、生き生きとしたオーダーメイドの指導法。",ctaTrial:"体験レッスン",ctaCourses:"コースを見る",f1t:"会話を最優先",f1d:"初回から話す。中国語話者向けに設計された没入型メソッド。",f2t:"オーダーメイドのプログラム",f2d:"旅行、留学、仕事、DELF/DALF — あなたの目標に合わせた毎レッスン。",f3t:"フランス語圏の文化",f3d:"映画、料理、シャンソン — 文化を通じて言語を学ぶ。",quote:"「異なる言語は、異なる人生観である。」",ctaH2:"始める準備はできましたか?",ctaP:"90分の体験レッスン(1,000 NT$)を予約してレベル評価を受け、最適なプログラムを組み立てましょう。",ctaBtn:"体験レッスンを予約"},cours:{kicker:"プログラム",h1a:"最初の",h1b:"bonjour",h1c:"から熟達まで。",intro:"全てのコースは欧州共通言語参照枠(CEFR)A1〜C2に準拠しています。旅行、留学、仕事、資格、趣味など、あなたの目標に合わせてカスタマイズします。",levelsTitle:"6つのレベル",durationLabel:"目安時間",formatsTitle:"受講形式",formatsIntro:"あなたに合ったスタイルを選んでください。組み合わせも可能です。",onlineReqBtn:"技術要件",onlineReqTitle:"オンラインレッスンの最低要件",onlineReqCancel:"技術的条件が満たされない場合、講師はパックをキャンセルする権利を有します。",onlineReqItems:["高速インターネット 最低 30 Mbps","良質なマイクとヘッドセット(有線推奨)","静かな学習環境が必須","ウェブカメラは必須ではありません"],speedTest:{btn:"回線速度を測定",running:"測定中…",ok:"問題ありません。オンラインレッスンに十分な速度です。",low:"通信速度が30 Mbps未満です。ルーターに近づく、有線(イーサネット)接続にする、またはオンラインパックを予約する前にプロバイダにご相談ください。",error:"現在テストできません。しばらくしてから再度お試しください。",disclaimer:"参考値 — 最寄りのCloudflareサーバーによる測定。"},lessonsTitle:"レッスン例",lessonsIntro:"一緒に学べる内容の具体例です。各レッスンは完全にカスタマイズ可能です。",absenceTitle:"キャンセルと欠席",absenceItems:["レッスン開始3時間以上前のキャンセル:レッスン回数にカウントされません。","レッスン開始3時間以内のキャンセル:レッスン回数にカウントされます。","遅刻された場合、レッスンの終了時間は延長されません。","レッスンを忘れた場合、回数にカウントされます。"],ctaH2:"自分のレベルが分からない?",ctaP:"1時間のレベル評価(1,000 NT$)でCEFRスケールに正確に位置付け、プログラムをご提案します。",ctaBtn:"レベル評価を予約",levels:[{name:"発見",duration:"約 60 時間",can:"自己紹介、コーヒー注文、簡単な文の理解。",topics:["アルファベットと発音","冠詞と性","être / avoir / aller"]},{name:"サバイバル",duration:"約 80 時間",can:"環境を説明、一日を語る、旅行。",topics:["複合過去と半過去","目的語代名詞","日常生活"]},{name:"敷居",duration:"約 100 時間",can:"議論、意見表明、簡単な論説文。",topics:["接続法現在","条件法","論理的接続詞"]},{name:"上級入口",duration:"約 120 時間",can:"複雑な文章の要点を理解、自発的表現。",topics:["接続法過去","間接話法","語彙のニュアンス"]},{name:"自律",duration:"約 150 時間",can:"長文理解、流暢で正確な表現。",topics:["格調高い文体","慣用句と語体","学術的議論"]},{name:"熟達",duration:"オーダーメイド",can:"苦労なく理解し、繊細に事実や論を再構築。",topics:["文学とエッセイ","精緻な翻訳","修辞学"]}],formats:[{title:"オンライン",desc:"Google Meet経由。共有インタラクティブホワイトボード使用、レッスン後に教材送付。",perks:["世界中どこでも","録画可能","柔軟なスケジュール (UTC+8)"]},{title:"台北で対面",desc:"静かなカフェ(古亭、公館、中和)またはご自宅・オフィスにて。",perks:["親しみやすい没入","会話練習に最適","MRTアクセス良好"]},{title:"フレキシブル",desc:"対面とオンラインを自由に組み合わせ、ユニット制でご利用。",perks:["自由に交替","必要に応じて単位を使用","20 / 30 / 100 単位パック"]}],lessons:[{title:"カフェにて:パリジャンのように注文",duration:"60分",items:["飲み物とパンの語彙","丁寧表現:« Je voudrais… s'il vous plaît »","ロールプレイ:店員/客","実践短編動画:カウンター注文"]},{title:"最近の旅行を語る",duration:"60分",items:["複合過去 vs 半過去の復習","交通と宿泊の語彙","口頭:「先週末、私は…に行きました」","80語の絵葉書作成"]},{title:"映画について意見を述べる",duration:"75分",items:["批評語彙:感動的、予測可能、引き込まれる…","« Je ne pense pas que »後の接続法","予告編視聴(アメリ/最強のふたり)","構造化されたディベート"]},{title:"ビジネスメールの作成",duration:"90分",items:["フォーマル vs ニュートラル","書き出しと結びの定型","ワークショップ:求人応
143募返信","共同添削と書き換え"]},{title:"DALF準備 — 論述エッセイ",duration:"90分",items:["文書統合の方法論","上級論理接続詞","ル・モンド・ディプロマティック紙の記事研究","制限時間250語の作文"]},{title:"文学分析:プレヴェールの詩",duration:"90分",items:["表現豊かな朗読と修辞","歴史的・文化的背景","ディスカッション:作者の意図","詩に触発された創作"]}]},about:{why:{kicker:"なぜ私たちを選ぶのか",h1:"オーダーメイドの卓越性",sub:"「あなた」の成功のために設計された教育法",philo:"私たちの理念はシンプルです。専門性のすべてを生徒のために注ぎます。学びの道はひとつひとつ違い、成功のかたちもまた同じです。",chooseTitle:"🌟 当校を選ぶ理由",chooseText:"従来の制度が硬直した枠組みと画一的なペースを押しつける一方で、私たちは人・柔軟性・個別化を教育の中心に置きます。",privateTitle:"🎯 プライベートレッスンと柔軟性の力",privateText:"卓越した成果に到達する唯一の方法は個別学習であると確信しています。制約なく、あなたのペースで。",limitTitle:"⚠️ 従来型メソッドの限界",limitText:"多くの学校はレベルの大きく異なる生徒を同じクラスにまとめ、固定的で硬直したペースを課します。その結果は?",points:[{t:"完全な時間の柔軟性",d:"ご自身のスケジュールと空き時間に合わせてレッスンを計画。生活に合ったストレスのない学習を。"},{t:"オーダーメイドの指導法",d:"あなたの学習スタイル(視覚型・実践型・理論型)に応じて教材とアプローチを調整します。"},{t:"100%専任の講師",d:"独占的な指導により、弱点は即座に特定され、強みは最大化されます。"},{t:"卓越した成果",d:"加速した上達で、最良の結果を目指し、達成します。"}],limits:["個人のリズムに合わない、押しつけられた時間割。","すべての学習タイプに合わない、汎用的なメソッド。","絶え間ない妥協:上級者は退屈し、苦手な生徒は取り残され、満足ではなく不満が生まれます。"]},kicker:"私について",h1a:"こんにちは、",h1b:"あなたの講師です。",p1:"生粋のフランス人で台北に長年定住しており、中国語話者の学習者(大人、学生、子供)に母語と目標に合わせた方法でフランス語を教えています。",p2:"文学の学位を持ち、外国語としてのフランス語教育(FLE)の豊富な経験があり、何百人もの生徒をDELF/DALF/TCFの取得、留学、就職、フランスでの生活、または会話の楽しみへと導いてきました。",p3a:"私のアプローチは、",p3b:"初回から話すこと",p3c:"、文化を理解することで言語をより深く習得し、温かい環境であなたのペースで進歩することです。",stats:[{n:"18+",l:"年の指導経験"},{n:"500+",l:"名のプライベート生徒"},{n:"5,000+",l:"名のクラス生徒"},{n:"A1〜C2",l:"DELF/DALF準備"}]},cartePage:{kicker:"フランス",h1:"インタラクティブマップ",intro:"都市名にカーソルを合わせるかタップすると、その都市の公式観光局サイトが開きます。次のフランス旅行の計画にお役立てください。",mapAlt:"フランスの主要都市を描いたイラストマップ",officeOf:"観光局:"},notFound:{h1:"ページが見つかりません",p:"このページは存在しないか、移動されました。",home:"ホーム",contact:"お問い合わせ"},faq:{searchPlaceholder:"質問やキーワードを検索…",noResults:"一致する結果がありません:",allCategories:"すべて",filterToggle:"フィルター",countOne:"件の質問",countMany:"件の質問",kicker:"よくある質問",h1:"あなたの疑問にお答えします。",intro:"以下は生徒さんから最もよく寄せられる質問です。お探しの答えが見つからない場合は、直接ご連絡ください。",ctaH2:"他にご質問は?",ctaP:"喜んでお答えします。メッセージをお送りいただければ24時間以内に返信します。",ctaBtn:"お問い合わせ",categories:[{title:"オンデマンド料金(分単位)",items:[{q:"「オンデマンド」プランの仕組ã
143¿ã¯ï¼Ÿ",a:"分単位の料金制です:対面 20 NT$/分、オンライン 16 NT$/分。購入する合計時間は自由に決められます(1〜99,999分)。"},{q:"1回のレッスンに最低時間はありますか?",a:"表示されている最低時間(対面90分、オンライン60分など)はレッスンの効果を保つための目安です。制限はなく、希望の分数を自由に入力できます。"},{q:"対面とオンラインの両方の時間を購入できますか?",a:"はい。フレキシブル形式では、対面用とオンライン用の2つの時間クレジットを別々に購入し、個別に管理します。"},{q:"残りの時間クレジットはどこで確認できますか?",a:"「マイアカウント」のグラフと「分クレジット」パネルで、対面とオンラインそれぞれの購入・使用・残り時間を確認できます。各レッスン後に自動で差し引かれます。"}]},{title:"子ども向けレッスン",items:[{q:"1回のレッスンに何人の子どもが参加できますか?",a:"最大2名まで一緒に受講できます。2名の料金は1名料金の1.3倍です(2倍ではありません)。"},{q:"兄弟の年齢差が3歳以上ですが一緒に受講できますか?",a:"いいえ。年齢差が3歳を超える場合は、各自に適した指導を行うため個別レッスンとなります。計算機が該当時に警告し、共同予約はできません。"},{q:"子ども向けパックに割引はありますか?",a:"あります:10時間で5%、20時間で10%、30時間で15%割引。子ども用計算機で直接選択できます。"}]},{title:"生徒専用ページと書類",items:[{q:"マイページへのログイン方法は?",a:"ログインページからメールとパスワード、またはGoogleでログインしてください。アカウントは学校が作成します。お持ちでない場合はご連絡ください。"},{q:"パスワードを忘れました。どうすればいいですか?",a:"「ログイン」ページの「パスワードをお忘れですか?」をクリックし、メールアドレスを入力して届いたリンクに従ってください。数分以内にメールが届かない場合は、迷惑メールフォルダをご確認ください。"},{q:"「マイアカウント」で何が見られますか?",a:"有効なパック、残りユニットまたは分数、レッスンと支払いの履歴、学習資料、支払い証明。"},{q:"契約書へのサインは必要ですか?",a:"はい、受講契約書の確認と同意が必要です。本ページ上部から英語・繁体字中国語でダウンロードできます。"},{q:"計算機を使った後の予約方法は?",a:"各計算機(カスタムフレキシブル、子ども、オンデマンド、分割払い)が設定内容をお問い合わせフォームに自動入力します。送信するだけです。"},{q:"お問い合わせフォームにファイルを添付できますか?",a:"いいえ、フォームでは添付できません。最初のご連絡後にメールまたはLINEでお送りください。"}]},{title:"一般",items:[{q:"誰が受講できますか?",a:"全ての方!大人、学生、子供、社会人、企業の方も。プログラムはあなたの目標、レベル、ペースに合わせます。"},{q:"レッスン時間は?",a:"対面レッスン:月曜〜日曜 8:30〜21:00。オンラインレッスン:月曜〜日曜 9:30〜21:00。具体的な時間は、あなたと先生の都合に合わせて調整します。"},{q:"対面とオンラインを併用できますか?",a:"はい、柔軟パックで併用可能です。オンライン授業の上限はパックにより異なります:20ユニットは最大8回、30ユニットは最大12回、100ユニットは最大36回。それを超えると、各オンライン授業は2ユニットとしてカウントされます。"}
143,{q:"個人授業?グループ授業?",a:"完全マンツーマンで、個別指導と最大の発話時間を保証します。ワークショップと企業研修のみ複数人で行うことがあります。"},{q:"講師を選べますか?",a:"現在RenaudとMarjorieが担当しています。予約時に希望をお伝えいただけ、空き状況に応じて対応します。"},{q:"なぜ伝統的な語学学校ではなくParlons Françaisを選ぶべきですか?",a:"個別対応を中心に据えています:100%マンツーマンレッスン、あなたの学習スタイルに合わせた指導法、柔軟なスケジュール、そしてパーソナライズされた進捗管理。伝統的な学校とは異なり、グループを待つことなく自分のペースで進められます。"},{q:"企業研修も提供していますか?",a:"はい、A2またはB1を目指す企業向けフランス語研修を提供しています。対面のみで、学校から半径8km以内に限ります。それを超える場合は、タクシーまたはUberの費用を企業が負担します。料金はTarifsページのEntrepriseセクションをご覧ください。"}]},{title:"コースとレベル",items:[{q:"自分のレベルはどうやって知るの?",a:"1時間のレベル評価(1,000 NT$)でCEFRスケールに正確に位置付けます。リソースのページでは無料テストもご利用いただけます。"},{q:"体験レッスンとレベル評価の違いは?",a:"体験レッスン(90分、1,000 NT$)は、実際のレッスンとして指導法を体験し、フランス語で会話します。レベル評価(1時間、1,000 NT$)は、CEFRスケールで正確に位置づけるための判定テストです。"},{q:"DELF B2までどれくらいかかる?",a:"出発点とペースによります。平均してA2からB2まで約120〜150時間です。"},{q:"教科書を買う必要がある?",a:"いいえ、全ての教材は含まれており、個別にカスタマイズされます。レッスン後に資料を送付します。"},{q:"レッスンをキャンセルできる?",a:"はい、3時間以上前ならカウントされません。3時間以内はカウントされます。"},{q:"遅刻や欠席の場合はどうなりますか?",a:"遅刻した場合、レッスン終了時間は延長されず、遅れた時間は補填されません。欠席の場合は、そのレッスンがカウントされます。"}]},{title:"支払いと返金",items:[{q:"受け付けている支払い方法は?",a:"NT$(CTBC:銀行822、公館支店0347、口座347540420845)またはユーロ(Revolut:@renaudg82)の銀行振込。詳細な口座情報は支払いページに記載。"},{q:"分割払いはできる?",a:"40レッスン(対面)と100単位(柔軟)パックは2回払い可能:初回レッスンで50%、60日以内に50%。"},{q:"延長分割払いはどう機能しますか?",a:`15,000 NT$以上のご購入で、2〜6か月の分割払いが可能です。
144
145• 2〜4か月:金利0%。
146• 5〜6か月:合計金額に5%の利息が加算されます。
147
148お支払いは毎月1日から5日の間に銀行振込で行ってください。遅延や未払いの場合、講師はレッスンを停止し、残高の返金はできません。
149
150支払いページに月額を試算できる計算機があります。`},{q:"気が変わったら返金される?",a:"はい:7日以内100%、14日以内75%、30日以内50%。それ以降は30日以内に残りレッスンを他の方に譲渡可能。"},{q:"パックには有効期限がある?",a:"いいえ、期限はありません。年間平均で月1回以上の受講を維持してください。"},{q:"パックやワークショップをギフトとして購入できますか?",a:"はい。お問い合わせフォームにその旨を記載してください。パックまたはワークショップは、贈り先の方の名前で予約され、契約もそのように作成されます。"}]},{title:"オンラインレッスン",items:[{q:"必要な回線速度は?",a:"最低30 Mbpsを推奨。コースページで回線をテストできます。"},{q:"ウェブカメラは必須?",a:"いいえ、良質なマイクとヘッドセットのみ必須です。カメラは任意です。"},{q:"オンラインレッスンは録音・録画されますか?",a:`テキスト記録はメールでお送りします。
151
152音声・映像の録音録画はこちらでは行いません。
153
154ただし、学生がご自身で音声を録音することは自由です。
155
156映像の録画は厳禁です。プラットフォーム上にレッスン動画が出現した場合、法的措置を取ります。`}]},{title:"対面レッスン",items:[{q:"対面レッスンはどこで行われますか?",a:"古亭、公館、または中和周辺の静かなカフェ、ご自宅、オフィス、または当校の教室で行われます。場所は追加料金なしの移動範囲内(中和–板橋–古亭–公館)である必要があります。範囲はインタラクティブマップで確認できます。"},{q:"対面レッスンの条件は?",a:`1 — 待ち合わせ場所は中和・板橋・古亭・公館ã
156‚’結ぶエリア内(スクーターで15〜20分以内)。
157
1582 — 講師はそれより遠くにも出向きますが、パック価格に10%の追加料金。
159
1603 — 最大移動時間はスクーターで35分。それを超える場合はオンラインを提案。学生が拒否した場合は家庭教師を辞退せざるを得ません。
161
1624 — 学生が全ての対面レッスンに自ら来られる場合、パックに10%割引が適用されます。`}]},{title:"ワークショップ",items:[{q:"どんなワークショップがありますか?",a:"4種類のワークショップをご用意しています:デザート(クレープ、チョコレートムース…)、ボードゲーム(ベロット、タロット…)、ディベート(B1〜C2)、フランス文化(レベルに合わせた映画・ドラマ・歌の学習)。"},{q:"ワークショップはコースパックに含まれますか?",a:"含まれません。ワークショップは別途お支払いが必要で、コースパックから差し引かれることはありません。"},{q:"文化ワークショップの内容は選べますか?",a:"はい、あなたのレベルと好みに応じて、一緒に映画、ドラマ、ミニシリーズ、または歌を選びます。"},{q:"料理ワークショップでは容器を持参する必要がありますか?",a:"食材はこちらで提供しますが、容器は提供しません。デザートを持ち帰るため、お弁当箱や容器をお持ちください。"},{q:"ワークショップをギフトとして贈れますか?",a:"はい、ギフト券の手配についてお問い合わせください。ワークショップは、贈り先の方の名前で予約されます。"}]},{title:"柔軟なコース",items:[{q:"単位制はどのように機能しますか?",a:"オンラインレッスンは60分で1単位、対面レッスンは90分で2単位です。必要に応じて単位を使い、期限はありません。"},{q:"対面とオンラインのレッスンでは単位にどのような違いがありますか?",a:"オンライン=1単位(60分)、対面=2単位(90分)。スケジュールに合わせて自由に組み合わせられます。"},{q:"毎回のレッスンで形式を変えられますか?",a:"はい、それが柔軟パックの魅力です。予約時に都合と好みに合わせて形式を選べます。"},{q:"自分のペースに合った柔軟パックはどれですか?",a:"20単位はライトなペース向け(オンライン約10回または対面約5回)。30単位が最も人気。100単位は長期プロジェクト向けで、2回払いが可能です。"},{q:"オンライン授業の比率を超えるとどうなりますか?",a:"オンライン授業の比率を超えた場合、それ以降の各オンライン授業は1単位ではなく2単位としてカウントされます。"},{q:"「カスタム」計算機はどう使いますか?",a:`4つ目の柔軟パック「カスタム」では、オンラインレッスンと対面レッスンの回数を入力して、自分だけのパックを組めます。
163
1641回あたりの料金:
165• オンラインレッスン(60分):900 NT$
166• 教室での対面レッスン(90分):1,300 NT$
167• 自宅・カフェでの対面レッスン(90分):1,500 NT$
168
169最低条件:対面4回+オンライン2回。料金ページの「柔軟」セクションから直接ご利用いただけます。`}]}]},prof:{kicker:"講師",h1a:"あなたの",h1b:"講師たち。",teachers:[{name:"Renaud",bio:["2005年 — パリ第7大学卒、古典文学・社会学修士(DEA)","パリ市内中学校で教育補助","パリ第7大学チューター","パリ第7大学にて留学生にフランス語指導","台北アリアンス・フランセーズで5年間指導","DELF / DALF / TCF 認定講師","18年以上の指導経験(20,000時間超)、様々な教育機関にて"]},{name:"Marjorie",bio:["2011年 — リヨン第3大学中国語学士","天肯法語にて初級〜B2を8年間指導","台北アリアンス・フランセーズにて初級〜B2を指導","12年以上の指導経験(12,000時間超)"]}]},tarifs:{kicker:"料金",h1:"明朗な料金、隠れた費用なし。",intro1:"体験レッスン(90分)は",intro2:"1,000 NT$",intro3:"。レベル評価(1時間)も1,000 NT$。
169契約縛りなし、隠れた費用なし。",popular:"人気",choose:"このプランを選ぶ",note:"*月平均最低1レッスン。この平均は1年間で計算されます。",refundTitle:"返金条件",refundPolicy:["支払い後7日以内:100%返金","支払い後14日以内:75%返金","支払い後30日以内:50%返金","30日以降:返金不可。ただし学生は30日以内に残りレッスンを他の方に譲渡可能。"],bookingNote:"パックを購入した学生のみ時間枠予約に優先権があります。体験レッスンと単発レッスンは残り枠と講師の同意により決定されます。",f2fConditionsTitle:"対面レッスンの条件",f2fConditions:["対面レッスンの場所は中和・板橋・古亭・公館を結ぶエリア内、スクーターで15〜20分以内。","講師はそれより遠くにも出向きますが、パック価格に10%の追加料金。","最大移動時間はスクーターで35分。それを超える場合はオンラインを提案。学生が拒否した場合は家庭教師を辞退せざるを得ません。","学生が全ての対面レッスンに自ら来られる場合、パックに10%割引が適用されます。"],categories:[{id:"presentiel",title:"対面",subtitle:"台北での対面レッスン — 1回90分。",plans:[{name:"単発レッスン",price:"1,400",unit:"NT$ / 90分",desc:"お試しや復習に最適な単回レッスン。",perks:["90分の個人レッスン1回","場所自由(カフェ、自宅、オフィス)","教材込み"]},{name:"10レッスンパック",price:"13,000",unit:"NT$",desc:"安定した学習に最適。",perks:["90分×10回","個別学習プラン","レッスン間フォロー","期限なし*"]},{name:"20レッスンパック",price:"24,000",unit:"NT$",desc:"長期コミット、最良の単価。",perks:["90分×20回","完全構造化プログラム","期限なし*"]},{name:"40レッスンパック",price:"40,000",unit:"NT$",desc:"2回払い:初回レッスンで50%、60日以内に50%。",perks:["90分×40回","完全構造化プログラム","期限なし*","2回払い"]}]},{id:"enligne",title:"オンライン",subtitle:"Google Meet経由 — 1回60分。",plans:[{name:"10レッスンパック",price:"8,000",unit:"NT$",desc:"オンライン入門に最適。",perks:["60分×10回","共有インタラクティブホワイトボード","レッスン後に教材送付","録画利用可"]},{name:"20レッスンパック",price:"15,000",unit:"NT$",desc:"学習リズムを定着させる。",perks:["60分×20回","個別フォロー","オーダーメイド学習プラン","優遇価格"]}]},{id:"flexible",title:"柔軟",subtitle:"必要に応じて使える単位制。",ratioNote:`各パックのオンライン授業の上限は以下の通りです:
170• 20ユニット:オンライン授業は最大8回まで。それ以降は1回のオンライン授業が2ユニットとしてカウントされます。
171• 30ユニット:オンライン授業は最大12回まで。それ以降は1回のオンライン授業が2ユニットとしてカウントされます。
172• 100ユニット:オンライン授業は最大36回まで。それ以降は1回のオンライン授業が2ユニットとしてカウントされます。`,plans:[{name:"20単位",price:"15,000",unit:"NT$",desc:"対面とオンラインを自由に組合せ。",perks:["対面 = 2単位","オンライン = 1単位"]},{name:"30単位",price:"20,000",unit:"NT$",desc:"最大の柔軟性、最良単価。",perks:["対面 = 2単位","オンライン = 1単位"]},{name:"100単位",price:"60,000",unit:"NT$",desc:"2回払い:初回レッスンで50%、60日以内に50%。",perks:["対面 = 2単位","オンライン = 1単位","2回払い"]}]},{id:"entreprise",title:"企業向け",subtitle:"受講者の初期レベルに応じて A2 または B1 を目指す企業研修。対面のみ、当校から 8 km 圏内で実施。それ以遠はタクシーまたは Uber 代を企業がご負担ください。",plans:[{name:"プラン 1",price:"50,000",unit:"NT$",desc:"最大 3 名 — 45 時間パック(30 × 1.5 時間)。",perks:["最大 3 名","45 時間のレッスン","1.5 時間 × 30 回","目標 A2 または B1"]},{name:"プラン 2",price:"65,000",unit:"NT$",desc:"最大 5 名 — 60 時間パック(40 × 1.5 時間)。",perks:["最大 5 名","60 時間のレッスン","1.5 時間 × 40 回","目標 A2 または B1"]},{name:"プラン 3",price:"90,000",unit:"NT$",desc:"最大 10 名 — 90 時間パック(60 × 1.5 時間)。",perks:["最大 10 名","90 時間のレッスン","1.5 時間 × 60 回","目標 A2 または B1"]}]},{id:"enfants",title:"キッズ",subtitle:"4〜14歳のお子様向けフランス語プライベートレッスン(最大2名)。下記の計算ツールで年齢と場所に応じた料金を試算できます。",plans:[],kids:{childrenLabel:"お子様の人数",oneChild:"1名",twoChildren:"2名",ageLabel:"お子様の年齢",locationLabel:"レッスン場所",atSchool:"当校にて",atHome:"ご自宅(+20%)",atHomeBadge:"自宅出張 +20% 加算済み",totalLabel:"料金の目安",durationLabel:"時間",minutes:"分",child:"お子様",tierNote:"料金は年齢別でã
172™ã€‚2名の場合:年上のお子様の料金の1.3倍。",ageOutOfRange:"年齢は 4〜14 歳の範囲で。",pricingTitle:"料金表",years:"æ­³",ageGapWarning:"2名のお子様の年齢差が3歳を超える場合、レッスンは個別となり、一緒に受講できません。",sharedRateNote:"2名割引料金:1.3×"}}]},contact:{kicker:"お問い合わせ",h1:"あなたのプロジェクトを聞かせてください。",intro:"フランス語、英語、中国語でメッセージをお送りください。24時間以内に返信します。",labels:{Email:"メール",LINE:"LINE / 電話",Lieu:"場所",Horaires:"時間帯"},lieuVal:"台北 · オンライン(世界中)",horaires:{f2f:"対面レッスン:月〜日 8:30〜21:00",online:"オンラインレッスン:月〜日 9:30〜21:00"},thanks:"ありがとうございます!",thanksP:"メッセージを送信しました。近日中にお会いしましょう。",firstName:"名",lastName:"姓",email:"メール",phone:"電話番号",level:"現在のレベル",project:"プロジェクト",placeholder:"目標を教えてください…",formatLabel:"希望フォーマット",formatOptions:{presentiel:"対面",enligne:"オンライン",flexible:"フレキシブル"},submit:"送信する",spamNote:"⚠️ 数分以内に確認メールが届かない場合は迷惑メールフォルダをご確認ください。",cuisineDateLabel:"料理ワークショップの希望日",cuisineDateHelp:"ご予約は7日前までにお願いいたします。",cuisineDateError:"料理ワークショップは希望日の7日前までにご予約ください。",levels:["完全な初心者","A1 — 入門","A2 — 初中級","B1 — 中級","B2 — 中上級","C1+ — 熟達"]},ressources:{kicker:"無料リソース",h1:"フランス語を学ぶ、",h1b:"あなたのペースで。",intro:"レッスン間に進歩を続けるため、または独学ã
172‚’始めるための無料PDF、ガイド、ツールのセレクション。全てのコンテンツは台湾で、中国語話者およびフランス愛好家のために作られています。",downloadLabel:"PDFをダウンロード",uploadLabel:"PDFを送信",uploadHint:"テストを完了したら [email protected] までメールでお送りください。48時間以内にレベル評価をお返しします。",uploadAudioLabel:"音声を送信",uploadAudioHint:"朗読を録音し(mp3, m4a, wav, ogg など)、 [email protected] までメールでお送りください。ファイルサイズは20MBを超えないようにしてください。",uploadDocLabel:"作文を送信",uploadDocHint:"作文を書いて [email protected] までメールでお送りください。受け付け形式:Word(.doc, .docx)、PDF、OpenOffice(.odt)、テキスト(.txt)など。48時間以内に添削付きでお返しします。",linkLabel:"見る",comingSoon:"まもなく公開",ctaH2:"もっと先に進みたいですか?",ctaP:"これらのリソースは前菜です。本当に進歩するには本物の会話に勝るものはありません。1,000 NT$の体験レッスンを予約しましょう。",ctaBtn:"体験レッスンを予約"},ateliers:{kicker:"ワークショップ",h1:"楽しく学ぶ。",intro:"テーマ別ワークショップで、違う角度からフランス語を練習しましょう——料理、ボードゲーム、ディベート。",workshops:[{id:"desserts",icon:"cake",title:"デザートワークショップ",desc:"ネイティブ講師と一緒に、フランスで人気のあるデザートを作る方法を学びます。",items:["クレープ","チョコレートムース","チョコレートケーキ","ティラミス","クレームブリュレ"],price:"2,000 NT$",note:"材料は提供 — 容器は各自ご用意ください。 / 60分",warning:"料理ワークショップは希望日の最低7日前までに予約が必要です。"},{id:"jeux",icon:"games",title:"ボードゲームワークショップ",desc:"フランスのカードゲームとボードゲームのルールと語彙を学びます。",items:["ベロット","タロット","笑い豚","チェッカー","その他も…"],price:"1,500 NT$",note:"/ 90分"},{id:"debat",icon:"debate",title:"ディベートワークショップ",desc:"フランス語で自分の意見を擁護する練習をします。議論の構成をガイドします。",items:["テーマ準備","議論の構成","状況での口頭表現","個別フィードバック"],levels:[{level:"B1",price:"1,500 NT$",duration:"90分"},{level:"B2",price:"1,700 NT$",duration:"90分"},{level:"C1",price:"2,000 NT$",duration:"90分"},{level:"C2",price:"3,000 NT$",duration:"120分"}],price:""},{id:"culture",icon:"culture",title:"フランス文化ワークショップ",desc:"レベルに応じて、映画、ドラマ、ミニシリーズ、または歌を学び、語彙とフランスの文化的背景を豊かにします。",items:["映画・ドラマの分析","フランス語の歌","テーマ別語彙","文化・歴史的背景"],price:"1,500 NT$",note:"/ 90分"}],ctaH2:"試してみませんか?",ctaP:"今すぐワークショップを予約しましょう。没入型体験で、違う角度からフランス語を伸ばします。",ctaBtn:"ワークショップを予約",packWarning:"ワークショップはコースパックに含まれておりません。別途お支払いが必要です。"},services:{kicker:"サービス",h1:"フランスでの手続きを簡単に。",intro:"私たちの人脈を活ã
172‹ã—て、フランスでの行政手続きや実務をサポートします。",items:[{id:"housing",icon:"building",title:"フランスの住居探し",desc:"私たちの人脈を活かして、フランスでのアパート探しをお手伝いします。お問い合わせフォームにて、ご希望の条件(広さ、家具の有無、最高予算など)をお知らせください。",price:"1ヶ月家賃の50%",note:"実際に見つかった家賃に応じて変動します"},{id:"school",icon:"school",title:"学校・研修機関の登録",desc:"行政手続きをお手伝いし、フランスの関係者と連絡を取ることで、できるだけ早く、明確に書類を進めて完了させます。",price:"3,000 NT$",note:"書類1件あたり"},{id:"dispute",icon:"scale",title:"紛争対応",desc:"賃貸人、行政機関、個人を問わず、言語的な問題が複雑に感じられる場合、仲介役となって問題解決をお手伝いします。",price:"1,000 – 3,000 NT$",note:"書類1件あたり最低1,000 NT$、最高3,000 NT$"}],ctaH2:"フランスで手続きのサポートが必要ですか?",ctaP:"状況をお聞かせください。24時間以内にご返信いたします。",ctaBtn:"お問い合わせ"},account:{title:"マイアカウント",hello:"こんにちは",welcome:"ようこそ",adminBtn:"管理",logout:"ログアウト",loading:"読み込み中…",balance:"残高合計",unitsRemaining:"残りユニット",myInfo:"アカウント情報",edit:"編集",save:"保存",cancel:"キャンセル",firstName:"名",lastName:"姓",phone:"電話番号",language:"言語",myPacks:"マイパック",noPack:"有効なパックはありません。",colPack:"パック",colRemaining:"残り / 合計",colPrice:"価格",colPayment:"支払い",colPurchased:"購入日",colExpires:"有効期限",colProof:"支払い証明",lessonsHistory:"レッスン履歴",noLesson:"レッスン記録はありません。",payments:"支払い",noPayment:"支払い記録はありません。",myDocuments:"マイドキュメント",docsEmpty:"まだドキュメントはありません。先生が教材をこちらにアップロードします。",docsDownload:"ダウンロード",docsUpload:"ドキュメントをアップロード",docsLoading:"読み込み中…",docsNone:"ドキュメントはありません。",proofView:"証明を見る",proofNone:"証明なし",proofUpload:"JPG/PNGをアップロード",proofInvalid:"無効な形式:JPG または PNG のみ。",proofTooLarge:"ファイルが大きすぎます(最大5MB)。",proofDefinitive:"送信後は変更できません。",proofLocked:"ファイルはロックされています",confirmDelete:"このファイルを削除しますか?",error:"エラー",timeCredit:{title:"タイムクレジット",purchased:"購入合計",remaining:"残りクレジット",used:"消費済み",perPack:"プラン別",hoursShort:"時間",empty:"分単位プランのクレジットはまだありません。"},minuteCredit:{title:"分単位クレジット",subtitle:"形式ごとの購入・残り分数",empty:"分単位プランはまだありません。",f2f:"対面",online:"オンライン",remaining:"残り",used:"消費済み",purchased:"購入",hoursShort:"時間"},ratioTitle:"オンライン / 対面 比率(柔軟パック)",ratioOnline:"オンライン",ratioF2F:"対面",ratioMaxOnline:"含まれる最大オンライン数",ratioOverLimit:"上限超過:超過分のオンライン授業は2ユニットとしてカウントされます。",ratioRemaining:"回まで(超過後は2倍)"}},OO={nav:{annonces:"Anuncios",home:"Inicio",cours:"Cursos",about:"Acerca de",prof:"Profesores",tarifs:"Tarifas",ateliers:"Talleres",services:"Servicios",contact:"Contacto",paiement:"Pago",avis:"Reseñas",ressources:"Recursos",faq:"Preguntas frecuentes",book:"Reservar",tagline:"Clases particulares",account:"Mi cuenta",login:"Iniciar sesión",carte:"Mapa interactivo"},lang:{switch:"Idioma / Language",fr:"Francés",zh:"Chino tradicional",en:"Inglés",ja:"Japonés",es:"Español",it:"Italiano",ko:"Coreano"},auth:{title:"Área del alumno",subtitle:"Inicia sesión para consultar tu saldo y el historial de tus clases.",google:"Continuar con Google",apple:"Continuar con Apple",or:"o",email:"Correo electrónico",password:"Contraseña",submit:"Iniciar sesión",submitting:"Iniciando sesión…",forgot:"¿Olvidaste tu contraseña?",note:"Las cuentas las crea el profesor. Contáctanos si aún no has recibido tu invitación.",howKicker:"Primera vez",howSubtitle:"método a seguir si no tienes cuenta de Google o Apple",howTitle:"Crea tu contraseña en 5 pasos",howSteps:["Haz clic en «¿Olvidaste tu contraseña?»","Introduce tu correo electrónico","Haz clic en el enlace recibido por correo (revisa el spam)","Elige tu contraseña","¡Tu cuenta está creada! 🎉"],forgotTitle:"Contraseña olvidada",forgotSent:"Si existe una cuenta con esta dirección, recibirás un correo con un enlace para restablecer tu contraseña.",forgotSubmit:"Enviar el enlace",resetTitle:"Nueva contraseña",resetNew:"Nueva contraseña",resetConfirm:"Confirmar contraseña",resetSubmit:"Actualizar",resetSaving:"Guardando…",errMismatch:"Las contraseñas no coinciden.",errShort:"La contraseña debe tener al menos 8 caracteres."},paiement:{kicker:"Pago",h1:"Pagar tu clase",intro:"Hay dos opciones de pago disponibles según la divisa deseada. Escanea el QR correspondiente desde tu app bancaria.",revolutTitle:"Revolut — Euros (€)",revolutDesc:"Para transferencias en euros desde Europa o cualquier cuenta Revolut. Cuenta: @renaudg82.",ctbcTitle:"CTBC (China Trust) — Dólares taiwaneses (NT$)",ctbcDesc:"Para transferencias en dólares taiwaneses. CTBC Bank (822) — Sucursal Gongguan (0347) — Cuenta: 347540420845.",n
172ote:"Tras el pago, envía una confirmación a [email protected]."},avis:{kicker:"Reseñas",h1:"Lo que dicen mis alumnos.",intro:"A continuación las reseñas de Google dejadas por mis alumnos. También puedes visitar mi ficha de Google Maps y dejar la tuya.",cta:"Dejar una reseña en Google"},footer:{desc:"Clases particulares de francés en Taipéi y en línea.",nav:"Navegación",contact:"Contacto",city:"Taipéi, Taiwán",rights:"Todos los derechos reservados",backToTop:"Volver arriba"},home:{badge:"Tutor nativo · Taipéi",h1a:"El francés,",h1b:"con elegancia.",intro:"Clases particulares de francés en Taiwán y en línea. Un enfoque vivo y personalizado, desde el primer bonjour hasta el DELF C2.",ctaTrial:"Clase de prueba",ctaCourses:"Descubre los cursos",f1t:"Conversación ante todo",f1d:"Hablar desde la primera clase. Método inmersivo adaptado a sinohablantes.",f2t:"Programa a medida",f2d:"Viaje, estudios, trabajo, DELF/DALF — tus objetivos guían cada clase.",f3t:"Cultura francófona",f3d:"Cine, gastronomía, chanson — aprender la lengua a través de la cultura.",quote:"«Una lengua diferente es una visión diferente de la vida.»",ctaH2:"¿Listo para empezar?",ctaP:"Reserva tu clase de prueba (90 min) por 1 000 NT$. La ocasión para evaluar tu nivel y diseñar un programa adaptado.",ctaBtn:"Reservar mi prueba"},cours:{kicker:"Programas",h1a:"Del primer",h1b:"bonjour",h1c:"al dominio.",intro:"Todos los cursos siguen el Marco Común Europeo de Referencia (MCER), de A1 a C2. Cada programa se adapta a tus objetivos: viaje, estudios, trabajo, certificación o placer.",levelsTitle:"Los seis niveles",durationLabel:"Duración indicativa",formatsTitle:"Los formatos",formatsIntro:"Elige el marco que te convenga. También puedes alternar.",onlineReqBtn:"Requisitos técnicos",onlineReqTitle:"Requisitos mínimos para clases en línea",onlineReqCancel:"Si no se cumplen las condiciones técnicas, el profesor se reserva el derecho de cancelar el paquete.",onlineReqItems:["Internet de alta velocidad mínimo 30 Mbps","Micro y auriculares de buena calidad (cable recomendado)","Entorno de estudio silencioso obligatorio","La webcam no es obligatoria"],speedTest:{btn:"Probar mi velocidad",running:"Probando…",ok:"Perfecto, tu conexión es suficiente para las clases en línea.",low:"Tu conexión es inferior a 30 Mbps. Recomendamos acercarte al router, usar cable (Ethernet) o contactar a tu proveedor antes de reservar un paquete en línea.",error:"No se puede probar ahora mismo. Inténtalo de nuevo en un momento.",disclaimer:"Prueba indicativa — medida vía el servidor Cloudflare más cercano."},lessonsTitle:"Ejemplos de clases",lessonsIntro:"Una idea concreta de lo que podemos hacer juntos. Cada clase es totalmente personalizable.",absenceTitle:"Cancelaciones y ausencias",absenceItems:["
172Si cancelas la clase 3 h o más antes del inicio, no se descuenta.","Cancelación a menos de 3 h del inicio: la clase se descuenta.","Si llegas tarde, la clase no terminará más tarde.","Si olvidas asistir, la clase se descuenta."],ctaH2:"¿No estás seguro de tu nivel?",ctaP:"La evaluación de nivel (1 h) por 1 000 NT$ te sitúa con precisión en la escala MCER y orienta tu programa.",ctaBtn:"Reservar mi evaluación",levels:[{name:"Descubrimiento",duration:"≈ 60 h",can:"Presentarte, pedir un café, comprender frases simples.",topics:["Alfabeto y pronunciación","Artículos y género","Verbos être / avoir / aller"]},{name:"Supervivencia",duration:"≈ 80 h",can:"Describir tu entorno, contar tu día, viajar.",topics:["Passé composé e imparfait","Pronombres COD/COI","Vida cotidiana"]},{name:"Umbral",duration:"≈ 100 h",can:"Debatir, dar tu opinión, escribir un texto argumentado simple.",topics:["Subjuntivo presente","Condicional","Conectores lógicos"]},{name:"Avanzado",duration:"≈ 120 h",can:"Comprender lo esencial de un texto complejo, expresarte espontáneamente.",topics:["Subjuntivo pasado","Estilo indirecto","Matices léxicos"]},{name:"Autónomo",duration:"≈ 150 h",can:"Comprender textos largos, expresarte con soltura y precisión.",topics:["Registro culto","Modismos y registros","Argumentación académica"]},{name:"Maestría",duration:"A medida",can:"Comprender sin esfuerzo y restituir hechos y argumentos con finura.",topics:["Literatura y ensayos","Traducción fina","Retórica"]}],formats:[{title:"En línea",desc:"Vía Google Meet. Pizarra interactiva compartida, recursos enviados tras cada clase.",perks:["En cualquier parte del mundo","Grabación disponible","Horario flexible (UTC+8)"]},{title:"Presencial en Taipéi",desc:"En un café tranquilo (Guting, Gongguan o Zhonghe) o en tu casa / oficina.",perks:["Inmersión cercana","Ideal para conversar","Acceso fácil al metro"]},{title:"Flexible",desc:"Combina presencial y online según tus necesidades con un sistema de unidades.",perks:["Alternancia libre","Unidades a utilizar según necesidad","Packs de 20 / 30 / 100 unidades"]}],lessons:[{title:"En el café: pedir como un parisino",duration:"60 min",items:["Vocabulario de bebidas y bollería","Fórmulas de cortesía: « Je voudrais… s'il vous plaît »","Juego de rol: camarero / cliente","Mini-vídeo auténtico: pedido en barra"]},{title:"Contar un viaje reciente",duration:"60 min",items:["Repaso passé composé vs imparfait","Vocabulario de transporte y alojamiento","Expresión oral: «El finde pasado fui a…»","Producción escrita: postal de 80 palabras"]},{title:"Dar tu opinión sobre una película",duration:"75 min",items:["Léxico de la crítica: conmovedor, previsible, cautivador…","Subjuntivo tras «Je ne pense pas que»","Tráiler (Amélie / Intouchables)","Debate estructurado"]},{title:"Redactar un email profesional",duration:"90 min",items:["Registro formal vs neutro","Fórmulas de apertura y cierre","Taller: responder a una oferta de empleo","Corrección colectiva y reformulación"]},{title:"Preparación DALF — ensayo argumentado",duration:"90 min",items:["Metodología de la síntesis de documentos","Conectores lógicos avanzados","Estudio de un artículo de Le Monde Diplomatique","Producción escrita cronometrada 250 palabras"]},{title:"Análisis literario: un poema de Prévert",duration:"90 min",items:["Lectura expresiva y figuras de estilo","Contexto histórico y cultural","Discusión: intenciones del autor","Escritura creativa inspirada en el poema"]}]},about:{why:{kicker:"¿Por qué nosotros?",h1:"La excelencia a medida",sub:"Una pedagogía pensada para TU éxito",philo:"Nuestra filosofía es simple: ponemos toda nuestra experiencia al servicio de nuestros alumnos. Cada trayectoria es única, y cada éxito también.",chooseTitle:"🌟 ¿Por qué elegir nuestra escuela?",chooseText:"Allí donde el sistema tradicional impone un marco rígido y un único ritmo para todos, nosotros situamos a la persona, la flexibilidad y la individualización en el centro de nuestro enfoque.",privateTitle:"🎯 La fuerza de las clases privadas y de la flexibilidad",privateText:"Creemos firmemente que el aprendizaje individual es la única manera de alcanzar resultados excepcionales, sin limitaciones y a tu ritmo.",limitTitle:"⚠️ El límite de los métodos clásicos",limitText:"Muchos centros reúnen en una misma clase a alumnos de niveles muy distintos e imponen un ritmo fijo y rígido. ¿El resultado?",points:[{t:"Flexibilidad horaria total",d:"Planifica tus clases según tu agenda y tu disponibilidad, para aprender sin estrés y adaptándose a tu vida."}
172,{t:"Métodos de enseñanza a medida",d:"Adaptamos nuestras herramientas, materiales y enfoques según tu estilo de aprendizaje (visual, práctico, teórico)."},{t:"Profesor 100 % dedicado",d:"Tus carencias se detectan de inmediato y tus fortalezas se potencian gracias a una atención exclusiva."},{t:"Resultados excepcionales",d:"Una progresión acelerada para aspirar — y lograr — los mejores resultados posibles."}],limits:["Horarios impuestos poco adaptados a tu ritmo personal.","Métodos genéricos que no convienen a todos los perfiles de aprendizaje.","Compromisos permanentes: los alumnos avanzados se aburren mientras los que tienen dificultades se quedan atrás, generando frustración en lugar de satisfacción."]},kicker:"Quién soy",h1a:"Hola,",h1b:"soy tu tutor.",p1:"Francés de nacimiento e instalado en Taipéi desde hace varios años, enseño francés a sinohablantes — adultos, estudiantes y niños — con un método adaptado a su lengua materna y sus objetivos.",p2:"Diplomado en letras y con amplia experiencia en la enseñanza del francés como lengua extranjera (FLE), he acompañado a cientos de alumnos hacia la certificación DELF/DALF/TCF, sus estudios, su trabajo, su vida en Francia o simplemente el placer de conversar.",p3a:"Mi enfoque: ",p3b:"hablar desde la primera clase",p3c:", comprender la cultura para dominar mejor la lengua, y progresar a tu ritmo en un ambiente cálido.",stats:[{n:"18+",l:"años de enseñanza"},{n:"500+",l:"alumnos particulares"},{n:"5 000+",l:"alumnos en clase"},{n:"A1 a C2",l:"preparación DELF/DALF"}]},cartePage:{kicker:"Francia",h1:"Mapa interactivo",intro:"Pasa el cursor o toca el nombre de una ciudad para abrir su oficina de turismo oficial y preparar tu próximo viaje en francés.",mapAlt:"Mapa ilustrado de Francia con sus principales ciudades",officeOf:"Oficina de turismo de"},notFound:{h1:"Página no encontrada",p:"Esta página no existe o ha sido movida.",home:"Inicio",contact:"Contacto"},faq:{searchPlaceholder:"Buscar una pregunta o palabra clave…",noResults:"Sin resultados para",allCategories:"Todo",filterToggle:"Filtros",countOne:"pregunta",countMany:"preguntas",kicker:"FAQ",h1:"Tus preguntas, nuestras respuestas.",intro:"A continuación las preguntas más frecuentes de los alumnos. Si no encuentras tu respuesta, contáctanos directamente.",ctaH2:"¿Tienes otra pregunta?",ctaP:"Estoy aquí para ayudarte. Escríbeme y te responderé en 24 horas.",ctaBtn:"Contactarme",categories:[{title:"Tarifas a la carta (por minuto)",items:[{q:"¿Cómo funciona la fórmula «A la carta»?",a:"Se factura por minuto: 20 NT$/min presencial y 16 NT$/min en línea. Eliges libremente el tiempo total que compras (de 1 a 99 999 minutos)."},{q:"¿Hay una duración mínima por clase?",a:"Las duraciones mínimas indicadas (por ejemplo 90 min presencial y 60 min en línea) son solo recomendaciones para que la clase sea eficaz. No hay bloqueo: escribes los minutos que quieras."},{q:"¿Puedo comprar tiempo presencial Y en línea?",a:"Sí. Con el formato flexible compras dos créditos de tiempo distintos: uno presencial y otro en línea, gestionados por separado."},{q:"¿Cómo consulto mi crédito de tiempo restante?",a:"En «Mi cuenta», un gráfico y el panel «Crédito por minuto» muestran el tiempo comprado, usado y restante, por separado para presencial y en línea. Los minutos se descuentan automáticamente tras cada clase."}]},{title:"Clases para niños",items:[{q:"¿Cuántos niños pueden compartir una clase?",a:"Hasta 2 niños. La tarifa compartida es 1,3 × la tarifa de un solo niño (no el doble)."},{q:"Mis hijos tienen más de 3 años de diferencia, ¿pueden ir juntos?",a:"No. Si la diferencia de edad supera los 3 años, la clase debe ser individual para adaptar la pedagogía a cada niño. El calculador lo indica y bloquea la reserva conjunta."},{q:"¿Hay descuentos en los packs infantiles?",a:"Sí: 10 horas = 5 %, 20 horas = 10 %, 30 horas = 15 %. Se elige directamente en el calculador infantil."}]},{title:"Área del alumno y documentos",items:[{q:"¿Cómo accedo a mi área personal?",a:"Ve a la página de Conexión e identifícate con email y contraseña o con Google. Las cuentas las crea la escuela: contáctanos si aún no tienes una."},{q:"He olvidado mi contraseña, ¿qué hago?",a:"Haz clic en «¿Olvidaste tu contraseña?» en la página de Conexión, introduce tu email y sigue el enlace que recibas. Si no llega en unos minutos, revisa la carpeta de spam."},{q:"¿Qué veo en «Mi cuenta»?",a:"Tus packs activos, unidades y/o minutos restantes, el historial de clases y pagos, tus documentos y justificantes de pago."},{q:"¿Hay que firmar un contrato?",a:"Sí, debes leer y aceptar el contrato de alumno. Se descarga en la parte superior de esta página en inglés y chino tradicional."},{q:"¿Cómo reservo tras usar un calculador?",a:"Todos los calculadores (flexible personalizado, niños, a la carta, pago a plazos) rellenan automáticamente el formulario de contacto con tu configuración: solo hay que enviarlo."},{q:"¿Puedo adjuntar un archivo al formulario?",a:"No, el formulario no admite adjuntos. Envía tus documentos por email o por LINE después del primer mensaje."}]},{title:"General",items:[{q:"¿Quién puede tomar clases?",a:"¡Todo el mund
172o! Adultos, estudiantes, niños, profesionales y empresas. Cada programa se adapta a tus objetivos, nivel y ritmo."},{q:"¿Cuáles son los horarios de las clases?",a:"Clases presenciales: lunes a domingo, 8:30–21:00. Clases en línea: lunes a domingo, 9:30–21:00. Los horarios exactos se acuerdan contigo según tu disponibilidad y la del profesor."},{q:"¿Puedo alternar presencial y en línea?",a:"Sí, con los paquetes flexibles. El máximo de clases en línea depende del paquete: 8 para el de 20 unidades, 12 para el de 30 unidades y 36 para el de 100 unidades. Después, cada clase en línea cuenta como 2 unidades."},{q:"¿Las clases son individuales o en grupo?",a:"Son exclusivamente individuales para garantizar una progresión personalizada y el máximo tiempo de habla. Solo los talleres y las formaciones empresariales pueden reunir a varios participantes."},{q:"¿Puedo elegir mi profesor?",a:"Actualmente Renaud y Marjorie imparten las clases. Puedes indicar tu preferencia al reservar, según disponibilidad."},{q:"¿Por qué elegir Parlons Français en lugar de una escuela tradicional?",a:"Ponemos la individualización en el centro: clases 100% privadas, métodos adaptados a tu estilo de aprendizaje, horarios flexibles y seguimiento personalizado. A diferencia de una escuela tradicional, avanzas a tu ritmo sin esperar al grupo."},{q:"¿Ofrecéis formación para empresas?",a:"Sí, ofrecemos formación de francés para empresas con objetivo A2 o B1. Solo presencial, dentro de un radio de 8 km alrededor de la escuela. Más allá, la empresa asume los gastos de taxi o Uber. Las tarifas están en la página Tarifas, sección Empresa."}]},{title:"Cursos y niveles",items:[{q:"¿Cómo conozco mi nivel?",a:"Ofrezco una evaluación de nivel (1 h, 1 000 NT$) que te sitúa con precisión en la escala MCER. También puedes hacer los tests gratuitos en la sección Recursos."},{q:"¿Cuál es la diferencia entre la clase de prueba y la evaluación de nivel?",a:"La clase de prueba (90 min, 1 000 NT$) es una clase real para descubrir el método y conversar en francés. La evaluación de nivel (1 h, 1 000 NT$) es una prueba específica para situarte con precisión en la escala MCER."},{q:"¿Cuánto tiempo para el DELF B2?",a:"Depende de tu punto de partida y de tu ritmo. De media, pasar de A2 a B2 lleva unas 120 a 150 horas."},{q:"¿Tengo que comprar un manual?",a:"No, todos los materiales están incluidos y son personalizados. Envío los recursos después de cada clase."},{q:"¿Puedo cancelar una clase?",a:"Sí, si cancelas 3 horas o más antes del inicio, no se descuenta. Por debajo de 3 h, sí se descuenta."},{q:"¿Qué pasa si llego tarde o falto?",a:"Si llegas tarde, la clase no se alarga y el tiempo perdido no se recupera. Si no asistes, la clase se descontará."}]},{title:"Pago y reembolso",items:[{q:"¿Qué medios de pago aceptan?",a:"Transferencia bancaria en NT$ (CTBC: banco 822, sucursal Gongguan 0347, cuenta 347540420845) o en euros (Revolut: @renaudg82). Los datos completos están en la página de Pago."},{q:"¿Puedo pagar a plazos?",a:"Los paquetes de 40 clases (presencial) y 100 unidades (flexible) pueden pagarse en 2 veces: 50 % la primera clase, 50 % en los 60 días siguientes."},{q:"¿Cómo funciona el pago a plazos extendido?",a:`El pago fraccionado está disponible para cualquier compra de 15 000 NT$ o más, en un plazo de 2 a 6 meses máximo.
173
174• De 2 a 4 meses: 0 % de interés.
175• 5 o 6 meses: se añade un 5 % de interés sobre el total.
176
177El pago debe hacerse por transferencia bancaria entre el 1 y el 5 de cada mes. En caso de retraso o impago, el profesor suspende las clases sin posibilidad de reembolso del saldo restante.
178
179Hay una calculadora en la página de Pago para estimar tu mensualidad.`},{q:"¿Hay reembolso si cambio de opinión?",a:"Sí: 100 % en 7 días, 75 % en 14 días, 50 % en 30 días. Pasado ese plazo, las clases restantes pueden transferirse a otra persona en un plazo de 30 días."},{q:"¿Los paquetes caducan?",a:"No hay límite de tiempo. Usas tus clases a tu ritmo, con un mínimo medio de 1 clase al mes s
179obre el año."},{q:"¿Puedo regalar un pack o un taller?",a:"Sí. Indícalo en el formulario de contacto: el pack o taller se reservará a nombre del beneficiario y el contrato se redactará en consecuencia."}]},{title:"Clases en línea",items:[{q:"¿Qué conexión necesito?",a:"Se recomienda un mínimo de 30 Mbps. Puedes probar tu conexión desde la página Cursos."},{q:"¿La webcam es obligatoria?",a:"No, solo se requiere un buen micro y auriculares. La webcam es opcional."},{q:"¿Las clases se transcriben o se graban en audio/vídeo?",a:`Sí para la transcripción escrita: se envía por email.
180
181No para grabación de audio o vídeo.
182
183No obstante, el alumno es libre de grabar el audio por su cuenta.
184
185La grabación de vídeo está terminantemente prohibida; cualquier vídeo de clase en una plataforma dará lugar a acciones legales.`}]},{title:"Presencial",items:[{q:"¿Dónde se imparten las clases presenciales?",a:"En una cafetería tranquila cerca de Guting, Gongguan o Zhonghe, en tu domicilio, tu oficina o en nuestras instalaciones. El lugar debe estar dentro del radio sin recargo (Zhonghe–Banqiao–Guting–Gongguan). Puedes consultar el mapa interactivo para ver la zona."},{q:"¿Cuáles son las condiciones para las clases presenciales?",a:`1 — El lugar de cita debe estar en el radio entre Zhonghe, Banqiao, Guting y Gongguan (15 a 20 min en moto máximo).
186
1872 — El profesor puede desplazarse más lejos con un recargo del 10 % sobre el precio del paquete.
188
1893 — La distancia máxima es de 35 min en moto. Más allá, se pedirá la opción en línea. Si el alumno se niega, el profesor deberá rechazar la tutoría.
190
1914 — Si el alumno va al lugar fijado para todas las clases presenciales, se aplica un 10 % de descuento sobre el paquete.`}]},{title:"Talleres",items:[{q:"¿Qué talleres ofrecen?",a:"Ofrecemos cuatro talleres: Postres (crepes, mousse de chocolate…), Juegos de mesa (belote, tarot…), Debate (niveles B1 a C2) y Cultura francesa (película, serie o canción según tu nivel)."},{q:"¿Los talleres están incluidos en los packs de cursos?",a:"No. Los talleres se pagan de forma individual y no se descuentan de un pack de cursos."},{q:"¿Puedo elegir el contenido del taller de cultura?",a:"Sí, según tu nivel y tus gustos, elegimos juntos una película, una serie, una miniserie o una canción para estudiar."},{q:"¿Tengo que llevar un recipiente para el taller de cocina?",a:"Los ingredientes los proporcionamos nosotros, pero el recipiente no: recuerda traer un táper o recipiente para llevarte los postres."},{q:"¿Puedo regalar un taller?",a:"Sí, contáctanos para organizar un bono regalo. El taller se reservará a nombre del beneficiario."}]},{title:"Cursos flexibles",items:[{q:"¿Cómo funciona el sistema de unidades?",a:"Cada clase en línea dura 60 min y consume 1 unidad. Cada clase presencial dura 90 min y consume 2 unidades. Usas tus unidades según tus necesidades, sin límite de tiempo."},{q:"¿Cuál es la diferencia entre una clase presencial y una en línea en unidades?",a:"Clase en línea = 1 unidad (60 min). Clase presencial = 2 unidades (90 min). Puedes alternar libremente los dos formatos según tu planning."},{q:"¿Puedo cambiar de formato (presencial / en línea) en cada clase?",a:"Sí, esa es toda la ventaja del paquete flexible. Elijes el formato de cada clase al reservar, según tu horario y tus preferencias."},{q:"¿Qué paquete flexible elegir según mi ritmo?",a:"El paquete de 20 unidades es para un ritmo ligero (unas 10 clases en línea o 5 presenciales). El de 30 unidades es el más popular. El de 100 unidades es ideal para un proyecto a largo plazo, con pago en 2 veces."},{q:"¿Qué ocurre si supero el ratio de clases en línea?",a:"Si superas el ratio de clases en línea, cada nueva clase en línea contará como 2 unidades en lugar de 1."},{q:"¿Cómo funciona la calculadora «Personalizado»?",a:`La 4.ª opción flexible «Personalizado» te permite componer tu propio pack indicando el número de clases en línea y presenciales.
192
193Precios por clase:
194• Clase en línea (60 min): 900 NT$
195• Clase presencial en nuestro centro (90 min): 1 300 NT$
196• Clase presencial a domicilio o en café (90 min): 1 500 NT$
197
198Mínimo requerido: 4 clases presenciales y 2 clases en línea. La calculadora está disponible directamente en la página Tarifas, sección Flexible.`}]}]},prof:{kicker:"Profesores",h1a:"Tus",h1b:"profesores.",teachers:[{name:"Renaud",bio:["2005 — Diplomado de París VII, Máster II en letras clásicas y sociología","Auxiliar de educación en un instituto parisino","Tutor en París VII","Profesor de francés para estudiantes extranjeros en París VII","Profesor en la Alliance Française de Taipéi durante 5 años","Certificado DELF / DALF / TCF","Más de 18 años de experiencia (más de 20 000 horas) en diversas estructuras escolares"]},{name:"Marjorie",bio:["2011 — Diplomada de Lyon III, Licenciatura en chino","Profesora: del nivel principiante al B2 durante 8 años en Tian Ken 天肯法語","Profesora: del nivel principiante al B2 en la Alliance Française de Taipéi","Más de 12 años de experiencia (más de 12 000 horas)"]}]},tarifs:{kicker:"Tarifas",h1:"Precios claros, sin sorpresas.",intro1:"Clase de prueba (90 min) por",intro2:"1 000 NT$",intro3:". Evaluación de nivel (1 h) también por 1 000 NT$. Sin compromiso, sin costes ocultos.",popular:"Popular",choose:"Elegir esta fórmula",note:"*Mínimo 1 clase al mes de media. Esta media se calcula sobre 1 año.",refundTitle:"Condiciones de reembolso",refundPolicy:["En los 7 días tras el pago: reembolso del 100 %","En los 14 días tras el pago: reembolso del 75 %","En los 30 días tras el pago: reembolso del 50 %","Después de 30 días: no se concede reembolso, pero el alumno puede vender las clases restantes a otra persona en un plazo de 30 días."],bookingNote:"Solo los alumnos con un paquete tienen prioridad para reservar franjas horarias. Las clases de prueba y las clases únicas se asignan según la disponibilidad restante y el acuerdo del profesor.",f2fConditionsTitle:"Condiciones del presencial",f2fConditions:["El lugar de cita debe estar en el radio entre Zhonghe, Banqiao, Guting y Gongguan, es decir 15 a 20 min en moto máximo.","El profesor puede desplazarse más lejos para todas las clases presenciales con un recargo del 10 % sobre el precio del paquete.","La distancia máxima de desplazamiento del profesor es de 35 min en moto. Más allá, se pedirá la opción en línea. Si el alumno se niega, el profesor deberá rechazar la tutoría.","Si el alumno acude al lugar para todas las clases presenciales, se aplica un descuento del 10 % sobre el paquete."],categories:[{id:"presentiel",title:"Presencial",subtitle:"Clases cara a cara en Taipéi — 90 minutos por sesión.",plans:[{name:"Clase única",price:"1 400",unit:"NT$ / 90 min",desc:"Una sesión puntual para descubrir o reforzar.",perks:["1 clase individual de 90 min","Lugar a elegir (café, casa, oficina)","Material pedagógico incluido"]},{name:"Paquete 10 clases",price:"13 000",unit:"NT$",desc:"Ideal para una progresión regular.",perks:["10 clases de 90 min","Plan de aprendizaje personalizado","Seguimiento entre clases","Sin límite de tiempo.*"]},{name:"Paquete 20 clases",price:"24 000",unit:"NT$",desc:"Compromiso a largo plazo, la mejor tarifa.",perks:["20 clases de 90 min","Programa estructurado completo","Sin límite de tiempo.*"]},{name:"Paquete 40 clases",price:"40 000",unit:"NT$",desc:"Pago en 2 veces: 50 % la primera clase, 50 % en los 60 días siguientes a la primera clase.",perks:["40 clases de 90 min","Programa estructurado completo","Sin límite de tiempo.*","Pago en 2 plazos"]}]},{id:"enligne",title:"En línea",subtitle:"Vía Google Meet — 60 minutos por sesión.",plans:[{name:"Paquete 10 clases",price:"8 000",unit:"NT$",desc:"Formato flexible, perfecto para empezar en línea.",perks:["10 clases de 60 min","Pizarra interactiva compartida","Recursos enviados tras cada clase","Grabación disponible"]},{name:"Paquete 20 clases",price:"15 000",unit:"NT$",desc:"Para instalar una rutina de aprendizaje.",perks:["20 clases de 60 min","Seguimiento personalizado","Plan de aprendizaje a medida","Tarifa preferente"]}]}
198,{id:"flexible",title:"Flexible",subtitle:"Sistema de unidades a usar según tus necesidades.",ratioNote:`El máximo de clases en línea por paquete es el siguiente:
199• 20 unidades: máximo 8 clases en línea. Después, cada clase en línea contará como 2 unidades.
200• 30 unidades: máximo 12 clases en línea. Después, cada clase en línea contará como 2 unidades.
201• 100 unidades: máximo 36 clases en línea. Después, cada clase en línea contará como 2 unidades.`,plans:[{name:"20 unidades",price:"15 000",unit:"NT$",desc:"Combina libremente presencial y en línea.",perks:["Clase F2F = 2 unidades","Clase en línea = 1 unidad"]},{name:"30 unidades",price:"20 000",unit:"NT$",desc:"Máxima flexibilidad al mejor precio.",perks:["Clase F2F = 2 unidades","Clase en línea = 1 unidad"]},{name:"100 unidades",price:"60 000",unit:"NT$",desc:"Pago en 2 veces: 50 % la primera clase, 50 % en los 60 días siguientes.",perks:["Clase F2F = 2 unidades","Clase en línea = 1 unidad","Pago en 2 plazos"]}]},{id:"entreprise",title:"Empresa",subtitle:"Formaciones en empresa para alcanzar el nivel A2 o B1 según el nivel inicial de los participantes. Solo presencial, en un radio de 8 km de la escuela. Más allá, la empresa cubre los gastos de taxi o Uber.",plans:[{name:"Plan 1",price:"50 000",unit:"NT$",desc:"Hasta 3 alumnos — pack de 45 h (30 × 1,5 h).",perks:["Hasta 3 alumnos","45 horas de clase","30 sesiones de 1,5 h","Objetivo A2 o B1"]},{name:"Plan 2",price:"65 000",unit:"NT$",desc:"Hasta 5 alumnos — pack de 60 h (40 × 1,5 h).",perks:["Hasta 5 alumnos","60 horas de clase","40 sesiones de 1,5 h","Objetivo A2 o B1"]},{name:"Plan 3",price:"90 000",unit:"NT$",desc:"Hasta 10 alumnos — pack de 90 h (60 × 1,5 h).",perks:["Hasta 10 alumnos","90 horas de clase","60 sesiones de 1,5 h","Objetivo A2 o B1"]}]},{id:"enfants",title:"Niños",subtitle:"Clases particulares de francés para niños de 4 a 14 años (máx. 2 niños). Usa la calculadora para estimar el precio según la edad y el lugar.",plans:[],kids:{childrenLabel:"Número de niños",oneChild:"1 niño",twoChildren:"2 niños",ageLabel:"Edad del niño",locationLabel:"Lugar de la clase",atSchool:"En nuestro centro",atHome:"A domicilio (+20 %)",atHomeBadge:"Recargo a domicilio +20 % incluido",totalLabel:"Estimación de precio",durationLabel:"Duración",minutes:"min",child:"Niño",tierNote:"Precio por niño según la edad. Para 2 niños juntos: 1,3× la tarifa del mayor.",ageOutOfRange:"La edad debe estar entre 4 y 14 años.",pricingTitle:"Tabla de precios",years:"años",ageGapWarning:"Si la diferencia de edad entre los dos niños supera los 3 años, las clases deberán ser individuales y no conjuntas.",sharedRateNote:"Tarifa compartida 2 niños: 1,3×"}}]},contact:{kicker:"Contacto",h1:"Hablemos de tu proyecto.",intro:"Escríbeme en francés, inglés o chino (中文 OK). Respondo en 24 horas.",labels:{Email:"Email",LINE:"LINE / Tel",Lieu:"Ubicación",Horaires:"Horarios"},lieuVal:"Taipéi · En línea (todo el mundo)",horaires:{f2f:"Clases presenciales: lunes a domingo de 8:30 a 21:00",online:"Clases en línea: lunes a domingo de 9:30 a 21:00"},thanks:"¡Gracias!",thanksP:"Tu mensaje ha sido enviado. Hasta muy pronto.",firstName:"Nombre",lastName:"Apellido",email:"Email",phone:"Teléfono",level:"Nivel actual",project:"Tu proyecto",placeholder:"Cuéntame tus objetivos…",formatLabel:"Formato deseado",formatOptions:{presentiel:"Presencial",enligne:"En línea",flexible:"Flexible"},submit:"Enviar mi solicitud",spamNote:"⚠️ Revisa tu carpeta de spam si no recibes el email de confirmación en unos minutos.",cuisineDateLabel:"Fecha deseada para el taller de cocina",cuisineDateHelp:"Las reservas deben hacerse con al menos 7 días de antelación.",cuisineDateError:"El taller de cocina debe reservarse con al menos 7 días de antelación a la fecha deseada.",levels:["Principiante absoluto","A1 — Elemental","A2 — Pre-intermedio","B1 — Intermedio","B2 — Intermedio alto","C1+ — Dominio"]},ressources:{kicker:"Recursos gratuitos",h1:"Aprender francés,",h1b:"a tu ritmo.",intro:"Una selección de fichas, guías y herramientas gratuitas para progresar entre clases — o para empezar a aprender francés por tu cuenta. Todo el contenido está diseña
201do en Taiwán, para sinohablantes y francófilos.",downloadLabel:"Descargar PDF",uploadLabel:"Enviar los PDF",uploadHint:"Una vez completados los tests, envíamelos por email a [email protected] — te devolveré tu nivel estimado en 48 h.",uploadAudioLabel:"Enviar el audio",uploadAudioHint:"Graba tu lectura (formatos comunes aceptados: mp3, m4a, wav, ogg…) y envíamela por email a [email protected]. El archivo no debe superar 20 MB.",uploadDocLabel:"Enviar tu producción",uploadDocHint:"Redacta tu producción escrita y envíamela por email a [email protected]. Formatos aceptados: Word (.doc, .docx), PDF, OpenOffice (.odt), texto (.txt)… Te devolveré una corrección comentada en 48 h.",linkLabel:"Descubrir",comingSoon:"Próximamente",ctaH2:"¿Quieres ir más lejos?",ctaP:"Estos recursos son un aperitivo. Para progresar de verdad, nada sustituye una conversación real. Reserva una clase de prueba por 1 000 NT$.",ctaBtn:"Reservar mi clase de prueba"},ateliers:{kicker:"Talleres",h1:"Aprender divirtiéndose.",intro:"Descubre nuestros talleres temáticos para practicar el francés de otra manera — cocina, juegos de mesa y debate.",workshops:[{id:"desserts",icon:"cake",title:"Taller de Postres",desc:"Aprende a preparar postres populares en Francia con un tutor nativo.",items:["Crepes","Mousse de chocolate","Pastel de chocolate","Tiramisú","Crème brûlée"],price:"2 000 NT$",note:"Ingredientes incluidos — recipiente no incluido. / 60 min",warning:"Es necesario reservar el taller de cocina al menos 7 días antes de la fecha deseada."},{id:"jeux",icon:"games",title:"Taller de Juegos de Mesa",desc:"Aprende las reglas y vocabulario de juegos de cartas y mesa franceses.",items:["Belote","Tarot","Cochon qui rit","Damas","Y más…"],price:"1 500 NT$",note:"/ 90 min"},{id:"debat",icon:"debate",title:"Taller de Debate",desc:"Ponte en situación de defender tu punto de vista en francés. Construcción del argumento guiada.",items:["Preparación del tema","Construcción del argumento","Expresión oral en contexto","Feedback personalizado"],levels:[{level:"B1",price:"1 500 NT$",duration:"90 min"},{level:"B2",price:"1 700 NT$",duration:"90 min"},{level:"C1",price:"2 000 NT$",duration:"90 min"},{level:"C2",price:"3 000 NT$",duration:"120 min"}],price:""},{id:"culture",icon:"culture",title:"Taller de Cultura Francesa",desc:"Según tu nivel, estudia una película, una serie, una miniserie o una canción para enriquecer tu vocabulario y tus referencias culturales francesas.",items:["Análisis de película o serie","Estudio de canción francesa","Vocabulario temático","Referencias culturales e históricas"],price:"1 500 NT$",note:"/ 90 min"}],ctaH2:"¿Quieres probar?",ctaP:"Reserva tu taller ahora. Una experiencia inmersiva para progresar en francés de otra manera.",ctaBtn:"Reservar mi taller",packWarning:"Los talleres no están incluidos en los packs de cursos. Deben pagarse de forma individual."},services:{kicker:"Servicios",h1:"Tus trámites en Francia, simplificados.",intro:"Te acompañamos en tus trámites administrativos y prácticos en Francia gracias a nuestra red de contactos.",items:[{id:"housing",icon:"building",title:"Encontrar alojamiento",desc:"Buscamos un apartamento en Francia para ti gracias a nuestra red de contactos. Por favor, rellena el formulario de contacto para indicarnos tus criterios (superficie, amueblado o no, precio máximo, etc.).",price:"50 % de un alquiler",note:"Tarifa variable según el alquiler encontrado"},{id:"school",icon:"school",title:"Inscripción escolar o de formación",desc:"Te ayudamos en los trámites administrativos y contactamos a las personas concernientes en Francia para hacer avanzar y completar tu expediente lo antes posible y con claridad.",price:"3 000 NT$",note:"Por expediente"},{id:"dispute",icon:"scale",title:"Gestión de conflictos",desc:"Ya sea con tu propietario, una administración o un particular, si el problema te parece demasiado complejo de gestionar desde el punto de vista lingüístico, podemos actuar como intermediarios y resolver tu problema.",price:"1 000 – 3 000 NT$",note:"Mínimo 1 000 NT$ por expediente, máximo 3 000 NT$"}],ctaH2:"¿Necesitas ayuda para un trámite en Francia?",ctaP:"Contáctanos para describir tu situación. Te responderemos en 24 horas.",ctaBtn:"Contactarnos"},account:{title:"Mi cuenta",hello:"Hola",welcome:"Bienvenido/a",adminBtn:"Admin",logout:"Cerrar sesión",loading:"Cargando…",balance:"Saldo total",unitsRemaining:"unidades restantes",myInfo:"Mis datos",edit:"Editar",save:"Guardar",cancel:"Cancelar",firstName:"Nombre",lastName:"Apellido",phone:"Teléfono",language:"Idioma",myPacks:"Mis paquetes",noPack:"Sin paquete activo.",colPack:"Paquete",colRemaining:"Restante / Total",colPrice:"Precio",colPayment:"Pago",colPurchased:"Comprado el",colExpires:"Expira el",colProof:"Comprobante de pago",lessonsHistory:"Historial de clases",noLesson:"Sin clases registradas.",payments:"Pagos",noPayment:"Sin pagos.",myDocuments:"Mis documentos",docsEmpty:"Sin documentos por ahora. Tu profesor subirá aquí tus materiales.",docsDownload:"Descargar",docsUpload:"Subir un documento",docsLoading:"Cargando…",docsNone:"Sin documentos.",proofView:"Ver comprobante",proofNone:"Sin comprobante",proofUpload:"Subir JPG/PNG",proofInvalid:"Formato no válido: solo JPG o PNG.",proofTooLarge:"Archivo demasiado grande (máx. 5 MB).",proofDefinitive:"Definitivo: no se puede modificar tras enviarlo.",proofLocked:"Archivo bloqueado",confirmDelete:"¿Eliminar este archivo?",error:"Error",timeCredit:{title:"Crédito de tiempo",purchased:"Total comprado",remaining:"Crédito restante",used:"Consumido",perPack:"Por fórmula",hoursShort:"h",empty:"Aún no hay crédito de tiempo (plan por minuto)."},minuteCredit:{title:"Crédito por minuto",subtitle:"Minutos comprados y restantes, por formato",empty:"Aún no hay paquete por minuto.",f2f:"Presencial",online:"En línea",remaining:"Restante",used:"Consumido",purchased:"Comprado",hoursShort:"h"},ratioTitle:"Ratio en línea / presencial (paquetes Flexibles)",ratioOnline:"En línea",ratioF2F:"Presencial",ratioMaxOnline:"Máx. en línea incluidas",ratioOverLimit:"Límite superado: las clases en línea adicionales cuentan como 2 unidades.",ratioRemaining:"restantes antes del sobrecoste"}};for(const t of["fr","zh","en"])dn[t].lang={...dn[t].lang,ja:t==="zh"?"日文":t==="fr"?"Japonais":"Japanese",es:t==="zh"?"西班牙文":t==="fr"?"Espagnol":"Spanish",it:t==="zh"?"義大利文":t==="fr"?"Italien":"Italian",ko:t==="zh"?"韓文":t==="fr"?"Coréen":"Korean"};const LO={nav:{annonces:"Annunci",home:"Home",cours:"Corsi",about:"Chi sono",prof:"Professori",tarifs:"Tariffe",ateliers:"Laboratori",services:"Servizi",contact:"Contatto",paiement:"Pagamento",avis:"Recensioni",ressources:"Risorse",faq:"FAQ",book:"Prenota",tagline:"Lezioni private",account:"Il mio account",login:"Accedi",carte:"Mappa interattiva"},lang:{switch:"Lingua / Language",fr:"Francese",zh:"Cinese tradizionale",en:"Inglese",ja:"Giapponese",es:"Spagnolo",it:"Italiano",ko:"Coreano"},auth:{title:"Area studenti",subtitle:"Accedi per consultare il tuo saldo e lo storico delle lezioni.",google:"Continua con Google",apple:"Continua con Apple",or:"oppure",email:"Email",password:"Password",submit:"Accedi",submitting:"Accesso in corso…",forgot:"Password dimenticata?",note:"Gli account vengono creati dall'insegnante. Contattaci se non hai ancora ricevuto l'invito.",howKicker:"Primo accesso",howSubtitle:"metodo da seguire se non hai un account Google o Apple",howTitle:"Crea la tua password in 5 passaggi",howSteps:["Clicca su «Password dimenticata?»","Inserisci il tuo indirizzo email","Clicca sul link ricevuto per email (controlla lo spam)","Scegli la tua password","Il tuo account è creato 🎉"],forgotTitle:"Password dimenticata",forgotSent:"Se esiste un account per questo indirizzo, riceverai un'email con un link per reimpostare la password.",forgotSubmit:"Invia il link",resetTitle:"Nuova password",resetNew:"Nuova password",resetConfirm:"Conferma password",resetSubmit:"Aggiorna",resetSaving:"Salvataggio…",errMismatch:"Le password non corrispondono.",errShort:"La password deve contenere almeno 8 caratteri."},paiement:{kicker:"Pagamento",h1:"Pagare la tua lezione",intro:"Due opzioni di pagamento disponibili in base alla valuta. Scansiona il QR corrispondente dalla tua app bancaria.",revolutTitle:"Revolut — Euro (€)",revolutDesc:"Per bonifici in euro dall'Europa o da qualsiasi conto Revolut. Conto: @renaudg82.",ctbcTitle:"CTBC (China Trust) — Dollari taiwanesi (NT$)",ctbcDesc:"Per bonifici in dollari taiwanesi. CTBC Bank (822) — Filiale Gongguan (0347) — Conto: 347540420845.",n
201ote:"Dopo il pagamento, invia una conferma a [email protected]."},avis:{kicker:"Recensioni",h1:"Cosa dicono i miei studenti.",intro:"Qui sotto le recensioni Google lasciate dai miei studenti. Puoi anche consultare la mia scheda Google Maps e lasciare la tua.",cta:"Lascia una recensione su Google"},footer:{desc:"Lezioni private di francese a Taipei e online.",nav:"Navigazione",contact:"Contatto",city:"Taipei, Taiwan",rights:"Tutti i diritti riservati",backToTop:"Torna su"},home:{badge:"Insegnante madrelingua · Taipei",h1a:"Il francese,",h1b:"con eleganza.",intro:"Lezioni private di francese a Taiwan e online. Un approccio vivo e personalizzato, dal primo bonjour fino al DELF C2.",ctaTrial:"Lezione di prova",ctaCourses:"Scopri i corsi",f1t:"La conversazione prima di tutto",f1d:"Parlare fin dalla prima lezione. Metodo immersivo adatto agli studenti sinofoni.",f2t:"Programma su misura",f2d:"Viaggio, studi, lavoro, DELF/DALF — i tuoi obiettivi guidano ogni lezione.",f3t:"Cultura francofona",f3d:"Cinema, gastronomia, chanson — imparare la lingua attraverso la cultura.",quote:"«Una lingua diversa è una visione diversa della vita.»",ctaH2:"Pronto a iniziare?",ctaP:"Prenota la tua lezione di prova (90 min) a 1 000 NT$. L'occasione per valutare il tuo livello e costruire un programma adatto.",ctaBtn:"Prenota la mia prova"},cours:{kicker:"Programmi",h1a:"Dal primo",h1b:"bonjour",h1c:"alla padronanza.",intro:"Tutti i corsi seguono il Quadro Comune Europeo di Riferimento (QCER), da A1 a C2. Ogni programma è adattato ai tuoi obiettivi: viaggio, studi, lavoro, certificazione o piacere.",levelsTitle:"I sei livelli",durationLabel:"Durata indicativa",formatsTitle:"I formati",formatsIntro:"Scegli il contesto che fa per te. Puoi anche alternare.",onlineReqBtn:"Requisiti tecnici",onlineReqTitle:"Requisiti minimi per le lezioni online",onlineReqCancel:"Se le condizioni tecniche non sono soddisfatte, l'insegnante si riserva il diritto di annullare il pacchetto.",onlineReqItems:["Internet ad alta velocità, minimo 30 Mbps","Microfono e cuffie di buona qualità (cablate consigliate)","Ambiente di studio silenzioso obbligatorio","La webcam non è obbligatoria"],speedTest:{btn:"Testa la mia velocità",running:"Test in corso…",ok:"Perfetto, la tua connessione è sufficiente per le lezioni online.",low:"La tua connessione è inferiore a 30 Mbps. Consigliamo di avvicinarti al router, passare al cavo (Ethernet) o contattare il tuo provider prima di prenotare un pacchetto online.",error:"Test non disponibile al momento. Riprova tra un istante.",disclaimer:"Test indicativo — misurato tramite il server Cloudflare più vicino."},lessonsTitle:"Esempi di lezioni",lessonsIntro:"Un'idea concreta di ciò che possiamo fare insieme. Ogni lezione è completamente personalizzabile.",absenceTitle:"Annullamenti e assenze",absenceItems:["
201Se annulli la lezione 3 ore o più prima dell'inizio, non viene scalata.","Annullamento meno di 3 ore prima: la lezione viene scalata.","Se arrivi in ritardo, la lezione non terminerà più tardi.","Se dimentichi di presentarti, la lezione viene scalata."],ctaH2:"Non sei sicuro del tuo livello?",ctaP:"La valutazione di livello (1 h) a 1 000 NT$ ti colloca con precisione sulla scala QCER e orienta il tuo programma.",ctaBtn:"Prenota la mia valutazione",levels:[{name:"Scoperta",duration:"≈ 60 h",can:"Presentarti, ordinare un caffè, capire frasi semplici.",topics:["Alfabeto e pronuncia","Articoli e generi","Verbi être / avoir / aller"]},{name:"Sopravvivenza",duration:"≈ 80 h",can:"Descrivere il tuo ambiente, raccontare una giornata, viaggiare.",topics:["Passé composé e imparfait","Pronomi COD/COI","Vita quotidiana"]},{name:"Soglia",duration:"≈ 100 h",can:"Discutere, dare la tua opinione, scrivere un testo argomentato semplice.",topics:["Congiuntivo presente","Condizionale","Connettivi logici"]},{name:"Avanzato",duration:"≈ 120 h",can:"Cogliere l'essenziale di un testo complesso, esprimerti spontaneamente.",topics:["Congiuntivo passato","Discorso indiretto","Sfumature lessicali"]},{name:"Autonomo",duration:"≈ 150 h",can:"Comprendere testi lunghi, esprimerti con scioltezza e precisione.",topics:["Registro elevato","Modi di dire e registri","Argomentazione accademica"]},{name:"Padronanza",duration:"Su misura",can:"Comprendere senza sforzo e restituire fatti e argomenti con finezza.",topics:["Letteratura e saggi","Traduzione fine","Retorica"]}],formats:[{title:"Online",desc:"Tramite Google Meet. Lavagna interattiva condivisa, risorse inviate dopo ogni lezione.",perks:["Ovunque nel mondo","Registrazione disponibile","Orari flessibili (UTC+8)"]},{title:"In presenza a Taipei",desc:"In un caffè tranquillo (Guting, Gongguan o Zhonghe) oppure a casa tua / in ufficio.",perks:["Immersione conviviale","Ideale per la conversazione","Metro accessibile"]},{title:"Flexible",desc:"Combina lezioni in presenza e online secondo le tue esigenze con un sistema di unità.",perks:["Alternanza libera","Unità da utilizzare a piacere","Pacchetti da 20 / 30 / 100 unità"]}],lessons:[{title:"Al caffè: ordinare come un parigino",duration:"60 min",items:["Vocabolario di bevande e brioche","Formule di cortesia: « Je voudrais… s'il vous plaît »","Gioco di ruolo: cameriere / cliente","Mini-video autentico: ordinazione al bancone"]},{title:"Raccontare un viaggio recente",duration:"60 min",items:["Ripasso passé composé vs imparfait","Vocabolario di trasporti e alloggi","Espressione orale: «Lo scorso fine settimana sono andato/a…»","Produzione scritta: cartolina di 80 parole"]},{title:"Dare la tua opinione su un film",duration:"75 min",items:["Lessico della critica: commovente, prevedibile, avvincente…","Congiuntivo dopo «Je ne pense pas que»","Trailer (Amélie / Intouchables)","Dibattito strutturato"]},{title:"Scrivere un'email professionale",duration:"90 min",items:["Registro formale vs neutro","Formule di apertura e chiusura","Laboratorio: rispondere a un annuncio di lavoro","Correzione collettiva e riformulazione"]},{title:"Preparazione DALF — saggio argomentato",duration:"90 min",items:["Metodologia della sintesi di documenti","Connettivi logici avanzati","Studio di un articolo di Le Monde Diplomatique","Produzione scritta cronometrata 250 parole"]},{title:"Analisi letteraria: una poesia di Prévert",duration:"90 min",items:["Lettura espressiva e figure retoriche","Contesto storico e culturale","Discussione: intenzioni dell'autore","Scrittura creativa ispirata alla poesia"]}]},about:{why:{kicker:"Perché noi?",h1:"L'eccellenza su misura",sub:"Una didattica pensata per il TUO successo",philo:"La nostra filosofia è semplice: mettiamo tutta la nostra competenza al servizio degli studenti. Ogni percorso è unico, e così ogni successo.",chooseTitle:"🌟 Perché scegliere la nostra scuola?",chooseText:"Dove il sistema tradizionale impone una struttura rigida e un unico ritmo per tutti, noi mettiamo la persona, la flessibilità e l'individualizzazione al centro del nostro metodo.",privateTitle:"🎯 La forza delle lezioni private e della flessibilità",privateText:"Siamo convinti che l'apprendimento individuale sia l'unico modo per raggiungere risultati eccezionali, senza vincoli e al tuo ritmo.",limitTitle:"⚠️ Il limite dei metodi tradizionali",limitText:"Molti istituti riuniscono nella stessa classe studenti di livelli molto diversi e impongono un ritmo fisso e rigido. Il risultato?",points:[{t:"Flessibilità totale degli orari",d:"Organizza le lezioni in base ai tuoi impegni e alla tua disponibilità, per imparare senza stress e in armonia con la tua vita."},{t:"Metodi di insegnamento su misura",d:"Adattiamo strumenti, materiali e approcci didattici al tuo stile di apprendimento (visivo, pratico, teorico)."},{t:"Insegnante dedicato al 100 %",d:"Le lacune vengono individuate subito e i punti di forza valorizzati grazie a un'attenzione esclusiva."},{t:"Risultati eccezionali",d:"Una progressione accelerata per mirare — e ottenere — i migliori risultati possibili."}],limits:["Orari imposti, poco adatti al tuo ritmo personale.","Metodi generici che non si adattano a tutti i profili di apprendimento.","Compromessi continui: gli studenti avanzati si annoiano mentre quelli in difficoltà restano indietro, generando frustrazione invece di soddisfazione."]}
201,kicker:"Chi sono",h1a:"Ciao,",h1b:"sono il tuo insegnante.",p1:"Francese di nascita, vivo a Taipei da diversi anni e insegno francese a studenti sinofoni — adulti, studenti e bambini — con un metodo adatto alla loro lingua madre e ai loro obiettivi.",p2:"Laureato in lettere e con grande esperienza nell'insegnamento del francese come lingua straniera (FLE), ho accompagnato centinaia di studenti verso la certificazione DELF/DALF/TCF, gli studi, il lavoro, la vita in Francia o semplicemente il piacere di conversare.",p3a:"Il mio approccio: ",p3b:"parlare fin dalla prima lezione",p3c:", comprendere la cultura per padroneggiare meglio la lingua, e progredire al tuo ritmo in un ambiente accogliente.",stats:[{n:"18+",l:"anni di insegnamento"},{n:"500+",l:"studenti privati"},{n:"5 000+",l:"studenti in classe"},{n:"A1 a C2",l:"preparazione DELF/DALF"}]},cartePage:{kicker:"Francia",h1:"Mappa interattiva",intro:"Passa il mouse o tocca il nome di una città per aprire il suo ufficio del turismo ufficiale e preparare il tuo prossimo viaggio in francese.",mapAlt:"Mappa illustrata della Francia con le principali città",officeOf:"Ufficio del turismo di"},notFound:{h1:"Pagina non trovata",p:"Questa pagina non esiste o è stata spostata.",home:"Home",contact:"Contatti"},faq:{searchPlaceholder:"Cerca una domanda o parola chiave…",noResults:"Nessun risultato per",allCategories:"Tutto",filterToggle:"Filtri",countOne:"domanda",countMany:"domande",kicker:"FAQ",h1:"Le tue domande, le nostre risposte.",intro:"Qui sotto le domande più frequenti degli studenti. Se non trovi la tua risposta, contattaci direttamente.",ctaH2:"Hai un'altra domanda?",ctaP:"Sono qui per aiutarti. Scrivimi e ti risponderò entro 24 ore.",ctaBtn:"Contattami",categories:[{title:"Tariffe a richiesta (al minuto)",items:[{q:"Come funziona la formula «A richiesta»?",a:"È fatturata al minuto: 20 NT$/min in presenza e 16 NT$/min online. Scegli liberamente il tempo totale da acquistare (da 1 a 99.999 minuti)."},{q:"C'è una durata minima per lezione?",a:"Le durate minime indicate (per esempio 90 min in presenza e 60 min online) sono solo consigli per mantenere la lezione efficace. Nessun blocco: inserisci i minuti che desideri."},{q:"Posso acquistare tempo in presenza E online?",a:"Sì. Con il formato flessibile acquisti due crediti di tempo distinti: uno in presenza e uno online, gestiti separatamente."},{q:"Come controllo il credito di tempo rimanente?",a:"Nell'area «Il mio account» un grafico e il pannello «Credito al minuto» mostrano il tempo acquistato, usato e rimanente, separatamente per presenza e online. I minuti si scalano automaticamente dopo ogni lezione."}]},{title:"Corsi per bambini",items:[{q:"Quanti bambini possono seguire la stessa lezione?",a:"Fino a 2 bambini. La tariffa condivisa è 1,3 × la tariffa di un solo bambino (non il doppio)."},{q:"I miei figli hanno più di 3 anni di differenza: possono studiare insieme?",a:"No. Se la differenza d'età supera i 3 anni la lezione deve essere individuale, per adattare la didattica a ciascuno. Il calcolatore lo segnala e blocca la prenotazione condivisa."},{q:"Ci sono sconti sui pacchetti bambini?",a:"Sì: 10 ore = 5 %, 20 ore = 10 %, 30 ore = 15 %. Si sceglie direttamente nel calcolatore bambini."}]},{title:"Area studente e documenti",items:[{q:"Come accedo alla mia area personale?",a:"Vai alla pagina Accesso e entra con email e password o
201ppure con Google. Gli account sono creati dalla scuola: contattaci se non ne hai ancora uno."},{q:"Ho dimenticato la password, cosa faccio?",a:"Clicca su «Hai dimenticato la password?» nella pagina Accesso, inserisci la tua email e segui il link che riceverai. Se non arriva entro pochi minuti, controlla la cartella spam."},{q:"Cosa vedo in «Il mio account»?",a:"I tuoi pacchetti attivi, unità e/o minuti rimanenti, lo storico di lezioni e pagamenti, i documenti didattici e le ricevute."},{q:"Devo firmare un contratto?",a:"Sì, il contratto studente va letto e accettato. Puoi scaricarlo in cima a questa pagina in inglese e cinese tradizionale."},{q:"Come prenoto dopo aver usato un calcolatore?",a:"Tutti i calcolatori (flessibile personalizzato, bambini, a richiesta, pagamento rateale) precompilano il modulo di contatto con la tua configurazione: basta inviarlo."},{q:"Posso allegare un file al modulo di contatto?",a:"No, gli allegati non sono supportati dal modulo. Invia i documenti via email o LINE dopo il primo messaggio."}]},{title:"Generale",items:[{q:"Chi può seguire le lezioni?",a:"Tutti! Adulti, studenti, bambini, professionisti e aziende. Ogni programma è adattato ai tuoi obiettivi, livello e ritmo."},{q:"Quali sono gli orari delle lezioni?",a:"Lezioni in presenza: dal lunedì alla domenica, 8:30–21:00. Lezioni online: dal lunedì alla domenica, 9:30–21:00. Gli orari esatti si concordano insieme in base alla tua disponibilità e a quella dell'insegnante."},{q:"Posso alternare presenza e online?",a:"Sì, con i pacchetti flessibili. Il numero massimo di lezioni online dipende dal pacchetto: 8 per quello da 20 unità, 12 per quello da 30 unità e 36 per quello da 100 unità. Oltre questo limite, ogni lezione online vale 2 unità."},{q:"Le lezioni sono individuali o di gruppo?",a:"Sono esclusivamente individuali per garantire una progressione personalizzata e il massimo tempo di parola. Solo i laboratori e le formazioni aziendali possono riunire più partecipanti."},{q:"Posso scegliere il mio insegnante?",a:"Attualmente Renaud e Marjorie tengono le lezioni. Puoi indicare la tua preferenza al momento della prenotazione, in base alla disponibilità."},{q:"Perché scegliere Parlons Français invece di una scuola tradizionale?",a:"Mettiamo l'individualizzazione al centro: lezioni 100% private, metodi adattati al tuo stile di apprendimento, orari flessibili e follow-up personalizzato. A differenza di una scuola tradizionale, avanzi al tuo ritmo senza aspettare il gruppo."},{q:"Proponete formazioni aziendali?",a:"Sì, proponiamo formazione di francese per le aziende con obiettivo A2 o B1. Solo in presenza, entro un raggio di 8 km dalla scuola. Oltre, l'azienda si fa carico delle spese di taxi o Uber. Le tariffe sono nella pagina Tariffe, sezione Azienda."}]},{title:"Corsi e livelli",items:[{q:"Come conoscere il mio livello?",a:"Offro una valutazione di livello (1 h, 1 000 NT$) che ti colloca con precisione sulla scala QCER. Puoi anche fare i test gratuiti nella sezione Risorse."},{q:"Qual è la differenza tra la lezione di prova e la valutazione di livello?",a:"La lezione di prova (90 min, 1 000 NT$) è una vera lezione per scoprire il metodo e conversare in francese. La valutazione di livello (1 h, 1 000 NT$) è un test mirato per collocarti con precisione sulla scala QCER."},{q:"Quanto tempo serve per il DELF B2?",a:"Dipende dal punto di partenza e dal ritmo. In media, passare da A2 a B2 richiede circa 120-150 ore di lezione."},{q:"Devo comprare un manuale?",a:"No, tutti i materiali didattici sono inclusi e personalizzati. Invio le risorse dopo ogni lezione."},{q:"Posso annullare una lezione?",a:"Sì, se annulli almeno 3 ore prima dell'inizio non viene scalata. Sotto le 3 h sì."},{q:"Cosa succede se sono in ritardo o assente?",a:"Se arrivi in ritardo, la lezione non si allunga e il tempo perso non viene recuperato. Se non partecipi, la lezione verrà scalata."}]},{title:"Pagamento e rimborso",items:[{q:"Quali metodi di pagamento accettate?",a:"Bonifico in NT$ (CTBC: banca 822, filiale Gongguan 0347, conto 347540420845) o in euro (Revolut: @renaudg82). I dati completi sono nella pagina Pagamento."},{q:"Posso pagare a rate?",a:"I pacchetti 40 lezioni (presenza) e 100 unità (flessibile) sono pagabili in 2 volte: 50% alla prima lezione, 50% entro 60 giorni."},{q:"Come funziona il pagamento a rate esteso?",a:`Il pagamento rateale è disponibile per qualsiasi acquisto di importo minimo di 15 000 NT$, su una durata da 2 a 6 mesi massimo.
202
203• Da 2 a 4 mesi: 0% di interessi.
204• 5 o 6 mesi: interesse del 5% applicato sull'importo totale.
205
206Il pagamento deve essere effettuato tramite bonifico bancario tra il 1° e il 5 di ogni mese. In caso di ritardo o mancato pagamento, l'insegnante sospende le lezioni senza possibilità di rimborso del saldo residuo.
207
208Un calcolatore è disponibile nella pagina Pagamento per stimare la rata mensile.`},{q:"C'è un rimborso se cambio idea?",a:"Sì: 100% entro 7 giorni, 75% entro 14 giorni, 50% entro 30 giorni. Oltre questo termine, le lezioni restanti sono trasferibili a un'altra persona entro 30 giorni."},{q:"I pacchetti scadono?",a:"Nessun limite di tempo. Usi le tue lezioni al tuo ritmo, con una media minima di 1 lezione al mese sull'anno."},{q:"Posso acquistare un pacchetto o un laboratorio in regalo?",a:"Sì. Indicalo nel modulo di contatto: il pacchetto o laboratorio sarà prenotato a nome del destinatario e il contratto redatto di conseguenza."}]}
208,{title:"Lezioni online",items:[{q:"Quale connessione serve?",a:"Consigliato un minimo di 30 Mbps. Puoi testare la connessione dalla pagina Corsi."},{q:"La webcam è obbligatoria?",a:"No, sono richiesti solo un buon microfono e delle cuffie. La webcam è facoltativa."},{q:"Le lezioni vengono trascritte o registrate?",a:`Sì per la trascrizione scritta: viene inviata via email.
209
210No per la registrazione audio o video.
211
212Lo studente è comunque libero di registrare l'audio per conto proprio.
213
214La registrazione video è categoricamente vietata; qualsiasi video di lezione pubblicato su una piattaforma comporterà azioni legali.`}]},{title:"In presenza",items:[{q:"Dove si svolgono le lezioni in presenza?",a:"In un caffè tranquillo nella zona di Guting, Gongguan o Zhonghe, a casa tua, in ufficio o presso la nostra sede. Il luogo deve rimanere entro il raggio di spostamento senza sovrapprezzo (Zhonghe–Banqiao–Guting–Gongguan). Puoi consultare la mappa interattiva per visualizzare la zona."},{q:"Quali sono le condizioni per le lezioni in presenza?",a:`1 — Il luogo dell'appuntamento deve trovarsi nel raggio tra Zhonghe, Banqiao, Guting e Gongguan (15-20 min in scooter massimo).
215
2162 — L'insegnante può spostarsi più lontano con una maggiorazione del 10% sul prezzo del pacchetto.
217
2183 — La distanza massima è di 35 min in scooter. Oltre, sarà richiesta l'opzione online. Se lo studente rifiuta, l'insegnante dovrà rifiutare la tutoria.
219
2204 — Se lo studente raggiunge il luogo per tutte le lezioni in presenza, si applica uno sconto del 10% sul pacchetto.`}]},{title:"Laboratori",items:[{q:"Quali laboratori proponete?",a:"Proponiamo quattro laboratori: Dolci (crêpes, mousse al cioccolato…), Giochi da tavolo (belote, tarot…), Dibattito (livelli da B1 a C2) e Cultura francese (film, serie o canzone in base al tuo livello)."},{q:"I laboratori sono inclusi nei pacchetti di corsi?",a:"No. I laboratori vengono pagati individualmente e non sono scalati da un pacchetto di corsi."},{q:"Posso scegliere il contenuto del laboratorio di cultura?",a:"Sì, in base al tuo livello e ai tuoi gusti, scegliamo insieme un film, una serie, una miniserie o una canzone da studiare."},{q:"Devo portare un contenitore per il laboratorio di cucina?",a:"Gli ingredienti li forniamo noi, ma il contenitore no: ricorda di portare una scatola o un contenitore per portare a casa i dolci."},{q:"Posso regalare un laboratorio?",a:"Sì, contattaci per organizzare un buono regalo. Il laboratorio verrà prenotato a nome del destinatario."}]},{title:"Corsi flessibili",items:[{q:"Come funziona il sistema delle unità?",a:"Ogni lezione online dura 60 min e consuma 1 unità. Ogni lezione in presenza dura 90 min e consuma 2 unità. Usi le unità secondo le tue esigenze, senza limite di tempo."},{q:"Qual è la differenza tra una lezione in presenza e una online in unità?",a:"Lezione online = 1 unità (60 min). Lezione in presenza = 2 unità (90 min). Puoi alternare liberamente i due formati in base al tuo calendario."},{q:"Posso cambiare formato (presenza / online) a ogni lezione?",a:"Sì, è proprio questo il vantaggio del pacchetto flessibile. Scegli il formato di ogni lezione al momento della prenotazione, in base ai tuoi impegni e alle tue preferenze."},{q:"Quale pacchetto flessibile scegliere in base al mio ritmo?",a:"Il pacchetto da 20 unità è adatto a un ritmo leggero (circa 10 lezioni online o 5 in presenza). Quello da 30 unità è il più popolare. Quello da 100 unità è ideale per un progetto a lungo termine, con pagamento in 2 rate."},{q:"Cosa succede se supero il rapporto di lezioni online?",a:"Se superi il rapporto di lezioni online, ogni nuova lezione online varrà 2 unità invece di 1."},{q:"Come funziona il calcolatore «Personalizzato»?",a:`La 4ª formula flessibile «Personalizzato» ti permette di comporre il tuo pacchetto indicando il numero di lezioni online e in presenza.
221
222Prezzi a lezione:
223• Lezione online (60 min): 900 NT$
224• Lezione in presenza presso la nostra sede (90 min): 1 300 NT$
225• Lezione in presenza a domicilio o al bar (90 min): 1 500 NT$
226
227Minimo richiesto: 4 lezioni in presenza e 2 lezioni online. Il calcolatore è disponibile direttamente nella pagina Tariffe, sezione Flessibile.`}]}]},prof:{kicker:"Professori",h1a:"I tuoi",h1b:"professori.",teachers:[{name:"Renaud",bio:["2005 — Laureato a Parigi VII, Master II in lettere classiche e sociologia","Assistente educativo in un collège parigino","Tutor a Parigi VII","Insegnante di francese per studenti stranieri a Parigi VII","Insegnante all'Alliance Française di Taipei per 5 anni","Certificato DELF / DALF / TCF","Oltre 18 anni di esperienza (più di 20 000 ore di insegnamento) in diverse strutture scolastiche"]},{name:"Marjorie",bio:["2011 — Laureata a Lione III, Laurea in cinese","Insegnante: dal livello principiante al B2 per 8 anni a Tian Ken 天肯法語","Insegnante: dal livello principiante al B2 all'Alliance Française di Taipei","Oltre 12 anni di esperienza (più di 12 000 ore di insegnamento)"]}]},tarifs:{kicker:"Tariffe",h1:"Prezzi chiari, senza sorprese.",intro1:"Lezione di prova (90 min) a",intro2:"1 000 NT$",intro3:". Valutazione di livello (1 h) anch'essa a 1 000 NT$. Nessun impegno, nessun costo nascosto.",popular:"Popolare",choose:"Scegli questa formula",note:"*Minimo 1 lezione al mese in media. Questa media è 
227calcolata su 1 anno.",refundTitle:"Condizioni di rimborso",refundPolicy:["Entro 7 giorni dal pagamento: rimborso del 100 %","Entro 14 giorni dal pagamento: rimborso del 75 %","Entro 30 giorni dal pagamento: rimborso del 50 %","Oltre 30 giorni: nessun rimborso, ma lo studente può vendere le lezioni restanti a un'altra persona entro 30 giorni."],bookingNote:"Solo gli studenti con un pacchetto hanno priorità nella prenotazione degli orari. Le lezioni di prova e le lezioni singole sono assegnate in base alla disponibilità residua e all'accordo dell'insegnante.",f2fConditionsTitle:"Condizioni per le lezioni in presenza",f2fConditions:["Il luogo dell'appuntamento per le lezioni in presenza deve trovarsi nel raggio tra Zhonghe, Banqiao, Guting e Gongguan, cioè 15-20 min in scooter massimo.","L'insegnante può spostarsi più lontano per tutte le lezioni in presenza con una maggiorazione del 10% sul prezzo del pacchetto.","La distanza massima di spostamento dell'insegnante è di 35 min in scooter. Oltre, sarà richiesta l'opzione online. Se lo studente rifiuta, l'insegnante dovrà rifiutare la tutoria.","Se lo studente raggiunge il luogo per tutte le lezioni in presenza, si applica uno sconto del 10% sul pacchetto."],categories:[{id:"presentiel",title:"In presenza",subtitle:"Lezioni faccia a faccia a Taipei — 90 minuti a sessione.",plans:[{name:"Lezione singola",price:"1 400",unit:"NT$ / 90 min",desc:"Una sessione occasionale per scoprire o approfondire.",perks:["1 lezione individuale di 90 min","Luogo a scelta (café, casa, ufficio)","Materiale didattico incluso"]},{name:"Pacchetto 10 lezioni",price:"13 000",unit:"NT$",desc:"Ideale per una progressione regolare.",perks:["10 lezioni di 90 min","Piano di apprendimento personalizzato","Follow-up tra le lezioni","Nessun limite di tempo.*"]},{name:"Pacchetto 20 lezioni",price:"24 000",unit:"NT$",desc:"Impegno a lungo termine, la migliore tariffa.",perks:["20 lezioni di 90 min","Programma strutturato completo","Nessun limite di tempo.*"]},{name:"Pacchetto 40 lezioni",price:"40 000",unit:"NT$",desc:"Pagamento in 2 volte: 50% alla prima lezione, 50% entro 60 giorni dalla prima.",perks:["40 lezioni di 90 min","Programma strutturato completo","Nessun limite di tempo.*","Pagamento in 2 rate"]}]},{id:"enligne",title:"Online",subtitle:"Tramite Google Meet — 60 minuti a sessione.",plans:[{name:"Pacchetto 10 lezioni",price:"8 000",unit:"NT$",desc:"Formato flessibile, perfetto per iniziare online.",perks:["10 lezioni di 60 min","Lavagna interattiva condivisa","Risorse inviate dopo ogni lezione","Registrazione disponibile"]},{name:"Pacchetto 20 lezioni",price:"15 000",unit:"NT$",desc:"Per instaurare una routine di apprendimento.",perks:["20 lezioni di 60 min","Follow-up personalizzato","Piano di apprendimento su misura","Tariffa preferenziale"]}]},{id:"flexible",title:"Flessibile",subtitle:"Sistema a unità da usare secondo le tue esigenze.",ratioNote:`Il numero massimo di lezioni online per pacchetto è il seguente:
228• 20 unità: massimo 8 lezioni online. Oltre questo limite, ogni lezione online varrà 2 unità.
229• 30 unità: massimo 12 lezioni online. Oltre questo limite, ogni lezione online varrà 2 unità.
230• 100 unità: massimo 36 lezioni online. Oltre questo limite, ogni lezione online varrà 2 unità.`,plans:[{name:"20 unità",price:"15 000",unit:"NT$",desc:"Combina liberamente presenza e online.",perks:["Lezione F2F = 2 unità","Lezione online = 1 unità"]},{name:"30 unità",price:"20 000",unit:"NT$",desc:"Massima flessibilità al miglior prezzo.",perks:["Lezione F2F = 2 unità","Lezione online = 1 unità"]},{name:"100 unità",price:"60 000",unit:"NT$",desc:"Pagamento in 2 volte: 50% alla prima lezione, 50% entro 60 giorni.",perks:["Lezione F2F = 2 unità","Lezione online = 1 unità","Pagamento in 2 rate"]}]},{id:"entreprise",title:"Aziende",subtitle:"Formazioni aziendali per raggiungere il livello A2 o B1 in base al livello di partenza dei partecipanti. Solo in presenza, entro un raggio di 8 km dalla scuola. Oltre, l'azienda copre le spese di taxi o Uber.",plans:[{name:"Formula 1",price:"50 000",unit:"NT$",desc:"Massimo 3 partecipanti — pacchetto 45 h (30 × 1,5 h).",perks:["Fino a 3 partecipanti","45 ore di lezione","30 sessioni da 1,5 h","Obiettivo A2 o B1"]},{name:"Formula 2",price:"65 000",unit:"NT$",desc:"Massimo 5 partecipanti — pacchetto 60 h (40 × 1,5 h).",perks:["Fino a 5 partecipanti","60 ore di lezione","40 sessioni da 1,5 h","Obiettivo A2 o B1"]},{name:"Formula 3",price:"90 000",unit:"NT$",desc:"Massimo 10 partecipanti — pacchetto 90 h (60 × 1,5 h).",perks:["Fino a 10 partecipanti","90 ore di lezione","60 sessioni da 1,5 h","Obiettivo A2 o B1"]}]}
230,{id:"enfants",title:"Bambini",subtitle:"Lezioni private di francese per bambini dai 4 ai 14 anni (max 2 bambini). Usa il calcolatore per stimare il prezzo in base all'età e al luogo.",plans:[],kids:{childrenLabel:"Numero di bambini",oneChild:"1 bambino",twoChildren:"2 bambini",ageLabel:"Età del bambino",locationLabel:"Luogo della lezione",atSchool:"Presso la nostra sede",atHome:"A domicilio (+20%)",atHomeBadge:"Maggiorazione a domicilio +20% inclusa",totalLabel:"Stima del prezzo",durationLabel:"Durata",minutes:"min",child:"Bambino",tierNote:"Prezzo per bambino in base all'età. Per 2 bambini insieme: 1,3× la tariffa del maggiore.",ageOutOfRange:"L'età deve essere tra 4 e 14 anni.",pricingTitle:"Listino prezzi",years:"anni",ageGapWarning:"Se la differenza di età tra i due bambini supera i 3 anni, i corsi dovranno essere individuali e non in comune.",sharedRateNote:"Tariffa condivisa 2 bambini: 1,3×"}}]},contact:{kicker:"Contatto",h1:"Parliamo del tuo progetto.",intro:"Scrivimi in francese, inglese o cinese (中文 OK). Rispondo entro 24 ore.",labels:{Email:"Email",LINE:"LINE / Tel",Lieu:"Luogo",Horaires:"Orari"},lieuVal:"Taipei · Online (in tutto il mondo)",horaires:{f2f:"Lezioni in presenza: da lunedì a domenica, 8:30-21:00",online:"Lezioni online: da lunedì a domenica, 9:30-21:00"},thanks:"Grazie!",thanksP:"Il tuo messaggio è stato inviato. A presto.",firstName:"Nome",lastName:"Cognome",email:"Email",phone:"Telefono",level:"Livello attuale",project:"Il tuo progetto",placeholder:"Raccontami i tuoi obiettivi…",formatLabel:"Formato desiderato",formatOptions:{presentiel:"In presenza",enligne:"Online",flexible:"Flexible"},submit:"Invia la mia richiesta",spamNote:"⚠️ Controlla la cartella spam se non ricevi l'email di conferma entro pochi minuti.",cuisineDateLabel:"Data desiderata per il laboratorio di cucina",cuisineDateHelp:"Le prenotazioni devono essere effettuate almeno 7 giorni prima.",cuisineDateError:"Il laboratorio di cucina deve essere prenotato almeno 7 giorni prima della data desiderata.",levels:["Principiante assoluto","A1 — Elementare","A2 — Pre-intermedio","B1 — Intermedio","B2 — Intermedio superiore","C1+ — Avanzato"]},ressources:{kicker:"Risorse gratuite",h1:"Imparare il francese,",h1b:"al tuo ritmo.",intro:"Una selezione di schede, guide e strumenti gratuiti per progredire tra una lezione e l'altra — o per iniziare a imparare il francese da solo. Tutti i contenuti sono pensati a Taiwan, per sinofoni e francofili.",downloadLabel:"Scarica PDF",uploadLabel:"Invia i PDF",uploadHint:"Una volta completati i test, inviameli via email a [email protected] — ti restituirò il tuo livello stimato entro 48 h.",uploadAudioLabel:"Invia l'audio",uploadAudioHint:"Registra la tua lettura (formati comuni accettati: mp3, m4a, wav, ogg…) e inviamela via email a [email protected]. Il file non deve superare i 20 MB.",uploadDocLabel:"Invia la tua produzione",uploadDocHint:"Scrivi la tua produzione scritta e inviamela via email a [email protected]. Formati accettati: Word (.doc, .docx), PDF, OpenOffice (.odt), testo (.txt)… Ti restituirò una correzione commentata entro 48 h.",linkLabel:"Scopri",comingSoon:"Prossimamente",ctaH2:"Vuoi andare oltre?",ctaP:"Queste risorse sono un assaggio. Per progredire davvero, niente sostituisce una conversazione reale. Prenota una lezione di prova a 1 000 NT$.",ctaBtn:"Prenota la mia lezione di prova"},ateliers:{kicker:"Laboratori",h1:"Imparare divertendosi.",intro:"Scopri i nostri laboratori tematici per praticare il francese in modo diverso — cucina, giochi da tavolo e dibattito.",workshops:[{id:"desserts",icon:"cake",title:"Laboratorio di Dolci",desc:"Impara a preparare dessert popolari in Francia con un insegnante madrelingua.",items:["Crêpes","Mousse al cioccolato","Torta al cioccolato","Tiramisù","Crème brûlée"],price:"1 500 NT$",note:"Ingredienti forniti — contenitore non fornito. / 60 min",warning:"È necessario prenotare il laboratorio di cucina almeno 7 giorni prima della data desiderata."},{id:"jeux",icon:"games",title:"Laboratorio di Giochi da Tavolo",desc:"Impara le regole e il vocabolario dei giochi di carte e da tavolo francesi.",items:["Belote","Tarot","Coc
230hon qui rit","Dama","E altri…"],price:"1 500 NT$",note:"/ 90 min"},{id:"debat",icon:"debate",title:"Laboratorio di Dibattito",desc:"Mettiti nella situazione di difendere il tuo punto di vista in francese. Costruzione dell'argomentazione guidata.",items:["Preparazione dell'argomento","Costruzione dell'argomentazione","Espressione orale in contesto","Feedback personalizzato"],levels:[{level:"B1",price:"1 500 NT$",duration:"90 min"},{level:"B2",price:"1 700 NT$",duration:"90 min"},{level:"C1",price:"2 000 NT$",duration:"90 min"},{level:"C2",price:"3 000 NT$",duration:"120 min"}],price:""},{id:"culture",icon:"culture",title:"Laboratorio di Cultura Francese",desc:"In base al tuo livello, studia un film, una serie, una miniserie o una canzone per arricchire il tuo vocabolario e i tuoi riferimenti culturali francesi.",items:["Analisi di film o serie","Studio di canzone francese","Vocabolario tematico","Riferimenti culturali e storici"],price:"2 000 NT$",note:"/ 90 min"}],ctaH2:"Vuoi provare?",ctaP:"Prenota subito il tuo laboratorio. Un'esperienza immersiva per migliorare il francese in modo diverso.",ctaBtn:"Prenota il mio laboratorio",packWarning:"I laboratori non sono inclusi nei pacchetti di corsi. Devono essere pagati individualmente."},services:{kicker:"Servizi",h1:"Le tue pratiche in Francia, semplificate.",intro:"Ti accompagniamo nelle pratiche amministrative e pratiche in Francia grazie alla nostra rete di contatti.",items:[{id:"housing",icon:"building",title:"Trovare un alloggio",desc:"Cerchiamo un appartamento in Francia per te grazie alla nostra rete di contatti. Ti preghiamo di compilare il modulo di contatto per indicarci i tuoi criteri (metri quadri, arredato o meno, prezzo massimo, ecc.).",price:"50 % di un affitto",note:"Tariffa variabile a seconda dell'affitto trovato"},{id:"school",icon:"school",title:"Iscrizione scolastica o di formazione",desc:"Ti aiutiamo nelle pratiche amministrative e contattiamo le persone interessate in Francia per far avanzare e completare la pratica il più velocemente possibile e in modo chiaro.",price:"3 000 NT$",note:"Per pratica"},{id:"dispute",icon:"scale",title:"Gestione contenzioso",desc:"Che si tratti del tuo proprietario, di un'amministrazione o di un privato, se il problema ti sembra troppo complesso da gestire dal punto di vista linguistico, possiamo fare da intermediari e risolvere il tuo problema.",price:"1 000 – 3 000 NT$",note:"Minimo 1 000 NT$ per pratica, massimo 3 000 NT$"}],ctaH2:"Hai bisogno di aiuto per una pratica in Francia?",ctaP:"Contattaci per descrivere la tua situazione. Ti risponderemo entro 24 ore.",ctaBtn:"Contattaci"},account:{title:"Il mio account",hello:"Ciao",welcome:"Benvenuto/a",adminBtn:"Admin",logout:"Esci",loading:"Caricamento…",balance:"Saldo totale",unitsRemaining:"unità rimanenti",myInfo:"I miei dati",edit:"Modifica",save:"Salva",cancel:"Annulla",firstName:"Nome",lastName:"Cognome",phone:"Telefono",language:"Lingua",myPacks:"I miei pacchetti",noPack:"Nessun pacchetto attivo.",colPack:"Pacchetto",colRemaining:"Rimanente / Totale",colPrice:"Prezzo",colPayment:"Pagamento",colPurchased:"Acquistato il",colExpires:"Scade il",colProof:"Prova di pagamento",lessonsHistory:"Storico lezioni",noLesson:"Nessuna lezione registrata.",payments:"Pagamenti",noPayment:"Nessun pagamento.",myDocuments:"I miei documenti",docsEmpty:"Ancora nessun documento. Il tuo insegnante caricherà qui i materiali.",docsDownload:"Scarica",docsUpload:"Carica un documento",docsLoading:"Caricamento…",docsNone:"Nessun documento.",proofView:"Vedi la prova",proofNone:"Nessuna prova",proofUpload:"Carica JPG/PNG",proofInvalid:"Formato non valido: solo JPG o PNG.",proofTooLarge:"File troppo grande (max 5 MB).",proofDefinitive:"Definitivo: non modificabile dopo l'invio.",proofLocked:"File bloccato",confirmDelete:"Eliminare questo file?",error:"Errore",timeCredit:{title:"Credito di tempo",purchased:"Totale acquistato",remaining:"Credito rimanente",used:"Consumato",perPack:"Per formula",hoursShort:"h",empty:"Nessun credito di tempo (formula al minuto) al momento."},minuteCredit:{title:"Credito al minuto",subtitle:"Minuti acquistati e rimanenti, per formato",empty:"Nessun pacchetto al minuto al momento.",f2f:"In presenza",online:"Online",remaining:"Rimanente",used:"Consumato",purchased:"Acquistato",hoursShort:"h"},ratioTitle:"Rapporto online / in presenza (pacchetti Flessibili)",ratioOnline:"Online",ratioF2F:"In presenza",ratioMaxOnline:"Max online incluse",ratioOverLimit:"Limite superato: le lezioni online aggiuntive valgono 2 unità.",ratioRemaining:"rimanenti prima del sovrapprezzo"}},NO={nav:{annonces:"공지",home:"홈",cours:"수업",about:"소개",prof:"강사진",tarifs:"요금",ateliers:"워크숍",services:"서비스",contact:"문의",paiement:"결제",avis:"후기",ressources:"자료실",faq:"자주 묻는 질문",book:"예약하기",tagline:"개인 과외",account:"내 계정",login:"로그인",carte:"인터랙티브 지도"},lang:{switch:"언어 / Language",fr:"프랑스어",zh:"중국어 번체",en:"영어",ja:"일본어",es:"스페인어",it:"이탈리아어",ko:"한국어"},auth:{title:"수강생 공간",subtitle:"로그인하여 잔액과 수업 기록을 확인하세요.",google:"Google로 계속하기",apple:"Apple로 계속하기",or:"또는",email:"이메일",password:"비밀번호",submit:"로그인",submitting:"로그인 중…",forgot:"비밀번호를 잊으셨나요?",note:"계정은 선생님이 생성합니다. 초대를 받지 못하셨다면 문의해 주세요.",howKicker:"첫 로그인",howSubtitle:"Google 또는 Apple 계정이 없는 경우 아래 방법을 따라 주세요",howTitle:"5단계로 비밀번호 설정하기",howSteps:["「비밀번호를 잊으셨나요?」 클릭","이메일 주소 입력","이메일로 받은 링크 클릭 (스팸함도 확인)","비밀번호 설정","계정 생성 완료 🎉"],forgotTitle:"비밀번호 찾기",forgotSent:"해당 주소로 계정이 있으면 비밀번호 재설정 링크를 이메일로 보내드립니다.",forgotSubmit:"링크 보내기",resetTitle:"새 비밀번호",resetNew:"새 비밀번호",resetConfirm:"비밀번호 확인",resetSubmit:"업데이트",resetSaving:"저장 중…",errMismatch:"비밀번호가 일치하지 않습니다.",errShort:"비밀번호는 8자 이상이어야 합니다."},paiement:{kicker:"결제",h1:"수업료 결제",intro:"원하시는 통화에 따라 두 가지 결제 방법을 이용하실 수 있습니다. 은행 앱에서 해당 QR 코드를 스캔해 주세요.",revolutTitle:"Revolut — 유로 (€)",revolutDesc:"유럽 또는 Revolut 계정에서의 유로 송금용. 계정: @renaudg82.",ctbcTitle:"CTBC (中國信託) — 대만 달러 (NT$)",ctbcDesc:"대만 달러 송금
230용. CTBC Bank (822) — 공관 지점 (0347) — 계좌: 347540420845.",note:"결제 후 [email protected]으로 확인 메일을 보내주세요."},avis:{kicker:"후기",h1:"학생들의 이야기.",intro:"아래는 학생들이 Google에 남겨준 후기입니다. Google Maps 페이지에서 직접 후기를 남기실 수도 있습니다.",cta:"Google에 후기 남기기"},footer:{desc:"타이베이와 온라인에서 프랑스어 개인 수업.",nav:"메뉴",contact:"문의",city:"타이베이, 대만",rights:"모든 권리 보유",backToTop:"맨 위로"},home:{badge:"원어민 개인 강사 · 타이베이",h1a:"프랑스어를,",h1b:"우아하게.",intro:"대만과 온라인에서 진행하는 프랑스어 개인 수업. 첫 bonjour부터 DELF C2까지, 생동감 있고 맞춤형 접근.",ctaTrial:"체험 수업",ctaCourses:"수업 살펴보기",f1t:"회화 우선",f1d:"첫 수업부터 말하기. 중국어권 학습자를 위한 몰입형 교수법.",f2t:"맞춤형 프로그램",f2d:"여행, 학업, 업무, DELF/DALF — 여러분의 목표가 모든 수업을 안내합니다.",f3t:"프랑스어권 문화",f3d:"영화, 미식, 샹송 — 문화를 통해 언어를 배웁니다.",quote:"« 언어가 다르면 인생을 보는 시선도 달라진다. »",ctaH2:"시작할 준비가 되셨나요?",ctaP:"90분 체험 수업을 1,000 NT$에 예약하세요. 레벨을 평가하고 맞춤 프로그램을 설계할 좋은 기회입니다.",ctaBtn:"체험 수업 예약"},cours:{kicker:"프로그램",h1a:"첫",h1b:"bonjour",h1c:"에서 숙달까지.",intro:"모든 수업은 유럽 공통 참조 기준(CEFR) A1부터 C2까지를 따릅니다. 모든 프로그램은 여행, 학업, 업무, 자격증 또는 취미 등 여러분의 목표에 맞춰 조정됩니다.",levelsTitle:"6단계",durationLabel:"예상 학습 시간",formatsTitle:"수업 형식",formatsIntro:"본인에게 맞는 방식을 선택하세요. 두 형식을 병행할 수도 있습니다.",onlineReqBtn:"기술 요건",onlineReqTitle:"온라인 수업 최소 요건",onlineReqCancel:"기술 조건이 충족되지 않을 경우, 강사는 패키지를 취소할 권리가 있습니다.",onlineReqItems:["최소 30 Mbps 고속 인터넷","양질의 마이크와 헤드셋 (유선 권장)","조용한 학습 환경 필수","웹캠은 필수가 아닙니다"],speedTest:{btn:"내 인터넷 속도 측정",running:"측정 중…",ok:"좋습니다. 온라인 수업에 충분한 속도입니다.",low:"연결 속도가 30 Mbps 미만입니다. 공유기 가까이로 이동하거나 유선(이더넷)으로 연결하거나, 온라인 패키지 예약 전에 인터넷 사업자에게 문의해 주세요.",error:"지금은 테스트할 수 없습니다. 잠시 후 다시 시도해 주세요.",disclaimer:"참고용 측정 — 가장 가까운 Cloudflare 서버를 통해 측정됩니다."},lessonsTitle:"수업 예시",lessonsIntro:"함께 할 수 있는 활동의 구체적인 예시입니다. 모든 수업은 완전히 맞춤화 가능합니다.",absenceTitle:"취소 및 결석",absenceItems:["수업 시작 3시간 이상 전에 취소: 수업 횟수에 포함되지 않습니다.","수업 시작 3시간 이내 취소: 수업 횟수에 포함됩니다.","지각하셔도 수업은 연장되지 않습니다.","수업을 잊고 불참하시면 횟수에 포함됩니다."],ctaH2:"본인의 레벨이 궁금하신가요?",ctaP:"1시간 레벨 평가(1,000 NT$)를 통해 CEFR 척도상의 위치를 정확히 파악하고 프로그램 방향을 정합니다.",ctaBtn:"레벨 평가 예약",levels:[{name:"입문",duration:"약 60시간",can:"자기소개, 커피 주문, 간단한 문장 이해.",topics:["알파벳과 발음","관사와 성","être / avoir / aller 동사"]},{name:"생존",duration:"약 80시간",can:"주변 환경 묘사, 하루 이야기, 여행하기.",topics:["복합과거와 반과거","목적어 대명사","일상생활"]},{name:"문턱",duration:"약 100시간",can:"토론, 의견 표현, 간단한 논증 글쓰기.",topics:["접속법 현재","조건법","논리 접속사"]},{name:"고급 입문",duration:"약 120시간",can:"복잡한 글의 핵심 이해, 자연스러운 표현.",topics:["접속법 과거","간접화법","어휘의 뉘앙스"]}
230,{name:"자율",duration:"약 150시간",can:"긴 글 이해, 유창하고 정확한 표현.",topics:["격조 있는 문체","관용 표현과 격식","학술적 논증"]},{name:"숙달",duration:"맞춤형",can:"어려움 없이 이해하고 사실과 논거를 섬세하게 재구성.",topics:["문학과 에세이","정교한 번역","수사학"]}],formats:[{title:"온라인",desc:"Google Meet으로 진행. 공유 인터랙티브 보드 사용, 수업 후 자료 송부.",perks:["전 세계 어디서나","녹화 가능","유연한 시간대 (UTC+8)"]},{title:"타이베이 대면",desc:"조용한 카페(구팅, 공관, 중허) 또는 자택/사무실에서.",perks:["친근한 몰입형 환경","회화에 최적","지하철 접근 용이"]},{title:"유연한 수업",desc:"대면과 온라인을 필요에 따라 자유롭게 조합하여 유닛 단위로 이용.",perks:["자유롭게 번갈아 수업","필요에 따라 유닛 사용","20 / 30 / 100 유닛 패키지"]}],lessons:[{title:"카페에서: 파리지앵처럼 주문하기",duration:"60분",items:["음료와 베이커리 어휘","정중한 표현: « Je voudrais… s'il vous plaît »","롤플레이: 점원/손님","실제 미니 영상: 카운터 주문"]},{title:"최근 여행 이야기하기",duration:"60분",items:["복합과거 vs 반과거 복습","교통과 숙박 어휘","구어 표현: « 지난 주말에 …에 갔어요 »","80단어 엽서 작성"]},{title:"영화에 대해 의견 말하기",duration:"75분",items:["비평 어휘: 감동적인, 예측 가능한, 매혹적인…","« Je ne pense pas que » 다음 접속법","예고편 보기(아멜리에 / 언터처블)","구조적 토론"]},{title:"비즈니스 이메일 작성",duration:"90분",items:["격식 vs 중립 톤","도입과 맺음 표현","워크숍: 채용 공고에 회신하기","공동 첨삭과 재작성"]},{title:"DALF 대비 — 논술 에세이",duration:"90분",items:["자료 요약 방법론","고급 논리 접속사","Le Monde Diplomatique 기사 연구","250단어 제한시간 작문"]},{title:"문학 분석: 프레베르의 시 한 편",duration:"90분",items:["감정 표현 낭독과 수사법","역사·문화적 ë°°ê²½","토론: 작가의 의도","시에서 영감을 받은 창작"]}]},about:{why:{kicker:"왜 저희일까요?",h1:"맞춤형 탁월함",sub:"'당신'의 성공을 위해 설계된 교육법",philo:"저희의 철학은 간단합니다. 모든 전문성을 학생에게 온전히 쏟습니다. 모든 학습 여정은 고유하며, 성공의 모습도 그렇습니다.",chooseTitle:"🌟 저희 학교를 선택하는 이유",chooseText:"전통적인 시스템이 경직된 틀과 획일적인 진도를 모두에게 강요하는 반면, 저희는 사람과 유연성, 개별화를 교육의 중심에 둡니다.",privateTitle:"🎯 개인 수업과 유연성의 힘",privateText:"개별 학습만이 제약 없이 자신의 속도로 뛰어난 성과에 도달하는 유일한 방법이라고 확신합니다.",limitTitle:"⚠️ 기존 방식의 한계",limitText:"많은 기관이 수준이 크게 다른 학생들을 한 반에 모아 고정되고 경직된 진도를 강요합니다. ê·¸ 결과는?",points:[{t:"완전한 일정 유연성",d:"본인의 일정과 여유 시간에 맞춰 수업을 계획하여, 삶에 맞는 스트레스 없는 학습을 누리세요."},{t:"맞춤형 교수법",d:"학습 유형(시각형, 실습형, 이론형)에 따라 교재와 도구, 접근 방식을 조정합니다."},{t:"100% 전담 강사",d:"전적인 관심을 통해 부족한 부분은 즉시 파악되고 강점은 최대화됩니다."},{t:"탁월한 ê²°ê³¼",d:"가속화된 향상으로 최고의 결과를 목표로 하고 달성합니다."}],limits:["개인의 리듬에 잘 맞지 않는 강제된 수업 시간.","모든 학습 유형에 맞지 않는 일반적인 교수법.","끊임없는 타협: 상급 학생은 지루해하고 어려움을 겪는 학생은 뒤처져, 만족 대신 좌절이 생깁니다."]},kicker:"강사 소개",h1a:"안녕하세요,",h1b:"여러분의 강사입니다.",p1:"프랑스 태생으로 타이베이에 수년째 거주하며, 중국어권 학습자(성인, 학생, 어린이)에게 모국어와 목표에 맞춘 방식으로 프랑스어를 가르치고 있습니다.",p2:"문학 학위를 보유하고 외국어로서의 프랑스어(FLE) 교육 경험이 풍부하며, 수백 명의 학생을 DELF/DALF/TCF 취득, 유학, 취업, 프랑스에서의 삶, 또는 단순한 대화의 즐거움으로 이끌었습니다.",p3a:"저의 접근법은 ",p3b:"첫 수업부터 말하는 것",p3c:", 문화를 이해함으로써 언어를 더 잘 익히고, 따뜻한 분위기에서 본인의 속도로 발전하는 것입니다.",stats:[{n:"18+",l:"년 교육 경력"},{n:"500+",l:"명의 개인 학생"},{n:"5,000+",l:"명의 단체 학생"},{n:"A1~C2",l:"DELF/DALF 대비"}]},cartePage:{kicker:"프랑스",h1:"인터랙티브 지도",intro:"도시 이름에 마우스를 올리거나 탭하면 해당 도시의 공식 관광청 사이트가 열립니다. 다음 프랑스 여행을 준비해 보세요.",mapAlt:"프랑스 주요 도시를 담은 일러스트 지도",officeOf:"관광청:"},notFound:{h1:"페이지를 찾을 수 없습니다",p:"이 페이지는 존재하지 않거나 이동되었습니다.",home:"홈",contact:"문의"},faq:{searchPlaceholder:"질문이나 키워드 검색…",noResults:"검색 ê²°ê
230³¼ê°€ 없습니다:",allCategories:"전체",filterToggle:"필터",countOne:"개 질문",countMany:"개 질문",kicker:"FAQ",h1:"여러분의 질문, 저희의 답변.",intro:"학생들이 가장 자주 묻는 질문들입니다. 답을 찾지 못하셨다면 직접 문의해 주세요.",ctaH2:"다른 질문이 있으신가요?",ctaP:"기꺼이 도와드리겠습니다. 메시지를 보내주시면 24시간 이내에 답변드립니다.",ctaBtn:"문의하기",categories:[{title:"주문형 요금(분 단위)",items:[{q:"‘주문형’ 방식은 어떻게 계산되나요?",a:"분 단위로 계산됩니다: 대면 20 NT$/분, 온라인 16 NT$/분. 구매할 총 시간은 자유롭게 정할 수 있습니다(1~99,999분)."},{q:"수업당 최소 시간이 있나요?",a:"표시된 최소 시간(예: 대면 90분, 온라인 60분)은 수업 효과를 위한 권장 사항일 뿐입니다. 제한은 없으며 원하는 분 수를 자유롭게 입력할 수 있습니다."},{q:"대면과 온라인 시간을 함께 구매할 수 있나요?",a:"네. 유연 방식을 선택하면 대면 크레딧과 온라인 크레딧을 각각 따로 구매하고 별도로 관리합니다."},{q:"남은 시간 크레딧은 어디서 확인하나요?",a:"‘내 계정’의 그래프와 ‘분 크레딧’ 패널에서 대면·온라인별 구매·사용·잔여 시간을 확인할 수 있습니다. 수업 후 자동으로 차감됩니다."}]},{title:"어린이 수업",items:[{q:"한 수업에 아이가 몇 명까지 참여할 수 있나요?",a:"최대 2명까지 함께 수업할 수 있습니다. 공동 수업 요금은 1인 요금의 1.3배입니다(2배가 아닙니다)."},{q:"두 아이의 나이 차가 3살 이상인데 함께 수업할 수 있나요?",a:"아니요. 나이 차가 3년을 초과하면 각자에게 맞는 수업을 위해 개별 수업으로 진행해야 합니다. 계산기가 이를 알리고 공동 예약을 차단합니다."},{q:"어린이 패키지 할인이 있나요?",a:"있습니다: 10시간 5%, 20시간 10%, 30시간 15% 할인. 어린이 계산기에서 바로 선택할 수 있습니다."}]},{title:"학생 공간 및 서류",items:[{q:"내 계정에 어떻게 접속하나요?",a:"로그인 페이지에서 이메일과 비밀번호 또는 Google로 로그인하세요. 계정은 학교에서 생성하므로 아직 없으면 문의해 주세요."},{q:"비밀번호를 잊어버렸어요. 어떻게 해야 하나요?",a:"로그인 페이지의 ‘비밀번호를 잊으셨나요?’를 클릭하고 이메일을 입력한 뒤 받은 링크를 따라주세요. 몇 분 내에 메일이 오지 않으면 스팸함을 확인해 주세요."},{q:"‘내 계정’에서 무엇을 ë³¼ 수 있나요?",a:"활성 패키지, 남은 단위 또는 분, 수업 및 결제 내역, 학습 자료와 결제 증빙을 확인할 수 있습니다."},{q:"계약서에 서명해야 하나요?",a:"네, 학생 계약서를 읽고 동의해야 합니다. 이 페이지 상단에서 영어와 번체 중국어로 다운로드할 수 있습니다."},{q:"계산기를 사용한 후 어떻게 예약하나요?",a:"모든 계산기(맞춤 유연, 어린이, 주문형, 분할 결제)가 설정 내용을 문의 양식에 자동으로 채워 줍니다. 전송만 하면 됩니다."},{q:"문의 양식에 파일을 첨부할 수 있나요?",a:"아니요, 양식은 첨부를 지원하지 않습니다. 첫 메시지 후 이메일이나 LINE으로 서류를 보내주세요."}]},{title:"일반",items:[{q:"누구나 수업을 받을 수 있나요?",a:"모두 가능합니다! 성인, 학생, 어린이, 직장인, 기업까지. 모든 프로그램은 여러분의 목표, 레벨, 속도에 맞춰 조정됩니다."},{q:"수업 시간은 어떻게 되나요?",a:"대면 수업: 월요일~일요일 8:30–21:00. 온라인 수업: 월요일~일요일 9:30–21:00. 정확한 시간은 학생과 강사의 일정에 맞춰 함께 조정합니다."},{q:"대면과 온라인을 병행할 수 있나요?",a:"네, 유연 패키지로 병행 가능합니다. 온라인 수업 최대 횟수는 패키지에 따라 다릅니다: 20유닛은 최대 8회, 30유닛은 최대 12회, 100유닛은 최대 36회. 이후에는 각 온라인 수업이 2유닛으로 계산됩니다."},{q:"수업은 개인 수업인가요, 그룹 수업인가요?",a:"오직 1:1 개인 수업으로 진행되어 맞춤형 진도와 최대한의 발화 시간을 보장합니다. 워크숍과 기업 연수만 여러 참가자가 함께할 수 있습니다."},{q:"강사를 선택할 수 있나요?",a:"현재 Renaud와 Marjorie가 수업을 진행합니다. 예약 시 선호 강사를 말씀해 주시면 가능 여부에 따라 안내드립니다."},{q:"왜 전통 어학원 대신 Parlons Français를 선택해야 하나요?",a:"개인 맞춤형 교육을 핵심으로 합니다: 100% 1:1 수업, 학습 스타일에 맞는 교수법, 유연한 일정, 그리고 맞춤형 학습 관리. 전통 어학원과 달리 그룹을 기다리지 않고 자신의 속도로 진행할 수 있습니다."},{q:"기업 연수도 제공하나요?",a:"네, A2 또는 B1을 목표로 하는 기업용 프랑스어 연수를 제공합니다. 대면 수업만 가능하며 학교 주변 8km 이내에서만 진행됩니다. ê·¸ 외 지역은 택시나 Uber 비용을 기업이 부담합니다. 요금은 Tarifs 페이지의 Entreprise 섹션을 참고하세요."}]},{title:"수업과 레벨",items:[{q:"제 레벨을 어떻게 알 수 있나요?",a:"1시간 레벨 평가(1,000 NT$)를 통해 CEFR 척도상의 정확한 위치를 알려드립니다. 자료실 페이지의 무료 테스트도 이용 가능합니다."},{q:"체험 수업과 레벨 평가의 차이점은 무엇인가요?",a:"체험 수업(90분, 1,000 NT$)은 실제 수업으로 교수법을 ê²½í—
230˜í•˜ê³  프랑스어로 대화하는 시간입니다. 레벨 평가(1시간, 1,000 NT$)는 CEFR 척도상 정확한 위치를 알아보는 진단 테스트입니다."},{q:"DELF B2까지 얼마나 걸리나요?",a:"출발점과 학습 속도에 따라 다릅니다. 평균적으로 A2에서 B2까지 약 120~150시간이 소요됩니다."},{q:"교재를 사야 하나요?",a:"아니요, 모든 자료는 포함되어 있으며 개별 맞춤화됩니다. 매 수업 후 자료를 보내드립니다."},{q:"수업을 취소할 수 있나요?",a:"네, 시작 3시간 이상 전이면 차감되지 않습니다. 3시간 이내는 차감됩니다."},{q:"지각하거나 결석하면 어떻게 되나요?",a:"지각하면 수업 종료 시간이 연장되지 않으며 지각한 시간은 보충되지 않습니다. 결석하면 해당 수업이 차감됩니다."}]},{title:"결제와 환불",items:[{q:"어떤 결제 수단을 받나요?",a:"NT$(CTBC: 은행 822, 공관 지점 0347, 계좌 347540420845) 또는 유로(Revolut: @renaudg82) 계좌 이체. 자세한 계좌 정보는 결제 페이지를 참고하세요."},{q:"분할 결제가 가능한가요?",a:"40회 패키지(대면)와 100유닛 패키지(유연)는 2회 분할 가능: 첫 수업에서 50%, 60일 이내 50%."},{q:"연장 분할 결제는 어떻게 이루어지나요?",a:`총 금액 15,000 NT$ 이상의 구매에 대해 최소 2개월, 최대 6개월까지 분할 결제가 가능합니다.
231
232• 2~4개월: 이자 0%.
233• 5~6개월: 총 금액에 5% 이자가 추가됩니다.
234
235결제는 매월 1일부터 5일 사이에 은행 이체로 진행해야 합니다. 연체 또는 미납 시, 강사는 수업을 중단하며 남은 잔액은 환불되지 않습니다.
236
237결제 페이지에서 월 납입금을 계산할 수 있는 계산기를 제공합니다.`},{q:"마음이 바뀌면 환불받을 수 있나요?",a:"네: 7일 이내 100%, 14일 이내 75%, 30일 이내 50%. 그 이후에는 30일 이내에 남은 수업을 다른 사람에게 양도할 수 있습니다."},{q:"패키지에 유효 기간이 있나요?",a:"기간 제한은 없습니다. 단, 연 평균 월 1회 이상 수강을 유지해 주세요."},{q:"패키지나 워크숍을 선물로 구매할 수 있나요?",a:"네. 문의 양식에 선물 구매임을 기재해 주세요. 패키지나 워크숍은 수혜자의 이름으로 예약되며 계약서도 그에 맞게 작성됩니다."}]},{title:"온라인 수업",items:[{q:"필요한 인터넷 속도는?",a:"최소 30 Mbps 권장. 수업 페이지에서 회선 속도를 테스트하실 수 있습니다."},{q:"웹캠은 필수인가요?",a:"아니요, 양질의 마이크와 헤드셋만 필요합니다. 웹캠은 선택입니다."},{q:"수업이 녹음/녹화되나요?",a:`텍스트 기록은 이메일로 보내드립니다.
238
239음성·영상 녹음/녹화는 저희가 진행하지 않습니다.
240
241다만 학생이 본인의 의지로 음성을 녹음하는 것은 자유입니다.
242
243영상 녹화는 엄격히 금지되며, 플랫폼에 수업 영상이 게재될 경우 법적 조치를 취합니다.`}]},{title:"대면 수업",items:[{q:"대면 수업은 어디서 진행되나요?",a:"구팅, 공관 또는 중허 주변의 조용한 카페, 본인 자택, 사무실, 또는 저희 교실에서 진행됩니다. 장소는 추가 요금 없는 이동 범위(중허–반차오–구팅–공관) 내에 있어야 합니다. 범위는 인터랙티브 맵에서 확인할 수 있습니다."},{q:"대면 수업의 조건은 무엇인가요?",a:`1 — 만남 장소는 중허·반차오·구팅·공관을 잇는 지역 내(스쿠터로 15~20분 이내)여야 합니다.
244
2452 — 강사가 더 먼 곳까지 이동할 수 있으나 패키지 가격의 10%가 추가됩니다.
246
2473 — 최대 이동 시간은 스쿠터 35분입니다. 그 이상이면 온라인을 권장하며, 학생이 거절하면 강사는 과외를 거절할 수 있습니다.
248
2494 — 학생이 모든 대면 수업에 직접 와 주시는 경우 패키지에 10% 할인이 적용됩니다.`}]},{title:"워크숍",items:[{q:"어떤 워크숍이 있나요?",a:"4가지 워크숍을 제공합니다: 디저트(크레페, 초콜릿 무스…), 보드게임(벨로트, 타로…), 토론(B1~C2), 프랑스 문화(수준에 맞는 영화·드라마·노래 학습)."},{q:"워크숍은 수업 패키지에 포함되나요?",a:"포함되지 않습니다. 워크숍은 별도 결제이며 수업 패키지에서 차감되지 않습니다."},{q:"문화 워크숍의 내용을 선택할 수 있나요?",a:"네, 회
249원님의 수준과 취향에 따라 함께 영화, 드라마, 미니시리즈 또는 노래를 선택합니다."},{q:"요리 워크숍에 용기를 가져가야 하나요?",a:"재료는 저희가 제공하지만 용기는 제공하지 않습니다. 디저트를 가져가실 수 있도록 도시락이나 용기를 지참해 주세요."},{q:"워크숍을 선물로 줄 수 있나요?",a:"네, 기프트 바우처 안내를 위해 문의해 주세요. 워크숍은 수혜자의 이름으로 예약됩니다."}]},{title:"유연 패키지",items:[{q:"유닛 제도는 어떻게 작동하나요?",a:"온라인 수업은 60분에 1유닛, 대면 수업은 90분에 2유닛이 소모됩니다. 필요에 따라 자유롭게 사용하며 시간 제한은 없습니다."},{q:"대면 수업과 온라인 수업의 유닛 차이는 무엇인가요?",a:"온라인 = 1유닛(60분), 대면 = 2유닛(90분). 일정에 맞춰 두 가지 형식을 자유롭게 번갈아 수강할 수 있습니다."},{q:"매 수업마다 형식을 바꿀 수 있나요?",a:"네, 이것이 유연 패키지의 핵심입니다. 예약 시 일정과 취향에 맞게 형식을 선택할 수 있습니다."},{q:"제 학습 속도에 맞는 유연 패키지는 어떤 것인가요?",a:"20유닛은 가벼운 학습 속도에 적합(온라인 약 10회 또는 대면 약 5회). 30유닛이 가장 인기 있습니다. 100유닛은 장기 학습 프로젝트에 이상적이며 2회 분할 결제가 가능합니다."},{q:"온라인 수업 비율을 초과하면 어떻게 되나요?",a:"온라인 수업 비율을 초과하면, 이후 각 온라인 수업은 1유닛이 아닌 2유닛으로 계산됩니다."},{q:"「맞춤형」 계산기는 어떻게 사용하나요?",a:`네 번째 유연 패키지 「맞춤형」은 온라인 수업과 대면 수업의 횟수를 입력해 나만의 패키지를 구성할 수 있는 옵션입니다.
250
2511회당 가격:
252• 온라인 수업(60분): 900 NT$
253• 저희 학원 대면 수업(90분): 1,300 NT$
254• 자택 또는 카페 대면 수업(90분): 1,500 NT$
255
256최소 요건: 대면 4회, 온라인 2회. 계산기는 요금 페이지의 「유연」 섹션에서 바로 이용 가능합니다.`}]}]},prof:{kicker:"강사",h1a:"여러분의",h1b:"강사들.",teachers:[{name:"Renaud",bio:["2005년 — 파리 7대학 졸업, 고전문학·사회학 석사(DEA)","파리 시내 중학교 교육 보조","파리 7대학 튜터","파리 7대학 외국인 학생 대상 프랑스어 강의","타이베이 알리앙스 프랑세즈 5년간 강의","DELF / DALF / TCF 공인 강사","다양한 교육 기관에서 18년 이상의 교육 경력(20,000시간 이상)"]},{name:"Marjorie",bio:["2011년 — 리옹 3대학 중국어 학사","Tian Ken 天肯法語에서 초급~B2 8년간 강의","타이베이 알리앙스 프랑세즈에서 초급~B2 강의","12년 이상의 교육 경력(12,000시간 이상)"]}]},tarifs:{kicker:"요금",h1:"명확한 가격, 숨겨진 비용 없음.",intro1:"체험 수업(90분)은",intro2:"1,000 NT$",intro3:". 레벨 평가(1시간)도 1,000 NT$. 약정 없음, 숨은 비용 없음.",popular:"인기",choose:"이 옵션 선택",note:"*월 평균 최소 1회 수업. 이 평균은 1년 기준으로 계산됩니다.",refundTitle:"환불 조건",refundPolicy:["결제 후 7일 이내: 100% 환불","결제 후 14일 이내: 75% 환불","결제 후 30일 이내: 50% 환불","30일 이후: 환불 불가, 단 학생은 30일 이내에 남은 수업을 다른 사람에게 양도할 수 있습니다."],bookingNote:"패키지를 구매한 학생만 시간대 예약에 우선권이 있습니다. 체험 수업과 단발 수업은 남은 자리와 강사의 동의에 따라 배정됩니다.",f2fConditionsTitle:"대면 수업 조건",f2fConditions:["만남 장소는 중허·반차오·구팅·공관을 잇는 지역 내(스쿠터로 15~20분 이내)여야 합니다.","강사가 더 먼 곳까지 이동할 수 있으나 패키지 가격의 10%가 추가됩니다.","강사의 최대 이동 시간은 스쿠터 35분입니다. 그 이상이면 온라인을 권장하며, 학생이 거절하면 강사는 과외를 거절할 수 있습니다.","학생이 모든 대면 수업에 직접 와 주시는 경우 패키지에 10% 할인이 적용됩니다."],categories:[{id:"presentiel",title:"대면",subtitle:"타이베이에서의 대면 수업 — 1회 90분.",plans:[{name:"단발 수업",price:"1,400",unit:"NT$ / 90분",desc:"체험이나 복습에 좋은 1회 수업.",perks:["90분 개인 수업 1회","장소 선택 가능(카페, 자택, 사무실)","교재 포함"]},{name:"10회 패키지",price:"13,000",unit:"NT$",desc:"꾸준한 학습에 이상적.",perks:["90분 × 10회","맞춤형 학습 계획","수업 사이 피드백","기간 제한 없음.*"]},{name:"20회 패키지",price:"24,000",unit:"NT$",desc:"장기 학습, 최
256적의 단가.",perks:["90분 × 20회","체계적인 전체 프로그램","기간 제한 없음.*"]},{name:"40회 패키지",price:"40,000",unit:"NT$",desc:"2회 분할 결제: 첫 수업에서 50%, 60일 이내 50%.",perks:["90분 × 40회","체계적인 전체 프로그램","기간 제한 없음.*","2회 분할 결제"]}]},{id:"enligne",title:"온라인",subtitle:"Google Meet으로 진행 — 1회 60분.",plans:[{name:"10회 패키지",price:"8,000",unit:"NT$",desc:"온라인 시작에 좋은 유연한 형식.",perks:["60분 × 10회","공유 인터랙티브 보드","수업 후 자료 송부","녹화 가능"]},{name:"20회 패키지",price:"15,000",unit:"NT$",desc:"학습 루틴을 정착시키기 위해.",perks:["60분 × 20회","개인 맞춤 피드백","맞춤형 학습 계획","우대 가격"]}]},{id:"flexible",title:"유연형",subtitle:"필요에 따라 사용하는 유닛제.",ratioNote:`패키지별 온라인 수업 최대 횟수는 다음과 같습니다:
257• 20 유닛: 온라인 수업 최대 8회. 이후에는 온라인 수업 1회당 2유닛으로 계산됩니다.
258• 30 유닛: 온라인 수업 최대 12회. 이후에는 온라인 수업 1회당 2유닛으로 계산됩니다.
259• 100 유닛: 온라인 수업 최대 36회. 이후에는 온라인 수업 1회당 2유닛으로 계산됩니다.`,plans:[{name:"20 유닛",price:"15,000",unit:"NT$",desc:"대면과 온라인을 자유롭게 조합.",perks:["대면 수업 = 2 유닛","온라인 수업 = 1 유닛"]},{name:"30 유닛",price:"20,000",unit:"NT$",desc:"최고의 유연성과 최적의 단가.",perks:["대면 수업 = 2 유닛","온라인 수업 = 1 유닛"]},{name:"100 유닛",price:"60,000",unit:"NT$",desc:"2회 분할 결제: 첫 수업에서 50%, 60일 이내 50%.",perks:["대면 수업 = 2 유닛","온라인 수업 = 1 유닛","2회 분할 결제"]}]},{id:"entreprise",title:"기업",subtitle:"수강생의 초기 수준에 따라 A2 또는 B1을 목표로 하는 기업 연수. 대면 수업만 가능하며, 학교 반경 8 km 이내에 한합니다. ê·¸ 이상은 기업이 택시 또는 Uber 비용을 부담합니다.",plans:[{name:"플랜 1",price:"50,000",unit:"NT$",desc:"최대 3명 — 45시간 패키지 (30 × 1.5시간).",perks:["최대 3명","45시간 수업","1.5시간 × 30회","목표 A2 또는 B1"]},{name:"플랜 2",price:"65,000",unit:"NT$",desc:"최대 5명 — 60시간 패키지 (40 × 1.5시간).",perks:["최대 5명","60시간 수업","1.5시간 × 40회","목표 A2 또는 B1"]},{name:"플랜 3",price:"90,000",unit:"NT$",desc:"최대 10명 — 90시간 패키지 (60 × 1.5시간).",perks:["최대 10명","90시간 수업","1.5시간 × 60회","목표 A2 또는 B1"]}]},{id:"enfants",title:"어린이",subtitle:"4~14세 어린이 프랑스어 개인 수업 (최대 2명). 아래 계산기로 나이와 장소에 따른 요금을 확인하세요.",plans:[],kids:{childrenLabel:"어린이 수",oneChild:"1명",twoChildren:"2명",ageLabel:"어린이 나이",locationLabel:"수업 장소",atSchool:"본원에서",atHome:"자택 방문 (+20%)",atHomeBadge:"자택 방문 +20% 포함",totalLabel:"요금 견적",durationLabel:"시간",minutes:"분",child:"어린이",tierNote:"나이에 따라 계산됩니다. 2명일 경우: 연장자 요금의 1.3ë°°.",ageOutOfRange:"나이는 4세에서 14세 사이여야 합니다.",pricingTitle:"요금표",years:"세",ageGapWarning:"두 어린이의 나이 차이가 3세를 초과할 경우, 수업은 개별로 진행되어야 하며 함께 수강할 수 없습니다.",sharedRateNote:"2명 공동 요금: 1.3×"}}]},contact:{kicker:"문의",h1:"당신의 프로젝트를 들려주세요.",intro:"프랑스어, 영어 또는 중국어로 메시지를 보내주세요. 24시간 이내에 답변드립니다.",labels:{Email:"이메일",LINE:"LINE / 전화",Lieu:"위치",Horaires:"운영 시간"},lieuVal:"타이베이 · 온라인(전 세계)",horaires:{f2f:"대면 수업: 월~일 8:30~21:00",online:"온라인 수업: 월~일 9:30~21:00"},thanks:"감사합니다!",thanksP:"메시지가 전송되었습니다. ê³§ 뵙겠습니다.",firstName:"이름",lastName:"성",email:"이메일",phone:"전화번호",level:"현재 레벨",project:"프로젝트",placeholder:"목표를 알려주ì
259„¸ìš”…",formatLabel:"희망 형식",formatOptions:{presentiel:"대면",enligne:"온라인",flexible:"유연한 수업"},submit:"보내기",spamNote:"⚠️ 몇 분 안에 확인 메일이 도착하지 않으면 스팸함을 확인해 주세요.",cuisineDateLabel:"요리 워크숍 희망 날짜",cuisineDateHelp:"예약은 최소 7일 전에 해주세요.",cuisineDateError:"요리 워크숍은 희망 날짜의 최소 7일 전에 예약해야 합니다.",levels:["완전 초보","A1 — 입문","A2 — 초중급","B1 — 중급","B2 — 중상급","C1+ — 숙달"]},ressources:{kicker:"무료 자료",h1:"프랑스어 배우기,",h1b:"당신의 속도로.",intro:"수업 사이 진도를 이어가거나 독학으로 프랑스어를 시작하기 위한 무료 PDF, 가이드, 도구 모음. 모든 콘텐츠는 대만에서, 중국어권과 프랑스어 애호가를 위해 제작되었습니다.",downloadLabel:"PDF 다운로드",uploadLabel:"PDF 보내기",uploadHint:"테스트를 완료하시면 [email protected]으로 이메일을 보내주세요. 48시간 이내에 예상 레벨을 알려드립니다.",uploadAudioLabel:"오디오 보내기",uploadAudioHint:"낭독을 녹음하여(mp3, m4a, wav, ogg 등 일반 형식 가능) [email protected]으로 이메일로 보내주세요. 파일은 20MB를 초과하지 않아야 합니다.",uploadDocLabel:"작문 보내기",uploadDocHint:"작문을 작성하여 [email protected]으로 보내주세요. 허용 형식: Word(.doc, .docx), PDF, OpenOffice(.odt), 텍스트(.txt) 등. 48시간 이내에 첨삭과 함께 답변드립니다.",linkLabel:"보러 가기",comingSoon:"ê³§ 공개",ctaH2:"더 나아가고 싶으신가요?",ctaP:"이 자료들은 맛보기입니다. 진정한 발전을 위해서는 실제 대화만한 것이 없습니다. 1,000 NT$ 체험 수업을 예약하세요.",ctaBtn:"체험 수업 예약"},ateliers:{kicker:"워크숍",h1:"재미있게 배우기.",intro:"새로운 방식으로 프랑스어를 연습할 수 있는 테마 워크숍을 만나보세요——요리, 보드게임, 토론.",workshops:[{id:"desserts",icon:"cake",title:"디저트 워크숍",desc:"원어민 강사와 함께 프랑스에서 인기 있는 디저트를 만드는 법을 배웁니다.",items:["크레페","초콜릿 무스","초콜릿 케이크","티라미수","크림 브륄레"],price:"2,000 NT$",note:"재료 제공 — 용기는 미지참. / 60분",warning:"요리 워크숍은 희망일 최소 7일 전에 예약해야 합니다."},{id:"jeux",icon:"games",title:"보드게임 워크숍",desc:"프랑스 카드 및 보드게임 규칙과 어휘를 배웁니다.",items:["벨로트","타로","웃는 돼지","체커","ê·¸ 외 더 많은…"],price:"1,500 NT$",note:"/ 90분"},{id:"debat",icon:"debate",title:"토론 워크숍",desc:"프랑스어로 자신의 의견을 옹호하는 상황에 놓입니다. 수업 중 논증 구성을 안내합니다.",items:["주제 준비","논증 구성","상황 속 구두 표현","개별 피드백"],levels:[{level:"B1",price:"1,500 NT$",duration:"90분"},{level:"B2",price:"1,700 NT$",duration:"90분"},{level:"C1",price:"2,000 NT$",duration:"90분"},{level:"C2",price:"3,000 NT$",duration:"120분"}],price:""},{id:"culture",icon:"culture",title:"프랑스 문화 워크숍",desc:"수준에 맞춰 영화, 드라마, 미니시리즈 또는 노래를 학습하며 어휘와 프랑스 문화적 배경을 풍성하게 합니다.",items:["영화·드라마 분석","프랑스어 노래 학습","테마별 어휘","문화·역사적 ë°°ê²½"],price:"1,500 NT$",note:"/ 90분"}],ctaH2:"도전해 보실래요?",ctaP:"지금 워크숍을 예약하세요. 새로운 방식으로 프랑스어를 향상시킬 수 있는 몰입형 경험입니다.",ctaBtn:"워크숍 예약하기",packWarning:"워크숍은 수업 패키지에 포함되지 않습니다. 별도 결제가 필요합니다."},services:{kicker:"서비스",h1:"프랑스에서의 절차를 간소화합니다.",intro:"저희의 인맥 네트워크를 통해 프랑스에서의 행정 및 실무 절차를 지원합니다.",items:[{id:"housing",icon:"building",title:"프랑스 숙
259소 찾기",desc:"저희의 인맥 네트워크를 활용하여 프랑스에서 아파트를 찾아드립니다. 연락처 양식을 작성하여 원하는 조건(면적, 가구 유무, 최대 예산 등)을 알려주세요.",price:"한 달 임대료의 50%",note:"실제로 찾은 임대료에 따라 변동"},{id:"school",icon:"school",title:"학교 또는 연수 기관 등록",desc:"행정 절차를 지원하고 프랑스 관련 담당자와 연락하여 서류를 가능한 한 빠르고 명확하게 진행하고 완료하도록 돕습니다.",price:"3,000 NT$",note:"서류 1건당"},{id:"dispute",icon:"scale",title:"분쟁 관리",desc:"임대인, 행정기관 또는 개인과의 문제라도 언어적으로 다루기에 너무 복잡하게 느껴진다면, 중재자 역할을 하여 문제를 해결해 드립니다.",price:"1,000 – 3,000 NT$",note:"서류 1건당 최소 1,000 NT$, 최대 3,000 NT$"}],ctaH2:"프랑스에서 절차 지원이 필요하신가요?",ctaP:"상황을 설명해 주시면 24시간 이내에 답변드리겠습니다.",ctaBtn:"문의하기"},account:{title:"내 계정",hello:"안녕하세요",welcome:"환영합니다",adminBtn:"관리자",logout:"로그아웃",loading:"불러오는 중…",balance:"총 잔액",unitsRemaining:"남은 단위",myInfo:"내 정보",edit:"수정",save:"저장",cancel:"취소",firstName:"이름",lastName:"성",phone:"전화번호",language:"언어",myPacks:"내 패키지",noPack:"활성 패키지가 없습니다.",colPack:"패키지",colRemaining:"잔여 / 총",colPrice:"가격",colPayment:"결제",colPurchased:"구매일",colExpires:"만료일",colProof:"결제 증빙",lessonsHistory:"수업 기록",noLesson:"기록된 수업이 없습니다.",payments:"결제 내역",noPayment:"결제 내역이 없습니다.",myDocuments:"내 문서",docsEmpty:"아직 문서가 없습니다. 선생님이 수업 자료를 여기에 업로드합니다.",docsDownload:"다운로드",docsUpload:"문서 업로드",docsLoading:"불러오는 중…",docsNone:"문서가 없습니다.",proofView:"증빙 보기",proofNone:"증빙 없음",proofUpload:"JPG/PNG 업로드",proofInvalid:"잘못된 형식: JPG 또는 PNG만 가능합니다.",proofTooLarge:"파일이 너무 큽니다 (최대 5MB).",proofDefinitive:"최종 제출 후 변경할 수 없습니다.",proofLocked:"파일 잠김",confirmDelete:"이 파일을 삭제하시겠습니까?",error:"오류",timeCredit:{title:"시간 크레딧",purchased:"총 구매",remaining:"남은 크레딧",used:"사용됨",perPack:"플랜별",hoursShort:"시간",empty:"아직 분 단위 요금제 크레딧이 없습니다."},minuteCredit:{title:"분 단위 크레딧",subtitle:"형식별 구매 및 남은 분",empty:"아직 분 단위 패키지가 없습니다.",f2f:"대면",online:"온라인",remaining:"남음",used:"사용됨",purchased:"구매",hoursShort:"시간"},ratioTitle:"온라인 / 대면 비율 (유연 패키지)",ratioOnline:"온라인",ratioF2F:"대면",ratioMaxOnline:"포함된 최대 온라인 수",ratioOverLimit:"한도 초과: 추가 온라인 수업은 2유닛으로 계산됩니다.",ratioRemaining:"회 남음 (초과 시 2배)"}};function Ro(t,e){if(typeof t!="object"||t===null||Array.isArray(t))return e??t;const a=Array.isArray(t)?[...t]:{...t};if(e&&typeof e=="object")for(const r of Object.keys(e))a[r]=Ro(t[r],e[r]);return a}dn.ja=Ro(dn.fr,xO);dn.es=Ro(dn.fr,OO);dn.it=Ro(dn.fr,LO);dn.ko=Ro(dn.fr,NO);const e_=re.createContext(null),zO=["fr","zh","en","ja","es","it","ko"];function qO({children:t}){const[e,a]=re.useState("fr");re.useEffect(()=>{const o=typeof window<"u"&&localStorage.getItem("lang");if(o&&zO.includes(o))a(o);else if(typeof navigator<"u"){const c=navigator.language.toLowerCase();/zh/.test(c)?a("zh"):/^ja/.test(c)?a("ja"):/^ko/.test(c)?a("ko"):/^es/.test(c)?a("es"):/^it/.test(c)?a("it"):/^en/.test(c)&&a("en")}},[]),re.useEffect(()=>{typeof document<"u"&&(document.documentElement.lang=e==="zh"?"zh-Hant":e)},[e]);const r=o=>{a(o),typeof window<"u"&&localStorage.setItem("lang",o)};return V.jsx(e_.Provider,{value:{lang:e,setLang:r,t:dn[e]},children:t})}function DO(){const t=re.useContext(e_);if(!t)throw new Error("useI18n must be used within LanguageProvider");return t}const t_=re.createContext(null),hh="pf-theme";function A0(t){if(typeof document>"u")return;const e=document.documentElement;e.classList.toggle("dark",t==="dark"),e.style.colorScheme=t}function jO(t){return t!=="system"?t:typeof window>"u"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dar
259k":"light"}function PO({children:t}){const[e,a]=re.useState("system"),[r,o]=re.useState("light");re.useEffect(()=>{const u=localStorage.getItem(hh);(u==="light"||u==="dark"||u==="system")&&a(u)},[]),re.useEffect(()=>{const u=jO(e);if(o(u),A0(u),e==="system"){const d=window.matchMedia("(prefers-color-scheme: dark)"),p=()=>{const m=d.matches?"dark":"light";o(m),A0(m)};return d.addEventListener("change",p),()=>d.removeEventListener("change",p)}},[e]);const c=u=>{a(u),typeof window<"u"&&localStorage.setItem(hh,u)};return V.jsx(t_.Provider,{value:{theme:e,setTheme:c,resolved:r},children:t})}function fz(){const t=re.useContext(t_);if(!t)throw new Error("useTheme must be used within ThemeProvider");return t}const MO=`(function(){try{var t=localStorage.getItem('${hh}')||'system';var d=t==='dark'||(t==='system'&&window.matchMedia('(prefers-color-scheme: dark)').matches);var r=document.documentElement;if(d)r.classList.add('dark');r.style.colorScheme=d?'dark':'light';}catch(e){}})();`,UO="/assets/logo-parlons-francais-yQeaGy7W.png";function BO(){const{t}=DO(),e=t.notFound;return V.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4 animate-fade-in",children:V.jsxs("div",{className:"max-w-md text-center",children:[V.jsx("img",{src:UO,alt:"Parlons Français",width:108,height:108,className:"mx-auto mb-6 size-24 opacity-90"}),V.jsx("p",{className:"text-xs uppercase tracking-[0.3em] text-accent",children:"404"}),V.jsx("h1",{className:"mt-3 font-serif text-5xl text-foreground",children:e.h1}),V.jsx("p",{className:"mt-4 text-sm text-muted-foreground",children:e.p}),V.jsxs("div",{className:"mt-8 flex flex-wrap justify-center gap-3",children:[V.jsx(Tc,{to:"/",className:"inline-flex items-center justify-center rounded-full bg-accent px-6 py-2.5 text-sm font-medium text-accent-foreground shadow-[var(--shadow-elegant)] transition-all hover:translate-y-[-1px]",children:e.home}),V.jsx(Tc,{to:"/contact",className:"inline-flex items-center justify-center rounded-full border border-border bg-card/60 px-6 py-2.5 text-sm font-medium transition-colors hover:bg-card",children:e.contact})]})]})})}function IO({error:t,reset:e}){console.error(t);const a=xt();return V.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4 animate-fade-in",children:V.jsxs("div",{className:"max-w-md text-center",children:[V.jsx("h1",{className:"text-xl font-semibold tracking-tight text-foreground",children:"This page didn't load"}),V.jsx("p",{className:"mt-2 text-sm text-muted-foreground",children:"Something went wrong on our end. You can try refreshing or head back home."}),V.jsxs("div",{className:"mt-6 flex flex-wrap justify-center gap-2",children:[V.jsx("button",{onClick:()=>{a.invalidate(),e()},className:"inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90",children:"Try again"}),V.jsx("a",{href:"/",className:"inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground transition-colors hover:bg-accent",children:"Go home"})]})]})})}const it=Dk()({head:()=>({meta:[{charSet:"utf-8"},{name:"viewport",content:"width=device-width, initial-scale=1"},{title:"Parlons Français — Cours de français en ligne et à Taipei"},{name:"description",content:"Cours particuliers de français en ligne (USA, Canada, Belgique, Suisse) et en présentiel à Taipei, du niveau A1 au DELF C2."},{name:"author",content:"Parlons Français"},{property:"og:title",content:"Parlons Français — Cours de français en ligne"},{property:"og:description",content:"Cours de français en ligne avec un professeur natif — USA, Canada, Belgique, Suisse, Taïwan."},{property:"og:type",content:"website"},{property:"og:site_name",content:"Parlons Français"},{name:"twitter:card",content:"summary_large_image"},{name:"theme-color",content:"#fcf6e8",media:"(prefers-color-scheme: light)"},{name:"theme-color",content:"#1a1310",media:"(prefers-color-scheme: dark)"}
259],links:[{rel:"preconnect",href:"https://fonts.googleapis.com"},{rel:"preconnect",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"},{rel:"stylesheet",href:"https://fonts.googleapis.com/css2?family=Dancing+Script:wght@500;600&display=swap"},{rel:"stylesheet",href:RO},{rel:"icon",type:"image/png",href:"/favicon.png"},{rel:"icon",type:"image/png",sizes:"32x32",href:"/favicon-32x32.png"},{rel:"icon",type:"image/png",sizes:"512x512",href:"/icon-512.png"},{rel:"apple-touch-icon",sizes:"180x180",href:"/apple-touch-icon.png"}],scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"LocalBusiness",name:"Parlons Français",alternateName:["法文家教","巴黎人法文","台北法文家教","Insegnante madrelingua francese","Lezioni private di francese Taipei"],description:"Cours particuliers de français à Taipei et en ligne, du niveau A1 au DELF C2. 台北法文家教,母語法國老師,提供實體與線上法文課程,從 A1 到 DELF C2。Lezioni private di francese a Taipei e online, livello A1 fino a DELF C2, insegnante madrelingua qualificato.",url:"https://www.parlonsfrancais.net",email:"[email protected]",telephone:"+886-978-250-533",areaServed:[{"@type":"Country",name:"Taiwan"},{"@type":"Country",name:"United States"},{"@type":"Country",name:"Canada"},{"@type":"Country",name:"Belgium"},{"@type":"Country",name:"Switzerland"},{"@type":"Country",name:"France"},{"@type":"Country",name:"Italy"},{"@type":"Country",name:"Japan"},{"@type":"Country",name:"Spain"}],availableLanguage:["fr","en","zh-Hant","ja","es","it"],address:{"@type":"PostalAddress",addressLocality:"Taipei",addressCountry:"TW"},inLanguage:["fr","zh-Hant","en","ja","es","it"]})}]}),shellComponent:FO,component:$O,notFoundComponent:BO,errorComponent:IO});function FO({children:t}){return V.jsxs("html",{lang:"en",suppressHydrationWarning:!0,children:[V.jsxs("head",{children:[V.jsx(Bk,{children:MO}),V.jsx(eR,{})]}),V.jsxs("body",{children:[t,V.jsx(nR,{})]})]})}function $O(){const{queryClient:t}=it.useRouteContext();return V.jsx(kO,{client:t,children:V.jsx(PO,{children:V.jsx(qO,{children:V.jsx(_w,{})})})})}const HO="modulepreload",GO=function(t){return"/"+t},k0={},Ze=function(e,a,r){let o=Promise.resolve();if(a&&a.length>0){let p=function(m){return Promise.all(m.map(g=>Promise.resolve(g).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),d=u?.nonce||u?.getAttribute("nonce");o=p(a.map(m=>{if(m=GO(m),m in k0)return;k0[m]=!0;const g=m.endsWith(".css"),v=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${m}"]${v}`))return;const b=document.createElement("link");if(b.rel=g?"stylesheet":HO,g||(b.as="script"),b.crossOrigin="",b.href=m,d&&b.setAttribute("nonce",d),document.head.appendChild(b),g)return new Promise((w,S)=>{b.addEventListener("load",w),b.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${m}`)))})}))}function c(u){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=u,window.dispatchEvent(d),!d.defaultPrevented)throw u}return o.then(u=>{for(const d of u||[])d.status==="rejected"&&c(d.reason);return e().catch(c)})},VO=()=>Ze(()=>import("./index-BTXwhaSI.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),KO=Qe()({head:()=>({meta:[{title:"Parlons Français — Cours particuliers de français à Taipei"},{name:"description",content:"Apprenez le français avec un tuteur natif à Taïwan. Cours particuliers en ligne et à Taipei, du débutant au DELF. 台北法文家教 · 線上法文課程 · 母語法國老師 一對一教學。台湾でフランス語をネイティブ講師とオンライン・対面で学ぶ。Aprende francés en Taipéi y en línea con un profesor nativo. Impara il francese a Taipei e online con un insegnante madrelingua qualificato, dal livello A1 alla certificazione DELF."},{property:"og:title",content:"Parlons Français — Tutorat de français"},{property:"og:description",content:"Cours de français personnalisés à Taipei et en ligne. 台湾・オンラインのフランス語個人レッスン。Clases particulares de francés en Taipéi y online. Lez
259ioni private di francese a Taipei e online, livello A1-DELF."},{property:"og:url",content:"https://www.parlonsfrancais.net/"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"twitter:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"cours de français en ligne USA, cours de français en ligne Belgique, cours de français en ligne Suisse, cours de français en ligne Canada, professeur de français en ligne Québec, French lessons online USA, online French tutor United States, French tutor Canada, French classes Toronto online, Franzosisch Unterricht online Schweiz, cours de français Bruxelles en ligne, cours de français Genève en ligne, cours de français Lausanne en ligne, cours de français Montréal en ligne, DELF preparation online USA Canada, 台北法文家教, 線上法文課程, 法文老師, 母語法國老師, 學法文, DELF, 法語會話, 法文 一對一, フランス語 台湾, フランス語 オンライン, フランス語 個人レッスン, ネイティブ フランス語講師, DELF 対策, clases de francés, profesor de francés nativo, francés online Taipéi, aprender francés Taiwán, DELF clases, lezioni di francese, insegnante madrelingua francese, imparare il francese Taiwan, corso di francese Taipei, tutor di francese, preparazione DELF, lezioni online di francese, francese A1 Taipei"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"fr_BE"},{property:"og:locale:alternate",content:"fr_CH"},{property:"og:locale:alternate",content:"fr_CA"},{property:"og:locale:alternate",content:"en_CA"},{property:"og:locale:alternate",content:"nl_BE"},{property:"og:locale:alternate",content:"de_CH"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"fr-FR",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"fr-BE",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"fr-CH",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"fr-CA",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"en-US",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"en-CA",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"en-GB",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"nl-BE",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"de-CH",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/"}]}),component:Je(VO,"component")}),YO=()=>Ze(()=>import("./route-Dtvkqj5K.js"),[]),QO=Qe()({beforeLoad:async()=>{const{data:t,error:e}=await Oc.auth.getUser();if(e||!t.user)throw ao({to:"/connexion"});return{user:t.user}},component:Je(YO,"component")}),JO=()=>Ze(()=>import("./a-propos-BENAePKK.js"),__vite__mapDeps([13,1,2,3,4,5,6])),ZO=Qe()({head:()=>({meta:[{title:"À propos — Parlons Français"},{name:"description",content:"Tuteur de français natif basé à Taïwan, passionné par l'enseignement et la culture francophone. 認識您的法文老師:來自法國,定居台北。Insegnante madrelingua francese a Taiwan, appassionato di insegnamento e cultura francofona. Lezioni private a Taipei e online."},{property:"og:title",content:"À propos du tuteur"},{property:"og:description",content:"Découvrez le parcours du tuteur. Scopri il percorso del tuo insegnante di francese madrelingua a Taipei."},{property:"og:url",content:"https://www.parlonsfrancais.net/a-propos"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"professeur de français natif en ligne, native French teacher online USA Canada, insegnante francese online Svizzera Belgio, 法文老師介紹, 法國老師 台北, 母語法文家教, insegnante francese Taipei, madrelingua francese Taiwan, lezioni private francese, tutor francese qualificato"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"fr_BE"},{property:"og:locale:alternate",content:"fr_CH"},{property:"og:locale:alternate",content:"fr_CA"},{property:"og:locale:alternate",content:"en_CA"},{property:"og:locale:alternate",content:"nl_BE"},{property:"og:locale:alternate",content:"de_CH"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"fr-FR",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"fr-BE",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"fr-CH",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"fr-CA",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"en-US",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"en-CA",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"en-GB",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"nl-BE",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"de-CH",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/a-propos"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/a-propos"}]}),component:Je(JO,"component")}),WO=()=>Ze(()=>import("./annonces-DIAPkPO6.js"),__vite__mapDeps([14,1,2,3,4,5,6,7,15])),XO=Qe()({head:()=>({meta:[{title:"Annonces — Parlons Français"},{name:"description",content:"Fermetures exceptionnelles, vacances, promotions et informations importantes de Parlons Français."},{property:"og:title",content:"Annonces — Parlons Français"},{property:"og:description",content:"Fermetures exceptionnelles, vacances, promotions et informations importantes de l'école."},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary_large_image"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/annonces"}]}
259),component:Je(WO,"component")}),eL=()=>Ze(()=>import("./ateliers-CIawulCH.js"),__vite__mapDeps([16,1,2,3,4,5,6,17,18,19,20,12])),tL=Qe()({head:()=>({meta:[{title:"Ateliers — Parlons Français"},{name:"description",content:"Ateliers thématiques de français à Taipei : desserts, jeux de société et débat. Pratiquez la langue autrement avec un tuteur natif. 法文主題工作坊 · French workshops in Taipei · Talleres de francés · フランス語ワークショップ · Laboratori di francese · 프랑스어 워크숍."},{property:"og:title",content:"Ateliers — Parlons Français"},{property:"og:description",content:"Apprenez le français autrement : ateliers desserts, jeux de société et débat. Pratique immersive et ludique à Taipei et en ligne."},{property:"og:url",content:"https://www.parlonsfrancais.net/ateliers"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"twitter:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"atelier français Taipei, cours cuisine française Taiwan, jeux société français, débat français B1 C2, 法文工作坊, 法式甜點課程, 法文辯論, French dessert workshop Taipei, French board game class, French debate workshop, taller francés Taipéi, laboratorio francese Taipei, フランス語ワークショップ 台湾, 프랑스어 워크숍 타이베이"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"ko_KR"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"fr",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"en",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"ko",href:"https://www.parlonsfrancais.net/ateliers"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/ateliers"}]}),component:Je(eL,"component")}),nL=()=>Ze(()=>import("./avis-BU5meTsr.js"),__vite__mapDeps([21,1,2,3,4,5,6,22])),aL=Qe()({head:()=>({meta:[{title:"Avis — Parlons Français"},{name:"description",content:"Avis Google de mes élèves de français à Taipei et en ligne. 學生對台北法文家教的 Google 真實評價。Recensioni Google dei miei studenti di francese a Taipei e online, insegnante madrelingua qualificato."},{property:"og:title",content:"Avis — Parlons Français"},{property:"og:description",content:"Découvrez les avis Google laissés par mes élèves. Scopri le recensioni Google lasciate dai miei studenti di francese."},{property:"og:url",content:"https://www.parlonsfrancais.net/avis"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"法文家教評價, 台北法文老師評價, Google 評論, recensioni insegnante francese, opinioni corso francese Taipei, insegnante madrelingua recensioni"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/avis"}]}),component:Je(nL,"component")}),iL=()=>Ze(()=>import("./carte-ZJB8UpLZ.js"),__vite__mapDeps([23,1,2,3,4,5,6])),rL=Qe()({head:()=>({meta:[{title:"Carte interactive de France — Parlons Français"},{name:"description",content:"Explorez la France ville par ville : cliquez sur Paris, Lyon, Marseille, Bordeaux et plus pour découvrir l'office de tourisme officiel de chaque ville."},{property:"og:title",content:"Carte interactive de France — Parlons Français"},{property:"og:description",content:"Cliquez sur une ville française pour ouvrir son office de tourisme officiel."},{property:"og:type",content:"website"}]}),component:Je(iL,"component")}),sL=()=>Ze(()=>import("./connexion-CEUSGdd_.js"),__vite__mapDeps([24,2,3,4,5,6,10,25])),oL=Qe()({head:()=>({meta:[{title:"Connexion · Parlons Français"},{name:"robots",content:"noindex"}
259]}),component:Je(sL,"component")}),lL=()=>Ze(()=>import("./contact-R7Pzo4vJ.js"),__vite__mapDeps([26,1,2,3,4,5,6,8,27,22])),cL=Qe()({validateSearch:t=>({...typeof t.prefill=="string"?{prefill:t.prefill}:{},...typeof t.format=="string"?{format:t.format}:{}}),head:()=>({meta:[{title:"Contact — Parlons Français"},{name:"description",content:"Contactez votre tuteur de français à Taïwan pour réserver un cours d'essai (90 min, 1 000 NT$). 預約 90 分鐘法文試聽課,僅需 1000 元。Contatta il tuo insegnante di francese a Taiwan per prenotare una lezione di prova (90 min, 1 000 NT$)."},{property:"og:title",content:"Contact"},{property:"og:description",content:"Réservez votre cours d'essai (90 min, 1 000 NT$). Prenota la tua lezione di prova (90 min, 1 000 NT$)."},{property:"og:url",content:"https://www.parlonsfrancais.net/contact"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"預約法文試聽課, 台北法文家教, 法文課程預約, prenota lezione prova francese, contatta insegnante francese Taipei, lezione prova francese online"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/contact"}]}),component:Je(lL,"component")}),uL=()=>Ze(()=>import("./cours-CgGdwyZf.js"),__vite__mapDeps([28,1,2,3,4,5,6,29,30,20,18,19,31,32,9,10,27])),dL=Qe()({head:()=>({meta:[{title:"Cours de français — Niveaux A1 à C2 | Parlons Français"},{name:"description",content:"Cours de français à Taïwan du niveau A1 au C2. En ligne ou en présentiel à Taipei. Exemples de leçons et programmes détaillés. 法文課程 A1 到 C2,DELF / DALF 準備,線上或台北實體教學。Corso di francese a Taipei e online, livelli A1-C2, preparazione esami DELF/DALF con programmi dettagliati."},{property:"og:title",content:"Cours de français — Tous niveaux"},{property:"og:description",content:"Programmes A1 à C2, en ligne ou présentiel, avec exemples de leçons. Programmi A1-C2, lezioni online o a Taipei, con esempi di lezioni."},{property:"og:url",content:"https://www.parlonsfrancais.net/cours"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"cours de français en ligne Suisse, cours de français en ligne Belgique, cours de français en ligne Canada, online French course USA, online French lessons Canada, DELF DALF online preparation, French A1 to C2 online, 法文課程, A1 法文, B1 法文, C1 法文, DELF 準備, 法語會話, 商業法文, 兒童法文, corso di francese, lezioni francese A1, B1 francese, C1 francese, preparazione DELF, conversazione francese, francese commerciale, francese per bambini"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"fr_BE"},{property:"og:locale:alternate",content:"fr_CH"},{property:"og:locale:alternate",content:"fr_CA"},{property:"og:locale:alternate",content:"en_CA"},{property:"og:locale:alternate",content:"nl_BE"},{property:"og:locale:alternate",content:"de_CH"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"fr-FR",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"fr-BE",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"fr-CH",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"fr-CA",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"en-US",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"en-CA",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"en-GB",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"nl-BE",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"de-CH",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/cours"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/cours"}],scripts:[{type:"application/ld+json",children:JSON.stringify({"@context":"https://schema.org","@type":"Course",name:"Cours particuliers de français — A1 à C2",description:"Cours particuliers de français à Taipei et en ligne, du niveau A1 au DELF/DALF C2.",provider:{"@type":"Organization",name:"Parlons Français",sameAs:"https://www.parlonsfrancais.net"},inLanguage:["fr","zh-Hant","en"],availableLanguage:["fr","en","zh-Hant"],courseMode:"online",audience:{"@type":"Audience",geographicArea:[{"@type":"Country",name:"United States"},{"@type":"Country",name:"Canada"},{"@type":"Country",name:"Belgium"},{"@type":"Country",name:"Switzerland"},{"@type":"Country",name:"Taiwan"}]},educationalLevel:["A1","A2","B1","B2","C1","C2"]})}]}),component:Je(uL,"component")}),fL=[{q:"Comment fonctionne la formule « À la demande » ?",a:"La formule « À la demande » est facturée à la minute : 20 NT$/min en présentiel et 16 NT$/min en ligne. Vous choisissez librement la durée totale que vous souhaitez acheter (de 1 à 99 999 minutes)."},{q:"Y a-t-il une durée minimale par cours ?",a:"Les durées minimales indiquées (par exemple 90 min en présentiel et 60 min en ligne) sont de simples recommandations pour que le cours reste efficace. Aucun blocage : vous saisissez librement le nombre de minutes souhaité."},{q:"Puis-je acheter du temps en présentiel ET en ligne ?",a:"Oui. En choisissant le format flexible, vous achetez deux crédits temps distincts : un crédit présentiel et un crédit en ligne, gérés séparément."},{q:"Comment suivre mon crédit temps restant ?",a:"Dans votre espace « Mon compte », un graphique et un panneau « Crédit à la minute » affichent le temps acheté, consommé et restant, séparément pour le présentiel et le en ligne. Les minutes sont déduites automatiquement après chaque cours."},{q:"Combien d'enfants peuvent suivre un cours ensemble ?",a:"Jusqu'à 2 enfants peuvent partager un cours. Le tarif partagé correspond à 1,3 × le tarif d'un seul enfant (et non le double)."},{q:"Mes deux enfants ont plus de 3 ans d'écart, peuvent-ils suivre le cours ensemble ?",a:"Non. Si l'écart d'âge dépasse 3 ans, le cours doit être individuel afin de garantir une pédagogie adaptée à chacun. Le calculateur signale ce cas et bloque la réservation groupée."},{q:"Existe-t-il des réductions sur les packs enfants ?",a:"Oui : 10 heures = 5 % de réduction, 20 heures = 10 %, 30 heures = 15 %. Le choix se fait directement dans le calculateur enfants."},{q:"Comment accéder à mon espace personnel ?",a:"Rendez-vous sur la page Connexion et identifiez-vous par email et mot de passe, ou via Google. Les comptes s
259ont créés par l'école : si vous n'en avez pas encore, contactez-nous."},{q:"J'ai oublié mon mot de passe, que faire ?",a:"Cliquez sur « Mot de passe oublié ? » sur la page Connexion, saisissez votre email et suivez le lien reçu. Vérifiez vos spams si l'email n'apparaît pas sous quelques minutes."},{q:"Que puis-je voir dans « Mon compte » ?",a:"Vos packs actifs, vos unités et/ou minutes restantes, l'historique de vos cours et de vos paiements, vos documents pédagogiques et vos justificatifs de paiement."},{q:"Faut-il signer un contrat ?",a:"Oui, un contrat d'étudiant est à lire et à accepter. Il est téléchargeable en haut de cette page en anglais et en chinois traditionnel."},{q:"Comment réserver après avoir utilisé un calculateur ?",a:"Les calculateurs (flexible personnalisé, enfants, à la demande, paiement échelonné) pré-remplissent automatiquement le formulaire de contact avec votre configuration : il ne reste qu'à envoyer."},{q:"Puis-je joindre un fichier au formulaire de contact ?",a:"Non, l'envoi de pièces jointes n'est pas disponible depuis le formulaire. Envoyez vos documents par email ou via LINE après votre premier message."},{q:"Qui peut prendre des cours ?",a:"Tout le monde ! Adultes, étudiants, enfants, professionnels et entreprises. Chaque programme est adapté à vos objectifs, votre niveau et votre rythme."},{q:"Quels sont les horaires des cours ?",a:"Cours en face-à-face : lundi au dimanche, 8h30–21h. Cours en ligne : lundi au dimanche, 9h30–21h. Les horaires précis sont fixés ensemble selon vos disponibilités et celles du professeur."},{q:"Puis-je alterner entre présentiel et en ligne ?",a:"Oui, avec les packs flexibles. Le maximum de cours en ligne dépend du pack : 8 pour le pack 20 unités, 12 pour le pack 30 unités, et 36 pour le pack 100 unités. Au-delà, chaque cours en ligne vaut 2 unités."},{q:"Les cours sont-ils individuels ou en groupe ?",a:"Les cours sont exclusivement individuels pour garantir une progression personnalisée et un maximum de temps de parole. Seuls les ateliers et les formations en entreprise peuvent réunir plusieurs participants."},{q:"Puis-je choisir mon professeur ?",a:"Actuellement Renaud et Marjorie assurent les cours. Vous pouvez indiquer votre préférence lors de la réservation, selon la disponibilité."},{q:"Pourquoi choisir Parlons Français plutôt qu'un institut classique ?",a:"Nous plaçons l'individualisation au centre : cours 100 % privés, méthodes adaptées à votre style d'apprentissage, flexibilité horaire et suivi personnalisé. Contrairement aux instituts traditionnels, vous progressez à votre rythme sans ralentir sur le groupe."},{q:"Proposez-vous des formations en entreprise ?",a:"Oui, nous proposons des formations en entreprise pour atteindre le niveau A2 ou B1. Elles sont dispensées uniquement en présentiel dans un rayon de 8 km autour de l'école. Au-delà, l'entreprise prend en charge les frais de taxi ou Uber. Les tarifs sont sur la page Tarifs, section Entreprise."},{q:"Comment savoir mon niveau ?",a:"Je propose une évaluation de niveau (1 h, 1 000 NT$) qui vous situe précisément sur l'échelle CECRL. Vous pouvez aussi faire les tests gratuits dans la section Ressources."},{q:"Quelle est la différence entre le cours d'essai et l'évaluation de niveau ?",a:"Le cours d'essai (90 min, 1 000 NT$) est une vraie leçon pour découvrir la méthode et échanger en français. L'évaluation de niveau (1 h, 1 000 NT$) est un test ciblé pour vous situer précisément sur l'échelle CECRL."},{q:"Combien de temps faut-il pour passer le DELF B2 ?",a:"Cela dépend de votre point de départ et de votre rythme. En moyenne, un élève passant de A2 à B2 suit environ 120 à 150 heures de cours."},{q:"Faut-il acheter un manuel ?",a:"Non, tous les supports pédagogiques sont inclus et personnalisés. J'envoie les ressources après chaque cours."},{q:"Puis-je annuler un cours ?",a:"Oui, si vous annulez 3 heures ou plus avant le début du cours, il n'est pas décompté. En dessous de 3h, le cours est décompté."},{q:"Que se passe-t-il si je suis en retard ou absent ?",a:"Si vous arrivez en retard, le cours ne finira pas plus tard et le temps perdu n'est pas rattrapé. Si vous ne vous présentez pas du tout, le cours sera décompté."},{q:"Quels sont les modes de paiement acceptés ?",a:"Virement bancaire en NT$ (CTBC : Bank 822, agence Gongguan 0347, compte 347540420845) ou en euros (Revolut : @renaudg82). Les co
259ordonnées complètes sont sur la page Paiement."},{q:"Puis-je payer en plusieurs fois ?",a:"Les packs 40 cours (présentiel) et 100 unités (flexible) sont payables en 2 fois : 50% au premier cours, 50% dans les 60 jours suivants."},{q:"Comment fonctionne le paiement en plusieurs fois étendu ?",a:"Le paiement échelonné est disponible pour tout achat d'un montant minimum de 15 000 NT$, sur une durée de 2 à 6 mois maximum. De 2 à 4 mois : 0 % d'intérêt. 5 ou 6 mois : intérêt de 5 % appliqué sur la somme totale. Le paiement doit être effectué par virement bancaire entre le 1er et le 5 de chaque mois. En cas de retard ou de non-paiement, le professeur suspend les cours sans possibilité de remboursement du solde restant. Un calculateur est disponible sur la page Paiement pour estimer votre mensualité."},{q:"Y a-t-il un remboursement si je change d'avis ?",a:"Oui : 100% dans les 7 jours, 75% dans les 14 jours, 50% dans les 30 jours. Passé ce délai, les cours restants sont transférables à une autre personne dans un délai de 30 jours."},{q:"Les packs ont-ils une date d'expiration ?",a:"Non, il n'y a pas de limite de temps. Vous utilisez vos cours à votre rythme, avec une moyenne minimale d'1 cours par mois sur l'année."},{q:"Puis-je offrir un pack ou un atelier en cadeau ?",a:"Oui. Précisez-le dans le formulaire de contact : le pack ou l'atelier sera réservé au nom du bénéficiaire et le contrat établi en conséquence."},{q:"Quelle connexion internet faut-il ?",a:"Un débit minimum de 30 Mbps est recommandé. Vous pouvez tester votre connexion depuis la page Cours."},{q:"La webcam est-elle obligatoire ?",a:"Non, seul un bon micro et un casque sont requis. La webcam est optionnelle selon votre préférence."},{q:"Les cours en ligne sont-ils retranscrits et/ou enregistrés en audio et/ou vidéo ?",a:"Oui, pour la retranscription écrite : celle-ci vous sera envoyée par email. Non, pour l'enregistrement audio ou vidéo. Cependant, nous laissons la liberté à l'étudiant de pouvoir le faire de lui-même pour l'audio. Concernant l'enregistrement vidéo, nous le refusons catégoriquement. Par conséquent, toute vidéo de cours pouvant être accessible sur quelque plateforme que ce soit donnera lieu à des poursuites judiciaires."},{q:"Où se déroulent les cours en face-à-face ?",a:"Dans un café tranquille aux alentours de Guting, Gongguan ou Zhonghe, à votre domicile, à votre bureau ou dans notre établissement. Le lieu doit respecter le rayon de déplacement sans surcoût (Zhonghe–Banqiao–Guting–Gongguan). Vous pouvez consulter la carte interactive pour visualiser la zone."},{q:"Quelles sont les conditions pour les cours en face-à-face ?",a:"1 — Le lieu de rendez-vous doit se situer dans un rayon entre Zhonghe, Banqiao, Guting et Gongguan (15 à 20 min de scooter maximum). 2 — Le professeur peut se déplacer plus loin moyennant une majoration de 10% du prix du pack. 3 — La distance maximale est de 35 min en scooter. Au-delà, l'option en ligne sera demandée. Si l'étudiant refuse, le professeur se verra dans l'obligation de refuser le tutorat. 4 — Si l'étudiant vient sur place pour tous les cours en face-à-face, une remise de 10% sur le pack sera accordée."},{q:"Quels ateliers proposez-vous ?",a:"Nous proposons quatre ateliers : Desserts (crêpes, mousse au chocolat…), Jeux de société (belote, tarot…), Débat (niveaux B1 à C2) et Culture française (film, série, chanson selon votre niveau)."},{q:"Les ateliers sont-ils inclus dans les packs de cours ?",a:"Non. Les ateliers sont payés individuellement et ne sont pas décomptés d'un pack de cours."},{q:"Puis-je choisir le contenu de l'atelier culture ?",a:"Oui, selon votre niveau et vos goûts, nous choisissons ensemble un film, une série, une mini-série ou une chanson à étudier."},{q:"Dois-je apporter du matériel pour l'atelier cuisine ?",a:"Les ingrédients sont fournis. En revanche, le contenant n'est pas fourni : pensez à apporter une boîte ou un récipient pour emporter vos desserts."},{q:"Puis-je offrir un atelier en cadeau ?",a:"Oui, contactez-nous pour organiser un bon cadeau. L'atelier sera réservé au nom du bénéficiaire."},{q:"Comment fonctionne le système d'unités ?",a:"Chaque cours en ligne dure 60 min et consomme 1 unité. Chaque cours présentiel dure 90 min et consomme 2 unités. Vous utilisez vos unités selon vos besoins, sans limite de temps."},{q:"Quelle est la différence entre un cours présentiel et un cours en ligne en unités ?",a:"Un cours en ligne = 1 unité (60 min). Un cours présentiel = 2 unités (90 min). Vous pouvez librement alterner les deux formats selon votre planning."},{q:"Puis-je changer de format (présentiel / en ligne) à chaque cours ?",a:"Oui, c'est tout l'intérêt du pack flexible. Vous choisissez le format de chaque cours lors de la réservation, selon votre emploi du temps et vos envies."},{q:"Quel pack flexible choisir selon mon rythme ?",a:"Le pack 20 unités convient à un rythme léger (environ 10 cours en ligne ou 5 présentiels). Le pack 30 unités est le plus populaire. Le pack 100 unités est idéal pour un projet sur le long terme, avec paiement en 2 fois."},{q:"Que se passe-t-il si je dépasse le ratio des cours en ligne ?",a:"Si vous dépassez le ratio des cours en ligne alors chaque nouveau cours en ligne vaudra 2 unités au lieu de 1."},{q:"Comment fonctionne le calculateur « Personnalisé » ?",a:"La 4e formule flexible « Personnalisé » vous permet de composer votre propre pack en indiquant votre nombre de cours en ligne et en face-à-face. Tarifs à l'unité : cours en ligne (60 min) 900 NT$, cours présentiel dans l'établissement (90 min) 1 300 NT$, cours présentiel à domicile ou au café (90 min) 1 500 NT$. Minimum requis : 4 cours en face-à-face et 2 cours en ligne. Le calculateur est disponible directement sur la page Tarifs, section Flexible."}],hL={"@context":"https://schema.org","@type":"FAQPage",mainEntity:fL.map(t=>
259({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))},pL=()=>Ze(()=>import("./faq-DFWTDZcZ.js"),__vite__mapDeps([33,1,2,3,4,5,6,31,34,35])),mL=Qe()({head:()=>({meta:[{title:"FAQ — Parlons Français"},{name:"description",content:"Questions fréquentes sur les cours de français à Taipei et en ligne : tarifs, unités, crédit temps, packs enfants, paiement échelonné. 台北法文家教常見問題。"},{property:"og:title",content:"FAQ — Parlons Français"},{property:"og:description",content:"Toutes les réponses à vos questions sur les cours, les tarifs, le DELF et plus encore. Recherche par mots-clés disponible."},{property:"og:url",content:"https://www.parlonsfrancais.net/faq"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"twitter:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary_large_image"},{name:"keywords",content:"FAQ, 法文家教問題, 台北法文課程常見問題, DELF 問題, domande frequenti corsi francese, FAQ lezioni francese Taipei"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/faq"}],scripts:[{type:"application/ld+json",children:JSON.stringify(hL)}]}),component:Je(pL,"component")}),gL=()=>Ze(()=>import("./mot-de-passe-oublie-CHH959ek.js"),__vite__mapDeps([36,2,3,4,5,6])),vL=Qe()({head:()=>({meta:[{title:"Mot de passe oublié · Parlons Français"},{name:"robots",content:"noindex"}]}),component:Je(gL,"component")}),yL=()=>Ze(()=>import("./paiement-BwteAKes.js"),__vite__mapDeps([37,1,2,3,4,5,6,20,15])),bL=Qe()({head:()=>({meta:[{title:"Paiement — Parlons Français"},{name:"description",content:"Régler votre cours de français : QR code Revolut (euros) et QR code CTBC China Trust (dollars taïwanais). 法文課程付款:Revolut(歐元)或 CTBC 中國信託(台幣)。Pagamento corsi di francese: QR code Revolut (euro) e QR code CTBC China Trust (dollari taiwanesi)."},{property:"og:title",content:"Paiement — Parlons Français"},{property:"og:description",content:"Deux options : Revolut pour les euros, CTBC pour les dollars taïwanais. Due opzioni: Revolut per gli euro, CTBC per i dollari taiwanesi."},{property:"og:url",content:"https://www.parlonsfrancais.net/paiement"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"法文課程付款, Revolut 付款, CTBC 中國信託, pagamento lezioni francese, Revolut euro, CTBC dollari taiwanesi, pagamento corso francese Taipei"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/paiement"}]}),component:Je(yL,"component")}),wL=()=>Ze(()=>import("./professeur-DmLjLuty.js"),__vite__mapDeps([38,1,2,3,4,5,6,18])),_L=Qe()({head:()=>({meta:[{title:"Professeurs — Parlons Français"},{name:"description",content:"Notre équipe de professeurs de français à Taipei : expérience certifiée DELF/DALF/TCF et plus de 30 ans cumulés d'enseignement. 母語法國老師團隊,累積超過 30 年法文教學經驗。La nostra squadra di insegnanti di francese a Taipei: certificati DELF/DALF/TCF con oltre 30 anni di esperienza cumulata."},{property:"og:title",content:"Nos professeurs de français"},{property:"og:description",content:"Une équipe expérimentée pour vous accompagner du A1 au C2. Un team esperto per accompagnarti dal livello A1 al C2."},{property:"og:url",content:"https://www.parlonsfrancais.net/professeur"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"法文老師, 母語法國老師, 台北法文家教, DELF 老師, FLE, insegnante madrelingua francese, insegnante certificato DELF Taipei, tutor francese qualificato, professor di francese Taiwan"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/professeur"}]}),component:Je(wL,"component")}),SL=()=>Ze(()=>import("./reinitialiser-mot-de-passe-m0VtnuPW.js"),__vite__mapDeps([39,2,3,4,5,6])),TL=Qe()({head:()=>({meta:[{title:"Réinitialiser le mot de passe · Parlons Français"},{name:"robots",content:"noindex"}
vendor: 41,617 bytes, line 259
259]}),component:Je(SL,"component")});var De;(function(t){t.assertEqual=o=>{};function e(o){}t.assertIs=e;function a(o){throw new Error}t.assertNever=a,t.arrayToEnum=o=>{const c={};for(const u of o)c[u]=u;return c},t.getValidEnumValues=o=>{const c=t.objectKeys(o).filter(d=>typeof o[o[d]]!="number"),u={};for(const d of c)u[d]=o[d];return t.objectValues(u)},t.objectValues=o=>t.objectKeys(o).map(function(c){return o[c]}),t.objectKeys=typeof Object.keys=="function"?o=>Object.keys(o):o=>{const c=[];for(const u in o)Object.prototype.hasOwnProperty.call(o,u)&&c.push(u);return c},t.find=(o,c)=>{for(const u of o)if(c(u))return u},t.isInteger=typeof Number.isInteger=="function"?o=>Number.isInteger(o):o=>typeof o=="number"&&Number.isFinite(o)&&Math.floor(o)===o;function r(o,c=" | "){return o.map(u=>typeof u=="string"?`'${u}'`:u).join(c)}t.joinValues=r,t.jsonStringifyReplacer=(o,c)=>typeof c=="bigint"?c.toString():c})(De||(De={}));var R0;(function(t){t.mergeShapes=(e,a)=>({...e,...a})})(R0||(R0={}));const se=De.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),$a=t=>{switch(typeof t){case"undefined":return se.undefined;case"string":return se.string;case"number":return Number.isNaN(t)?se.nan:se.number;case"boolean":return se.boolean;case"function":return se.function;case"bigint":return se.bigint;case"symbol":return se.symbol;case"object":return Array.isArray(t)?se.array:t===null?se.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?se.promise:typeof Map<"u"&&t instanceof Map?se.map:typeof Set<"u"&&t instanceof Set?se.set:typeof Date<"u"&&t instanceof Date?se.date:se.object;default:return se.unknown}},K=De.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class pa extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const a=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,a):this.__proto__=a,this.name="ZodError",this.issues=e}format(e){const a=e||function(c){return c.message},r={_errors:[]},o=c=>{for(const u of c.issues)if(u.code==="invalid_union")u.unionErrors.map(o);else if(u.code==="invalid_return_type")o(u.returnTypeError);else if(u.code==="invalid_arguments")o(u.argumentsError);else if(u.path.length===0)r._errors.push(a(u));else{let d=r,p=0;for(;p<u.path.length;){const m=u.path[p];p===u.path.length-1?(d[m]=d[m]||{_errors:[]},d[m]._errors.push(a(u))):d[m]=d[m]||{_errors:[]},d=d[m],p++}}};return o(this),r}static assert(e){if(!(e instanceof pa))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,De.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=a=>a.message){const a={},r=[];for(const o of this.issues)if(o.path.length>0){const c=o.path[0];a[c]=a[c]||[],a[c].push(e(o))}else r.push(e(o));return{formErrors:r,fieldErrors:a}}get formErrors(){return this.flatten()}}pa.create=t=>new pa(t);const ph=(t,e)=>{let a;switch(t.code){case K.invalid_type:t.received===se.undefined?a="Required":a=`Expected ${t.expected}, received ${t.received}`;break;case K.invalid_literal:a=`Invalid literal value, expected ${JSON.stringify(t.expected,De.jsonStringifyReplacer)}`;break;case K.unrecognized_keys:a=`Unrecognized key(s) in object: ${De.joinValues(t.keys,", ")}`;break;case K.invalid_union:a="Invalid input";break;case K.invalid_union_discriminator:a=`Invalid discriminator value. Expected ${De.joinValues(t.options)}`;break;case K.invalid_enum_value:a=`Invalid enum value. Expected ${De.joinValues(t.options)}, received '${t.received}'`;break;case K.invalid_arguments:a="Invalid function arguments";break;case K.invalid_return_type:a="Invalid function return type";break;case K.invalid_date:a="Invalid date";break;case K.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(a=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(a=`${a} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?a=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?a=`Invalid input: must end with "${t.validation.endsWith}"`:De.assertNever(t.validation):t.validation!=="regex"?a=`Invalid ${t.validation}`:a="Invalid";break;case K.too_small:t.type==="array"?a=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?a=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?a=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?a=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?a=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:a="Invalid input";break;case K.too_big:t.type==="array"?a=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?a=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?a=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?a=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?a=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:a="Invalid input";break;case K.custom:a="Invalid input";break;case K.invalid_intersection_types:a="Intersection results could not be merged";break;case K.not_multiple_of:a=`Number must be a multiple of ${t.multipleOf}`;break;case K.not_finite:a="Number must be finite";break;default:a=e.defaultError,De.assertNever(t)}return{message:a}};let EL=ph;function CL(){return EL}const AL=t=>{const{data:e,path:a,errorMaps:r,issueData:o}=t,c=[...a,...o.path||[]],u={...o,path:c};if(o.message!==void 0)return{...o,path:c,message:o.message};let d="";const p=r.filter(m=>!!m).slice().reverse();for(const m of p)d=m(u,{data:e,defaultError:d}).message;return{...o,path:c,message:d}};function X(t,e){const a=CL(),r=AL({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,a,a===ph?void 0:ph].filter(o=>!!o)});t.common.issues.push(r)}class Wt{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,a){const r=[];for(const o of a){if(o.status==="aborted")return be;o.status==="dirty"&&e.dirty(),r.push(o.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,a){const r=[];for(const o of a){const c=await o.key,u=await o.value;r.push({key:c,value:u})}return Wt.mergeObjectSync(e,r)}static mergeObjectSync(e,a){const r={};for(const o of a){const{key:c,value:u}=o;if(c.status==="aborted"||u.status==="aborted")return be;c.status==="dirty"&&e.dirty(),u.status==="dirty"&&e.dirty(),c.value!=="__proto__"&&(typeof u.value<"u"||o.alwaysSet)&&(r[c.value]=u.value)}return{status:e.value,value:r}}}const be=Object.freeze({status:"aborted"}),Zs=t=>({status:"dirty",value:t}),fn=t=>({status:"valid",value:t}),x0=t=>t.status==="aborted",O0=t=>t.status==="dirty",Gr=t=>t.status==="valid",Nc=t=>typeof Promise<"u"&&t instanceof Promise;var le;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(le||(le={}));class ti{constructor(e,a,r,o){this._cachedPath=[],this.parent=e,this.data=a,this._path=r,this._key=o}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const L0=(t,e)=>{if(Gr(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const a=new pa(t.common.issues);return this._error=a,this._error}}};function Ee(t){if(!t)return{};const{errorMap:e,invalid_type_error:a,required_error:r,description:o}=t;if(e&&(a||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:o}:{errorMap:(u,d)=>{const{message:p}=t;return u.code==="invalid_enum_value"?{message:p??d.defaultError}:typeof d.data>"u"?{message:p??r??d.defaultError}:u.code!=="invalid_type"?{message:d.defaultError}:{message:p??a??d.defaultError}},description:o}}class Ne{get description(){return this._def.description}_getType(e){return $a(e.data)}_getOrReturnCtx(e,a){return a||{common:e.parent.common,data:e.data,parsedType:$a(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Wt,ctx:{common:e.parent.common,data:e.data,parsedType:$a(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const a=this._parse(e);if(Nc(a))throw new Error("Synchronous parse encountered promise.");return a}_parseAsync(e){const a=this._parse(e);return Promise.resolve(a)}parse(e,a){const r=this.safeParse(e,a);if(r.success)return r.data;throw r.error}safeParse(e,a){const r={common:{issues:[],async:a?.async??!1,contextualErrorMap:a?.errorMap},path:a?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:$a(e)},o=this._parseSync({data:e,path:r.path,parent:r});return L0(r,o)}"~validate"(e){const a={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:$a(e)};if(!this["~standard"].async)try{const r=this._parseSync({data:e,path:[],parent:a});return Gr(r)?{value:r.value}:{issues:a.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),a.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:a}).then(r=>Gr(r)?{value:r.value}:{issues:a.common.issues})}async parseAsync(e,a){const r=await this.safeParseAsync(e,a);if(r.success)return r.data;throw r.error}async safeParseAsync(e,a){const r={common:{issues:[],contextualErrorMap:a?.errorMap,async:!0},path:a?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:$a(e)},o=this._parse({data:e,path:r.path,parent:r}),c=await(Nc(o)?o:Promise.resolve(o));return L0(r,c)}refine(e,a){const r=o=>typeof a=="string"||typeof a>"u"?{message:a}:typeof a=="function"?a(o):a;return this._refinement((o,c)=>{const u=e(o),d=()=>c.addIssue({code:K.custom,...r(o)});return typeof Promise<"u"&&u instanceof Promise?u.then(p=>p?!0:(d(),!1)):u?!0:(d(),!1)})}refinement(e,a){return this._refinement((r,o)=>e(r)?!0:(o.addIssue(typeof a=="function"?a(r,o):a),!1))}_refinement(e){return new Kr({schema:this,typeName:we.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:a=>this["~validate"](a)}}optional(){return Za.create(this,this._def)}nullable(){return Yr.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return jn.create(this)}promise(){return jc.create(this,this._def)}or(e){return qc.create([this,e],this._def)}and(e){return Dc.create(this,e,this._def)}transform(e){return new Kr({...Ee(this._def),schema:this,typeName:we.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const a=typeof e=="function"?e:()=>e;return new gh({...Ee(this._def),innerType:this,defaultValue:a,typeName:we.ZodDefault})}brand(){return new QL({typeName:we.ZodBranded,type:this,...Ee(this._def)})}catch(e){const a=typeof e=="function"?e:()=>e;return new vh({...Ee(this._def),innerType:this,catchValue:a,typeName:we.ZodCatch})}describe(e){const a=this.constructor;return new a({...this._def,description:e})}pipe(e){return $h.create(this,e)}readonly(){return yh.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const kL=/^c[^\s-]{8,}$/i,RL=/^[0-9a-z]+$/,xL=/^[0-9A-HJKMNP-TV-Z]{26}$/i,OL=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,LL=/^[a-z0-9_-]{21}$/i,NL=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,zL=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,qL=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,DL="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let Pf;const jL=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,PL=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ML=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,UL=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,BL=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,IL=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,n_="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",FL=new RegExp(`^${n_}$`);function a_(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);const a=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${a}`}function $L(t){return new RegExp(`^${a_(t)}$`)}function HL(t){let e=`${n_}T${a_(t)}`;const a=[];return a.push(t.local?"Z?":"Z"),t.offset&&a.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${a.join("|")})`,new RegExp(`^${e}$`)}function GL(t,e){return!!((e==="v4"||!e)&&jL.test(t)||(e==="v6"||!e)&&ML.test(t))}function VL(t,e){if(!NL.test(t))return!1;try{const[a]=t.split(".");if(!a)return!1;const r=a.replace(/-/g,"+").replace(/_/g,"/").padEnd(a.length+(4-a.length%4)%4,"="),o=JSON.parse(atob(r));return!(typeof o!="object"||o===null||"typ"in o&&o?.typ!=="JWT"||!o.alg||e&&o.alg!==e)}catch{return!1}}function KL(t,e){return!!((e==="v4"||!e)&&PL.test(t)||(e==="v6"||!e)&&UL.test(t))}class Ya extends Ne{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==se.string){const c=this._getOrReturnCtx(e);return X(c,{code:K.invalid_type,expected:se.string,received:c.parsedType}),be}const r=new Wt;let o;for(const c of this._def.checks)if(c.kind==="min")e.data.length<c.value&&(o=this._getOrReturnCtx(e,o),X(o,{code:K.too_small,minimum:c.value,type:"string",inclusive:!0,exact:!1,message:c.message}),r.dirty());else if(c.kind==="max")e.data.length>c.value&&(o=this._getOrReturnCtx(e,o),X(o,{code:K.too_big,maximum:c.value,type:"string",inclusive:!0,exact:!1,message:c.message}),r.dirty());else if(c.kind==="length"){const u=e.data.length>c.value,d=e.data.length<c.value;(u||d)&&(o=this._getOrReturnCtx(e,o),u?X(o,{code:K.too_big,maximum:c.value,type:"string",inclusive:!0,exact:!0,message:c.message}):d&&X(o,{code:K.too_small,minimum:c.value,type:"string",inclusive:!0,exact:!0,message:c.message}),r.dirty())}else if(c.kind==="email")qL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"email",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="emoji")Pf||(Pf=new RegExp(DL,"u")),Pf.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"emoji",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="uuid")OL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"uuid",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="nanoid")LL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"nanoid",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="cuid")kL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"cuid",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="cuid2")RL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"cuid2",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="ulid")xL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"ulid",code:K.invalid_string,message:c.message}),r.dirty());else if(c.kind==="url")try{new URL(e.data)}catch{o=this._getOrReturnCtx(e,o),X(o,{validation:"url",code:K.invalid_string,message:c.message}),r.dirty()}else c.kind==="regex"?(c.regex.lastIndex=0,c.regex.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"regex",code:K.invalid_string,message:c.message}),r.dirty())):c.kind==="trim"?e.data=e.data.trim():c.kind==="includes"?e.data.includes(c.value,c.position)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:{includes:c.value,position:c.position},message:c.message}),r.dirty()):c.kind==="toLowerCase"?e.data=e.data.toLowerCase():c.kind==="toUpperCase"?e.data=e.data.toUpperCase():c.kind==="startsWith"?e.data.startsWith(c.value)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:{startsWith:c.value},message:c.message}),r.dirty()):c.kind==="endsWith"?e.data.endsWith(c.value)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:{endsWith:c.value},message:c.message}),r.dirty()):c.kind==="datetime"?HL(c).test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:"datetime",message:c.message}),r.dirty()):c.kind==="date"?FL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:"date",message:c.message}),r.dirty()):c.kind==="time"?$L(c).test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{code:K.invalid_string,validation:"time",message:c.message}),r.dirty()):c.kind==="duration"?zL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"duration",code:K.invalid_string,message:c.message}),r.dirty()):c.kind==="ip"?GL(e.data,c.version)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"ip",code:K.invalid_string,message:c.message}),r.dirty()):c.kind==="jwt"?VL(e.data,c.alg)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"jwt",code:K.invalid_string,message:c.message}),r.dirty()):c.kind==="cidr"?KL(e.data,c.version)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"cidr",code:K.invalid_string,message:c.message}),r.dirty()):c.kind==="base64"?BL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"base64",code:K.invalid_string,message:c.message}),r.dirty()):c.kind==="base64url"?IL.test(e.data)||(o=this._getOrReturnCtx(e,o),X(o,{validation:"base64url",code:K.invalid_string,message:c.message}),r.dirty()):De.assertNever(c);return{status:r.value,value:e.data}}_regex(e,a,r){return this.refinement(o=>e.test(o),{validation:a,code:K.invalid_string,...le.errToObj(r)})}_addCheck(e){return new Ya({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...le.errToObj(e)})}url(e){return this._addCheck({kind:"url",...le.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...le.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...le.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...le.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...le.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...le.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...le.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...le.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...le.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...le.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...le.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...le.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...le.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...le.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...le.errToObj(e)})}regex(e,a){return this._addCheck({kind:"regex",regex:e,...le.errToObj(a)})}includes(e,a){return this._addCheck({kind:"includes",value:e,position:a?.position,...le.errToObj(a?.message)})}startsWith(e,a){return this._addCheck({kind:"startsWith",value:e,...le.errToObj(a)})}endsWith(e,a){return this._addCheck({kind:"endsWith",value:e,...le.errToObj(a)})}min(e,a){return this._addCheck({kind:"min",value:e,...le.errToObj(a)})}max(e,a){return this._addCheck({kind:"max",value:e,...le.errToObj(a)})}length(e,a){return this._addCheck({kind:"length",value:e,...le.errToObj(a)})}nonempty(e){return this.min(1,le.errToObj(e))}trim(){return new Ya({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Ya({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Ya({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxLength(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}}Ya.create=t=>new Ya({checks:[],typeName:we.ZodString,coerce:t?.coerce??!1,...Ee(t)});function YL(t,e){const a=(t.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,o=a>r?a:r,c=Number.parseInt(t.toFixed(o).replace(".","")),u=Number.parseInt(e.toFixed(o).replace(".",""));return c%u/10**o}class _o extends Ne{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==se.number){const c=this._getOrReturnCtx(e);return X(c,{code:K.invalid_type,expected:se.number,received:c.parsedType}),be}let r;const o=new Wt;for(const c of this._def.checks)c.kind==="int"?De.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),X(r,{code:K.invalid_type,expected:"integer",received:"float",message:c.message}),o.dirty()):c.kind==="min"?(c.inclusive?e.data<c.value:e.data<=c.value)&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.too_small,minimum:c.value,type:"number",inclusive:c.inclusive,exact:!1,message:c.message}),o.dirty()):c.kind==="max"?(c.inclusive?e.data>c.value:e.data>=c.value)&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.too_big,maximum:c.value,type:"number",inclusive:c.inclusive,exact:!1,message:c.message}),o.dirty()):c.kind==="multipleOf"?YL(e.data,c.value)!==0&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.not_multiple_of,multipleOf:c.value,message:c.message}),o.dirty()):c.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),X(r,{code:K.not_finite,message:c.message}),o.dirty()):De.assertNever(c);return{status:o.value,value:e.data}}gte(e,a){return this.setLimit("min",e,!0,le.toString(a))}gt(e,a){return this.setLimit("min",e,!1,le.toString(a))}lte(e,a){return this.setLimit("max",e,!0,le.toString(a))}lt(e,a){return this.setLimit("max",e,!1,le.toString(a))}setLimit(e,a,r,o){return new _o({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:le.toString(o)}]})}_addCheck(e){return new _o({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:le.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:le.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:le.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:le.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:le.toString(e)})}multipleOf(e,a){return this._addCheck({kind:"multipleOf",value:e,message:le.toString(a)})}finite(e){return this._addCheck({kind:"finite",message:le.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:le.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:le.toString(e)})}get minValue(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxValue(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&De.isInteger(e.value))}get isFinite(){let e=null,a=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(a===null||r.value>a)&&(a=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(a)&&Number.isFinite(e)}}_o.create=t=>new _o({checks:[],typeName:we.ZodNumber,coerce:t?.coerce||!1,...Ee(t)});class So extends Ne{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==se.bigint)return this._getInvalidInput(e);let r;const o=new Wt;for(const c of this._def.checks)c.kind==="min"?(c.inclusive?e.data<c.value:e.data<=c.value)&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.too_small,type:"bigint",minimum:c.value,inclusive:c.inclusive,message:c.message}),o.dirty()):c.kind==="max"?(c.inclusive?e.data>c.value:e.data>=c.value)&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.too_big,type:"bigint",maximum:c.value,inclusive:c.inclusive,message:c.message}),o.dirty()):c.kind==="multipleOf"?e.data%c.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),X(r,{code:K.not_multiple_of,multipleOf:c.value,message:c.message}),o.dirty()):De.assertNever(c);return{status:o.value,value:e.data}}_getInvalidInput(e){const a=this._getOrReturnCtx(e);return X(a,{code:K.invalid_type,expected:se.bigint,received:a.parsedType}),be}gte(e,a){return this.setLimit("min",e,!0,le.toString(a))}gt(e,a){return this.setLimit("min",e,!1,le.toString(a))}lte(e,a){return this.setLimit("max",e,!0,le.toString(a))}lt(e,a){return this.setLimit("max",e,!1,le.toString(a))}setLimit(e,a,r,o){return new So({...this._def,checks:[...this._def.checks,{kind:e,value:a,inclusive:r,message:le.toString(o)}]})}_addCheck(e){return new So({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:le.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:le.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:le.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:le.toString(e)})}multipleOf(e,a){return this._addCheck({kind:"multipleOf",value:e,message:le.toString(a)})}get minValue(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e}get maxValue(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e}}So.create=t=>new So({checks:[],typeName:we.ZodBigInt,coerce:t?.coerce??!1,...Ee(t)});class N0 extends Ne{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==se.boolean){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.boolean,received:r.parsedType}),be}return fn(e.data)}}N0.create=t=>new N0({typeName:we.ZodBoolean,coerce:t?.coerce||!1,...Ee(t)});class zc extends Ne{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==se.date){const c=this._getOrReturnCtx(e);return X(c,{code:K.invalid_type,expected:se.date,received:c.parsedType}),be}if(Number.isNaN(e.data.getTime())){const c=this._getOrReturnCtx(e);return X(c,{code:K.invalid_date}),be}const r=new Wt;let o;for(const c of this._def.checks)c.kind==="min"?e.data.getTime()<c.value&&(o=this._getOrReturnCtx(e,o),X(o,{code:K.too_small,message:c.message,inclusive:!0,exact:!1,minimum:c.value,type:"date"}),r.dirty()):c.kind==="max"?e.data.getTime()>c.value&&(o=this._getOrReturnCtx(e,o),X(o,{code:K.too_big,message:c.message,inclusive:!0,exact:!1,maximum:c.value,type:"date"}),r.dirty()):De.assertNever(c);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new zc({...this._def,checks:[...this._def.checks,e]})}min(e,a){return this._addCheck({kind:"min",value:e.getTime(),message:le.toString(a)})}max(e,a){return this._addCheck({kind:"max",value:e.getTime(),message:le.toString(a)})}get minDate(){let e=null;for(const a of this._def.checks)a.kind==="min"&&(e===null||a.value>e)&&(e=a.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const a of this._def.checks)a.kind==="max"&&(e===null||a.value<e)&&(e=a.value);return e!=null?new Date(e):null}}zc.create=t=>new zc({checks:[],coerce:t?.coerce||!1,typeName:we.ZodDate,...Ee(t)});class z0 extends Ne{_parse(e){if(this._getType(e)!==se.symbol){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.symbol,received:r.parsedType}),be}return fn(e.data)}}z0.create=t=>new z0({typeName:we.ZodSymbol,...Ee(t)});class q0 extends Ne{_parse(e){if(this._getType(e)!==se.undefined){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.undefined,received:r.parsedType}),be}return fn(e.data)}}q0.create=t=>new q0({typeName:we.ZodUndefined,...Ee(t)});class D0 extends Ne{_parse(e){if(this._getType(e)!==se.null){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.null,received:r.parsedType}),be}return fn(e.data)}}D0.create=t=>new D0({typeName:we.ZodNull,...Ee(t)});class j0 extends Ne{constructor(){super(...arguments),this._any=!0}_parse(e){return fn(e.data)}}j0.create=t=>new j0({typeName:we.ZodAny,...Ee(t)});class P0 extends Ne{constructor(){super(...arguments),this._unknown=!0}_parse(e){return fn(e.data)}}P0.create=t=>new P0({typeName:we.ZodUnknown,...Ee(t)});class ni extends Ne{_parse(e){const a=this._getOrReturnCtx(e);return X(a,{code:K.invalid_type,expected:se.never,received:a.parsedType}),be}}ni.create=t=>new ni({typeName:we.ZodNever,...Ee(t)});class M0 extends Ne{_parse(e){if(this._getType(e)!==se.undefined){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.void,received:r.parsedType}),be}return fn(e.data)}}M0.create=t=>new M0({typeName:we.ZodVoid,...Ee(t)});class jn extends Ne{_parse(e){const{ctx:a,status:r}=this._processInputParams(e),o=this._def;if(a.parsedType!==se.array)return X(a,{code:K.invalid_type,expected:se.array,received:a.parsedType}),be;if(o.exactLength!==null){const u=a.data.length>o.exactLength.value,d=a.data.length<o.exactLength.value;(u||d)&&(X(a,{code:u?K.too_big:K.too_small,minimum:d?o.exactLength.value:void 0,maximum:u?o.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:o.exactLength.message}),r.dirty())}if(o.minLength!==null&&a.data.length<o.minLength.value&&(X(a,{code:K.too_small,minimum:o.minLength.value,type:"array",inclusive:!0,exact:!1,message:o.minLength.message}),r.dirty()),o.maxLength!==null&&a.data.length>o.maxLength.value&&(X(a,{code:K.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),r.dirty()),a.common.async)return Promise.all([...a.data].map((u,d)=>o.type._parseAsync(new ti(a,u,a.path,d)))).then(u=>Wt.mergeArray(r,u));const c=[...a.data].map((u,d)=>o.type._parseSync(new ti(a,u,a.path,d)));return Wt.mergeArray(r,c)}get element(){return this._def.type}min(e,a){return new jn({...this._def,minLength:{value:e,message:le.toString(a)}})}max(e,a){return new jn({...this._def,maxLength:{value:e,message:le.toString(a)}})}length(e,a){return new jn({...this._def,exactLength:{value:e,message:le.toString(a)}})}nonempty(e){return this.min(1,e)}}jn.create=(t,e)=>new jn({type:t,minLength:null,maxLength:null,exactLength:null,typeName:we.ZodArray,...Ee(e)});function Dr(t){if(t instanceof ft){const e={};for(const a in t.shape){const r=t.shape[a];e[a]=Za.create(Dr(r))}return new ft({...t._def,shape:()=>e})}else return t instanceof jn?new jn({...t._def,type:Dr(t.element)}):t instanceof Za?Za.create(Dr(t.unwrap())):t instanceof Yr?Yr.create(Dr(t.unwrap())):t instanceof qi?qi.create(t.items.map(e=>Dr(e))):t}class ft extends Ne{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),a=De.objectKeys(e);return this._cached={shape:e,keys:a},this._cached}_parse(e){if(this._getType(e)!==se.object){const m=this._getOrReturnCtx(e);return X(m,{code:K.invalid_type,expected:se.object,received:m.parsedType}),be}const{status:r,ctx:o}=this._processInputParams(e),{shape:c,keys:u}=this._getCached(),d=[];if(!(this._def.catchall instanceof ni&&this._def.unknownKeys==="strip"))for(const m in o.data)u.includes(m)||d.push(m);const p=[];for(const m of u){const g=c[m],v=o.data[m];p.push({key:{status:"valid",value:m},value:g._parse(new ti(o,v,o.path,m)),alwaysSet:m in o.data})}if(this._def.catchall instanceof ni){const m=this._def.unknownKeys;if(m==="passthrough")for(const g of d)p.push({key:{status:"valid",value:g},value:{status:"valid",value:o.data[g]}});else if(m==="strict")d.length>0&&(X(o,{code:K.unrecognized_keys,keys:d}),r.dirty());else if(m!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const m=this._def.catchall;for(const g of d){const v=o.data[g];p.push({key:{status:"valid",value:g},value:m._parse(new ti(o,v,o.path,g)),alwaysSet:g in o.data})}}return o.common.async?Promise.resolve().then(async()=>{const m=[];for(const g of p){const v=await g.key,b=await g.value;m.push({key:v,value:b,alwaysSet:g.alwaysSet})}return m}).then(m=>Wt.mergeObjectSync(r,m)):Wt.mergeObjectSync(r,p)}get shape(){return this._def.shape()}strict(e){return le.errToObj,new ft({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(a,r)=>{const o=this._def.errorMap?.(a,r).message??r.defaultError;return a.code==="unrecognized_keys"?{message:le.errToObj(e).message??o}:{message:o}}}:{}})}strip(){return new ft({...this._def,unknownKeys:"strip"})}passthrough(){return new ft({...this._def,unknownKeys:"passthrough"})}extend(e){return new ft({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new ft({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:we.ZodObject})}setKey(e,a){return this.augment({[e]:a})}catchall(e){return new ft({...this._def,catchall:e})}pick(e){const a={};for(const r of De.objectKeys(e))e[r]&&this.shape[r]&&(a[r]=this.shape[r]);return new ft({...this._def,shape:()=>a})}omit(e){const a={};for(const r of De.objectKeys(this.shape))e[r]||(a[r]=this.shape[r]);return new ft({...this._def,shape:()=>a})}deepPartial(){return Dr(this)}partial(e){const a={};for(const r of De.objectKeys(this.shape)){const o=this.shape[r];e&&!e[r]?a[r]=o:a[r]=o.optional()}return new ft({...this._def,shape:()=>a})}required(e){const a={};for(const r of De.objectKeys(this.shape))if(e&&!e[r])a[r]=this.shape[r];else{let c=this.shape[r];for(;c instanceof Za;)c=c._def.innerType;a[r]=c}return new ft({...this._def,shape:()=>a})}keyof(){return i_(De.objectKeys(this.shape))}}ft.create=(t,e)=>new ft({shape:()=>t,unknownKeys:"strip",catchall:ni.create(),typeName:we.ZodObject,...Ee(e)});ft.strictCreate=(t,e)=>new ft({shape:()=>t,unknownKeys:"strict",catchall:ni.create(),typeName:we.ZodObject,...Ee(e)});ft.lazycreate=(t,e)=>new ft({shape:t,unknownKeys:"strip",catchall:ni.create(),typeName:we.ZodObject,...Ee(e)});class qc extends Ne{_parse(e){const{ctx:a}=this._processInputParams(e),r=this._def.options;function o(c){for(const d of c)if(d.result.status==="valid")return d.result;for(const d of c)if(d.result.status==="dirty")return a.common.issues.push(...d.ctx.common.issues),d.result;const u=c.map(d=>new pa(d.ctx.common.issues));return X(a,{code:K.invalid_union,unionErrors:u}),be}if(a.common.async)return Promise.all(r.map(async c=>{const u={...a,common:{...a.common,issues:[]},parent:null};return{result:await c._parseAsync({data:a.data,path:a.path,parent:u}),ctx:u}})).then(o);{let c;const u=[];for(const p of r){const m={...a,common:{...a.common,issues:[]},parent:null},g=p._parseSync({data:a.data,path:a.path,parent:m});if(g.status==="valid")return g;g.status==="dirty"&&!c&&(c={result:g,ctx:m}),m.common.issues.length&&u.push(m.common.issues)}if(c)return a.common.issues.push(...c.ctx.common.issues),c.result;const d=u.map(p=>new pa(p));return X(a,{code:K.invalid_union,unionErrors:d}),be}}get options(){return this._def.options}}qc.create=(t,e)=>new qc({options:t,typeName:we.ZodUnion,...Ee(e)});function mh(t,e){const a=$a(t),r=$a(e);if(t===e)return{valid:!0,data:t};if(a===se.object&&r===se.object){const o=De.objectKeys(e),c=De.objectKeys(t).filter(d=>o.indexOf(d)!==-1),u={...t,...e};for(const d of c){const p=mh(t[d],e[d]);if(!p.valid)return{valid:!1};u[d]=p.data}return{valid:!0,data:u}}else if(a===se.array&&r===se.array){if(t.length!==e.length)return{valid:!1};const o=[];for(let c=0;c<t.length;c++){const u=t[c],d=e[c],p=mh(u,d);if(!p.valid)return{valid:!1};o.push(p.data)}return{valid:!0,data:o}}else return a===se.date&&r===se.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}class Dc extends Ne{_parse(e){const{status:a,ctx:r}=this._processInputParams(e),o=(c,u)=>{if(x0(c)||x0(u))return be;const d=mh(c.value,u.value);return d.valid?((O0(c)||O0(u))&&a.dirty(),{status:a.value,value:d.data}):(X(r,{code:K.invalid_intersection_types}),be)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([c,u])=>o(c,u)):o(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}
vendor: 1,393 bytes, line 259
259Dc.create=(t,e,a)=>new Dc({left:t,right:e,typeName:we.ZodIntersection,...Ee(a)});class qi extends Ne{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==se.array)return X(r,{code:K.invalid_type,expected:se.array,received:r.parsedType}),be;if(r.data.length<this._def.items.length)return X(r,{code:K.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),be;!this._def.rest&&r.data.length>this._def.items.length&&(X(r,{code:K.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),a.dirty());const c=[...r.data].map((u,d)=>{const p=this._def.items[d]||this._def.rest;return p?p._parse(new ti(r,u,r.path,d)):null}).filter(u=>!!u);return r.common.async?Promise.all(c).then(u=>Wt.mergeArray(a,u)):Wt.mergeArray(a,c)}get items(){return this._def.items}rest(e){return new qi({...this._def,rest:e})}}qi.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new qi({items:t,typeName:we.ZodTuple,rest:null,...Ee(e)})};class U0 extends Ne{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==se.map)return X(r,{code:K.invalid_type,expected:se.map,received:r.parsedType}),be;const o=this._def.keyType,c=this._def.valueType,u=[...r.data.entries()].map(([d,p],m)=>
vendor: 4,160 bytes, line 259
259({key:o._parse(new ti(r,d,r.path,[m,"key"])),value:c._parse(new ti(r,p,r.path,[m,"value"]))}));if(r.common.async){const d=new Map;return Promise.resolve().then(async()=>{for(const p of u){const m=await p.key,g=await p.value;if(m.status==="aborted"||g.status==="aborted")return be;(m.status==="dirty"||g.status==="dirty")&&a.dirty(),d.set(m.value,g.value)}return{status:a.value,value:d}})}else{const d=new Map;for(const p of u){const m=p.key,g=p.value;if(m.status==="aborted"||g.status==="aborted")return be;(m.status==="dirty"||g.status==="dirty")&&a.dirty(),d.set(m.value,g.value)}return{status:a.value,value:d}}}}U0.create=(t,e,a)=>new U0({valueType:e,keyType:t,typeName:we.ZodMap,...Ee(a)});class To extends Ne{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.parsedType!==se.set)return X(r,{code:K.invalid_type,expected:se.set,received:r.parsedType}),be;const o=this._def;o.minSize!==null&&r.data.size<o.minSize.value&&(X(r,{code:K.too_small,minimum:o.minSize.value,type:"set",inclusive:!0,exact:!1,message:o.minSize.message}),a.dirty()),o.maxSize!==null&&r.data.size>o.maxSize.value&&(X(r,{code:K.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),a.dirty());const c=this._def.valueType;function u(p){const m=new Set;for(const g of p){if(g.status==="aborted")return be;g.status==="dirty"&&a.dirty(),m.add(g.value)}return{status:a.value,value:m}}const d=[...r.data.values()].map((p,m)=>c._parse(new ti(r,p,r.path,m)));return r.common.async?Promise.all(d).then(p=>u(p)):u(d)}min(e,a){return new To({...this._def,minSize:{value:e,message:le.toString(a)}})}max(e,a){return new To({...this._def,maxSize:{value:e,message:le.toString(a)}})}size(e,a){return this.min(e,a).max(e,a)}nonempty(e){return this.min(1,e)}}To.create=(t,e)=>new To({valueType:t,minSize:null,maxSize:null,typeName:we.ZodSet,...Ee(e)});class B0 extends Ne{get schema(){return this._def.getter()}_parse(e){const{ctx:a}=this._processInputParams(e);return this._def.getter()._parse({data:a.data,path:a.path,parent:a})}}B0.create=(t,e)=>new B0({getter:t,typeName:we.ZodLazy,...Ee(e)});class I0 extends Ne{_parse(e){if(e.data!==this._def.value){const a=this._getOrReturnCtx(e);return X(a,{received:a.data,code:K.invalid_literal,expected:this._def.value}),be}return{status:"valid",value:e.data}}get value(){return this._def.value}}I0.create=(t,e)=>new I0({value:t,typeName:we.ZodLiteral,...Ee(e)});function i_(t,e){return new Vr({values:t,typeName:we.ZodEnum,...Ee(e)})}class Vr extends Ne{_parse(e){if(typeof e.data!="string"){const a=this._getOrReturnCtx(e),r=this._def.values;return X(a,{expected:De.joinValues(r),received:a.parsedType,code:K.invalid_type}),be}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const a=this._getOrReturnCtx(e),r=this._def.values;return X(a,{received:a.data,code:K.invalid_enum_value,options:r}),be}return fn(e.data)}get options(){return this._def.values}get enum(){const e={};for(const a of this._def.values)e[a]=a;return e}get Values(){const e={};for(const a of this._def.values)e[a]=a;return e}get Enum(){const e={};for(const a of this._def.values)e[a]=a;return e}extract(e,a=this._def){return Vr.create(e,{...this._def,...a})}exclude(e,a=this._def){return Vr.create(this.options.filter(r=>!e.includes(r)),{...this._def,...a})}}Vr.create=i_;class F0 extends Ne{_parse(e){const a=De.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==se.string&&r.parsedType!==se.number){const o=De.objectValues(a);return X(r,{expected:De.joinValues(o),received:r.parsedType,code:K.invalid_type}),be}if(this._cache||(this._cache=new Set(De.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const o=De.objectValues(a);return X(r,{received:r.data,code:K.invalid_enum_value,options:o}),be}return fn(e.data)}get enum(){return this._def.values}}F0.create=(t,e)=>new F0({values:t,typeName:we.ZodNativeEnum,...Ee(e)});class jc extends Ne{unwrap(){return this._def.type}_parse(e){const{ctx:a}=this._processInputParams(e);if(a.parsedType!==se.promise&&a.common.async===!1)return X(a,{code:K.invalid_type,expected:se.promise,received:a.parsedType}),be;
vendor: 4,095 bytes, line 259
259const r=a.parsedType===se.promise?a.data:Promise.resolve(a.data);return fn(r.then(o=>this._def.type.parseAsync(o,{path:a.path,errorMap:a.common.contextualErrorMap})))}}jc.create=(t,e)=>new jc({type:t,typeName:we.ZodPromise,...Ee(e)});class Kr extends Ne{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===we.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:a,ctx:r}=this._processInputParams(e),o=this._def.effect||null,c={addIssue:u=>{X(r,u),u.fatal?a.abort():a.dirty()},get path(){return r.path}};if(c.addIssue=c.addIssue.bind(c),o.type==="preprocess"){const u=o.transform(r.data,c);if(r.common.async)return Promise.resolve(u).then(async d=>{if(a.value==="aborted")return be;const p=await this._def.schema._parseAsync({data:d,path:r.path,parent:r});return p.status==="aborted"?be:p.status==="dirty"||a.value==="dirty"?Zs(p.value):p});{if(a.value==="aborted")return be;const d=this._def.schema._parseSync({data:u,path:r.path,parent:r});return d.status==="aborted"?be:d.status==="dirty"||a.value==="dirty"?Zs(d.value):d}}if(o.type==="refinement"){const u=d=>{const p=o.refinement(d,c);if(r.common.async)return Promise.resolve(p);if(p instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return d};if(r.common.async===!1){const d=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return d.status==="aborted"?be:(d.status==="dirty"&&a.dirty(),u(d.value),{status:a.value,value:d.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(d=>d.status==="aborted"?be:(d.status==="dirty"&&a.dirty(),u(d.value).then(()=>({status:a.value,value:d.value}))))}if(o.type==="transform")if(r.common.async===!1){const u=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Gr(u))return be;const d=o.transform(u.value,c);if(d instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:a.value,value:d}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(u=>Gr(u)?Promise.resolve(o.transform(u.value,c)).then(d=>({status:a.value,value:d})):be);De.assertNever(o)}}Kr.create=(t,e,a)=>new Kr({schema:t,typeName:we.ZodEffects,effect:e,...Ee(a)});Kr.createWithPreprocess=(t,e,a)=>new Kr({schema:e,effect:{type:"preprocess",transform:t},typeName:we.ZodEffects,...Ee(a)});class Za extends Ne{_parse(e){return this._getType(e)===se.undefined?fn(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Za.create=(t,e)=>new Za({innerType:t,typeName:we.ZodOptional,...Ee(e)});class Yr extends Ne{_parse(e){return this._getType(e)===se.null?fn(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Yr.create=(t,e)=>new Yr({innerType:t,typeName:we.ZodNullable,...Ee(e)});class gh extends Ne{_parse(e){const{ctx:a}=this._processInputParams(e);let r=a.data;return a.parsedType===se.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:a.path,parent:a})}removeDefault(){return this._def.innerType}}gh.create=(t,e)=>new gh({innerType:t,typeName:we.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...Ee(e)});class vh extends Ne{_parse(e){const{ctx:a}=this._processInputParams(e),r={...a,common:{...a.common,issues:[]}},o=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return Nc(o)?o.then(c=>({status:"valid",value:c.status==="valid"?c.value:this._def.catchValue({get error(){return new pa(r.common.issues)},input:r.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new pa(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}vh.create=(t,e)=>new vh({innerType:t,typeName:we.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...Ee(e)});class $0 extends Ne{_parse(e){if(this._getType(e)!==se.nan){const r=this._getOrReturnCtx(e);return X(r,{code:K.invalid_type,expected:se.nan,received:r.parsedType}),be}
259return{status:"valid",value:e.data}}}$0.create=t=>new $0({typeName:we.ZodNaN,...Ee(t)});class QL extends Ne{_parse(e){const{ctx:a}=this._processInputParams(e),r=a.data;return this._def.type._parse({data:r,path:a.path,parent:a})}unwrap(){return this._def.type}}class $h extends Ne{_parse(e){const{status:a,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const c=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return c.status==="aborted"?be:c.status==="dirty"?(a.dirty(),Zs(c.value)):this._def.out._parseAsync({data:c.value,path:r.path,parent:r})})();{const o=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?be:o.status==="dirty"?(a.dirty(),{status:"dirty",value:o.value}):this._def.out._parseSync({data:o.value,path:r.path,parent:r})}}static create(e,a){return new $h({in:e,out:a,typeName:we.ZodPipeline})}}class yh extends Ne{_parse(e){const a=this._def.innerType._parse(e),r=o=>(Gr(o)&&(o.value=Object.freeze(o.value)),o);return Nc(a)?a.then(o=>r(o)):r(a)}unwrap(){return this._def.innerType}}yh.create=(t,e)=>new yh({innerType:t,typeName:we.ZodReadonly,...Ee(e)});var we;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(we||(we={}));const JL=Ya.create;ni.create;jn.create;const ZL=ft.create;qc.create;Dc.create;qi.create;const WL=Vr.create;jc.create;Za.create;Yr.create;const XL=()=>Ze(()=>import("./renouvellement-eTjWfHUz.js"),__vite__mapDeps([40,5])),eN=ZL({token:JL().optional().catch(void 0),r:WL(["yes","no","maybe"]).optional().catch(void 0)}),tN=Qe()({validateSearch:eN,head:()=>({meta:[{title:"Pack renewal — Parlons Français"},{name:"description",content:"Let your teacher know if you want to continue after your pack."},{property:"og:title",content:"Pack renewal — Parlons Français"},{property:"og:description",content:"Reply to the renewal question for your French lesson pack."},{property:"og:type",content:"website"},{name:"twitter:card",content:"summary"},{name:"robots",content:"noindex"}]}),component:Je(XL,"component")}),nN=()=>Ze(()=>import("./ressources-OsL-d54l.js"),__vite__mapDeps([41,1,2,3,4,5,6,18,9,32,10,17,35,42,34])),aN=Qe()({head:()=>({meta:[{title:"Ressources gratuites pour apprendre le français — Parlons Français"},{name:"description",content:"Fiches PDF, guides et outils gratuits pour apprendre le français à Taïwan : verbes essentiels, grammaire, voyage, DELF, films, faux-amis. 免費法文學習資源:PDF 下載、動詞、文法、DELF 練習、法國電影推薦。Schede PDF gratuite per imparare il francese a Taipei: verbi, grammatica, viaggio, DELF, film, falsi amici."},{property:"og:title",content:"Ressources gratuites — Apprendre le français"},{property:"og:description",content:"Téléchargez des fiches PDF gratuites pour apprendre le français : verbes, grammaire, vocabulaire de voyage, films. Scarica schede PDF gratuite per imparare il francese: verbi, grammatica, lessico viaggio, film."},{property:"og:url",content:"https://www.parlonsfrancais.net/ressources"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"法文學習資源, 法文 PDF 下載, 法文動詞, 法文文法, DELF 練習, 法文電影, 假朋友, risorse francese gratuite, PDF verbi francese, grammatica francese, esercizi DELF, film francesi consigliati, falsi amici francese italiano"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/ressources"}]}
259),component:Je(nN,"component")}),iN=()=>Ze(()=>import("./services-D6wB2eSf.js"),__vite__mapDeps([43,1,2,3,4,5,6,44,11,12])),rN=Qe()({head:()=>({meta:[{title:"Services — Parlons Français"},{name:"description",content:"Services d'accompagnement en France : recherche de logement, inscription scolaire et gestion de contentieux. 法國行政服務 · French admin services · Servicios administrativos en Francia · フランスでの各種手続きサポート · Servizi per la Francia · 프랑스 행정 서비스."},{property:"og:title",content:"Services — Parlons Français"},{property:"og:description",content:"Nous vous accompagnons dans vos démarches en France : logement, inscription scolaire et contentieux."},{property:"og:url",content:"https://www.parlonsfrancais.net/services"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"twitter:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"service logement france, inscription école france, contentieux france, accompagnement administratif france, 法國找房服務, 法國學校註冊, French housing service, French school enrolment help, gestión alojamiento francia, inscripción escolar francia, alloggio francia, iscrizione scuola francia, 프랑스 숙소 찾기, 프랑스 학교 등록"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"ko_KR"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"fr",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"en",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"ko",href:"https://www.parlonsfrancais.net/services"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/services"}]}),component:Je(iN,"component")}),sN=()=>Ze(()=>import("./tarif-social-B72n_4LU.js"),__vite__mapDeps([45,1,2,3,4,5,6,46,44,12,34])),oN=Qe()({head:()=>({meta:[{title:"Tarif social — Parlons Français"},{name:"description",content:"Tarif réduit pour les revenus modestes : 10 cours en présentiel 10 000 TWD, 10 cours en ligne 6 000 TWD. Social rate for low incomes. 低收入法文課程優惠價。"},{property:"og:title",content:"Tarif social — cours de français accessibles"},{property:"og:description",content:"Un tarif réduit sous conditions de revenus (moins de 610 000 TWD par an) pour apprendre le français en ligne ou en présentiel."},{property:"og:type",content:"website"},{property:"og:url",content:"https://www.parlonsfrancais.net/tarif-social"},{name:"twitter:card",content:"summary_large_image"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/tarif-social"}]}),component:Je(sN,"component")}),lN=()=>Ze(()=>import("./tarifs-CA90XL-D.js"),__vite__mapDeps([47,2,3,4,5,6,1,29,30,20,46,19,31,34,35,44])),cN=Qe()({head:()=>({meta:[{title:"Tarifs — Parlons Français"},{name:"description",content:"Tarifs transparents : cours de français en présentiel, en ligne et formules flexibles à Taïwan. 法文家教費用透明,台北實體與線上法文課程價格一覽。Prezzi trasparenti per lezioni di francese a Taipei e online, formule flessibili da A1 a DELF."},{property:"og:title",content:"Tarifs des cours de français"},{property:"og:description",content:"Présentiel, en ligne, ou flexible — trouvez la formule adaptée à votre projet. Prezzi chiari per lezioni di francese a Taipei e online."},{property:"og:url",content:"https://www.parlonsfrancais.net/tarifs"},{property:"og:image",content:"https://www.parlonsfrancais.net/og-image.jpg"},{name:"keywords",content:"prix cours de français en ligne Suisse, tarif cours de français Belgique en ligne, tarif cours de français Canada en ligne, online French lesson price USA, French tutor rates Canada, cours de français par minute en ligne, 法文家教費用, 法文課程價格, 台北法文學費, 線上法文課程價格, prezz
259i lezioni francese, costo corso francese Taipei, lezioni francese online prezzi, tariffe insegnante francese"},{property:"og:locale",content:"fr_FR"},{property:"og:locale:alternate",content:"zh_TW"},{property:"og:locale:alternate",content:"en_US"},{property:"og:locale:alternate",content:"ja_JP"},{property:"og:locale:alternate",content:"es_ES"},{property:"og:locale:alternate",content:"it_IT"},{property:"og:locale:alternate",content:"fr_BE"},{property:"og:locale:alternate",content:"fr_CH"},{property:"og:locale:alternate",content:"fr_CA"},{property:"og:locale:alternate",content:"en_CA"},{property:"og:locale:alternate",content:"nl_BE"},{property:"og:locale:alternate",content:"de_CH"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"fr-FR",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"fr-BE",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"fr-CH",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"fr-CA",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"en-US",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"en-CA",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"en-GB",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"nl-BE",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"de-CH",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"zh-Hant",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"ja",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"es",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"it",href:"https://www.parlonsfrancais.net/tarifs"},{rel:"alternate",hrefLang:"x-default",href:"https://www.parlonsfrancais.net/tarifs"}]}),component:Je(lN,"component")}),uN=()=>Ze(()=>import("./admin-BK8pjHOS.js"),__vite__mapDeps([48,2,3,4,5,6])),dN=Qe()({beforeLoad:async()=>{const{data:t}=await Oc.auth.getUser();if(!t.user)throw ao({to:"/connexion"});const{data:e}=await Oc.rpc("has_role",{_user_id:t.user.id,_role:"admin"});if(!e)throw ao({to:"/mon-compte"})},component:Je(uN,"component")}),fN=()=>Ze(()=>import("./mon-compte-CzDurc2C.js"),__vite__mapDeps([49,5,50,51,2,3,4,6,52,30,42,34,35,25])),hN=Qe()({head:()=>({meta:[{title:"Mon compte · Parlons Français"},{name:"robots",content:"noindex"}]}),validateSearch:t=>({apercu:typeof t.apercu=="string"&&t.apercu?t.apercu:void 0}),component:Je(fN,"component")}),pN=()=>Ze(()=>import("./ressources.cecrl-DHVC4qHc.js"),__vite__mapDeps([53,1,2,3,4,5,6])),mN=Qe()({head:()=>({meta:[{title:"Tableau récapitulatif CECRL — A1 à C2 expliqués | Parlons Français"},{name:"description",content:"Comprendre les niveaux du Cadre européen commun de référence pour les langues (CECRL) : A1, A2, B1, B2, C1, C2. Compétences, durée d'apprentissage et équivalences DELF/DALF."},{property:"og:title",content:"Tableau récapitulatif CECRL — A1 à C2"},{property:"og:description",content:"Niveaux A1 à C2 expliqués simplement : ce que vous savez faire, le temps nécessaire, l'équivalence DELF/DALF."},{property:"og:url",content:"https://www.parlonsfrancais.net/ressources/cecrl"}],links:[{rel:"canonical",href:"https://www.parlonsfrancais.net/ressources/cecrl"}]}),component:Je(pN,"component")}),gN=()=>Ze(()=>import("./admin.index-CmM3y9VP.js"),__vite__mapDeps([54,5,50,51,6,3])),vN=Qe()({head:()=>({meta:[{title:"Admin · Étudiants"},{name:"robots",content:"noindex"}]}),component:Je(gN,"component")}),yN=()=>Ze(()=>import("./admin._id-Bvfb3CSe.js"),__vite__mapDeps([55,5,50,51,52,30,3,42,34,35,25,4])),bN=Qe()({head:()=>({meta:[{title:"Fiche étudiant"},{name:"robots",content:"noindex"}]}),component:Je(yN,"component")}),wN=()=>Ze(()=>import("./admin.nouveau-BuVVykhL.js"),__vite__mapDeps([56,5,51])),_N=Qe()({head:()=>({meta:[{title:"Nouvel étudiant"},{name:"robots",content:"noindex"}]}),component:Je(wN,"component")}),SN=KO.update({id:"/",path:"/",getParentRoute:()=>it}),Hh=QO.update({id:"/_authenticated",getParentRoute:()=>it}),TN=ZO.update({id:"/a-propos",path:"/a-propos",getParentRoute:()=>it}),EN=XO.update({id:"/annonces",path:"/annonces",getParentRoute:()=>it}),CN=tL.update({id:"/ateliers",path:"/ateliers",getParentRoute:()=>it}),AN=aL.update({id:"/avis",path:"/avis",getParentRoute:()=>it}),kN=rL.update({id:"/carte",path:"/carte",getParentRoute:()=>it}),RN=oL.update({id:"/connexion",path:"/connexion",getParentRoute:()=>it}),xN=cL.update({id:"/contact",path:"/contact",getParentRoute:()=>it}),ON=dL.update({id:"/cours",path:"/cours",getParentRoute:()=>it}),LN=mL.update({id:"/faq",path:"/faq",getParentRoute:()=>it}),NN=vL.update({id:"/mot-de-passe-oublie",path:"/mot-de-passe-oublie",getParentRoute:()=>it}),zN=bL.update({id:"/paiement",path:"/paiement",getParentRoute:()=>it}),qN=_L.update({id:"/professeur",path:"/professeur",getParentRoute:()=>it}),DN=TL.update({id:"/reinitialiser-mot-de-passe",path:"/reinitialiser-mot-de-passe",getParentRoute:()=>it}),jN=tN.update({id:"/renouvellement",path:"/renouvellement",getParentRoute:()=>it}),r_=aN.update({id:"/ressources",path:"/ressources",getParentRoute:()=>it}),PN=rN.update({id:"/services",path:"/services",getParentRoute:()=>it}),MN=oN.update({id:"/tarif-social",path:"/tarif-social",getParentRoute:()=>it}),UN=cN.update({id:"/tarifs",path:"/tarifs",getParentRoute:()=>it}),Qc=dN.update({id:"/admin",path:"/admin",getParentRoute:()=>Hh}),BN=hN.update({id:"/mon-compte",path:"/mon-compte",getParentRoute:()=>Hh}),IN=mN.update({id:"/cecrl",path:"/cecrl",getParentRoute:()=>r_}),FN=vN.update({id:"/",path:"/",getParentRoute:()=>Qc}),$N=bN.update({id:"/$id",path:"/$id",getParentRoute:()=>Qc}),HN=_N.update({id:"/nouveau",path:"/nouveau",getParentRoute:()=>Qc}),GN={AuthenticatedAdminIdRoute:$N,AuthenticatedAdminNouveauRoute:HN,AuthenticatedAdminIndexRoute:FN},VN=Qc._addFileChildren(GN),KN={AuthenticatedAdminRoute:VN,AuthenticatedMonCompteRoute:BN},YN=Hh._addFileChildren(KN),QN={RessourcesCecrlRoute:IN},JN=r_._addFileChildren(QN),ZN={IndexRoute:SN,AuthenticatedRouteRoute:YN,AProposRoute:TN,Annonces
259Route:EN,AteliersRoute:CN,AvisRoute:AN,CarteRoute:kN,ConnexionRoute:RN,ContactRoute:xN,CoursRoute:ON,FaqRoute:LN,MotDePasseOublieRoute:NN,PaiementRoute:zN,ProfesseurRoute:qN,ReinitialiserMotDePasseRoute:DN,RenouvellementRoute:jN,RessourcesRoute:JN,ServicesRoute:PN,TarifSocialRoute:MN,TarifsRoute:UN},WN=it._addFileChildren(ZN),XN=()=>{const t=new AO;return Kk({routeTree:WN,context:{queryClient:t},scrollRestoration:!0,defaultPreloadStaleTime:0})};async function ez(){const t=await XN();let e;if(v0){const a=await v0.getOptions();a.serializationAdapters=a.serializationAdapters??[],window.__TSS_START_OPTIONS__=a,e=a.serializationAdapters,t.options.defaultSsr=a.defaultSsr}else e=[],window.__TSS_START_OPTIONS__={serializationAdapters:e};return e.push(ek),t.options.serializationAdapters&&e.push(...t.options.serializationAdapters),t.update({basepath:"",serializationAdapters:e}),t.stores.ids.get().length||await GT(t),t}var tz=ez;function nz(){return tz().finally(()=>window.$_TSR?.h())}var Mf;function az(){return Mf||(Mf=nz()),V.jsx(nk,{promise:Mf,children:t=>V.jsx(Jk,{router:t})})}re.startTransition(()=>{B1.hydrateRoot(document,V.jsx(re.StrictMode,{children:V.jsx(az,{})}))});export{ch as A,Vw as B,wO as C,uO as D,Lt as E,uz as F,dz as G,Oi as H,xt as I,G0 as J,$1 as K,Tc as L,H0 as M,_w as O,cL as R,Yc as S,sz as T,Uy as _,mw as a,tN as b,XA as c,rz as d,Co as e,hN as f,fz as g,O1 as h,P1 as i,V as j,Hc as k,lz as l,UO as m,bN as n,iz as o,pO as p,oO as q,re as r,Oc as s,cz as t,DO as u,uh as v,wn as w,Qw as x,rO as y,sO as z};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.