var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function ee(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,te||(te=!0,ie());else{var t=n(l);t!==null&&se(ee,t.startTime-e)}}}var te=!1,x=-1,ne=5,S=-1;function re(){return g?!0:!(e.unstable_now()-St&&re());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&se(ee,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?ie():te=!1}}}var ie;if(typeof y==`function`)ie=function(){y(C)};else if(typeof MessageChannel<`u`){var ae=new MessageChannel,oe=ae.port2;ae.port1.onmessage=C,ie=function(){oe.postMessage(null)}}else ie=function(){_(C,0)};function se(t,n){x=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(x),x=-1):h=!0,se(ee,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,te||(te=!0,ie()))),r},e.unstable_shouldYield=re,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=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,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function ee(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var te=ee.prototype=new b;te.constructor=ee,_(te,y.prototype),te.isPureReactComponent=!0;var x=Array.isArray;function ne(){}var S={H:null,A:null,T:null,S:null},re=Object.prototype.hasOwnProperty;function C(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ie(e,t){return C(e.type,t,e.props)}function ae(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function oe(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var se=/\/+/g;function ce(e,t){return typeof e==`object`&&e&&e.key!=null?oe(``+e.key):t.toString(36)}function le(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(ne,ne):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function ue(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,ue(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ce(e,0):a,x(o)?(i=``,c!=null&&(i=c.replace(se,`$&/`)+`/`),ue(o,r,i,``,function(e){return e})):o!=null&&(ae(o)&&(o=ie(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(se,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(x(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1ke||(e.current=Oe[ke],Oe[ke]=null,ke--)}function E(e,t){ke++,Oe[ke]=e.current,e.current=t}var Me=Ae(null),Ne=Ae(null),Pe=Ae(null),Fe=Ae(null);function Ie(e,t){switch(E(Pe,t),E(Ne,e),E(Me,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}je(Me),E(Me,e)}function Le(){je(Me),je(Ne),je(Pe)}function Re(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,E(Fe,e)),t=Me.current;var n=dp(t,e.type);t!==n&&(E(Ne,e),E(Me,n))}function ze(e){Ne.current===e&&(je(Me),je(Ne)),Fe.current===e&&(je(Fe),sh._currentValue=De)}var Be,Ve;function He(e){if(Be===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Be=t&&t[1]||``,Ve=-1)`:-1i||c[r]!==l[i]){var u=` `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Ue=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?He(n):``}function Ge(e,t){switch(e.tag){case 26:case 27:case 5:return He(e.type);case 16:return He(`Lazy`);case 13:return e.child!==t&&t!==null?He(`Suspense Fallback`):He(`Suspense`);case 19:return He(`SuspenseList`);case 0:case 15:return We(e.type,!1);case 11:return We(e.type.render,!1);case 1:return We(e.type,!0);case 31:return He(`Activity`);case 30:return He(`ViewTransition`);default:return``}}function Ke(e){try{var t=``,n=null;do t+=Ge(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var qe=Object.prototype.hasOwnProperty,Je=t.unstable_scheduleCallback,Ye=t.unstable_cancelCallback,Xe=t.unstable_shouldYield,Ze=t.unstable_requestPaint,Qe=t.unstable_now,$e=t.unstable_getCurrentPriorityLevel,et=t.unstable_ImmediatePriority,tt=t.unstable_UserBlockingPriority,nt=t.unstable_NormalPriority,rt=t.unstable_LowPriority,it=t.unstable_IdlePriority,at=t.log,ot=t.unstable_setDisableYieldValue,st=null,ct=null;function lt(e){if(typeof at==`function`&&ot(e),ct&&typeof ct.setStrictMode==`function`)try{ct.setStrictMode(st,e)}catch{}}var ut=Math.clz32?Math.clz32:pt,dt=Math.log,ft=Math.LN2;function pt(e){return e>>>=0,e===0?32:31-(dt(e)/ft|0)|0}var mt=256,ht=262144,gt=4194304;function _t(e){var t=e&42;if(t!==0)return t;switch(e&-e){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 e&-e;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function vt(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=_t(n))):i=_t(o):i=_t(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=_t(n))):i=_t(o)):i=_t(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function yt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function bt(e,t){t&8&&(t|=t&32);var n=e.entangledLanes;if(n!==0)for(e=e.entanglements,n&=t;0n;n++)t.push(e);return t}function wt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function D(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0=Sr),Tr=` `,Er=!1;function Dr(e,t){switch(e){case`keyup`:return br.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Or(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var kr=!1;function Ar(e,t){switch(e){case`compositionend`:return Or(t);case`keypress`:return t.which===32?(Er=!0,Tr):null;case`textInput`:return e=t.data,e===Tr&&Er?null:e;default:return null}}function jr(e,t){if(kr)return e===`compositionend`||!xr&&Dr(e,t)?(e=Wn(),Un=Hn=Vn=null,kr=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Zr(n)}}function $r(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?$r(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ei(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Xr(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Xr(e.document)}return t}function ti(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var ni=Rn&&`documentMode`in document&&11>=document.documentMode,ri=null,ii=null,ai=null,oi=!1;function si(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;oi||ri==null||ri!==Xr(r)||(r=ri,`selectionStart`in r&&ti(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),ai&&M(ai,r)||(ai=r,r=Jf(ii,`onSelect`),0>=o,i-=o,ra=1<<32-ut(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),P&&aa(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),P&&aa(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return P&&aa(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&(_=v.alternate,_!==null&&h.delete(_.key===null?g:_.key)),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),P&&aa(a,g),u}function _(e,r,o,c){if(typeof o==`object`&&o&&o.type===se&&o.key===null&&o.props.ref===void 0&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case ae:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===se){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),fo(c,o),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===ge&&io(l)===r.type){n(e,r.sibling),c=a(r,o.props),fo(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===se?(c=Wi(o.props.children,e.mode,c,o.key),fo(c,o),c.return=e,e=c):(c=Ui(o.type,o.key,o.props,null,e.mode,c),fo(c,o),c.return=e,e=c)}return s(e);case oe:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=qi(o,e.mode,c),c.return=e,e=c}return s(e);case ge:return o=io(o),_(e,r,o,c)}if(Ee(o))return h(e,r,o,c);if(Ce(o)){if(l=Ce(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return _(e,r,uo(o),c);if(o.$$typeof===de)return _(e,r,Aa(e,o),c);po(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=Gi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{lo=0;var i=_(e,t,n,r);return co=null,i}catch(t){if(t===Qa||t===eo)throw t;var a=zi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var R=mo(!0),ho=mo(!1),go=!1;function _o(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function vo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function yo(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function bo(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Ii(e),Fi(e,null,n),t}return Mi(e,r,t,n),Ii(e)}function xo(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Et(e,n)}}function So(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n}else e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Co=!1;function wo(){if(Co){var e=Ua;if(e!==null)throw e}}function To(e,t,n,r){Co=!1;var i=e.updateQueue;go=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===Ha&&(Co=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,h=s;f=t;var g=n;switch(h.tag){case 1:if(m=h.payload,typeof m==`function`){d=m.call(g,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=h.payload,f=typeof m==`function`?m.call(g,d,f):m,f==null)break a;d=C({},d,f);break a;case 2:go=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),sd|=o,e.lanes=o,e.memoizedState=d}}function Eo(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Do(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=w.T,s={};s.types=o===null?null:o.types,w.T=s,fc(e,!1,t,n);try{var c=i(),l=w.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?dc(e,t,Ka(c,r),jd(e)):dc(e,t,r,jd(e))}catch(n){dc(e,t,{then:function(){},status:`rejected`,reason:n},jd())}finally{T.p=a,o!==null&&s.types!==null&&(o.types=s.types),w.T=o}}function tc(){}function nc(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=rc(e).queue;ec(e,a,t,De,n===null?tc:function(){return ic(e),n(r)})}function rc(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:De,baseState:De,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ps,lastRenderedState:De},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ps,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ic(e){var t=rc(e);t.next===null&&(t=e.alternate.memoizedState),dc(e,t.next.queue,{},jd())}function ac(){return ka(sh)}function oc(){return cs().memoizedState}function sc(){return cs().memoizedState}function cc(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=jd();e=yo(n);var r=bo(t,e,n);r!==null&&(Pd(r,t,n),xo(r,t,n)),t={cache:Fa()},e.payload=t;return}t=t.return}}function lc(e,t,n){var r=jd();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},pc(e)?mc(t,n):(n=Ni(e,t,n,r),n!==null&&(Pd(n,e,r),hc(n,t,r)))}function uc(e,t,n){dc(e,t,n,jd())}function dc(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(pc(e))mc(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,j(s,o))return Mi(e,t,i,0),K===null&&ji(),!1}catch{}if(n=Ni(e,t,i,r),n!==null)return Pd(n,e,r),hc(n,t,r),!0}return!1}function fc(e,t,n,r){if(r={lane:2,revertLane:Pf(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},pc(e)){if(t)throw Error(i(479))}else t=Ni(e,n,r,2),t!==null&&Pd(t,e,2)}function pc(e){var t=e.alternate;return e===B||t!==null&&t===B}function mc(e,t){Ko=Go=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function hc(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Et(e,n)}}var gc={readContext:ka,use:ds,useCallback:Qo,useContext:Qo,useEffect:Qo,useImperativeHandle:Qo,useLayoutEffect:Qo,useInsertionEffect:Qo,useMemo:Qo,useReducer:Qo,useRef:Qo,useState:Qo,useDebugValue:Qo,useDeferredValue:Qo,useTransition:Qo,useSyncExternalStore:Qo,useId:Qo,useHostTransitionStatus:Qo,useFormState:Qo,useActionState:Qo,useOptimistic:Qo,useMemoCache:Qo,useCacheRefresh:Qo,useEffectEvent:Qo},_c={readContext:ka,use:ds,useCallback:function(e,t){return ss().memoizedState=[e,t===void 0?null:t],e},useContext:ka,useEffect:Vs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),zs(4194308,4,qs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return zs(4194308,4,e,t)},useInsertionEffect:function(e,t){zs(4,2,e,t)},useMemo:function(e,t){var n=ss();t=t===void 0?null:t;var r=e();if(qo){lt(!0);try{e()}finally{lt(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ss();if(n!==void 0){var i=n(t);if(qo){lt(!0);try{n(t)}finally{lt(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=lc.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=ss();return e={current:e},t.memoizedState=e},useState:function(e){e=Cs(e);var t=e.queue,n=uc.bind(null,B,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ys,useDeferredValue:function(e,t){return Qs(ss(),e,t)},useTransition:function(){var e=Cs(!1);return e=ec.bind(null,B,e.queue,!0,!1),ss().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=B,a=ss();if(P){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||vs(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,Vs(bs.bind(null,r,o,e),[e]),r.flags|=2048,Ls(9,{destroy:void 0},ys.bind(null,r,o,n,t),null),n},useId:function(){var e=ss(),t=K.identifierPrefix;if(P){var n=ia,r=ra;n=(r&~(1<<32-ut(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Jo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[Nt]=t,o[Pt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(np(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&hl(t)}}return H(t),t.subtreeFlags&=-33554433,gl(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&hl(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=Pe.current,ga(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=ua,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[Nt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||ep(e.nodeValue,n)),e||pa(t,!0)}else e=lp(e).createTextNode(r),e[Nt]=t,t.stateNode=e}return H(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ga(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[Nt]=t}else _a(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;H(t),e=!1}else n=va(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(z(t),t):(z(t),null);if(t.flags&128)throw Error(i(558))}return H(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=ga(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[Nt]=t}else _a(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;H(t),a=!1}else a=va(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(z(t),t):(z(t),null)}return z(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),vl(t,t.updateQueue),H(t),null);case 4:return Le(),e===null&&Wf(t.stateNode.containerInfo),t.flags|=67108864,H(t),null;case 10:return wa(t.type),H(t),null;case 19:if(Vo(t),r=t.memoizedState,r===null)return H(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)yl(r,!1);else{if(od!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=Ho(e),o!==null){for(t.flags|=128,yl(r,!1),e=o.updateQueue,t.updateQueue=e,vl(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)Hi(n,e),n=n.sibling;return Bo(t,zo.current&1|2),P&&aa(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Qe()>_d&&(t.flags|=128,a=!0,yl(r,!1),t.lanes=4194304)}}else{if(!a){if(e=Ho(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,vl(t,e),yl(r,!0),r.tail===null&&r.tailMode!==`collapsed`&&r.tailMode!==`visible`&&!o.alternate&&!P)return H(t),null}else 2*Qe()-r.renderingStartTime>_d&&n!==536870912&&(t.flags|=128,a=!0,yl(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}if(r.tail!==null){e=r.tail;a:{for(n=e;n!==null;){if(n.alternate!==null){n=!1;break a}n=n.sibling}n=!0}return r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Qe(),e.sibling=null,o=zo.current,o=a?o&1|2:o&1,r.tailMode===`visible`||r.tailMode===`collapsed`||!n||P?Bo(t,o):(n=o,E(No,t),E(zo,n),Po===null&&(Po=t)),P&&aa(t,r.treeForkCount),e}return H(t),null;case 22:case 23:return z(t),Mo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(H(t),t.subtreeFlags&6&&(t.flags|=8192)):H(t),n=t.updateQueue,n!==null&&vl(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&je(Ja),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),wa(L),H(t),null;case 25:return null;case 30:return t.flags|=33554432,H(t),null}throw Error(i(156,t.tag))}function xl(e,t){switch(ca(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wa(L),Le(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ze(t),null;case 31:if(t.memoizedState!==null){if(z(t),t.alternate===null)throw Error(i(340));_a()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(z(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));_a()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Vo(t),e=t.flags,e&65536?(t.flags=e&-65537|128,e=t.memoizedState,e!==null&&(e.rendering=null,e.tail=null),t.flags|=4,t):null;case 4:return Le(),null;case 10:return wa(t.type),null;case 22:case 23:return z(t),Mo(),e!==null&&je(Ja),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return wa(L),null;case 25:return null;default:return null}}function Sl(e,t){switch(ca(t),t.tag){case 3:wa(L),Le();break;case 26:case 27:case 5:ze(t);break;case 4:Le();break;case 31:t.memoizedState!==null&&z(t);break;case 13:z(t);break;case 19:Vo(t);break;case 10:wa(t.type);break;case 22:case 23:z(t),Mo(),e!==null&&je(Ja);break;case 24:wa(L)}}function Cl(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function wl(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Tl(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Do(t,n)}catch(t){Z(e,e.return,t)}}}function El(e,t,n){n.props=wc(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Dl(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:var i=e.stateNode,a=wi(e.memoizedProps,i);(i.ref===null||i.ref.name!==a)&&(i.ref=Pp(a)),r=i.ref;break;case 7:if(e.stateNode===null){var o=new Fp(e);h(e.child,!1,Qp,o,void 0,void 0),e.stateNode=o}r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function Ol(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}}function kl(e,t){if((e.tag===5||e.tag===27||e.tag===6)&&e.alternate===null&&t!==null)for(var n=0;n title`))),np(r,t,n),r[Nt]=e,qt(r),t=r;break a;case`link`:if(o=Gm(`link`,`href`,a).get(t+(n.href||``))){for(s=0;sg&&(o=g,g=h,h=o);var _=Qr(s,h),v=Qr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,w.T=null,n=wd,wd=null;var o=bd,s=Sd;if(X=0,xd=bd=null,Sd=0,G&6)throw Error(i(331));var c=G;if(G|=4,Xu(o.current),Hu(o,o.current,s,n),G=c,Df(0,!1),ct&&typeof ct.onPostCommitFiberRoot==`function`)try{ct.onPostCommitFiberRoot(st,o)}catch{}return!0}finally{T.p=a,w.T=r,uf(e,t)}}function pf(e,t,n){t=Yi(n,t),t=Ac(e.stateNode,t,2),e=bo(e,t,2),e!==null&&(wt(e,2),Ef(e))}function Z(e,t,n){if(e.tag===3)pf(e,e,n);else for(;t!==null;){if(t.tag===3){pf(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(yd===null||!yd.has(r))){e=Yi(n,e),n=jc(2),r=bo(t,n,2),r!==null&&(Mc(n,r,t,e),wt(r,2),Ef(r));break}}t=t.return}}function mf(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new ed;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(id=!0,i.add(n),e=hf.bind(null,e,t,n),t.then(e,e))}function hf(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(od===4||od===3&&(J&62914560)===J&&300>Qe()-hd?G&2?ld|=n:Vd(e,0):ld|=n,dd===J&&(dd=0)),Ef(e)}function gf(e,t){t===0&&(t=St()),e=Pi(e,t),e!==null&&(wt(e,t),Ef(e))}function _f(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),gf(e,n)}function vf(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),gf(e,n)}function yf(e,t){return Je(e,t)}var bf=null,xf=null,Sf=!1,Cf=!1,wf=!1,Tf=0;function Ef(e){e!==xf&&e.next===null&&(xf===null?bf=xf=e:xf=xf.next=e),Cf=!0,Sf||(Sf=!0,Nf())}function Df(e,t){if(!wf&&Cf){wf=!0;do for(var n=!1,r=bf;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-ut(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,Mf(r,a))}else a=J,a=vt(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||yt(r,a)||(n=!0,Mf(r,a))}r=r.next}while(n);wf=!1}}function Of(){kf()}function kf(){Cf=Sf=!1;var e=0;Tf!==0&&hp()&&(e=Tf);for(var t=Qe(),n=null,r=bf;r!==null;){var i=r.next,a=Af(r,t);a===0?(r.next=null,n===null?bf=i:n.next=i,i===null&&(xf=n)):(n=r,(e!==0||a&3)&&(Cf=!0)),r=i}X!==0&&X!==5||Df(e,!1),Tf!==0&&(Tf=0)}function Af(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&ap(d)&&(c=c.responseEnd,o+=u*(c$m){s.length=o;break}f=new Promise(jp.bind(f)),s.push(f)}}}if(0`u`?null:document;function Tm(e,t,n){var r=wm;if(r&&typeof t==`string`&&t){var i=mn(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),ym.has(i)||(ym.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),np(t,`link`,e),qt(t),r.head.appendChild(t)))}}function Em(e){xm.D(e),Tm(`dns-prefetch`,e,null)}function Dm(e,t){xm.C(e,t),Tm(`preconnect`,e,t)}function Om(e,t,n){xm.L(e,t,n);var r=wm;if(r&&e&&t){var i=`link[rel="preload"][as="`+mn(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+mn(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+mn(n.imageSizes)+`"]`)):i+=`[href="`+mn(e)+`"]`;var a=i;switch(t){case`style`:a=Pm(e);break;case`script`:a=Rm(e)}if(!(vm.has(a)||(e=C({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vm.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Fm(a))||t===`script`&&r.querySelector(zm(a))))){var o=r.createElement(`link`);np(o,`link`,e),t===`style`&&(o[Vt]=!0,o.onload=o.onerror=function(){Jt(o)}),qt(o),r.head.appendChild(o)}}}function km(e,t){xm.m(e,t);var n=wm;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+mn(r)+`"][href="`+mn(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rm(e)}if(!vm.has(a)&&(e=C({rel:`modulepreload`,href:e},t),vm.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zm(a)))return}r=n.createElement(`link`),np(r,`link`,e),qt(r),n.head.appendChild(r)}}}function Am(e,t,n){xm.S(e,t,n);var r=wm;if(r&&e){var i=Kt(r).hoistableStyles,a=Pm(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Fm(a)))s.loading=5;else{e=C({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vm.get(a))&&Hm(e,n);var c=o=r.createElement(`link`);qt(c),np(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vm(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jm(e,t){xm.X(e,t);var n=wm;if(n&&e){var r=Kt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=C({src:e,async:!0},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),qt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mm(e,t){xm.M(e,t);var n=wm;if(n&&e){var r=Kt(n).hoistableScripts,i=Rm(e),a=r.get(i);a||(a=n.querySelector(zm(i)),a||(e=C({src:e,async:!0,type:`module`},t),(t=vm.get(i))&&Um(e,t),a=n.createElement(`script`),qt(a),np(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nm(e,t,n,r){var a=(a=Pe.current)?bm(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(n=Pm(n.href),t=Kt(a).hoistableStyles,r=t.get(n),r||(r={type:`style`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pm(n.href);var o=Kt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Fm(e)))?o._p||(s.instance=o,s.state.loading=5):(o=vm.get(e),o||(o={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vm.set(e,o)),Lm(a,e,o,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(n=Rm(n),t=Kt(a).hoistableScripts,r=t.get(n),r||(r={type:`script`,instance:null,count:0,state:null},t.set(n,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pm(e){return`href="`+mn(e)+`"`}function Fm(e){return`link[rel="stylesheet"][`+e+`]`}function Im(e){return C({},e,{"data-precedence":e.precedence,precedence:null})}function Lm(e,t,n,r){if(t=e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)){if(!0!==t[Vt]){r.loading=1;return}}else t=e.createElement(`link`),t[Vt]=!0,t.onload=t.onerror=Jt.bind(null,t),np(t,`link`,n),qt(t),e.head.appendChild(t);r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2})}function Rm(e){return`[src="`+mn(e)+`"]`}function zm(e){return`script[async]`+e}function Bm(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+mn(n.href)+`"]`);if(r)return t.instance=r,qt(r),r;var a=C({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),qt(r),np(r,`style`,a),Vm(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pm(n.href);var o=e.querySelector(Fm(a));if(o)return t.state.loading|=4,t.instance=o,qt(o),o;r=Im(n),(a=vm.get(a))&&Hm(r,a),o=(e.ownerDocument||e).createElement(`link`),qt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),np(o,`link`,r),t.state.loading|=4,Vm(o,n.precedence,e),t.instance=o;case`script`:return o=Rm(n.src),(a=e.querySelector(zm(o)))?(t.instance=a,qt(a),a):(r=n,(a=vm.get(o))&&(r=C({},n),Um(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),qt(a),np(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vm(r,n.precedence,e));return t.instance}function Vm(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qm(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jm(e,t){return e===`img`&&t.src!=null&&t.src!==``&&t.onLoad==null&&t.loading!==`lazy`}function Ym(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Xm(e){return(e.width||100)*(e.height||100)*(typeof devicePixelRatio==`number`?devicePixelRatio:1)*.25}function Zm(e,t){typeof t.decode==`function`&&(e.imgCount++,t.complete||(e.imgBytes+=Xm(t),e.suspenseyImages.push(t)),e=rh.bind(e),t.decode().then(e,e))}function Qm(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pm(r.href),a=t.querySelector(Fm(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=nh.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,qt(a);return}a=t.ownerDocument||t,r=Im(r),(i=vm.get(i))&&Hm(r,i),a=a.createElement(`link`),qt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),np(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=nh.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var $m=0;function eh(e,t){return e.stylesheets&&e.count===0&&ah(e,e.stylesheets),0$m?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function th(e){if(e.count===0&&(e.imgCount===0||!e.waitingForImages)){if(e.stylesheets)ah(e,e.stylesheets);else if(e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}}function nh(){this.count--,th(this)}function rh(){this.imgCount--,th(this)}var ih=null;function ah(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,ih=new Map,t.forEach(oh,e),ih=null,nh.call(e))}function oh(e,t){if(!(t.state.loading&4)){var n=ih.get(e);if(n)var r=n.get(null);else{n=new Map,ih.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<`u`&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE==`function`)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),v=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),y=e=>{let t=v(e);return t.charAt(0).toUpperCase()+t.slice(1)},b=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),ee=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0},te={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},x=c(f()),ne=(0,x.forwardRef)(({color:e=`currentColor`,size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>(0,x.createElement)(`svg`,{ref:c,...te,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:b(`lucide`,i),...!a&&!ee(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,x.createElement)(e,t)),...Array.isArray(a)?a:[a]])),S=(e,t)=>{let n=(0,x.forwardRef)(({className:n,...r},i)=>(0,x.createElement)(ne,{ref:i,iconNode:t,className:b(`lucide-${_(y(e))}`,`lucide-${e}`,n),...r}));return n.displayName=y(e),n},re=S(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),C=S(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),ie=S(`bookmark`,[[`path`,{d:`m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z`,key:`1fy3hk`}]]),ae=S(`calendar`,[[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`,key:`1hopcy`}],[`path`,{d:`M3 10h18`,key:`8toen8`}]]),oe=S(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),se=S(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),ce=S(`circle-check-big`,[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`,key:`yps3ct`}],[`path`,{d:`m9 11 3 3L22 4`,key:`1pflzl`}]]),le=S(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),ue=S(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),de=S(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),fe=S(`earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),pe=S(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),me=S(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),he=S(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ge=S(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),_e=S(`hard-drive`,[[`line`,{x1:`22`,x2:`2`,y1:`12`,y2:`12`,key:`1y58io`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}],[`line`,{x1:`6`,x2:`6.01`,y1:`16`,y2:`16`,key:`sgf278`}],[`line`,{x1:`10`,x2:`10.01`,y1:`16`,y2:`16`,key:`1l4acy`}]]),ve=S(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),ye=S(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),be=S(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),xe=S(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Se=S(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),Ce=S(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),we=S(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Te=S(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Ee=S(`scan-face`,[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M8 14s1.5 2 4 2 4-2 4-2`,key:`1y1vjs`}],[`path`,{d:`M9 9h.01`,key:`1q5me6`}],[`path`,{d:`M15 9h.01`,key:`x1ddxp`}]]),w=S(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),T=S(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),De=S(`shield`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]),Oe=S(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),ke=S(`sticky-note`,[[`path`,{d:`M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z`,key:`qazsjp`}],[`path`,{d:`M15 3v4a2 2 0 0 0 2 2h4`,key:`40519r`}]]),Ae=S(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),je=S(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),E=S(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Me=S(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),Ne=g(),Pe=Symbol.for(`@supabase/supabase-js.traceContextExtractor`);function Fe(){return globalThis[Pe]}function Ie(e,t,n,r){function i(e){return e instanceof n?e:new n(function(t){t(e)})}return new(n||=Promise)(function(n,a){function o(e){try{c(r.next(e))}catch(e){a(e)}}function s(e){try{c(r.throw(e))}catch(e){a(e)}}function c(e){e.done?n(e.value):i(e.value).then(o,s)}c((r=r.apply(e,t||[])).next())})}var Le=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),Re=class extends Error{constructor(e,t=`FunctionsError`,n){super(e),this.name=t,this.context=n}toJSON(){return{name:this.name,message:this.message,context:this.context}}},ze=class extends Re{constructor(e){super(`Failed to send a request to the Edge Function`,`FunctionsFetchError`,e)}},Be=class extends Re{constructor(e){super(`Relay Error invoking the Edge Function`,`FunctionsRelayError`,e)}},Ve=class extends Re{constructor(e){super(`Edge Function returned a non-2xx status code`,`FunctionsHttpError`,e)}},He;(function(e){e.Any=`any`,e.ApNortheast1=`ap-northeast-1`,e.ApNortheast2=`ap-northeast-2`,e.ApSouth1=`ap-south-1`,e.ApSoutheast1=`ap-southeast-1`,e.ApSoutheast2=`ap-southeast-2`,e.CaCentral1=`ca-central-1`,e.EuCentral1=`eu-central-1`,e.EuWest1=`eu-west-1`,e.EuWest2=`eu-west-2`,e.EuWest3=`eu-west-3`,e.SaEast1=`sa-east-1`,e.UsEast1=`us-east-1`,e.UsWest1=`us-west-1`,e.UsWest2=`us-west-2`})(He||={});var Ue=class{constructor(e,{headers:t={},customFetch:n,region:r=He.Any}={}){this.url=e,this.headers=t,this.region=r,this.fetch=Le(n)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return Ie(this,arguments,void 0,function*(e,t={}){var n;let r,i,a;try{let{headers:n,method:o,body:s,signal:c,timeout:l}=t,u={},{region:d}=t;d||=this.region;let f=new URL(`${this.url}/${e}`);d&&d!==`any`&&(u[`x-region`]=d,f.searchParams.set(`forceFunctionRegion`,d));let p,m=!!n&&Object.keys(n).some(e=>e.toLowerCase()===`content-type`);s&&!m?typeof Blob<`u`&&s instanceof Blob||s instanceof ArrayBuffer?(u[`Content-Type`]=s.type||`application/octet-stream`,p=s):typeof s==`string`?(u[`Content-Type`]=`text/plain`,p=s):typeof FormData<`u`&&s instanceof FormData?p=s:(u[`Content-Type`]=`application/json`,p=JSON.stringify(s)):p=s&&typeof s!=`string`&&!(typeof Blob<`u`&&s instanceof Blob)&&!(s instanceof ArrayBuffer)&&!(typeof FormData<`u`&&s instanceof FormData)?JSON.stringify(s):s;let h=c;l&&(i=new AbortController,r=setTimeout(()=>i.abort(),l),c?(h=i.signal,a=()=>i.abort(),c.addEventListener(`abort`,a)):h=i.signal);let g=yield this.fetch(f.toString(),{method:o||`POST`,headers:Object.assign(Object.assign(Object.assign({},u),this.headers),n),body:p,signal:h}).catch(e=>{throw new ze(e)}),_=g.headers.get(`x-relay-error`);if(_&&_===`true`)throw new Be(g);if(!g.ok)throw new Ve(g);let v=(g.headers.get(`Content-Type`)??`text/plain`).split(`;`)[0].trim().toLowerCase(),y;return y=v===`application/json`?yield g.json():v===`application/octet-stream`||v===`application/pdf`?yield g.blob():v===`text/event-stream`?g:v===`multipart/form-data`?yield g.formData():yield g.text(),{data:y,error:null,response:g}}catch(e){return{data:null,error:e,response:e instanceof Ve||e instanceof Be?e.context:void 0}}finally{r&&clearTimeout(r),a&&((n=t.signal)==null||n.removeEventListener(`abort`,a))}})}},We=class extends Error{constructor(e){super(e.message),this.name=`PostgrestError`,this.details=e.details,this.hint=e.hint,this.code=e.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}},Ge=3,Ke=e=>Math.min(1e3*2**e,3e4),qe=[520,503],Je=[`GET`,`HEAD`,`OPTIONS`];function Ye(e){"@babel/helpers - typeof";return Ye=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},Ye(e)}function Xe(e,t){if(Ye(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Ye(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Ze(e){var t=Xe(e,`string`);return Ye(t)==`symbol`?t:t+``}function Qe(e,t,n){return(t=Ze(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function et(e){for(var t=1;t{if(t?.aborted){n();return}let r=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);function i(){clearTimeout(r),n()}t?.addEventListener(`abort`,i)})}function nt(e,t,n,r){return!(!r||n>=Ge||!Je.includes(e)||!qe.includes(t))}async function rt(e,t,n,r){let i=0;for(;;){let a=et({},n.headers);i>0&&(a[`X-Retry-Count`]=String(i));let o;try{o=await e(t,{method:n.method,headers:a,body:n.body,signal:n.signal})}catch(e){if(e?.name===`AbortError`||e?.code===`ABORT_ERR`||e?.name===`TimeoutError`&&n.signal?.aborted||!Je.includes(n.method))throw e;if(r&&i{let e={};n.headers.forEach((t,n)=>{e[n]=t});let t=await rt(r,n.url.toString(),{method:n.method,headers:e,body:JSON.stringify(n.body,(e,t)=>typeof t==`bigint`?t.toString():t),signal:n.signal},n.retryEnabled);return await n.processResponse(t)})();return this.shouldThrowOnError||(i=i.catch(e=>{let t=``,n=``,r=``,i=e?.cause;if(i){let n=i?.message??``,r=i?.code??``;t=`${e?.name??`FetchError`}: ${e?.message}`,t+=`\n\nCaused by: ${i?.name??`Error`}: ${n}`,r&&(t+=` (${r})`),i?.stack&&(t+=`\n${i.stack}`)}else t=e?.stack??``;let a=this.url.toString().length;return e?.name===`AbortError`||e?.code===`ABORT_ERR`?(r=``,n=`Request was aborted (timeout or manual cancellation)`,a>this.urlLengthLimit&&(n+=`. 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.`)):(i?.name===`HeadersOverflowError`||i?.code===`UND_ERR_HEADERS_OVERFLOW`)&&(r=``,n=`HTTP headers exceeded server limits (typically 16KB)`,a>this.urlLengthLimit&&(n+=`. 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:`${e?.name??`FetchError`}: ${e?.message}`,details:t,hint:n,code:r},data:null,count:null,status:0,statusText:``}})),i.then(e,t)}async processResponse(e){var t=this;let n=null,r=null,i=null,a=e.status,o=e.statusText;if(e.ok){if(t.method!==`HEAD`){let i=await e.text();if(i!==``){if(t.headers.get(`Accept`)===`text/csv`)r=i;else if(t.headers.get(`Accept`)&&t.headers.get(`Accept`)?.includes(`application/vnd.pgrst.plan+text`))r=i;else try{r=JSON.parse(i)}catch{if(n={message:i},r=null,t.shouldThrowOnError)throw new We({message:i,details:``,hint:``,code:``})}}}let s=t.headers.get(`Prefer`)?.match(/count=(exact|planned|estimated)/),c=e.headers.get(`content-range`)?.split(`/`);if(s&&c&&c.length>1&&(i=parseInt(c[1])),t.isMaybeSingle&&Array.isArray(r)){if(r.length>1){if(n={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,i=null,a=406,o=`Not Acceptable`,t.shouldThrowOnError)throw new We(et(et({},n),{},{hint:n.hint??``}))}else r=r.length===1?r[0]:null}}else{let i=await e.text();try{n=JSON.parse(i),Array.isArray(n)&&e.status===404&&(r=[],n=null,a=200,o=`OK`)}catch{e.status===404&&i===``?(a=204,o=`No Content`):n={message:i}}if(n&&t.shouldThrowOnError)throw new We(n)}return{success:n===null,error:n,data:r,count:i,status:a,statusText:o}}returns(){return this}overrideTypes(){return this}},at=class extends it{throwOnError(){return super.throwOnError()}select(e){let t=!1,n=(e??`*`).split(``).map(e=>/\s/.test(e)&&!t?``:(e===`"`&&(t=!t),e)).join(``);return this.url.searchParams.set(`select`,n),this.headers.append(`Prefer`,`return=representation`),this}order(e,{ascending:t=!0,nullsFirst:n,foreignTable:r,referencedTable:i=r}={}){let a=i?`${i}.order`:`order`,o=this.url.searchParams.get(a);return this.url.searchParams.set(a,`${o?`${o},`:``}${e}.${t?`asc`:`desc`}${n===void 0?``:n?`.nullsfirst`:`.nullslast`}`),this}limit(e,{foreignTable:t,referencedTable:n=t}={}){let r=n===void 0?`limit`:`${n}.limit`;return this.url.searchParams.set(r,`${e}`),this}range(e,t,{foreignTable:n,referencedTable:r=n}={}){let i=r===void 0?`offset`:`${r}.offset`,a=r===void 0?`limit`:`${r}.limit`;return this.url.searchParams.set(i,`${e}`),this.url.searchParams.set(a,`${t-e+1}`),this}abortSignal(e){return this.signal=e,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:e=!1,verbose:t=!1,settings:n=!1,buffers:r=!1,wal:i=!1,format:a=`text`}={}){let o=[e?`analyze`:null,t?`verbose`:null,n?`settings`:null,r?`buffers`:null,i?`wal`:null].filter(Boolean).join(`|`),s=this.headers.get(`Accept`)??`application/json`;return this.headers.set(`Accept`,`application/vnd.pgrst.plan+${a}; for="${s}"; options=${o};`),this}rollback(){return this.headers.append(`Prefer`,`tx=rollback`),this}returns(){return this}maxAffected(e){return this.headers.append(`Prefer`,`handling=strict`),this.headers.append(`Prefer`,`max-affected=${e}`),this}},ot=RegExp(`[,()]`),st=class extends at{throwOnError(){return super.throwOnError()}eq(e,t){return this.url.searchParams.append(e,`eq.${t}`),this}neq(e,t){return this.url.searchParams.append(e,`neq.${t}`),this}gt(e,t){return this.url.searchParams.append(e,`gt.${t}`),this}gte(e,t){return this.url.searchParams.append(e,`gte.${t}`),this}lt(e,t){return this.url.searchParams.append(e,`lt.${t}`),this}lte(e,t){return this.url.searchParams.append(e,`lte.${t}`),this}like(e,t){return this.url.searchParams.append(e,`like.${t}`),this}likeAllOf(e,t){return this.url.searchParams.append(e,`like(all).{${t.join(`,`)}}`),this}likeAnyOf(e,t){return this.url.searchParams.append(e,`like(any).{${t.join(`,`)}}`),this}ilike(e,t){return this.url.searchParams.append(e,`ilike.${t}`),this}ilikeAllOf(e,t){return this.url.searchParams.append(e,`ilike(all).{${t.join(`,`)}}`),this}ilikeAnyOf(e,t){return this.url.searchParams.append(e,`ilike(any).{${t.join(`,`)}}`),this}regexMatch(e,t){return this.url.searchParams.append(e,`match.${t}`),this}regexIMatch(e,t){return this.url.searchParams.append(e,`imatch.${t}`),this}is(e,t){return this.url.searchParams.append(e,`is.${t}`),this}isDistinct(e,t){return this.url.searchParams.append(e,`isdistinct.${t}`),this}in(e,t){let n=Array.from(new Set(t)).map(e=>typeof e==`string`&&ot.test(e)?`"${e}"`:`${e}`).join(`,`);return this.url.searchParams.append(e,`in.(${n})`),this}notIn(e,t){let n=Array.from(new Set(t)).map(e=>typeof e==`string`&&ot.test(e)?`"${e}"`:`${e}`).join(`,`);return this.url.searchParams.append(e,`not.in.(${n})`),this}contains(e,t){return typeof t==`string`?this.url.searchParams.append(e,`cs.${t}`):Array.isArray(t)?this.url.searchParams.append(e,`cs.{${t.join(`,`)}}`):this.url.searchParams.append(e,`cs.${JSON.stringify(t)}`),this}containedBy(e,t){return typeof t==`string`?this.url.searchParams.append(e,`cd.${t}`):Array.isArray(t)?this.url.searchParams.append(e,`cd.{${t.join(`,`)}}`):this.url.searchParams.append(e,`cd.${JSON.stringify(t)}`),this}rangeGt(e,t){return this.url.searchParams.append(e,`sr.${t}`),this}rangeGte(e,t){return this.url.searchParams.append(e,`nxl.${t}`),this}rangeLt(e,t){return this.url.searchParams.append(e,`sl.${t}`),this}rangeLte(e,t){return this.url.searchParams.append(e,`nxr.${t}`),this}rangeAdjacent(e,t){return this.url.searchParams.append(e,`adj.${t}`),this}overlaps(e,t){return typeof t==`string`?this.url.searchParams.append(e,`ov.${t}`):this.url.searchParams.append(e,`ov.{${t.join(`,`)}}`),this}textSearch(e,t,{config:n,type:r}={}){let i=``;r===`plain`?i=`pl`:r===`phrase`?i=`ph`:r===`websearch`&&(i=`w`);let a=n===void 0?``:`(${n})`;return this.url.searchParams.append(e,`${i}fts${a}.${t}`),this}match(e){return Object.entries(e).filter(([e,t])=>t!==void 0).forEach(([e,t])=>{this.url.searchParams.append(e,`eq.${t}`)}),this}not(e,t,n){return this.url.searchParams.append(e,`not.${t}.${n}`),this}or(e,{foreignTable:t,referencedTable:n=t}={}){let r=n?`${n}.or`:`or`;return this.url.searchParams.append(r,`(${e})`),this}filter(e,t,n){return this.url.searchParams.append(e,`${t}.${n}`),this}},ct=class{constructor(e,{headers:t={},schema:n,fetch:r,urlLengthLimit:i=8e3,retry:a}){this.url=e,this.headers=new Headers(t),this.schema=n,this.fetch=r,this.urlLengthLimit=i,this.retry=a}cloneRequestState(){return{url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(e,t){let{head:n=!1,count:r}=t??{},i=n?`HEAD`:`GET`,a=!1,o=(e??`*`).split(``).map(e=>/\s/.test(e)&&!a?``:(e===`"`&&(a=!a),e)).join(``),{url:s,headers:c}=this.cloneRequestState();return s.searchParams.set(`select`,o),r&&c.append(`Prefer`,`count=${r}`),new st({method:i,url:s,headers:c,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(e,{count:t,defaultToNull:n=!0}={}){let{url:r,headers:i}=this.cloneRequestState();if(t&&i.append(`Prefer`,`count=${t}`),n||i.append(`Prefer`,`missing=default`),Array.isArray(e)){let t=e.reduce((e,t)=>e.concat(Object.keys(t)),[]);if(t.length>0){let e=[...new Set(t)].map(e=>`"${e}"`);r.searchParams.set(`columns`,e.join(`,`))}}return new st({method:`POST`,url:r,headers:i,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(e,{onConflict:t,ignoreDuplicates:n=!1,count:r,defaultToNull:i=!0}={}){let{url:a,headers:o}=this.cloneRequestState();if(o.append(`Prefer`,`resolution=${n?`ignore`:`merge`}-duplicates`),t!==void 0&&a.searchParams.set(`on_conflict`,t),r&&o.append(`Prefer`,`count=${r}`),i||o.append(`Prefer`,`missing=default`),Array.isArray(e)){let t=e.reduce((e,t)=>e.concat(Object.keys(t)),[]);if(t.length>0){let e=[...new Set(t)].map(e=>`"${e}"`);a.searchParams.set(`columns`,e.join(`,`))}}return new st({method:`POST`,url:a,headers:o,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(e,{count:t}={}){let{url:n,headers:r}=this.cloneRequestState();return t&&r.append(`Prefer`,`count=${t}`),new st({method:`PATCH`,url:n,headers:r,schema:this.schema,body:e,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:e}={}){let{url:t,headers:n}=this.cloneRequestState();return e&&n.append(`Prefer`,`count=${e}`),new st({method:`DELETE`,url:t,headers:n,schema:this.schema,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};function lt(e,t){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return new We({message:String(t.message??e),details:t.details??``,hint:t.hint??``,code:t.code??``})}catch{}return new We({message:e||t,details:``,hint:``,code:``})}function ut(e,t,n){let r=e;return{success:!1,error:new We({message:`${r?.name??`FetchError`}: ${r?.message}`,details:``,hint:``,code:``}),data:null,count:null,status:t,statusText:n}}function dt(e,t){return t===void 0||t<=0?e:(n,r)=>{let i=new AbortController,a=setTimeout(()=>i.abort(),t),o=r?.signal;if(o){if(o.aborted)return clearTimeout(a),e(n,r);let t=()=>{clearTimeout(a),i.abort()};return o.addEventListener(`abort`,t,{once:!0}),e(n,et(et({},r),{},{signal:i.signal})).finally(()=>{clearTimeout(a),o.removeEventListener(`abort`,t)})}return e(n,et(et({},r),{},{signal:i.signal})).finally(()=>clearTimeout(a))}}var ft=class e{constructor(e,{headers:t={},schema:n,fetch:r,timeout:i,urlLengthLimit:a=8e3,retry:o,wrapFetch:s}={}){this.url=e,this.headers=new Headers(t),this.schemaName=n,this.urlLengthLimit=a,this.timeout=i,this.wrapFetch=s,this.baseFetch=r??globalThis.fetch,this.fetch=this.baseFetch?this.decorateFetch(this.baseFetch):void 0,this.retry=o}decorateFetch(e){return dt(this.wrapFetch?this.wrapFetch(e):e,this.timeout)}from(e,t){if(!e||typeof e!=`string`||e.trim()===``)throw Error(`Invalid relation name: relation must be a non-empty string.`);return new ct(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:t?.fetch?this.decorateFetch(t.fetch):this.fetch,urlLengthLimit:t?.urlLengthLimit??this.urlLengthLimit,retry:t?.retry??this.retry})}schema(t){return new e(this.url,{headers:this.headers,schema:t,fetch:this.baseFetch,timeout:this.timeout,wrapFetch:this.wrapFetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}async getOpenApiSpec(){var e=this;let t=new Headers(e.headers);t.set(`Accept`,`application/openapi+json`),e.schemaName&&t.set(`Accept-Profile`,e.schemaName);let n={};t.forEach((e,t)=>{n[t]=e});let r=e.fetch??globalThis.fetch,i;try{i=await rt(r,`${e.url}/`,{method:`GET`,headers:n},e.retry??!0)}catch(e){return ut(e,0,``)}let a;try{a=await i.text()}catch(e){return ut(e,i.status,i.statusText)}if(i.ok)try{return{success:!0,error:null,data:JSON.parse(a),count:null,status:i.status,statusText:i.statusText}}catch{}return{success:!1,error:lt(a,i.statusText),data:null,count:null,status:i.status,statusText:i.statusText}}rpc(e,t={},{head:n=!1,get:r=!1,count:i}={}){let a,o=new URL(`${this.url}/rpc/${e}`),s,c=e=>typeof e==`object`&&!!e&&(!Array.isArray(e)||e.some(c)),l=n&&Object.values(t).some(c);l?(a=`POST`,s=t):n||r?(a=n?`HEAD`:`GET`,Object.entries(t).filter(([e,t])=>t!==void 0).map(([e,t])=>[e,Array.isArray(t)?`{${t.join(`,`)}}`:`${t}`]).forEach(([e,t])=>{o.searchParams.append(e,t)})):(a=`POST`,s=t);let u=new Headers(this.headers);return l?u.set(`Prefer`,i?`count=${i},return=minimal`:`return=minimal`):i&&u.set(`Prefer`,`count=${i}`),new st({method:a,url:o,headers:u,schema:this.schemaName,body:s,fetch:this.fetch??fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}},pt=class{constructor(){}static detectEnvironment(){if(typeof WebSocket<`u`)return{type:`native`,wsConstructor:WebSocket};let e=globalThis;if(typeof globalThis<`u`&&e.WebSocket!==void 0)return{type:`native`,wsConstructor:e.WebSocket};let t=typeof global<`u`?global:void 0;if(t&&t.WebSocket!==void 0)return{type:`native`,wsConstructor:t.WebSocket};if(typeof globalThis<`u`&&e.WebSocketPair!==void 0&&globalThis.WebSocket===void 0)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`&&e.EdgeRuntime||typeof navigator<`u`&&navigator.userAgent?.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.`};let n=globalThis.process;if(n){let e=n.versions;if(e&&e.node)return{type:`unsupported`,error:`Node.js detected but native WebSocket not found.`,workaround:`Ensure you are running Node.js 22+ or provide a WebSocket implementation via the transport option.`}}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(){let e=this.detectEnvironment();if(e.wsConstructor)return e.wsConstructor;let t=e.error||`WebSocket not supported in this environment.`;throw e.workaround&&(t+=`\n\nSuggested solution: ${e.workaround}`),Error(t)}static isWebSocketSupported(){try{return this.detectEnvironment().type===`native`}catch{return!1}}},mt=`realtime-js/2.119.0`,ht=`1.0.0`,gt=`2.0.0`,_t=gt,vt=1e4,yt=15e3,bt=1e4,xt={closed:`closed`,errored:`errored`,joined:`joined`,joining:`joining`,leaving:`leaving`},St={close:`phx_close`,error:`phx_error`,join:`phx_join`,reply:`phx_reply`,leave:`phx_leave`,access_token:`access_token`},Ct={connecting:`connecting`,open:`open`,closing:`closing`,closed:`closed`},wt=class e{constructor(t){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=e.DEFAULT_METADATA_KEYS,this.allowedMetadataKeys=t??e.DEFAULT_METADATA_KEYS}encode(e,t){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event==`string`)return t(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return t(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){return this._isArrayBuffer(e.payload?.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){let t=e.payload?.payload??new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,t)}_encodeJsonUserBroadcastPush(e){let t=e.payload?.payload??{},n=new TextEncoder().encode(JSON.stringify(t)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,n)}_encodeUserBroadcastPush(e,t,n){let r=new TextEncoder,i=r.encode(e.topic),a=r.encode(e.ref??``),o=r.encode(e.join_ref??``),s=r.encode(e.payload.event),c=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},l=r.encode(Object.keys(c).length===0?``:JSON.stringify(c));if(o.length>255)throw Error(`joinRef length ${o.length} exceeds maximum of 255`);if(a.length>255)throw Error(`ref length ${a.length} exceeds maximum of 255`);if(i.length>255)throw Error(`topic length ${i.length} exceeds maximum of 255`);if(s.length>255)throw Error(`userEvent length ${s.length} exceeds maximum of 255`);if(l.length>255)throw Error(`metadata length ${l.length} exceeds maximum of 255`);let u=this.USER_BROADCAST_PUSH_META_LENGTH+o.length+a.length+i.length+s.length+l.length,d=new ArrayBuffer(this.HEADER_LENGTH+u),f=new DataView(d),p=new Uint8Array(d),m=0;f.setUint8(m++,this.KINDS.userBroadcastPush),f.setUint8(m++,o.length),f.setUint8(m++,a.length),f.setUint8(m++,i.length),f.setUint8(m++,s.length),f.setUint8(m++,l.length),f.setUint8(m++,t),p.set(o,m),m+=o.length,p.set(a,m),m+=a.length,p.set(i,m),m+=i.length,p.set(s,m),m+=s.length,p.set(l,m),m+=l.length;var h=new Uint8Array(d.byteLength+n.byteLength);return h.set(new Uint8Array(d),0),h.set(new Uint8Array(n),d.byteLength),h.buffer}decode(e,t){if(this._isArrayBuffer(e))return t(this._binaryDecode(e));if(typeof e==`string`){let[n,r,i,a,o]=JSON.parse(e);return t({join_ref:n,ref:r,topic:i,event:a,payload:o})}return t({})}_binaryDecode(e){let t=new DataView(e),n=t.getUint8(0),r=new TextDecoder;switch(n){case this.KINDS.userBroadcast:return this._decodeUserBroadcast(e,t,r)}}_decodeUserBroadcast(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=t.getUint8(4),s=this.HEADER_LENGTH+4,c=n.decode(e.slice(s,s+r));s+=r;let l=n.decode(e.slice(s,s+i));s+=i;let u=n.decode(e.slice(s,s+a));s+=a;let d=e.slice(s,e.byteLength),f=o===this.JSON_ENCODING?JSON.parse(n.decode(d)):d,p={type:this.BROADCAST_EVENT,event:l,payload:f};return a>0&&(p.meta=JSON.parse(u)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:p}}_isArrayBuffer(e){return e instanceof ArrayBuffer||e?.constructor?.name===`ArrayBuffer`}_pick(e,t){return!e||typeof e!=`object`?{}:Object.fromEntries(Object.entries(e).filter(([e])=>t.includes(e)))}};wt.DEFAULT_METADATA_KEYS=[`persist`];var D;(function(e){e.abstime=`abstime`,e.bool=`bool`,e.date=`date`,e.daterange=`daterange`,e.float4=`float4`,e.float8=`float8`,e.int2=`int2`,e.int4=`int4`,e.int4range=`int4range`,e.int8=`int8`,e.int8range=`int8range`,e.json=`json`,e.jsonb=`jsonb`,e.money=`money`,e.numeric=`numeric`,e.oid=`oid`,e.reltime=`reltime`,e.text=`text`,e.time=`time`,e.timestamp=`timestamp`,e.timestamptz=`timestamptz`,e.timetz=`timetz`,e.tsrange=`tsrange`,e.tstzrange=`tstzrange`})(D||={});var Tt=(e,t,n={})=>{let r=n.skipTypes??[];return t?Object.keys(t).reduce((n,i)=>(n[i]=Et(i,e,t,r),n),{}):{}},Et=(e,t,n,r)=>{let i=t.find(t=>t.name===e)?.type,a=n[e];return i&&!r.includes(i)?Dt(i,a):Ot(a)},Dt=(e,t)=>{if(e.charAt(0)===`_`)return Mt(t,e.slice(1,e.length));switch(e){case D.bool:return kt(t);case D.float4:case D.float8:case D.int2:case D.int4:case D.int8:case D.numeric:case D.oid:return At(t);case D.json:case D.jsonb:return jt(t);case D.timestamp:return Nt(t);case D.abstime:case D.date:case D.daterange:case D.int4range:case D.int8range:case D.money:case D.reltime:case D.text:case D.time:case D.timestamptz:case D.timetz:case D.tsrange:case D.tstzrange:return Ot(t);default:return Ot(t)}},Ot=e=>e,kt=e=>{switch(e){case`t`:return!0;case`f`:return!1;default:return e}},At=e=>{if(typeof e==`string`){let t=parseFloat(e);if(!Number.isNaN(t))return t}return e},jt=e=>{if(typeof e==`string`)try{return JSON.parse(e)}catch{return e}return e},Mt=(e,t)=>{if(typeof e!=`string`)return e;let n=e.length-1,r=e[n];if(e[0]===`{`&&r===`}`){let r,i=e.slice(1,n);try{r=JSON.parse(`[`+i+`]`)}catch{r=i?i.split(`,`):[]}return r.map(e=>Dt(t,e))}return e},Nt=e=>typeof e==`string`?e.replace(` `,`T`):e,Pt=e=>{let t=new URL(e);return t.protocol=t.protocol.replace(/^ws/i,`http`),t.pathname=t.pathname.replace(/\/+$/,``).replace(/\/socket\/websocket$/i,``).replace(/\/socket$/i,``).replace(/\/websocket$/i,``),t.pathname===``||t.pathname===`/`?t.pathname=`/api/broadcast`:t.pathname+=`/api/broadcast`,t.href},Ft=e=>typeof e==`function`?e:function(){return e},It=typeof self<`u`?self:null,Lt=typeof window<`u`?window:null,Rt=It||Lt||globalThis,zt=`2.0.0`,Bt=1e4,Vt=1e3,Ht=100,Ut={connecting:0,open:1,closing:2,closed:3},Wt={closed:`closed`,errored:`errored`,joined:`joined`,joining:`joining`,leaving:`leaving`},Gt={close:`phx_close`,error:`phx_error`,join:`phx_join`,reply:`phx_reply`,leave:`phx_leave`},Kt={longpoll:`longpoll`,websocket:`websocket`},qt={complete:4},Jt=`base64url.bearer.phx.`,Yt=class{constructor(e,t,n,r){this.channel=e,this.event=t,this.payload=n||function(){return{}},this.receivedResp=null,this.timeout=r,this.timeoutTimer=null,this.recHooks=[],this.sent=!1,this.ref=void 0}resend(e){this.timeout=e,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(e,t){return this.hasReceived(e)&&t(this.receivedResp.response),this.recHooks.push({status:e,callback:t}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}destroy(){this.cancelRefEvent(),this.cancelTimeout()}matchReceive({status:e,response:t,_ref:n}){this.recHooks.filter(t=>t.status===e).forEach(e=>e.callback(t))}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,e=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=e,this.matchReceive(e)}),this.timeoutTimer=setTimeout(()=>{this.trigger(`timeout`,{})},this.timeout)}hasReceived(e){return this.receivedResp&&this.receivedResp.status===e}trigger(e,t){this.channel.trigger(this.refEvent,{status:e,response:t})}},Xt=class{constructor(e,t){this.callback=e,this.timerCalc=t,this.timer=void 0,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries+=1,this.callback()},this.timerCalc(this.tries+1))}},Zt=class{constructor(e,t,n){this.state=Wt.closed,this.topic=e,this.params=Ft(t||{}),this.socket=n,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new Yt(this,Gt.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new Xt(()=>{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=Wt.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(e=>e.send()),this.pushBuffer=[]}),this.joinPush.receive(`error`,e=>{this.state=Wt.errored,this.socket.hasLogger()&&this.socket.log(`channel`,`error ${this.topic}`,e),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log(`channel`,`close ${this.topic}`),this.state=Wt.closed,this.socket.remove(this)}),this.onError(e=>{this.socket.hasLogger()&&this.socket.log(`channel`,`error ${this.topic}`,e),this.isJoining()&&this.joinPush.reset(),this.state=Wt.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 Yt(this,Gt.leave,Ft({}),this.timeout).send(),this.state=Wt.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(Gt.reply,(e,t)=>{this.trigger(this.replyEventName(t),e)})}join(e=this.timeout){if(this.joinedOnce)throw Error(`tried to join multiple times. 'join' can only be called a single time per channel instance`);return this.timeout=e,this.joinedOnce=!0,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(e=>e.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Wt.closed,this.bindings=[]}onClose(e){this.on(Gt.close,e)}onError(e){return this.on(Gt.error,t=>e(t))}on(e,t){let n=this.bindingRef++;return this.bindings.push({event:e,ref:n,callback:t}),n}off(e,t){this.bindings=this.bindings.filter(n=>n.event!==e||t!==void 0&&t!==n.ref)}canPush(){return this.socket.isConnected()&&this.isJoined()}push(e,t,n=this.timeout){if(t||={},!this.joinedOnce)throw Error(`tried to push '${e}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let r=new Yt(this,e,function(){return t},n);return this.canPush()?r.send():(r.startTimeout(),this.pushBuffer.push(r)),r}leave(e=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=Wt.leaving;let t=()=>{this.socket.hasLogger()&&this.socket.log(`channel`,`leave ${this.topic}`),this.trigger(Gt.close,`leave`)},n=new Yt(this,Gt.leave,Ft({}),e);return n.receive(`ok`,()=>t()).receive(`timeout`,()=>t()),n.send(),this.canPush()||n.trigger(`ok`,{}),n}onMessage(e,t,n){return t}filterBindings(e,t,n){return!0}isMember(e,t,n,r){return this.topic===e?r&&r!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log(`channel`,`dropping outdated message`,{topic:e,event:t,payload:n,joinRef:r}),!1):!0:!1}joinRef(){return this.joinPush.ref}rejoin(e=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=Wt.joining,this.joinPush.resend(e))}trigger(e,t,n,r){let i=this.onMessage(e,t,n,r);if(t&&!i)throw Error(`channel onMessage callbacks must return the payload, modified or unmodified`);let a=this.bindings.filter(r=>r.event===e&&this.filterBindings(r,t,n));for(let e=0;ec.abort(),i),s.signal=c.signal),Rt.fetch(t,s).then(e=>e.text()).then(e=>this.parseJSON(e)).then(e=>o&&o(e)).catch(e=>{e.name===`AbortError`&&a?a():o&&o(null)}),c}static xdomainRequest(e,t,n,r,i,a,o){return e.timeout=i,e.open(t,n),e.onload=()=>{let t=this.parseJSON(e.responseText);o&&o(t)},a&&(e.ontimeout=a),e.onprogress=()=>{},e.send(r),e}static xhrRequest(e,t,n,r,i,a,o,s){e.open(t,n,!0),e.timeout=a;for(let[t,n]of Object.entries(r))e.setRequestHeader(t,n);return e.onerror=()=>s&&s(null),e.onreadystatechange=()=>{e.readyState===qt.complete&&s&&s(this.parseJSON(e.responseText))},o&&(e.ontimeout=o),e.send(i),e}static parseJSON(e){if(!e||e===``)return null;try{return JSON.parse(e)}catch{return console&&console.log(`failed to parse JSON response`,e),null}}static serialize(e,t){let n=[];for(var r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;let i=t?`${t}[${r}]`:r,a=e[r];typeof a==`object`?n.push(this.serialize(a,i)):n.push(encodeURIComponent(i)+`=`+encodeURIComponent(a))}return n.join(`&`)}static appendParams(e,t){return Object.keys(t).length===0?e:`${e}${e.match(/\?/)?`&`:`?`}${this.serialize(t)}`}},$t=e=>{let t=``,n=new Uint8Array(e),r=n.byteLength;for(let e=0;ethis.poll(),0)}normalizeEndpoint(e){return e.replace(`ws://`,`http://`).replace(`wss://`,`https://`).replace(RegExp(`(.*)/`+Kt.websocket),`$1/`+Kt.longpoll)}endpointURL(){return Qt.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(e,t,n){this.close(e,t,n),this.readyState=Ut.connecting}ontimeout(){this.onerror(`timeout`),this.closeAndRetry(1005,`timeout`,!1)}isActive(){return this.readyState===Ut.open||this.readyState===Ut.connecting}poll(){let e={Accept:`application/json`};this.authToken&&(e[`X-Phoenix-AuthToken`]=this.authToken),this.ajax(`GET`,e,null,()=>this.ontimeout(),e=>{if(e){var{status:t,token:n,messages:r}=e;if(t===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,`session_gone`,!1);return}this.token=n}else t=0;switch(t){case 200:r.forEach(e=>{setTimeout(()=>this.onmessage({data:e}),0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=Ut.open,this.onopen({}),this.poll();break;case 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 Error(`unhandled poll status ${t}`)}})}send(e){typeof e!=`string`&&(e=$t(e)),this.currentBatch?this.currentBatch.push(e):this.awaitingBatchAck?this.batchBuffer.push(e):(this.currentBatch=[e],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null},0))}batchSend(e,t=0){this.awaitingBatchAck=!0;let n=t+Ht,r=e.slice(t,n);this.ajax(`POST`,{"Content-Type":`application/x-ndjson`},r.join(` `),()=>this.onerror(`timeout`),t=>{!t||t.status!==200?(this.awaitingBatchAck=!1,this.onerror(t&&t.status),this.closeAndRetry(1011,`internal server error`,!1)):n0?(this.batchSend(this.batchBuffer),this.batchBuffer=[]):this.awaitingBatchAck=!1})}close(e,t,n){for(let e of this.reqs)e.abort();this.readyState=Ut.closed;let r=Object.assign({code:1e3,reason:void 0,wasClean:!0},{code:e,reason:t,wasClean:n});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<`u`?this.onclose(new CloseEvent(`close`,r)):this.onclose(r)}ajax(e,t,n,r,i){let a;a=Qt.request(e,this.endpointURL(),t,n,this.timeout,()=>{this.reqs.delete(a),r()},e=>{this.reqs.delete(a),this.isActive()&&i(e)}),this.reqs.add(a)}},tn=class e{constructor(t,n={}){let r=n.events||{state:`presence_state`,diff:`presence_diff`};this.state=Object.create(null),this.pendingDiffs=[],this.channel=t,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(r.state,t=>{let{onJoin:n,onLeave:r,onSync:i}=this.caller;this.joinRef=this.channel.joinRef(),this.state=e.syncState(this.state,t,n,r),this.pendingDiffs.forEach(t=>{this.state=e.syncDiff(this.state,t,n,r)}),this.pendingDiffs=[],i()}),this.channel.on(r.diff,t=>{let{onJoin:n,onLeave:r,onSync:i}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(t):(this.state=e.syncDiff(this.state,t,n,r),i())})}onJoin(e){this.caller.onJoin=e}onLeave(e){this.caller.onLeave=e}onSync(e){this.caller.onSync=e}list(t){return e.list(this.state,t)}inPendingSyncState(){return!this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,t,n,r){let i=this.toNullProtoObj(this.clone(e));t=this.toNullProtoObj(t);let a=Object.create(null),o=Object.create(null);return this.map(i,(e,n)=>{t[e]||(o[e]=n)}),this.map(t,(e,t)=>{let n=i[e];if(n){let r=t.metas.map(e=>e.phx_ref),i=n.metas.map(e=>e.phx_ref),s=t.metas.filter(e=>i.indexOf(e.phx_ref)<0),c=n.metas.filter(e=>r.indexOf(e.phx_ref)<0);s.length>0&&(a[e]=t,a[e].metas=s),c.length>0&&(o[e]=this.clone(n),o[e].metas=c)}else a[e]=t}),this.syncDiff(i,{joins:a,leaves:o},n,r)}static syncDiff(e,t,n,r){e=this.toNullProtoObj(e);let{joins:i,leaves:a}=this.clone(t);return n||=function(){},r||=function(){},this.map(i,(t,r)=>{let i=e[t];if(e[t]=this.clone(r),i){let n=e[t].metas.map(e=>e.phx_ref),r=i.metas.filter(e=>n.indexOf(e.phx_ref)<0);e[t].metas.unshift(...r)}n(t,i,r)}),this.map(a,(t,n)=>{let i=e[t];if(!i)return;let a=n.metas.map(e=>e.phx_ref);i.metas=i.metas.filter(e=>a.indexOf(e.phx_ref)<0),r(t,i,n),i.metas.length===0&&delete e[t]}),e}static list(e,t){return t||=function(e,t){return t},this.map(e,(e,n)=>t(e,n))}static map(e,t){return Object.getOwnPropertyNames(e).map(n=>t(n,e[n]))}static toNullProtoObj(e){if(Object.getPrototypeOf(e)===null)return e;let t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(n=>{t[n]=e[n]}),t}static clone(e){return JSON.parse(JSON.stringify(e))}},nn={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(e,t){if(e.payload.constructor===ArrayBuffer)return t(this.binaryEncode(e));{let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return t(JSON.stringify(n))}},decode(e,t){if(e.constructor===ArrayBuffer)return t(this.binaryDecode(e));{let[n,r,i,a,o]=JSON.parse(e);return t({join_ref:n,ref:r,topic:i,event:a,payload:o})}},binaryEncode(e){let{join_ref:t,ref:n,event:r,topic:i,payload:a}=e,o=new TextEncoder,s=o.encode(t),c=o.encode(n),l=o.encode(i),u=o.encode(r);this.assertFieldSize(s.byteLength,`join_ref`),this.assertFieldSize(c.byteLength,`ref`),this.assertFieldSize(l.byteLength,`topic`),this.assertFieldSize(u.byteLength,`event`);let d=this.META_LENGTH+s.byteLength+c.byteLength+l.byteLength+u.byteLength,f=new ArrayBuffer(this.HEADER_LENGTH+d),p=new Uint8Array(f),m=new DataView(f),h=0;m.setUint8(h++,this.KINDS.push),m.setUint8(h++,s.byteLength),m.setUint8(h++,c.byteLength),m.setUint8(h++,l.byteLength),m.setUint8(h++,u.byteLength),p.set(s,h),h+=s.byteLength,p.set(c,h),h+=c.byteLength,p.set(l,h),h+=l.byteLength,p.set(u,h),h+=u.byteLength;var g=new Uint8Array(f.byteLength+a.byteLength);return g.set(p,0),g.set(new Uint8Array(a),f.byteLength),g.buffer},assertFieldSize(e,t){if(e>255)throw Error(`unable to convert ${t} to binary: must be less than or equal to 255 bytes, but is ${e} bytes`)},binaryDecode(e){let t=new DataView(e),n=t.getUint8(0),r=new TextDecoder;switch(n){case this.KINDS.push:return this.decodePush(e,t,r);case this.KINDS.reply:return this.decodeReply(e,t,r);case this.KINDS.broadcast:return this.decodeBroadcast(e,t,r)}},decodePush(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,s=n.decode(e.slice(o,o+r));o+=r;let c=n.decode(e.slice(o,o+i));o+=i;let l=n.decode(e.slice(o,o+a));return o+=a,{join_ref:s,ref:null,topic:c,event:l,payload:e.slice(o,e.byteLength)}},decodeReply(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=t.getUint8(3),o=t.getUint8(4),s=this.HEADER_LENGTH+this.META_LENGTH,c=n.decode(e.slice(s,s+r));s+=r;let l=n.decode(e.slice(s,s+i));s+=i;let u=n.decode(e.slice(s,s+a));s+=a;let d=n.decode(e.slice(s,s+o));s+=o;let f={status:d,response:e.slice(s,e.byteLength)};return{join_ref:c,ref:l,topic:u,event:Gt.reply,payload:f}},decodeBroadcast(e,t,n){let r=t.getUint8(1),i=t.getUint8(2),a=this.HEADER_LENGTH+2,o=n.decode(e.slice(a,a+r));a+=r;let s=n.decode(e.slice(a,a+i));return a+=i,{join_ref:null,ref:null,topic:o,event:s,payload:e.slice(a,e.byteLength)}}},O=class{constructor(e,t={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=t.timeout||Bt,this.transport=t.transport||Rt.WebSocket||en,this.conn=void 0,this.primaryPassedHealthCheck=!1,this.longPollFallbackMs=t.longPollFallbackMs,this.fallbackTimer=null;let n=null;try{n=Rt&&Rt.sessionStorage}catch{}this.sessionStore=t.sessionStorage||n,this.establishedConnections=0,this.defaultEncoder=nn.encode.bind(nn),this.defaultDecoder=nn.decode.bind(nn),this.closeWasClean=!0,this.disconnecting=!1,this.binaryType=t.binaryType||`arraybuffer`,this.connectClock=1,this.pageHidden=!1,this.encode=void 0,this.decode=void 0,this.transport===en?(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder):(this.encode=t.encode||this.defaultEncoder,this.decode=t.decode||this.defaultDecoder);let r=null;Lt&&Lt.addEventListener&&(Lt.addEventListener(`pagehide`,e=>{this.conn&&(this.disconnect(),r=this.connectClock)}),Lt.addEventListener(`pageshow`,e=>{r===this.connectClock&&(r=null,this.connect())}),Lt.addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`?this.pageHidden=!0:(this.pageHidden=!1,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()))})),this.heartbeatIntervalMs=t.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=t.autoSendHeartbeat??!0,this.heartbeatCallback=t.heartbeatCallback??(()=>{}),this.rejoinAfterMs=e=>t.rejoinAfterMs?t.rejoinAfterMs(e):[1e3,2e3,5e3][e-1]||1e4,this.reconnectAfterMs=e=>t.reconnectAfterMs?t.reconnectAfterMs(e):[10,50,100,150,200,250,500,1e3,2e3][e-1]||5e3,this.logger=t.logger||null,!this.logger&&t.debug&&(this.logger=(e,t,n)=>{console.log(`${e}: ${t}`,n)}),this.longpollerTimeout=t.longpollerTimeout||2e4,this.params=Ft(t.params||{}),this.endPoint=`${e}/${Kt.websocket}`,this.vsn=t.vsn||zt,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new Xt(()=>{this.pageHidden?(this.log(`Not reconnecting as page is hidden!`),this.teardown()):this.teardown(async()=>{t.beforeReconnect&&await t.beforeReconnect(),this.connect()})},this.reconnectAfterMs),this.authToken=t.authToken&&Ft(t.authToken)}getLongPollTransport(){return en}replaceTransport(e){this.connectClock++,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&=(this.conn.close(),null),this.transport=e}protocol(){return location.protocol.match(/^https/)?`wss`:`ws`}endPointURL(){let e=Qt.appendParams(Qt.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return e.charAt(0)===`/`?e.charAt(1)===`/`?`${this.protocol()}:${e}`:`${this.protocol()}://${location.host}${e}`:e}disconnect(e,t,n){this.connectClock++,this.disconnecting=!0,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=!1,e&&e()},t,n)}connect(e){e&&(console&&console.log(`passing params to connect is deprecated. Instead pass :params to the Socket constructor`),this.params=Ft(e)),(!this.conn||this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==en?this.connectWithFallback(en,this.longPollFallbackMs):this.transportConnect())}log(e,t,n){this.logger&&this.logger(e,t,n)}hasLogger(){return this.logger!==null}onOpen(e){let t=this.makeRef();return this.stateChangeCallbacks.open.push([t,e]),t}onClose(e){let t=this.makeRef();return this.stateChangeCallbacks.close.push([t,e]),t}onError(e){let t=this.makeRef();return this.stateChangeCallbacks.error.push([t,e]),t}onMessage(e){let t=this.makeRef();return this.stateChangeCallbacks.message.push([t,e]),t}onHeartbeat(e){this.heartbeatCallback=e}ping(e){if(!this.isConnected())return!1;let t=this.makeRef(),n=Date.now();this.push({topic:`phoenix`,event:`heartbeat`,payload:{},ref:t});let r=this.onMessage(i=>{i.ref===t&&(this.off([r]),e(Date.now()-n))});return!0}transportName(e){switch(e){case en:return`LongPoll`;default:return e.name}}transportConnect(){this.connectClock++,this.closeWasClean=!1;let e;this.authToken&&(e=[`phoenix`,`${Jt}${btoa(this.authToken()).replace(/=/g,``)}`]),this.conn=new this.transport(this.endPointURL(),e),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(e){return this.sessionStore&&this.sessionStore.getItem(e)}storeSession(e,t){this.sessionStore&&this.sessionStore.setItem(e,t)}connectWithFallback(e,t=2500){clearTimeout(this.fallbackTimer);let n=!1,r=!0,i,a,o=this.transportName(e),s=t=>{this.log(`transport`,`falling back to ${o}...`,t),this.off([i,a]),r=!1,this.replaceTransport(e),this.transportConnect()};if(this.getSession(`phx:fallback:${o}`))return s(`memorized`);this.fallbackTimer=setTimeout(s,t),a=this.onError(e=>{this.log(`transport`,`error`,e),r&&!n&&(clearTimeout(this.fallbackTimer),s(e))}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(n=!0,!r){let t=this.transportName(e);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${t}`,`true`),this.log(`transport`,`established ${t} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(s,t),this.ping(e=>{this.log(`transport`,`connected to primary after`,e),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(e){this.log(`error`,`error in heartbeat callback`,e)}this.triggerChanError(Error(`heartbeat timeout`)),this.closeWasClean=!1,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),Vt,`heartbeat timeout`)}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(e,t,n){if(!this.conn)return e&&e();let r=this.conn;this.waitForBufferDone(r,()=>{t?r.close(t,n||``):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),e&&e()})})}waitForBufferDone(e,t,n=1){n===5||!e.bufferedAmount?t():setTimeout(()=>{this.waitForBufferDone(e,t,n+1)},150*n)}waitForSocketClosed(e,t,n=1){n===5||e.readyState===Ut.closed?t():setTimeout(()=>{this.waitForSocketClosed(e,t,n+1)},150*n)}onConnClose(e){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log(`transport`,`close`,e),this.triggerChanError(e),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks(`close`,e)}onConnError(e){this.hasLogger()&&this.log(`transport`,`error`,e);let t=this.transport,n=this.establishedConnections;this.triggerStateCallbacks(`error`,e,t,n),(t===this.transport||n>0)&&this.triggerChanError(e)}triggerChanError(e){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger(Gt.error,e)})}connectionState(){switch(this.conn&&this.conn.readyState){case Ut.connecting:return`connecting`;case Ut.open:return`open`;case Ut.closing:return`closing`;default:return`closed`}}isConnected(){return this.connectionState()===`open`}remove(e){this.off(e.stateChangeRefs),this.channels=this.channels.filter(t=>t!==e)}off(e){for(let t in this.stateChangeCallbacks)this.stateChangeCallbacks[t]=this.stateChangeCallbacks[t].filter(([t])=>e.indexOf(t)===-1)}channel(e,t={}){let n=new Zt(e,t,this);return this.channels.push(n),n}push(e){if(this.hasLogger()){let{topic:t,event:n,payload:r,ref:i,join_ref:a}=e;this.log(`push`,`${t} ${n} (${a}, ${i})`,r)}this.isConnected()?this.encode(e,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(e,e=>this.conn.send(e)))}makeRef(){let e=this.ref+1;return this.ref=e===this.ref?0:e,this.ref.toString()}sendHeartbeat(){if(!this.isConnected())try{this.heartbeatCallback(`disconnected`)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}else if(this.pendingHeartbeatRef)this.heartbeatTimeout();else{this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:`phoenix`,event:`heartbeat`,payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback(`sent`)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs)}}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(e=>e()),this.sendBuffer=[])}onConnMessage(e){this.decode(e.data,e=>{let{topic:t,event:n,payload:r,ref:i,join_ref:a}=e;if(i&&i===this.pendingHeartbeatRef){let e=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(r.status===`ok`?`ok`:`error`,e)}catch(e){this.log(`error`,`error in heartbeat callback`,e)}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}this.hasLogger()&&this.log(`receive`,`${r.status||``} ${t} ${n} ${i&&`(`+i+`)`||``}`.trim(),r);for(let e=0;e{try{r(...t)}catch(t){this.log(`error`,`error in ${e} callback`,t)}})}catch(t){this.log(`error`,`error triggering ${e} callbacks`,t)}}leaveOpenTopic(e){let t=this.channels.find(t=>t.topic===e&&(t.isJoined()||t.isJoining()));t&&(this.hasLogger()&&this.log(`transport`,`leaving duplicate topic "${e}"`),t.leave())}},rn=class e{constructor(t,n){let r=sn(n);this.presence=new tn(t.getChannel(),r),this.presence.onJoin((n,r,i)=>{let a=e.onJoinPayload(n,r,i);t.getChannel().trigger(`presence`,a)}),this.presence.onLeave((n,r,i)=>{let a=e.onLeavePayload(n,r,i);t.getChannel().trigger(`presence`,a)}),this.presence.onSync(()=>{t.getChannel().trigger(`presence`,{event:`sync`})})}get state(){return e.transformState(this.presence.state)}static transformState(e){return e=on(e),Object.getOwnPropertyNames(e).reduce((t,n)=>{let r=e[n];return t[n]=an(r),t},{})}static onJoinPayload(e,t,n){return{event:`join`,key:e,currentPresences:cn(t),newPresences:an(n)}}static onLeavePayload(e,t,n){return{event:`leave`,key:e,currentPresences:cn(t),leftPresences:an(n)}}};function an(e){return e.metas.map(e=>{let t=Object.getOwnPropertyDescriptors(e),n=Object.defineProperties({},t);return n.presence_ref=n.phx_ref,delete n.phx_ref,delete n.phx_ref_prev,n})}function on(e){return JSON.parse(JSON.stringify(e))}function sn(e){return e?.events&&{events:e.events}}function cn(e){return e?.metas?an(e):[]}var ln;(function(e){e.SYNC=`sync`,e.JOIN=`join`,e.LEAVE=`leave`})(ln||={});var un=class{get state(){return this.presenceAdapter.state}constructor(e,t){this.channel=e,this.presenceAdapter=new rn(this.channel.channelAdapter,t)}};function dn(e){if(e instanceof Error)return e;if(typeof e==`string`)return Error(e);if(e&&typeof e==`object`){let t=e;if(typeof t.code==`number`){let n=typeof t.reason==`string`&&t.reason?` (${t.reason})`:``;return Error(`socket closed: ${t.code}${n}`,{cause:e})}return Error(`channel error: transport failure`,{cause:e})}return Error(`channel error: connection lost`)}var fn=class{constructor(e,t,n){let r=pn(n);this.channel=e.getSocket().channel(t,r),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,t){return this.channel.on(e,t)}off(e,t){this.channel.off(e,t)}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,t,n){let r;try{r=this.channel.push(e,t,n)}catch{throw Error(`tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`)}if(this.channel.pushBuffer.length>100){let e=this.channel.pushBuffer.shift();e.cancelTimeout(),this.socket.log(`channel`,`discarded push due to buffer overflow: ${e.event}`,e.payload())}return r}updateJoinPayload(e){let t=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},t),e)}canPush(){return this.socket.isConnected()&&this.state===xt.joined}isJoined(){return this.state===xt.joined}isJoining(){return this.state===xt.joining}isClosed(){return this.state===xt.closed}isLeaving(){return this.state===xt.leaving}updateFilterBindings(e){this.channel.filterBindings=e}updatePayloadTransform(e){this.channel.onMessage=e}getChannel(){return this.channel}};function pn(e){return{config:Object.assign({broadcast:{ack:!1,self:!1},presence:{key:``,enabled:!1},private:!1},e.config)}}var mn=/[,()"\\]/,hn=e=>mn.test(e)||e!==e.trim(),gn=e=>`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`,_n=e=>{let t=e===null?`null`:String(e);return hn(t)?gn(t):t},vn=e=>e===null?`null`:String(e),yn=(e,t)=>{if(e===`in`){let e=Array.isArray(t)?t:[t];if(e.length===0)throw Error("Realtime `in` filter requires at least one value.");return`in.(${Array.from(new Set(e)).map(e=>_n(e)).join(`,`)})`}return e===`is`?`is.${vn(t)}`:`${e}.${_n(t)}`},bn=class{constructor(){this.filters=[]}add(e,t,n,r=!1){let i=r?`not.`:``;return this.filters.push(`${e}=${i}${yn(t,n)}`),this}eq(e,t){return this.add(e,`eq`,t)}neq(e,t){return this.add(e,`neq`,t)}gt(e,t){return this.add(e,`gt`,t)}gte(e,t){return this.add(e,`gte`,t)}lt(e,t){return this.add(e,`lt`,t)}lte(e,t){return this.add(e,`lte`,t)}in(e,t){return this.add(e,`in`,t)}like(e,t){return this.add(e,`like`,t)}ilike(e,t){return this.add(e,`ilike`,t)}match(e,t){return this.add(e,`match`,t)}imatch(e,t){return this.add(e,`imatch`,t)}is(e,t){return this.add(e,`is`,t)}isDistinct(e,t){return this.add(e,`isdistinct`,t)}not(e,t,n){return this.add(e,t,n,!0)}build(){return this.filters.join(`,`)}toString(){return this.build()}},xn;(function(e){e.ALL=`*`,e.INSERT=`INSERT`,e.UPDATE=`UPDATE`,e.DELETE=`DELETE`})(xn||={});var Sn;(function(e){e.BROADCAST=`broadcast`,e.PRESENCE=`presence`,e.POSTGRES_CHANGES=`postgres_changes`,e.SYSTEM=`system`})(Sn||={});var Cn;(function(e){e.SUBSCRIBED=`SUBSCRIBED`,e.TIMED_OUT=`TIMED_OUT`,e.CLOSED=`CLOSED`,e.CHANNEL_ERROR=`CHANNEL_ERROR`})(Cn||={});var wn=class e{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,t={config:{}},n){if(this.topic=e,this.params=t,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,``),this.params.config=Object.assign({broadcast:{ack:!1,self:!1},presence:{key:``,enabled:!1},private:!1},t.config),this.channelAdapter=new fn(this.socket.socketAdapter,e,this.params),this.presence=new un(this),this._onClose(()=>{this.socket._remove(this)}),this._updateFilterTransform(),this.broadcastEndpointURL=Pt(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||!1,!this.private&&this.params.config?.broadcast?.replay)throw Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`)}subscribe(e,t=this.timeout){if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:n,presence:r,private:i,postgres_changes_options:a}}=this.params,o=this.bindings.postgres_changes?.map(e=>e.filter)??[],s=!!this.bindings[Sn.PRESENCE]&&this.bindings[Sn.PRESENCE].length>0||this.params.config.presence?.enabled===!0,c={},l=Object.assign({broadcast:n,presence:Object.assign(Object.assign({},r),{enabled:s}),postgres_changes:o,private:i},a?{postgres_changes_options:a}:{});this.socket.accessTokenValue&&(c.access_token=this.socket.accessTokenValue),this._onError(t=>{e?.(Cn.CHANNEL_ERROR,dn(t))}),this._onClose(()=>e?.(Cn.CLOSED)),this.updateJoinPayload(Object.assign({config:l},c)),this._updateFilterMessage();let u=a?.wait&&o.length>0?Math.max(t,(a.timeout??yt)+bt):t;this.channelAdapter.subscribe(u).receive(`ok`,async({postgres_changes:t})=>{this.socket._isManualToken()||this.socket.setAuth(),t===void 0?e?.(Cn.SUBSCRIBED):this._updatePostgresBindings(t,e)}).receive(`error`,t=>{this.state=xt.errored;let n=Object.values(t).join(`, `)||`error`;e?.(Cn.CHANNEL_ERROR,Error(n,{cause:t}))}).receive(`timeout`,()=>{e?.(Cn.TIMED_OUT)})}return this}_updatePostgresBindings(t,n){let r=this.bindings.postgres_changes,i=r?.length??0,a=[];for(let o=0;o{let r=this.channelAdapter.push(e.type,e,t.timeout||this.timeout);e.type===`broadcast`&&!this.params?.config?.broadcast?.ack&&n(`ok`),r.receive(`ok`,()=>n(`ok`)),r.receive(`error`,t=>n(e.persist&&typeof t?.error==`string`?t.error:`error`)),r.receive(`timeout`,()=>n(`timed out`))})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e)}async unsubscribe(e=this.timeout){return new Promise(t=>{this.channelAdapter.unsubscribe(e).receive(`ok`,()=>t(`ok`)).receive(`timeout`,()=>t(`timed out`)).receive(`error`,()=>t(`error`))})}teardown(){this.channelAdapter.teardown()}async _fetchWithTimeout(e,t,n){let r=new AbortController,i=setTimeout(()=>r.abort(),n),a=await this.socket.fetch(e,Object.assign(Object.assign({},t),{signal:r.signal}));return clearTimeout(i),a}_on(t,n,r){let i=t.toLocaleLowerCase(),a=n?.filter;if((a instanceof bn||typeof a==`object`&&a&&typeof a.build==`function`)&&(n=Object.assign(Object.assign({},n),{filter:a.build()})),i===Sn.POSTGRES_CHANGES&&this.bindings[i]?.find(t=>e.isSamePostgresFilter(t.filter,n)))return this.socket.log(`error`,`duplicate \`postgres_changes\` binding for ${this.topic} ignored`,n),this;let o=this.channelAdapter.on(t,r),s={type:i,filter:n,callback:r,ref:o};return this.bindings[i]?this.bindings[i].push(s):this.bindings[i]=[s],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e)}_onError(e){this.channelAdapter.onError(e)}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,t,n)=>{let r=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(r,n))return!1;let i=this.bindings[r]?.find(t=>t.ref===e.ref);if(!i)return!0;if([`broadcast`,`presence`,`postgres_changes`].includes(r)){if(`id`in i){let e=i.id,n=i.filter?.event;return e&&t.ids?.includes(e)&&(n===`*`||n?.toLocaleLowerCase()===t.data?.type.toLocaleLowerCase())}{let e=(i?.filter?.event)?.toLocaleLowerCase();return e===`*`||e===(t?.event)?.toLocaleLowerCase()}}return i.type.toLocaleLowerCase()===r})}_notThisChannelEvent(e,t){let{close:n,error:r,leave:i,join:a}=St;return t&&[n,r,i,a].includes(e)&&t!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,t,n)=>{if(typeof t==`object`&&`ids`in t){let e=t.data,{schema:n,table:r,commit_timestamp:i,type:a,errors:o}=e;return Object.assign(Object.assign({},{schema:n,table:r,commit_timestamp:i,eventType:a,new:{},old:{},errors:o}),this._getPayloadRecords(e))}return t})}copyBindings(e){if(this.joinedOnce)throw Error(`cannot copy bindings into joined channel`);for(let t in e.bindings)for(let n of e.bindings[t])this._on(n.type,n.filter,n.callback)}static isFilterValueEqual(e,t){return(e??void 0)===(t??void 0)}static isSamePostgresFilter(t,n){let r=(t?.select)?.join()??void 0,i=(n?.select)?.join()??void 0;return t?.event===n?.event&&e.isFilterValueEqual(t?.schema,n?.schema)&&e.isFilterValueEqual(t?.table,n?.table)&&e.isFilterValueEqual(t?.filter,n?.filter)&&r===i}_getPayloadRecords(e){let t={new:{},old:{}};return(e.type===`INSERT`||e.type===`UPDATE`)&&(t.new=Tt(e.columns,e.record)),(e.type===`UPDATE`||e.type===`DELETE`)&&(t.old=Tt(e.columns,e.old_record)),t}},Tn=class{constructor(e,t){this.socket=new O(e,t)}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,t,n,r=1e4){return new Promise(i=>{setTimeout(()=>i(`timeout`),r),this.socket.disconnect(()=>{e(),i(`ok`)},t,n)})}push(e){this.socket.push(e)}log(e,t,n){this.socket.log(e,t,n)}hasLogger(){return this.socket.hasLogger()}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()==Ct.connecting}isDisconnecting(){return this.socket.connectionState()==Ct.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat()}getSocket(){return this.socket}},En={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},Dn=[1e3,2e3,5e3,1e4],On=1e4;function kn(){let e=new Map;return{get length(){return e.size},clear(){e.clear()},getItem(t){return e.has(t)?e.get(t):null},key(t){return Array.from(e.keys())[t]??null},removeItem(t){e.delete(t)},setItem(t,n){e.set(t,String(n))}}}function An(){try{if(typeof globalThis<`u`&&globalThis.sessionStorage)return globalThis.sessionStorage}catch{}return kn()}var jn=` addEventListener("message", (e) => { if (e.data.event === "start") { setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval); } });`,Mn=class{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,t){if(this.channels=[],this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint=``,this.headers={},this.params={},this.ref=0,this.serializer=new wt,this._manuallySetToken=!1,this._authPromise=null,this._authGeneration=0,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._pendingDisconnectTimer=null,this._disconnectOnEmptyChannelsAfterMs=0,this._resolveFetch=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),!t?.params?.apikey)throw Error(`API key is required to connect to Realtime`);this.apiKey=t.params.apikey;let n=this._initializeOptions(t);this.socketAdapter=new Tn(e,n),this.httpEndpoint=Pt(e),this.fetch=this._resolveFetch(t?.fetch)}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely(`connect`),this._setupConnectionHandlers();try{this.socketAdapter.connect()}catch(e){let t=e.message;throw Error(`WebSocket not available: ${t}`)}this._handleNodeJsRaceCondition()}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,t){return this._cancelPendingDisconnect(),this.isDisconnecting()?`ok`:await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker()},e,t)}getChannels(){return this.channels}async removeChannel(e){let t=await e.unsubscribe();return t===`ok`&&e.teardown(),t}async removeAllChannels(){let e=this.channels.map(async e=>{let t=await e.unsubscribe();return e.teardown(),t}),t=await Promise.all(e);return await this.disconnect(),t}log(e,t,n){this.socketAdapter.log(e,t,n)}hasLogger(){return this.socketAdapter.hasLogger()}connectionState(){return this.socketAdapter.connectionState()||Ct.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,t={config:{}}){let n=`realtime:${e}`,r=this.getChannels().find(e=>e.topic===n);if(r)return r;{let n=new wn(`realtime:${e}`,t,this);return this._cancelPendingDisconnect(),this.channels.push(n),n}}push(e){this.socketAdapter.push(e)}async setAuth(e=null){let t=++this._authGeneration,n=this._performAuth(e,t);t===this._authGeneration&&(this._authPromise=n);try{await n}finally{this._authPromise===n&&(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(t=>t.topic!==e.topic),this.channels.length===0&&(this.log(`transport`,`no channels remaining, scheduling disconnect`),this._schedulePendingDisconnect())}_schedulePendingDisconnect(){this._cancelPendingDisconnect(),this._disconnectOnEmptyChannelsAfterMs===0?(this.log(`transport`,`disconnecting immediately - no channels`),this.disconnect()):(this._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,t){let n,r=!1;if(e)n=e,r=!0;else if(this.accessToken)try{n=await this.accessToken()}catch(e){this.log(`error`,`Error fetching access token from callback`,e),n=this.accessTokenValue}else n=this.accessTokenValue;t===this._authGeneration&&(this.accessToken?this._manuallySetToken=!1:r&&(this._manuallySetToken=!0),this.accessTokenValue!=n&&(this.accessTokenValue=n,this.channels.forEach(e=>{let t={access_token:n,version:mt};e.updateJoinPayload(t),e.joinedOnce&&e.channelAdapter.isJoined()&&e.channelAdapter.push(St.access_token,{access_token:n})})))}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise}_setAuthSafely(e=`general`){this._isManualToken()||this.setAuth().catch(t=>{this.log(`error`,`Error setting auth in ${e}`,t)})}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(e=>{this.log(`error`,`error waiting for auth on connect`,e)}),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(t,n)=>{t!==`disconnected`&&(t==`sent`&&this._setAuthSafely(),e&&e(t,n))}}_startWorkerHeartbeat(){this.workerUrl?this.log(`worker`,`starting worker for from ${this.workerUrl}`):this.log(`worker`,`starting default worker`);let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=e=>{this.log(`worker`,`worker error`,e.message),this._terminateWorker(),this.disconnect()},this.workerRef.onmessage=e=>{e.data.event===`keepAlive`&&this.sendHeartbeat()},this.workerRef.postMessage({event:`start`,interval:this.heartbeatIntervalMs})}_terminateWorker(){this.workerRef&&=(this.log(`worker`,`terminating worker`),this.workerRef.terminate(),void 0)}_workerObjectUrl(e){let t;if(e)t=e;else{let e=new Blob([jn],{type:`application/javascript`});t=URL.createObjectURL(e)}return t}_initializeOptions(e){this.worker=e?.worker??!1,this.accessToken=e?.accessToken??null;let t={};t.timeout=e?.timeout??vt,t.heartbeatIntervalMs=e?.heartbeatIntervalMs??En.HEARTBEAT_INTERVAL,this._disconnectOnEmptyChannelsAfterMs=e?.disconnectOnEmptyChannelsAfterMs??2*(e?.heartbeatIntervalMs??En.HEARTBEAT_INTERVAL),t.transport=e?.transport??pt.getWebSocketConstructor(),t.params=e?.params,t.logger=e?.logger,t.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),t.sessionStorage=e?.sessionStorage??An(),t.reconnectAfterMs=e?.reconnectAfterMs??(e=>Dn[e-1]||On);let n,r,i=e?.vsn??_t;switch(i){case ht:n=(e,t)=>t(JSON.stringify(e)),r=(e,t)=>t(JSON.parse(e));break;case gt:n=this.serializer.encode.bind(this.serializer),r=this.serializer.decode.bind(this.serializer);break;default:throw Error(`Unsupported serializer version: ${i}`)}if(t.vsn=i,t.encode=e?.encode??n,t.decode=e?.decode??r,t.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,t.params=Object.assign(Object.assign({},t.params),{log_level:this.logLevel})),this.worker){if(typeof window<`u`&&!window.Worker)throw Error(`Web Worker is not supported`);this.workerUrl=e?.workerUrl,t.autoSendHeartbeat=!this.worker}return t}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect()}},Nn=class extends Error{constructor(e,t){super(e),this.name=`IcebergError`,this.status=t.status,this.icebergType=t.icebergType,this.icebergCode=t.icebergCode,this.details=t.details,this.isCommitStateUnknown=t.icebergType===`CommitStateUnknownException`||[500,502,504].includes(t.status)&&t.icebergType?.includes(`CommitState`)===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function Pn(e,t,n){let r=new URL(t,e);if(n)for(let[e,t]of Object.entries(n))t!==void 0&&r.searchParams.set(e,t);return r.toString()}async function Fn(e){return!e||e.type===`none`?{}:e.type===`bearer`?{Authorization:`Bearer ${e.token}`}:e.type===`header`?{[e.name]:e.value}:e.type===`custom`?await e.getHeaders():{}}function In(e){let t=e.fetchImpl??globalThis.fetch;return{async request({method:n,path:r,query:i,body:a,headers:o}){let s=Pn(e.baseUrl,r,i),c=await Fn(e.auth),l=await t(s,{method:n,headers:{...a?{"Content-Type":`application/json`}:{},...c,...o},body:a?JSON.stringify(a):void 0}),u=await l.text(),d=(l.headers.get(`content-type`)||``).includes(`application/json`),f=d&&u?JSON.parse(u):u;if(!l.ok){let e=d?f:void 0,t=e?.error;throw new Nn(t?.message??`Request failed with status ${l.status}`,{status:l.status,icebergType:t?.type,icebergCode:t?.code,details:e})}return{status:l.status,headers:l.headers,data:f}}}}function Ln(e){return e.join(``)}var Rn=class{constructor(e,t=``){this.client=e,this.prefix=t}async listNamespaces(e){let t=e?{parent:Ln(e.namespace)}:void 0;return(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces`,query:t})).data.namespaces.map(e=>({namespace:e}))}async createNamespace(e,t){let n={namespace:e.namespace,properties:t?.properties};return(await this.client.request({method:`POST`,path:`${this.prefix}/namespaces`,body:n})).data}async dropNamespace(e){await this.client.request({method:`DELETE`,path:`${this.prefix}/namespaces/${Ln(e.namespace)}`})}async loadNamespaceMetadata(e){return{properties:(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${Ln(e.namespace)}`})).data.properties}}async namespaceExists(e){try{return await this.client.request({method:`HEAD`,path:`${this.prefix}/namespaces/${Ln(e.namespace)}`}),!0}catch(e){if(e instanceof Nn&&e.status===404)return!1;throw e}}async createNamespaceIfNotExists(e,t){try{return await this.createNamespace(e,t)}catch(e){if(e instanceof Nn&&e.status===409)return;throw e}}};function zn(e){return e.join(``)}var Bn=class{constructor(e,t=``,n){this.client=e,this.prefix=t,this.accessDelegation=n}async listTables(e){return(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables`})).data.identifiers}async createTable(e,t){let n={};return this.accessDelegation&&(n[`X-Iceberg-Access-Delegation`]=this.accessDelegation),(await this.client.request({method:`POST`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables`,body:t,headers:n})).data.metadata}async updateTable(e,t){let n=await this.client.request({method:`POST`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables/${e.name}`,body:t});return{"metadata-location":n.data[`metadata-location`],metadata:n.data.metadata}}async dropTable(e,t){await this.client.request({method:`DELETE`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables/${e.name}`,query:{purgeRequested:String(t?.purge??!1)}})}async loadTable(e){let t={};return this.accessDelegation&&(t[`X-Iceberg-Access-Delegation`]=this.accessDelegation),(await this.client.request({method:`GET`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables/${e.name}`,headers:t})).data.metadata}async tableExists(e){let t={};this.accessDelegation&&(t[`X-Iceberg-Access-Delegation`]=this.accessDelegation);try{return await this.client.request({method:`HEAD`,path:`${this.prefix}/namespaces/${zn(e.namespace)}/tables/${e.name}`,headers:t}),!0}catch(e){if(e instanceof Nn&&e.status===404)return!1;throw e}}async createTableIfNotExists(e,t){try{return await this.createTable(e,t)}catch(n){if(n instanceof Nn&&n.status===409)return await this.loadTable({namespace:e.namespace,name:t.name});throw n}}},Vn=class{constructor(e){let t=`v1`;e.catalogName&&(t+=`/${e.catalogName}`);let n=e.baseUrl.endsWith(`/`)?e.baseUrl:`${e.baseUrl}/`;this.client=In({baseUrl:n,auth:e.auth,fetchImpl:e.fetch}),this.accessDelegation=e.accessDelegation?.join(`,`),this.namespaceOps=new Rn(this.client,t),this.tableOps=new Bn(this.client,t,this.accessDelegation)}async listNamespaces(e){return this.namespaceOps.listNamespaces(e)}async createNamespace(e,t){return this.namespaceOps.createNamespace(e,t)}async dropNamespace(e){await this.namespaceOps.dropNamespace(e)}async loadNamespaceMetadata(e){return this.namespaceOps.loadNamespaceMetadata(e)}async listTables(e){return this.tableOps.listTables(e)}async createTable(e,t){return this.tableOps.createTable(e,t)}async updateTable(e,t){return this.tableOps.updateTable(e,t)}async dropTable(e,t){await this.tableOps.dropTable(e,t)}async loadTable(e){return this.tableOps.loadTable(e)}async namespaceExists(e){return this.namespaceOps.namespaceExists(e)}async tableExists(e){return this.tableOps.tableExists(e)}async createNamespaceIfNotExists(e,t){return this.namespaceOps.createNamespaceIfNotExists(e,t)}async createTableIfNotExists(e,t){return this.tableOps.createTableIfNotExists(e,t)}};function Hn(e){"@babel/helpers - typeof";return Hn=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},Hn(e)}function Un(e,t){if(Hn(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(Hn(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function Wn(e){var t=Un(e,`string`);return Hn(t)==`symbol`?t:t+``}function Gn(e,t,n){return(t=Wn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Kn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function k(e){for(var t=1;te?(...t)=>e(...t):(...e)=>fetch(...e),er=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},tr=e=>{if(Array.isArray(e))return e.map(e=>tr(e));if(typeof e==`function`||e!==Object(e))return e;let t={};return Object.entries(e).forEach(([e,n])=>{let r=e.replace(/([-_][a-z])/gi,e=>e.toUpperCase().replace(/[-_]/g,``));t[r]=tr(n)}),t},nr=e=>!e||typeof e!=`string`||e.length===0||e.length>100||e.trim()!==e||e.includes(`/`)||e.includes(`\\`)?!1:/^[\w!.\*'() &$@=;:+,?-]+$/.test(e),rr=e=>e.split(`/`).map(encodeURIComponent).join(`/`),ir=e=>{if(typeof e==`object`&&e){let t=e;if(typeof t.msg==`string`)return t.msg;if(typeof t.message==`string`)return t.message;if(typeof t.error_description==`string`)return t.error_description;if(typeof t.error==`string`)return t.error;if(typeof t.error==`object`&&t.error!==null){let e=t.error;if(typeof e.message==`string`)return e.message}}return JSON.stringify(e)},ar=async(e,t,n,r)=>{if(typeof e==`object`&&e&&`json`in e&&typeof e.json==`function`){let n=e,i=parseInt(String(n.status),10);Number.isFinite(i)||(i=500),n.json().then(e=>{let n=e?.statusCode||e?.code||i+``;t(new Yn(ir(e),i,n,r,e?.code))}).catch(()=>{let e=i+``;t(new Yn(n.statusText||`HTTP ${i} error`,i,e,r))})}else t(new Xn(ir(e),e,r))},or=(e,t,n,r)=>{let i={method:e,headers:t?.headers||{}};if(e===`GET`||e===`HEAD`||!r)return k(k({},i),n);if(er(r)){let e=t?.headers||{},n;for(let[t,r]of Object.entries(e))t.toLowerCase()===`content-type`&&(n=r);i.headers=Zn(e,`Content-Type`,n??`application/json`),i.body=JSON.stringify(r)}else i.body=r;return t?.duplex&&(i.duplex=t.duplex),k(k({},i),n)};async function sr(e,t,n,r,i,a,o){return new Promise((s,c)=>{e(n,or(t,r,i,a)).then(e=>{if(!e.ok)throw e;if(r?.noResolveJson)return e;if(o===`vectors`){let t=e.headers.get(`content-type`);if(e.headers.get(`content-length`)===`0`||e.status===204||!t||!t.includes(`application/json`))return{}}return e.json()}).then(e=>s(e)).catch(e=>ar(e,c,r,o))})}function cr(e=`storage`){return{get:async(t,n,r,i)=>sr(t,`GET`,n,r,i,void 0,e),post:async(t,n,r,i,a)=>sr(t,`POST`,n,i,a,r,e),put:async(t,n,r,i,a)=>sr(t,`PUT`,n,i,a,r,e),head:async(t,n,r,i)=>sr(t,`HEAD`,n,k(k({},r),{},{noResolveJson:!0}),i,void 0,e),remove:async(t,n,r,i,a)=>sr(t,`DELETE`,n,i,a,r,e)}}var{get:lr,post:ur,put:dr,head:fr,remove:pr}=cr(`storage`),mr=cr(`vectors`),hr=class{constructor(e,t={},n,r=`storage`){this.shouldThrowOnError=!1,this.url=e,this.headers=Qn(t),this.fetch=$n(n),this.namespace=r}throwOnError(){return this.shouldThrowOnError=!0,this}setHeader(e,t){return this.headers=Zn(this.headers,e,t),this}async handleOperation(e){var t=this;try{return{data:await e(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Jn(e))return{data:null,error:e};throw e}}},gr=Symbol.toStringTag,_r=class{constructor(e,t){this.downloadFn=e,this.shouldThrowOnError=t,this[gr]=`StreamDownloadBuilder`,this.promise=null}then(e,t){return this.getPromise().then(e,t)}catch(e){return this.getPromise().catch(e)}finally(e){return this.getPromise().finally(e)}getPromise(){return this.promise||=this.execute(),this.promise}async execute(){var e=this;try{return{data:(await e.downloadFn()).body,error:null}}catch(t){if(e.shouldThrowOnError)throw t;if(Jn(t))return{data:null,error:t};throw t}}},vr=Symbol.toStringTag,yr=class{constructor(e,t){this.downloadFn=e,this.shouldThrowOnError=t,this[vr]=`BlobDownloadBuilder`,this.promise=null}asStream(){return new _r(this.downloadFn,this.shouldThrowOnError)}then(e,t){return this.getPromise().then(e,t)}catch(e){return this.getPromise().catch(e)}finally(e){return this.getPromise().finally(e)}getPromise(){return this.promise||=this.execute(),this.promise}async execute(){var e=this;try{return{data:await(await e.downloadFn()).blob(),error:null}}catch(t){if(e.shouldThrowOnError)throw t;if(Jn(t))return{data:null,error:t};throw t}}},br={limit:100,offset:0,sortBy:{column:`name`,order:`asc`}},xr={cacheControl:`3600`,contentType:`text/plain;charset=UTF-8`,upsert:!1};function Sr(e){let t=Object.fromEntries(Object.entries(e??{}).filter(([,e])=>e!==void 0));return k(k({},xr),t)}var Cr=class extends hr{constructor(e,t={},n,r){super(e,t,r,`storage`),this.bucketId=n}async uploadOrUpdate(e,t,n,r){var i=this;return i.handleOperation(async()=>{let a,o=Sr(r),s=k(k({},i.headers),e===`POST`&&{"x-upsert":String(o.upsert)}),c=o.metadata;if(typeof Blob<`u`&&n instanceof Blob||typeof FormData<`u`&&n instanceof FormData?a=i.prepareUploadFormData(n,o):(a=n,s[`cache-control`]=`max-age=${o.cacheControl}`,s[`content-type`]=o.contentType,o.contentEncoding&&(s[`content-encoding`]=o.contentEncoding),c&&(s[`x-metadata`]=i.toBase64(i.encodeMetadata(c))),(typeof ReadableStream<`u`&&a instanceof ReadableStream||a&&typeof a==`object`&&`pipe`in a&&typeof a.pipe==`function`)&&!o.duplex&&(o.duplex=`half`)),r?.headers)for(let[e,t]of Object.entries(r.headers))s=Zn(s,e,t);let l=i._removeEmptyFolders(t),u=i._getFinalPath(l),d=await(e==`PUT`?dr:ur)(i.fetch,`${i.url}/object/${u}`,a,k({headers:s},o?.duplex?{duplex:o.duplex}:{}));return{path:l,id:d.Id,fullPath:d.Key}})}async upload(e,t,n){return this.uploadOrUpdate(`POST`,e,t,n)}async uploadToSignedUrl(e,t,n,r){var i=this;let a=i._removeEmptyFolders(e),o=i._getFinalPath(a),s=new URL(i.url+`/object/upload/sign/${o}`);return s.searchParams.set(`token`,t),i.handleOperation(async()=>{let e,t=Sr(r),o=k(k({},i.headers),{"x-upsert":String(t.upsert)}),c=t.metadata;if(typeof Blob<`u`&&n instanceof Blob||typeof FormData<`u`&&n instanceof FormData?e=i.prepareUploadFormData(n,t):(e=n,o[`cache-control`]=`max-age=${t.cacheControl}`,o[`content-type`]=t.contentType,t.contentEncoding&&(o[`content-encoding`]=t.contentEncoding),c&&(o[`x-metadata`]=i.toBase64(i.encodeMetadata(c))),(typeof ReadableStream<`u`&&e instanceof ReadableStream||e&&typeof e==`object`&&`pipe`in e&&typeof e.pipe==`function`)&&!t.duplex&&(t.duplex=`half`)),r?.headers)for(let[e,t]of Object.entries(r.headers))o=Zn(o,e,t);return{path:a,fullPath:(await dr(i.fetch,s.toString(),e,k({headers:o},t?.duplex?{duplex:t.duplex}:{}))).Key}})}async createSignedUploadUrl(e,t){var n=this;return n.handleOperation(async()=>{let r=n._getFinalPath(e),i=k({},n.headers);t?.upsert&&(i[`x-upsert`]=`true`);let a=await ur(n.fetch,`${n.url}/object/upload/sign/${r}`,{},{headers:i}),o=new URL(n.url+a.url),s=o.searchParams.get(`token`);if(!s)throw new qn(`No token returned by API`);return{signedUrl:o.toString(),path:e,token:s}})}async update(e,t,n){return this.uploadOrUpdate(`PUT`,e,t,n)}async move(e,t,n){var r=this;return r.handleOperation(async()=>await ur(r.fetch,`${r.url}/object/move`,{bucketId:r.bucketId,sourceKey:e,destinationKey:t,destinationBucket:n?.destinationBucket,sourceVersionId:n?.sourceVersionId},{headers:r.headers}))}async copy(e,t,n){var r=this;return r.handleOperation(async()=>{let i=n;return{path:(await ur(r.fetch,`${r.url}/object/copy`,{bucketId:r.bucketId,sourceKey:e,destinationKey:t,destinationBucket:n?.destinationBucket,sourceVersionId:n?.sourceVersionId,copyMetadata:typeof i?.copyMetadata==`boolean`?i.copyMetadata:void 0,metadata:i?.copyMetadata===!1?i.metadata:void 0},{headers:r.headers})).Key}})}async createSignedUrl(e,t,n){var r=this;return r.handleOperation(async()=>{let i=r._getFinalPath(e),a=typeof n?.transform==`object`&&n.transform!==null&&Object.keys(n.transform).length>0,o=await ur(r.fetch,`${r.url}/object/sign/${i}`,k(k({expiresIn:t},a?{transform:n.transform}:{}),n?.versionId==null?{}:{versionId:n.versionId}),{headers:r.headers}),s=new URLSearchParams;n?.download&&s.set(`download`,n.download===!0?``:n.download),n?.cacheNonce!=null&&s.set(`cacheNonce`,String(n.cacheNonce));let c=s.toString();return{signedUrl:encodeURI(`${r.url}${o.signedURL}${c?`&${c}`:``}`)}})}async createSignedUrls(e,t,n){var r=this;return r.handleOperation(async()=>{let i=await ur(r.fetch,`${r.url}/object/sign/${r.bucketId}`,{expiresIn:t,paths:e},{headers:r.headers}),a=new URLSearchParams;n?.download&&a.set(`download`,n.download===!0?``:n.download),n?.cacheNonce!=null&&a.set(`cacheNonce`,String(n.cacheNonce));let o=a.toString();return i.map(e=>k(k({},e),{},{signedUrl:e.signedURL?encodeURI(`${r.url}${e.signedURL}${o?`&${o}`:``}`):null}))})}download(e,t,n){let r=typeof t?.transform==`object`&&t.transform!==null&&Object.keys(t.transform).length>0?`render/image/authenticated`:`object`,i=new URLSearchParams;t?.transform&&this.applyTransformOptsToQuery(i,t.transform),t?.cacheNonce!=null&&i.set(`cacheNonce`,String(t.cacheNonce)),t?.versionId!=null&&i.set(`versionId`,String(t.versionId));let a=i.toString(),o=this._getFinalPath(e);return new yr(()=>lr(this.fetch,`${this.url}/${r}/${o}${a?`?${a}`:``}`,{headers:this.headers,noResolveJson:!0},n),this.shouldThrowOnError)}async info(e,t){var n=this;let r=n._getFinalPath(e),i=new URLSearchParams;t?.versionId!=null&&i.set(`versionId`,String(t.versionId));let a=i.toString();return n.handleOperation(async()=>tr(await lr(n.fetch,`${n.url}/object/info/${r}${a?`?${a}`:``}`,{headers:n.headers})))}async exists(e){let{error:t}=await this.info(e);if(!t)return{data:!0,error:null};if(t instanceof Yn&&(t.code===`NoSuchKey`||t.status===404&&t.code===void 0))return{data:!1,error:t};throw t}getPublicUrl(e,t){let n=this._getFinalPath(e),r=new URLSearchParams;t?.download&&r.set(`download`,t.download===!0?``:t.download),t?.transform&&this.applyTransformOptsToQuery(r,t.transform),t?.cacheNonce!=null&&r.set(`cacheNonce`,String(t.cacheNonce)),t?.versionId!=null&&r.set(`versionId`,String(t.versionId));let i=r.toString(),a=typeof t?.transform==`object`&&t.transform!==null&&Object.keys(t.transform).length>0?`render/image`:`object`;return{data:{publicUrl:encodeURI(`${this.url}/${a}/public/${n}`)+(i?`?${i}`:``)}}}async remove(e){var t=this;return t.handleOperation(async()=>await pr(t.fetch,`${t.url}/object/${t.bucketId}`,{prefixes:e},{headers:t.headers}))}async purgeCache(e,t,n){var r=this;return r.handleOperation(async()=>{let i=rr(r._getFinalPath(e)),a=new URLSearchParams;t?.transformations&&a.set(`transformations`,`true`);let o=a.toString();return await pr(r.fetch,`${r.url}/cdn/${i}${o?`?${o}`:``}`,{},{headers:r.headers},n)})}async list(e,t,n){var r=this;return r.handleOperation(async()=>{let i=t?.sortBy?k(k({},br.sortBy),t.sortBy):br.sortBy,a=k(k(k({},br),t),{},{sortBy:i,prefix:e||``});return await ur(r.fetch,`${r.url}/object/list/${r.bucketId}`,a,{headers:r.headers},n)})}async listV2(e,t){var n=this;return n.handleOperation(async()=>{let r=k({},e);return await ur(n.fetch,`${n.url}/object/list-v2/${n.bucketId}`,r,{headers:n.headers},t)})}prepareUploadFormData(e,t){let n=new FormData,r=[];e instanceof FormData?e.forEach((e,t)=>{typeof e==`string`?n.append(t,e):r.push([t,e])}):r.push([``,e]),n.has(`cacheControl`)||n.append(`cacheControl`,t.cacheControl),t.metadata&&!n.has(`metadata`)&&n.append(`metadata`,this.encodeMetadata(t.metadata)),t.contentEncoding&&!n.has(`contentEncoding`)&&n.append(`contentEncoding`,t.contentEncoding);for(let[e,t]of r)n.append(e,t);return n}encodeMetadata(e){return JSON.stringify(e)}toBase64(e){return typeof Buffer<`u`?Buffer.from(e).toString(`base64`):btoa(e)}_getFinalPath(e){return`${this.bucketId}/${e.replace(/^\/+/,``)}`}_removeEmptyFolders(e){return e.replace(/^\/|\/$/g,``).replace(/\/+/g,`/`)}applyTransformOptsToQuery(e,t){return t.width&&e.set(`width`,t.width.toString()),t.height&&e.set(`height`,t.height.toString()),t.resize&&e.set(`resize`,t.resize),t.format&&e.set(`format`,t.format),t.quality&&e.set(`quality`,t.quality.toString()),e}},wr={"X-Client-Info":`storage-js/2.119.0`},Tr=class extends hr{constructor(e,t={},n,r){let i=new URL(e);r?.useNewHostname&&/supabase\.(co|in|red)$/.test(i.hostname)&&!i.hostname.includes(`storage.supabase.`)&&(i.hostname=i.hostname.replace(`supabase.`,`storage.supabase.`));let a=i.href.replace(/\/$/,``),o=k(k({},wr),t);super(a,o,n,`storage`)}async listBuckets(e){var t=this;return t.handleOperation(async()=>{let n=t.listBucketOptionsToQueryString(e);return await lr(t.fetch,`${t.url}/bucket${n}`,{headers:t.headers})})}async getBucket(e){var t=this;return t.handleOperation(async()=>await lr(t.fetch,`${t.url}/bucket/${e}`,{headers:t.headers}))}async createBucket(e,t={public:!1}){var n=this;return n.handleOperation(async()=>await ur(n.fetch,`${n.url}/bucket`,{id:e,name:e,type:t.type,public:t.public,file_size_limit:t.fileSizeLimit,allowed_mime_types:t.allowedMimeTypes,versioning_status:t.versioningStatus},{headers:n.headers}))}async updateBucket(e,t){var n=this;return n.handleOperation(async()=>await dr(n.fetch,`${n.url}/bucket/${e}`,{id:e,name:e,public:t.public,file_size_limit:t.fileSizeLimit,allowed_mime_types:t.allowedMimeTypes,versioning_status:t.versioningStatus},{headers:n.headers}))}async emptyBucket(e){var t=this;return t.handleOperation(async()=>await ur(t.fetch,`${t.url}/bucket/${e}/empty`,{},{headers:t.headers}))}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await pr(t.fetch,`${t.url}/bucket/${e}`,{},{headers:t.headers}))}async getBucketLifecycle(e){var t=this;return t.handleOperation(async()=>await lr(t.fetch,t.bucketLifecycleUrl(e),{headers:t.headers}))}async updateBucketLifecycle(e,t){var n=this;return n.handleOperation(async()=>await dr(n.fetch,n.bucketLifecycleUrl(e),t,{headers:n.headers}))}async deleteBucketLifecycle(e){var t=this;return t.handleOperation(async()=>await pr(t.fetch,t.bucketLifecycleUrl(e),{},{headers:t.headers}))}async purgeBucketCache(e,t,n){var r=this;return r.handleOperation(async()=>{let i=new URLSearchParams;t?.transformations&&i.set(`transformations`,`true`);let a=i.toString();return await pr(r.fetch,`${r.url}/cdn/${rr(e)}${a?`?${a}`:``}`,{},{headers:r.headers},n)})}bucketLifecycleUrl(e){return`${this.url}/bucket/${rr(e)}/lifecycle`}listBucketOptionsToQueryString(e){let t={};return e&&(`limit`in e&&(t.limit=String(e.limit)),`offset`in e&&(t.offset=String(e.offset)),e.search&&(t.search=e.search),e.sortColumn&&(t.sortColumn=e.sortColumn),e.sortOrder&&(t.sortOrder=e.sortOrder)),Object.keys(t).length>0?`?`+new URLSearchParams(t).toString():``}},Er=class extends hr{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=k(k({},wr),t);super(r,i,n,`storage`)}async createBucket(e){var t=this;return t.handleOperation(async()=>await ur(t.fetch,`${t.url}/bucket`,{name:e},{headers:t.headers}))}async listBuckets(e){var t=this;return t.handleOperation(async()=>{let n=new URLSearchParams;e?.limit!==void 0&&n.set(`limit`,e.limit.toString()),e?.offset!==void 0&&n.set(`offset`,e.offset.toString()),e?.sortColumn&&n.set(`sortColumn`,e.sortColumn),e?.sortOrder&&n.set(`sortOrder`,e.sortOrder),e?.search&&n.set(`search`,e.search);let r=n.toString(),i=r?`${t.url}/bucket?${r}`:`${t.url}/bucket`;return await lr(t.fetch,i,{headers:t.headers})})}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await pr(t.fetch,`${t.url}/bucket/${e}`,{},{headers:t.headers}))}from(e){var t=this;if(!nr(e))throw new qn(`Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.`);let n=new Vn({baseUrl:this.url,catalogName:e,auth:{type:`custom`,getHeaders:async()=>t.headers},fetch:this.fetch}),r=this.shouldThrowOnError;return new Proxy(n,{get(e,t){let n=e[t];return typeof n==`function`?async(...t)=>{try{return{data:await n.apply(e,t),error:null}}catch(e){if(r)throw e;return{data:null,error:e}}}:n}})}},Dr=class extends hr{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=k(k({},wr),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async createIndex(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/CreateIndex`,e,{headers:t.headers})||{})}async getIndex(e,t){var n=this;return n.handleOperation(async()=>await mr.post(n.fetch,`${n.url}/GetIndex`,{vectorBucketName:e,indexName:t},{headers:n.headers}))}async listIndexes(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/ListIndexes`,e,{headers:t.headers}))}async deleteIndex(e,t){var n=this;return n.handleOperation(async()=>await mr.post(n.fetch,`${n.url}/DeleteIndex`,{vectorBucketName:e,indexName:t},{headers:n.headers})||{})}},Or=class extends hr{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=k(k({},wr),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async putVectors(e){var t=this;if(e.vectors.length<1||e.vectors.length>500)throw Error(`Vector batch size must be between 1 and 500 items`);return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/PutVectors`,e,{headers:t.headers})||{})}async getVectors(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/GetVectors`,e,{headers:t.headers}))}async listVectors(e){var t=this;if(e.segmentCount!==void 0){if(e.segmentCount<1||e.segmentCount>16)throw Error(`segmentCount must be between 1 and 16`);if(e.segmentIndex!==void 0&&(e.segmentIndex<0||e.segmentIndex>=e.segmentCount))throw Error(`segmentIndex must be between 0 and ${e.segmentCount-1}`)}return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/ListVectors`,e,{headers:t.headers}))}async queryVectors(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/QueryVectors`,e,{headers:t.headers}))}async deleteVectors(e){var t=this;if(e.keys.length<1||e.keys.length>500)throw Error(`Keys batch size must be between 1 and 500 items`);return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/DeleteVectors`,e,{headers:t.headers})||{})}},kr=class extends hr{constructor(e,t={},n){let r=e.replace(/\/$/,``),i=k(k({},wr),{},{"Content-Type":`application/json`},t);super(r,i,n,`vectors`)}async createBucket(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/CreateVectorBucket`,{vectorBucketName:e},{headers:t.headers})||{})}async getBucket(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/GetVectorBucket`,{vectorBucketName:e},{headers:t.headers}))}async listBuckets(e={}){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/ListVectorBuckets`,e,{headers:t.headers}))}async deleteBucket(e){var t=this;return t.handleOperation(async()=>await mr.post(t.fetch,`${t.url}/DeleteVectorBucket`,{vectorBucketName:e},{headers:t.headers})||{})}},Ar=class extends kr{constructor(e,t={}){super(e,t.headers||{},t.fetch)}from(e){return new jr(this.url,this.headers,e,this.fetch)}async createBucket(e){var t=()=>super.createBucket,n=this;return t().call(n,e)}async getBucket(e){var t=()=>super.getBucket,n=this;return t().call(n,e)}async listBuckets(e={}){var t=()=>super.listBuckets,n=this;return t().call(n,e)}async deleteBucket(e){var t=()=>super.deleteBucket,n=this;return t().call(n,e)}},jr=class extends Dr{constructor(e,t,n,r){super(e,t,r),this.vectorBucketName=n}async createIndex(e){var t=()=>super.createIndex,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName}))}async listIndexes(e={}){var t=()=>super.listIndexes,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName}))}async getIndex(e){var t=()=>super.getIndex,n=this;return t().call(n,n.vectorBucketName,e)}async deleteIndex(e){var t=()=>super.deleteIndex,n=this;return t().call(n,n.vectorBucketName,e)}index(e){return new Mr(this.url,this.headers,this.vectorBucketName,e,this.fetch)}},Mr=class extends Or{constructor(e,t,n,r,i){super(e,t,i),this.vectorBucketName=n,this.indexName=r}async putVectors(e){var t=()=>super.putVectors,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async getVectors(e){var t=()=>super.getVectors,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async listVectors(e={}){var t=()=>super.listVectors,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async queryVectors(e){var t=()=>super.queryVectors,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async deleteVectors(e){var t=()=>super.deleteVectors,n=this;return t().call(n,k(k({},e),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}},Nr=class extends Tr{constructor(e,t={},n,r){super(e,t,n,r)}from(e){return new Cr(this.url,this.headers,e,this.fetch)}get vectors(){return new Ar(this.url+`/vector`,{headers:this.headers,fetch:this.fetch})}get analytics(){return new Er(this.url+`/iceberg`,this.headers,this.fetch)}};function Pr(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i{let e=Array(128);for(let t=0;t=6;)n(li[t.queue>>t.queuedBits-6&63]),t.queuedBits-=6;else if(t.queuedBits>0)for(t.queue<<=6-t.queuedBits,t.queuedBits=6;t.queuedBits>=6;)n(li[t.queue>>t.queuedBits-6&63]),t.queuedBits-=6}function pi(e,t,n){let r=di[e];if(r>-1)for(t.queue=t.queue<<6|r,t.queuedBits+=6;t.queuedBits>=8;)n(t.queue>>t.queuedBits-8&255),t.queuedBits-=8;else if(r===-2)return;else throw Error(`Invalid Base64-URL character "${String.fromCharCode(e)}"`)}function mi(e){let t=[],n=e=>{t.push(String.fromCodePoint(e))},r={utf8seq:0,codepoint:0},i={queue:0,queuedBits:0},a=e=>{_i(e,r,n)};for(let t=0;t>6),t(128|e&63);else if(e<=65535)t(224|e>>12),t(128|e>>6&63),t(128|e&63);else if(e<=1114111)t(240|e>>18),t(128|e>>12&63),t(128|e>>6&63),t(128|e&63);else throw Error(`Unrecognized Unicode codepoint: ${e.toString(16)}`)}function gi(e,t){for(let n=0;n55295&&r<=56319){let t=(r-55296)*1024&65535;r=(e.charCodeAt(n+1)-56320&65535|t)+65536,n+=1}hi(r,t)}}function _i(e,t,n){if(t.utf8seq===0){if(e<=127){n(e);return}for(let n=1;n<6;n+=1)if(!(e>>7-n&1)){t.utf8seq=n;break}if(t.utf8seq===2)t.codepoint=e&31;else if(t.utf8seq===3)t.codepoint=e&15;else if(t.utf8seq===4)t.codepoint=e&7;else throw Error(`Invalid UTF-8 sequence`);--t.utf8seq}else if(t.utf8seq>0){if(e<=127)throw Error(`Invalid UTF-8 sequence`);t.codepoint=t.codepoint<<6|e&63,--t.utf8seq,t.utf8seq===0&&n(t.codepoint)}}function vi(e){let t=[],n={queue:0,queuedBits:0},r=e=>{t.push(e)};for(let t=0;tt.push(e)),new Uint8Array(t)}function bi(e){let t=[],n={queue:0,queuedBits:0},r=e=>{t.push(e)};return e.forEach(e=>fi(e,n,r)),fi(null,n,r),t.join(``)}function xi(e){return Math.round(Date.now()/1e3)+e}function Si(){return Symbol(`auth-callback`)}var Ci=()=>typeof window<`u`&&typeof document<`u`,wi={tested:!1,writable:!1},Ti=()=>{if(!Ci())return!1;try{if(typeof globalThis.localStorage!=`object`)return!1}catch{return!1}if(wi.tested)return wi.writable;let e=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(e,e),globalThis.localStorage.removeItem(e),wi.tested=!0,wi.writable=!0}catch{wi.tested=!0,wi.writable=!1}return wi.writable};function Ei(e){let t={},n=new URL(e);if(n.hash&&n.hash[0]===`#`)try{new URLSearchParams(n.hash.substring(1)).forEach((e,n)=>{t[n]=e})}catch{}return n.searchParams.forEach((e,n)=>{t[n]=e}),t}var Di=e=>e?(...t)=>e(...t):(...e)=>fetch(...e),Oi=e=>typeof e==`object`&&!!e&&`status`in e&&`ok`in e&&`json`in e&&typeof e.json==`function`,ki=async(e,t,n)=>{await e.setItem(t,JSON.stringify(n))},Ai=async(e,t)=>{let n=await e.getItem(t);if(!n)return null;try{return JSON.parse(n)}catch{return null}},ji=async(e,t)=>{await e.removeItem(t)},Mi=class e{constructor(){this.promise=new e.promiseConstructor((e,t)=>{this.resolve=e,this.reject=t})}};Mi.promiseConstructor=Promise;function Ni(e){let t=e.split(`.`);if(t.length!==3)throw new ci(`Invalid JWT structure`);for(let e=0;e{setTimeout(()=>t(null),e)})}function Fi(e,t){return new Promise((n,r)=>{(async()=>{for(let i=0;i<1/0;i++)try{let r=await e(i);if(!t(i,null,r)){n(r);return}}catch(e){if(!t(i,e)){r(e);return}}})()})}function Ii(e){return(`0`+e.toString(16)).substr(-2)}function Li(){let e=new Uint32Array(56);if(typeof crypto>`u`){let e=``;for(let t=0;t<56;t++)e+=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~`.charAt(Math.floor(Math.random()*66));return e}return crypto.getRandomValues(e),Array.from(e,Ii).join(``)}async function Ri(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest(`SHA-256`,t),r=new Uint8Array(n);return Array.from(r).map(e=>String.fromCharCode(e)).join(``)}async function zi(e){if(typeof crypto>`u`||crypto.subtle===void 0||typeof TextEncoder>`u`)return console.warn(`WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.`),e;let t=await Ri(e);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}var Bi=/^[a-zA-Z0-9_-]{8,64}$/;function Vi(e){return typeof e==`string`&&Bi.test(e)?e:null}function Hi(){if(typeof crypto<`u`&&typeof crypto.getRandomValues==`function`){let e=new Uint8Array(16);return crypto.getRandomValues(e),Array.from(e,Ii).join(``)}let e=``;for(let t=0;t<32;t++)e+=Math.floor(Math.random()*16).toString(16);return e}var Ui=(e,t)=>`${e}-flow-${t}-code-verifier`,Wi=e=>`${e}-flows-code-verifier`;async function Gi(e,t){let n=await Ai(e,Wi(t));return Array.isArray(n)?n.filter(e=>Vi(e)!==null):[]}async function Ki(e,t,n,r,i){await ki(e,Ui(t,n),r);let a=(await Gi(e,t)).filter(e=>e!==n);for(a.push(n);a.length>5;){let n=a.shift();await ji(e,Ui(t,n)),i?.(n)}await ki(e,Wi(t),a),await ki(e,`${t}-code-verifier`,r)}async function qi(e,t,n){if(n){let r=await Ai(e,Ui(t,n));return{verifier:typeof r==`string`?r:null,flowId:n}}let r=await Ai(e,`${t}-code-verifier`);return{verifier:typeof r==`string`?r:null,flowId:null}}async function Ji(e,t,n){let r=`${t}-code-verifier`;if(!n){await ji(e,r);return}let i=Ui(t,n),a=await Ai(e,i);await ji(e,i);let o=await Gi(e,t),s=o.filter(e=>e!==n);s.length!==o.length&&(s.length>0?await ki(e,Wi(t),s):await ji(e,Wi(t))),a!=null&&a===await Ai(e,r)&&await ji(e,r)}async function Yi(e,t){let n=await Gi(e,t);for(let r of n)await ji(e,Ui(t,r));await ji(e,Wi(t)),await ji(e,`${t}-code-verifier`)}function Xi(e,t){let n=e.indexOf(`#`),r=n===-1?e:e.slice(0,n),i=n===-1?``:e.slice(n),a=r.indexOf(`?`);if(a!==-1){let e=r.slice(0,a),t=r.slice(a+1).split(`&`).filter(e=>e!==``&&e!==`sb_flow_id`&&!e.startsWith(`sb_flow_id=`));r=t.length>0?`${e}?${t.join(`&`)}`:e}let o=r.includes(`?`)?`&`:`?`;return`${r}${o}${Gr}=${encodeURIComponent(t)}${i}`}async function Zi(e,t,n=!1,r){let i=Li(),a=i;n&&(a+=`/recovery`);let o=Hi();await Ki(e,t,o,a,r);let s=await zi(i);return[s,i===s?`plain`:`s256`,o]}var Qi=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;function $i(e){let t=e.headers.get(Hr);if(!t||!t.match(Qi))return null;try{return new Date(`${t}T00:00:00.0Z`)}catch{return null}}function ea(e){if(!e)throw Error(`Missing exp claim`);if(e<=Math.floor(Date.now()/1e3))throw Error(`JWT has expired`)}function ta(e){switch(e){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 Error(`Invalid alg claim`)}}var na=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function ra(e){if(!na.test(e))throw Error(`@supabase/auth-js: Expected parameter to be UUID but is not`)}function ia(e){if(!e.recoveryCodes)throw Error("@supabase/auth-js: the MFA recovery codes API is experimental and disabled by default. Enable it by passing `auth: { experimental: { recoveryCodes: true } }` to createClient (or to the GoTrueClient constructor).")}function aa(){return new Proxy({},{get:(e,t)=>{if(t===`__isUserNotAvailableProxy`)return!0;if(typeof t==`symbol`){let e=t.toString();if(e===`Symbol(Symbol.toPrimitive)`||e===`Symbol(Symbol.toStringTag)`||e===`Symbol(util.inspect.custom)`)return}throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${t}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,t)=>{throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${t}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,t)=>{throw Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${t}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function oa(e,t){return new Proxy(e,{get:(e,n,r)=>{if(n===`__isInsecureUserWarningProxy`)return!0;if(typeof n==`symbol`){let t=n.toString();if(t===`Symbol(Symbol.toPrimitive)`||t===`Symbol(Symbol.toStringTag)`||t===`Symbol(util.inspect.custom)`||t===`Symbol(nodejs.util.inspect.custom)`)return Reflect.get(e,n,r)}return!t.value&&typeof n==`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.`),t.value=!0),Reflect.get(e,n,r)}})}function sa(e){return JSON.parse(JSON.stringify(e))}var ca=e=>{if(typeof e==`object`&&e){let t=e;if(typeof t.msg==`string`)return t.msg;if(typeof t.message==`string`)return t.message;if(typeof t.error_description==`string`)return t.error_description;if(typeof t.error==`string`)return t.error}return JSON.stringify(e)},la=[500,501,502,503,504,520,521,522,523,524,525,526,527,528,529,530];async function ua(e){if(!Oi(e))throw new ri(ca(e),0);let t;try{t=await e.json()}catch(t){throw la.includes(e.status)?new ri(e.statusText||`HTTP ${e.status}`,e.status):new Yr(ca(t),t)}if(la.includes(e.status))throw new ri(ca(t),e.status);let n,r=$i(e);if(r&&r.getTime()>=Ur[`2024-01-01`].timestamp&&typeof t==`object`&&t&&typeof t.code==`string`?n=t.code:typeof t==`object`&&t&&typeof t.error_code==`string`&&(n=t.error_code),!n){if(typeof t==`object`&&t&&typeof t.weak_password==`object`&&t.weak_password&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.reasons.reduce((e,t)=>e&&typeof t==`string`,!0))throw new si(ca(t),e.status,t.weak_password.reasons)}else if(n===`weak_password`)throw new si(ca(t),e.status,t.weak_password?.reasons||[]);else if(n===`session_not_found`)throw new M;throw new qr(ca(t),e.status||500,n)}var N=(e,t,n,r)=>{let i={method:e,headers:t?.headers||{}};return e===`GET`?i:(i.headers=Object.assign({"Content-Type":`application/json;charset=UTF-8`},t?.headers),i.body=JSON.stringify(r),Object.assign(Object.assign({},i),n))};async function P(e,t,n,r){let i=Object.assign({},r?.headers);i[`X-Supabase-Api-Version`]||(i[Hr]=Ur[`2024-01-01`].name),r?.jwt&&(i.Authorization=`Bearer ${r.jwt}`);let a=r?.query??{};r?.redirectTo&&(a.redirect_to=r.redirectTo);let o=await da(e,t,n+(Object.keys(a).length?`?`+new URLSearchParams(a).toString():``),{headers:i,noResolveJson:r?.noResolveJson},{},r?.body);return r?.xform?r?.xform(o):{data:Object.assign({},o),error:null}}async function da(e,t,n,r,i,a){let o=N(t,r,i,a),s;try{s=await e(n,Object.assign({},o))}catch(e){throw new ri(ca(e),0)}if(s.ok||await ua(s),r?.noResolveJson)return s;try{return await s.json()}catch(e){await ua(e)}}function F(e){let t=null;_a(e)&&(t=Object.assign({},e),e.expires_at||(t.expires_at=xi(e.expires_in)));let n=e.user??(typeof e?.id==`string`?e:null);return{data:{session:t,user:n},error:null}}function fa(e){let t=F(e);return!t.error&&e.weak_password&&typeof e.weak_password==`object`&&Array.isArray(e.weak_password.reasons)&&e.weak_password.reasons.length&&e.weak_password.message&&typeof e.weak_password.message==`string`&&e.weak_password.reasons.reduce((e,t)=>e&&typeof t==`string`,!0)&&(t.data.weak_password=e.weak_password),t}function pa(e){return{data:{user:e.user??e},error:null}}function ma(e){return{data:e,error:null}}function ha(e){let{action_link:t,email_otp:n,hashed_token:r,redirect_to:i,verification_type:a}=e,o=Pr(e,[`action_link`,`email_otp`,`hashed_token`,`redirect_to`,`verification_type`]);return{data:{properties:{action_link:t,email_otp:n,hashed_token:r,redirect_to:i,verification_type:a},user:Object.assign({},o)},error:null}}function ga(e){return e}function _a(e){return!!e.access_token&&!!e.refresh_token&&!!e.expires_in}var va=[`global`,`local`,`others`],ya=class{constructor({url:e=``,headers:t={},fetch:n,experimental:r}){this.url=e,this.headers=t,this.fetch=Di(n),this.experimental=r??{},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,t=va[0]){if(va.indexOf(t)<0)throw Error(`@supabase/auth-js: Parameter scope must be one of ${va.join(`, `)}`);try{return await P(this.fetch,`POST`,`${this.url}/logout?scope=${t}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(e){if(A(e))return{data:null,error:e};throw e}}async inviteUserByEmail(e,t={}){try{return await P(this.fetch,`POST`,`${this.url}/invite`,{body:{email:e,data:t.data},headers:this.headers,redirectTo:t.redirectTo,xform:pa})}catch(e){if(A(e))return{data:{user:null},error:e};throw e}}async generateLink(e){try{let{options:t}=e,n=Pr(e,[`options`]),r=Object.assign(Object.assign({},n),t);return`newEmail`in n&&(r.new_email=n?.newEmail,delete r.newEmail),await P(this.fetch,`POST`,`${this.url}/admin/generate_link`,{body:r,headers:this.headers,xform:ha,redirectTo:t?.redirectTo})}catch(e){if(A(e))return{data:{properties:null,user:null},error:e};throw e}}async createUser(e){try{return await P(this.fetch,`POST`,`${this.url}/admin/users`,{body:e,headers:this.headers,xform:pa})}catch(e){if(A(e))return{data:{user:null},error:e};throw e}}async listUsers(e){try{let t={nextPage:null,lastPage:0,total:0},n=await P(this.fetch,`GET`,`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(e?.page)?.toString()??``,per_page:(e?.perPage)?.toString()??``},xform:ga});if(n.error)throw n.error;let r=await n.json(),i=n.headers.get(`x-total-count`)??0,a=n.headers.get(`link`)?.split(`,`)??[];return a.length>0&&(a.forEach(e=>{let n=parseInt(e.split(`;`)[0].split(`=`)[1].substring(0,1)),r=JSON.parse(e.split(`;`)[1].split(`=`)[1]);t[`${r}Page`]=n}),t.total=parseInt(i)),{data:Object.assign(Object.assign({},r),t),error:null}}catch(e){if(A(e))return{data:{users:[]},error:e};throw e}}async getUserById(e){ra(e);try{return await P(this.fetch,`GET`,`${this.url}/admin/users/${e}`,{headers:this.headers,xform:pa})}catch(e){if(A(e))return{data:{user:null},error:e};throw e}}async updateUserById(e,t){ra(e);try{return await P(this.fetch,`PUT`,`${this.url}/admin/users/${e}`,{body:t,headers:this.headers,xform:pa})}catch(e){if(A(e))return{data:{user:null},error:e};throw e}}async deleteUser(e,t=!1){ra(e);try{let{data:n,error:r}=await this.getUserById(e);return r?{data:{user:null},error:r}:(await P(this.fetch,`DELETE`,`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:t},noResolveJson:!0}),{data:n,error:null})}catch(e){if(A(e))return{data:{user:null},error:e};throw e}}async _listFactors(e){ra(e.userId);try{let{data:t,error:n}=await P(this.fetch,`GET`,`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:e=>({data:{factors:e},error:null})});return{data:t,error:n}}catch(e){if(A(e))return{data:null,error:e};throw e}}async _deleteFactor(e){ra(e.userId),ra(e.id);try{return{data:await P(this.fetch,`DELETE`,`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(e){if(A(e))return{data:null,error:e};throw e}}async _listOAuthClients(e){try{let t={nextPage:null,lastPage:0,total:0},n=await P(this.fetch,`GET`,`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(e?.page)?.toString()??``,per_page:(e?.perPage)?.toString()??``},xform:ga});if(n.error)throw n.error;let r=await n.json(),i=n.headers.get(`x-total-count`)??0,a=n.headers.get(`link`)?.split(`,`)??[];return a.length>0&&(a.forEach(e=>{let n=parseInt(e.split(`;`)[0].split(`=`)[1].substring(0,1)),r=JSON.parse(e.split(`;`)[1].split(`=`)[1]);t[`${r}Page`]=n}),t.total=parseInt(i)),{data:Object.assign(Object.assign({},r),t),error:null}}catch(e){if(A(e))return{data:{clients:[]},error:e};throw e}}async _createOAuthClient(e){try{return await P(this.fetch,`POST`,`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _getOAuthClient(e){try{return await P(this.fetch,`GET`,`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _updateOAuthClient(e,t){try{return await P(this.fetch,`PUT`,`${this.url}/admin/oauth/clients/${e}`,{body:t,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _deleteOAuthClient(e){try{return await P(this.fetch,`DELETE`,`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(A(e))return{data:null,error:e};throw e}}async _regenerateOAuthClientSecret(e){try{return await P(this.fetch,`POST`,`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _listCustomProviders(e){try{let t={};return e?.type&&(t.type=e.type),await P(this.fetch,`GET`,`${this.url}/admin/custom-providers`,{headers:this.headers,query:t,xform:e=>({data:{providers:e?.providers??[]},error:null})})}catch(e){if(A(e))return{data:{providers:[]},error:e};throw e}}async _createCustomProvider(e){try{return await P(this.fetch,`POST`,`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _getCustomProvider(e){try{return await P(this.fetch,`GET`,`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _updateCustomProvider(e,t){try{return await P(this.fetch,`PUT`,`${this.url}/admin/custom-providers/${e}`,{body:t,headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _deleteCustomProvider(e){try{return await P(this.fetch,`DELETE`,`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(A(e))return{data:null,error:e};throw e}}async _adminListPasskeys(e){ra(e.userId);try{return await P(this.fetch,`GET`,`${this.url}/admin/users/${e.userId}/passkeys`,{headers:this.headers,xform:e=>({data:e,error:null})})}catch(e){if(A(e))return{data:null,error:e};throw e}}async _adminDeletePasskey(e){ra(e.userId),ra(e.passkeyId);try{return await P(this.fetch,`DELETE`,`${this.url}/admin/users/${e.userId}/passkeys/${e.passkeyId}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(e){if(A(e))return{data:null,error:e};throw e}}};function ba(e={}){return{getItem:t=>e[t]||null,setItem:(t,n)=>{e[t]=n},removeItem:t=>{delete e[t]}}}globalThis&&Ti()&&globalThis.localStorage&&globalThis.localStorage.getItem(`supabase.gotrue-js.locks.debug`);var xa=class extends Error{constructor(e){super(e),this.isAcquireTimeout=!0}};function Sa(){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 Ca(e){if(!/^0x[a-fA-F0-9]{40}$/.test(e))throw Error(`@supabase/auth-js: Address "${e}" is invalid.`);return e.toLowerCase()}function wa(e){return parseInt(e,16)}function Ta(e){let t=new TextEncoder().encode(e);return`0x`+Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}function Ea(e){let{chainId:t,domain:n,expirationTime:r,issuedAt:i=new Date,nonce:a,notBefore:o,requestId:s,resources:c,scheme:l,uri:u,version:d}=e;if(!Number.isInteger(t))throw Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${t}`);if(!n)throw Error(`@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.`);if(a&&a.length<8)throw Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${a}`);if(!u)throw Error(`@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.`);if(d!==`1`)throw Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${d}`);if(e.statement?.includes(` `))throw Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${e.statement}`);let f=Ca(e.address),p=`${l?`${l}://${n}`:n} wants you to sign in with your Ethereum account:\n${f}\n\n${e.statement?`${e.statement}\n`:``}`,m=`URI: ${u}\nVersion: ${d}\nChain ID: ${t}${a?`\nNonce: ${a}`:``}\nIssued At: ${i.toISOString()}`;if(r&&(m+=`\nExpiration Time: ${r.toISOString()}`),o&&(m+=`\nNot Before: ${o.toISOString()}`),s&&(m+=`\nRequest ID: ${s}`),c){let e=` Resources:`;for(let t of c){if(!t||typeof t!=`string`)throw Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${t}`);e+=`\n- ${t}`}m+=e}return`${p}\n${m}`}var I=class extends Error{constructor({message:e,code:t,cause:n,name:r}){super(e,{cause:n}),this.__isWebAuthnError=!0,this.name=r??(n instanceof Error?n.name:void 0)??`Unknown Error`,this.code=t}toJSON(){return{name:this.name,message:this.message,code:this.code}}},Da=class extends I{constructor(e,t){super({code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:t,message:e}),this.name=`WebAuthnUnknownError`,this.originalError=t}};function Oa({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new I({message:`Registration ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`ConstraintError`){if(n.authenticatorSelection?.requireResidentKey===!0)return new I({message:`Discoverable credentials were required but no available authenticator supported it`,code:`ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT`,cause:e});if(t.mediation===`conditional`&&n.authenticatorSelection?.userVerification===`required`)return new I({message:`User verification was required during automatic registration but it could not be performed`,code:`ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE`,cause:e});if(n.authenticatorSelection?.userVerification===`required`)return new I({message:`User verification was required but no available authenticator supported it`,code:`ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT`,cause:e})}else if(e.name===`InvalidStateError`)return new I({message:`The authenticator was previously registered`,code:`ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED`,cause:e});else if(e.name===`NotAllowedError`)return new I({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`NotSupportedError`)return n.pubKeyCredParams.filter(e=>e.type===`public-key`).length===0?new I({message:`No entry in pubKeyCredParams was of type "public-key"`,code:`ERROR_MALFORMED_PUBKEYCREDPARAMS`,cause:e}):new I({message:`No available authenticator supported any of the specified pubKeyCredParams algorithms`,code:`ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!L(t))return new I({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rp.id!==t)return new I({message:`The RP ID "${n.rp.id}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`TypeError`){if(n.user.id.byteLength<1||n.user.id.byteLength>64)return new I({message:`User ID was not between 1 and 64 characters`,code:`ERROR_INVALID_USER_ID_LENGTH`,cause:e})}else if(e.name===`UnknownError`)return new I({message:`The authenticator was unable to process the specified options, or could not create a new credential`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return new I({message:`a Non-Webauthn related error has occurred`,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e})}function ka({error:e,options:t}){let{publicKey:n}=t;if(!n)throw Error(`options was missing required publicKey property`);if(e.name===`AbortError`){if(t.signal instanceof AbortSignal)return new I({message:`Authentication ceremony was sent an abort signal`,code:`ERROR_CEREMONY_ABORTED`,cause:e})}else if(e.name===`NotAllowedError`)return new I({message:e.message,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e});else if(e.name===`SecurityError`){let t=window.location.hostname;if(!L(t))return new I({message:`${window.location.hostname} is an invalid domain`,code:`ERROR_INVALID_DOMAIN`,cause:e});if(n.rpId!==t)return new I({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:`ERROR_INVALID_RP_ID`,cause:e})}else if(e.name===`UnknownError`)return new I({message:`The authenticator was unable to process the specified options, or could not create a new assertion signature`,code:`ERROR_AUTHENTICATOR_GENERAL_ERROR`,cause:e});return new I({message:`a Non-Webauthn related error has occurred`,code:`ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY`,cause:e})}var Aa=new class{createNewAbortSignal(){if(this.controller){let e=Error(`Cancelling existing WebAuthn API call for new one`);e.name=`AbortError`,this.controller.abort(e)}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=Error(`Manually cancelling existing WebAuthn API call`);e.name=`AbortError`,this.controller.abort(e),this.controller=void 0}}};function ja(e){if(!e)throw Error(`Credential creation options are required`);if(typeof PublicKeyCredential<`u`&&`parseCreationOptionsFromJSON`in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON==`function`)return PublicKeyCredential.parseCreationOptionsFromJSON(e);let{challenge:t,user:n,excludeCredentials:r}=e,i=Pr(e,[`challenge`,`user`,`excludeCredentials`]),a=vi(t).buffer,o=Object.assign(Object.assign({},n),{id:vi(n.id).buffer}),s=Object.assign(Object.assign({},i),{challenge:a,user:o});if(r&&r.length>0){s.excludeCredentials=Array(r.length);for(let e=0;e0){a.allowCredentials=Array(n.length);for(let e=0;etypeof e==`object`&&!!e&&!Array.isArray(e),n=e=>e instanceof ArrayBuffer||ArrayBuffer.isView(e),r={};for(let i of e)if(i)for(let e in i){let a=i[e];if(a!==void 0){if(Array.isArray(a))r[e]=a;else if(n(a))r[e]=a;else if(t(a)){let n=r[e];r[e]=t(n)?Ba(n,a):Ba(a)}else r[e]=a}}return r}function Va(e,t){return Ba(Ra,e,t||{})}function Ha(e,t){return Ba(za,e,t||{})}var Ua=class{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:t,friendlyName:n,signal:r},i){try{let{data:a,error:o}=await this.client.mfa.challenge({factorId:e,webauthn:t});if(!a)return{data:null,error:o};let s=r??Aa.createNewAbortSignal();if(a.webauthn.type===`create`){let{user:e}=a.webauthn.credential_options.publicKey;if(!e.name){let t=n;if(t)e.name=`${e.id}:${t}`;else{let t=(await this.client.getUser()).data.user,n=t?.user_metadata?.name||t?.email||t?.id||`User`;e.name=`${e.id}:${n}`}}e.displayName||=e.name}switch(a.webauthn.type){case`create`:{let{data:t,error:n}=await Ia({publicKey:Va(a.webauthn.credential_options.publicKey,i?.create),signal:s});return t?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:t}},error:null}:{data:null,error:n}}case`request`:{let t=Ha(a.webauthn.credential_options.publicKey,i?.request),{data:n,error:r}=await La(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:t,signal:s}));return n?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:n}},error:null}:{data:null,error:r}}}}catch(e){return A(e)?{data:null,error:e}:{data:null,error:new Yr(`Unexpected error in challenge`,e)}}}async _verify({challengeId:e,factorId:t,webauthn:n}){return this.client.mfa.verify({factorId:t,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:t=typeof window<`u`?window.location.hostname:void 0,rpOrigins:n=typeof window<`u`?[window.location.origin]:void 0,signal:r}={}},i){if(!t)return{data:null,error:new Kr(`rpId is required for WebAuthn authentication`)};try{if(!Fa())return{data:null,error:new Yr(`Browser does not support WebAuthn`,null)};let{data:a,error:o}=await this.challenge({factorId:e,webauthn:{rpId:t,rpOrigins:n},signal:r},{request:i});if(!a)return{data:null,error:o};let{webauthn:s}=a;return this._verify({factorId:e,challengeId:a.challengeId,webauthn:{type:s.type,rpId:t,rpOrigins:n,credential_response:s.credential_response}})}catch(e){return A(e)?{data:null,error:e}:{data:null,error:new Yr(`Unexpected error in authenticate`,e)}}}async _register({friendlyName:e,webauthn:{rpId:t=typeof window<`u`?window.location.hostname:void 0,rpOrigins:n=typeof window<`u`?[window.location.origin]:void 0,signal:r}={}},i){if(!t)return{data:null,error:new Kr(`rpId is required for WebAuthn registration`)};try{if(!Fa())return{data:null,error:new Yr(`Browser does not support WebAuthn`,null)};let{data:a,error:o}=await this._enroll({friendlyName:e});if(!a)return await this.client.mfa.listFactors().then(t=>t.data?.all.find(t=>t.factor_type===`webauthn`&&t.friendly_name===e&&t.status===`unverified`)).then(e=>e?this.client.mfa.unenroll({factorId:e?.id}):void 0),{data:null,error:o};let{data:s,error:c}=await this._challenge({factorId:a.id,friendlyName:a.friendly_name,webauthn:{rpId:t,rpOrigins:n},signal:r},{create:i});return s?this._verify({factorId:a.id,challengeId:s.challengeId,webauthn:{rpId:t,rpOrigins:n,type:s.webauthn.type,credential_response:s.webauthn.credential_response}}):{data:null,error:c}}catch(e){return A(e)?{data:null,error:e}:{data:null,error:new Yr(`Unexpected error in register`,e)}}}};Sa();var Wa={url:zr,storageKey:Br,autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,headers:Vr,flowType:`implicit`,debug:!1,hasCustomAuthorizationHeader:!1,throwOnError:!1,lockAcquireTimeout:5e3,skipAutoInitialize:!1,experimental:{}},Ga={},Ka=!1,qa=class e{get jwks(){return Ga[this.storageKey]?.jwks??{keys:[]}}set jwks(e){Ga[this.storageKey]=Object.assign(Object.assign({},Ga[this.storageKey]),{jwks:e})}get jwks_cached_at(){return Ga[this.storageKey]?.cachedAt??-(2**53-1)}set jwks_cached_at(e){Ga[this.storageKey]=Object.assign(Object.assign({},Ga[this.storageKey]),{cachedAt:e})}constructor(t){var n;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.lastRefreshFailure=null,this._sessionRemovalEpoch=0,this.initializePromise=null,this._pendingInitNotifications=null,this.detectSessionInUrl=!0,this.hasCustomAuthorizationHeader=!1,this.suppressGetSessionWarning=!1,this.lock=null,this.lockAcquired=!1,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let r=Object.assign(Object.assign({},Wa),t);if(this.storageKey=r.storageKey,this.instanceID=e.nextInstanceID[this.storageKey]??0,e.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!r.debug,typeof r.debug==`function`&&(this.logger=r.debug),this.instanceID>0&&Ci()){let e=`${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(e),this.logDebugMessages&&console.trace(e)}if(this.persistSession=r.persistSession,this.autoRefreshToken=r.autoRefreshToken,this.experimental=r.experimental??{},this.admin=new ya({url:r.url,headers:r.headers,fetch:r.fetch,experimental:this.experimental}),this.url=r.url,this.headers=r.headers,this.fetch=Di(r.fetch),this.detectSessionInUrl=r.detectSessionInUrl,this.flowType=r.flowType,this.hasCustomAuthorizationHeader=r.hasCustomAuthorizationHeader,this.throwOnError=r.throwOnError,this.lockAcquireTimeout=r.lockAcquireTimeout,r.lock!=null&&(this.lock=r.lock,Ka||(Ka=!0,console.warn(`${this._logPrefix()} The "lock" option is deprecated and will be removed in v3. The client now coordinates session refreshes without a lock, so most apps can drop the option. See https://github.com/supabase/supabase-js/blob/master/packages/core/auth-js/migrations/lockless-coordination.md`))),this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=-(2**53-1)),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 Ua(this),recoveryCodes:{getStatus:this._getRecoveryCodesStatus.bind(this),generate:this._generateRecoveryCodes.bind(this),verify:this._verifyRecoveryCode.bind(this),regenerate:this._regenerateRecoveryCodes.bind(this),unenroll:this._unenrollRecoveryCodes.bind(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?(r.storage?this.storage=r.storage:Ti()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=ba(this.memoryStorage)),r.userStorage&&(this.userStorage=r.userStorage)):(this.memoryStorage={},this.storage=ba(this.memoryStorage)),Ci()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey)}catch(e){console.error(`Failed to create a new BroadcastChannel, multi-tab state changes will not be available`,e)}(n=this.broadcastChannel)==null||n.addEventListener(`message`,async e=>{this._debug(`received broadcast notification from other tab or client`,e),(e.data.event===`TOKEN_REFRESHED`||e.data.event===`SIGNED_IN`)&&(this.lastRefreshFailure=null);try{await this._notifyAllSubscribers(e.data.event,e.data.session,!1)}catch(e){this._debug(`#broadcastChannel`,`error`,e)}})}r.skipAutoInitialize||this.initialize().catch(e=>{this._debug(`#initialize()`,`error`,e)})}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return`GoTrueClient@${this.storageKey}:${this.instanceID} (${Fr}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){if(this.initializePromise)return await this.initializePromise;this._pendingInitNotifications=[],this.initializePromise=(async()=>this.lock==null?await this._initialize():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))();let e=await this.initializePromise,t=this._pendingInitNotifications??[];this._pendingInitNotifications=null;for(let e of t)await this._notifyAllSubscribers(e.event,e.session,e.broadcast);return e}async _initialize(){try{let e={},t=`none`;if(Ci()&&(e=Ei(window.location.href),this._isImplicitGrantCallback(e)?t=`implicit`:await this._isPKCECallback(e)&&(t=`pkce`)),Ci()&&this.detectSessionInUrl&&t!==`none`){let{data:n,error:r}=await this._getSessionFromURL(e,t);if(r){if(this._debug(`#_initialize()`,`error detecting session from URL`,r),ei(r)){let e=r.details?.code;if(e===`identity_already_exists`||e===`identity_not_found`||e===`single_identity_not_deletable`)return{error:r}}return{error:r}}let{session:i,redirectType:a}=n;return this._debug(`#_initialize()`,`detected session in URL`,i,`redirect type`,a),await this._saveSession(i),setTimeout(async()=>{a===`recovery`?await this._notifyAllSubscribers(`PASSWORD_RECOVERY`,i):await this._notifyAllSubscribers(`SIGNED_IN`,i)},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(e){return A(e)?this._returnResult({error:e}):this._returnResult({error:new Yr(`Unexpected error during initialization`,e)})}finally{await this._handleVisibilityChange(),this._debug(`#_initialize()`,`end`)}}async signInAnonymously(e){try{let{data:t,error:n}=await P(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,body:{data:e?.options?.data??{},gotrue_meta_security:{captcha_token:e?.options?.captchaToken}},xform:F});if(n||!t)return this._returnResult({data:{user:null,session:null},error:n});let r=t.session,i=t.user;return t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(`SIGNED_IN`,r)),this._returnResult({data:{user:i,session:r},error:null})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signUp(e){let t=null;try{let n;if(`email`in e){let{email:r,password:i,options:a}=e,o=null,s=null;this.flowType===`pkce`&&([o,s,t]=await this._getCodeChallengeAndMethod()),n=await P(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(a?.emailRedirectTo,t),body:{email:r,password:i,data:a?.data??{},gotrue_meta_security:{captcha_token:a?.captchaToken},code_challenge:o,code_challenge_method:s},xform:F})}else if(`phone`in e){let{phone:t,password:r,options:i}=e;n=await P(this.fetch,`POST`,`${this.url}/signup`,{headers:this.headers,body:{phone:t,password:r,data:i?.data??{},channel:i?.channel??`sms`,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:F})}else throw new Qr(`You must provide either an email or phone number and a password`);let{data:r,error:i}=n;if(i||!r)return await Ji(this.storage,this.storageKey,t),this._returnResult({data:{user:null,session:null},error:i});let a=r.session,o=r.user;return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,a)),this._returnResult({data:{user:o,session:a},error:null})}catch(e){if(await Ji(this.storage,this.storageKey,t),A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithPassword(e){try{let t;if(`email`in e){let{email:n,password:r,options:i}=e;t=await P(this.fetch,`POST`,`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:n,password:r,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:fa})}else if(`phone`in e){let{phone:n,password:r,options:i}=e;t=await P(this.fetch,`POST`,`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:n,password:r,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:fa})}else throw new Qr(`You must provide either an email or phone number and a password`);let{data:n,error:r}=t;if(r)return this._returnResult({data:{user:null,session:null},error:r});if(!n||!n.session||!n.user){let e=new Zr;return this._returnResult({data:{user:null,session:null},error:e})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers(`SIGNED_IN`,n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:r})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithOAuth(e){return await this._handleProviderSignIn(e.provider,{redirectTo:e.options?.redirectTo,scopes:e.options?.scopes,queryParams:e.options?.queryParams,skipBrowserRedirect:e.options?.skipBrowserRedirect})}async exchangeCodeForSession(e,t){return await this.initializePromise,this.lock==null?this._exchangeCodeForSession(e,t):this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e,t))}async signInWithWeb3(e){let{chain:t}=e;switch(t){case`ethereum`:return await this.signInWithEthereum(e);case`solana`:return await this.signInWithSolana(e);default:throw Error(`@supabase/auth-js: Unsupported chain "${t}"`)}}async signInWithEthereum(e){let t,n;if(`message`in e)t=e.message,n=e.signature;else{let{chain:r,wallet:i,statement:a,options:o}=e,s;if(!Ci()){if(typeof i!=`object`||!o?.url)throw Error(`@supabase/auth-js: Both wallet and url must be specified in non-browser environments.`);s=i}else if(typeof i==`object`)s=i;else{let e=window;if(`ethereum`in e&&typeof e.ethereum==`object`&&`request`in e.ethereum&&typeof e.ethereum.request==`function`)s=e.ethereum;else throw 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.`)}let c=new URL(o?.url??window.location.href),l=await s.request({method:`eth_requestAccounts`}).then(e=>e).catch(()=>{throw Error(`@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid`)});if(!l||l.length===0)throw Error(`@supabase/auth-js: No accounts available. Please ensure the wallet is connected.`);let u=Ca(l[0]),d=o?.signInWithEthereum?.chainId;d||=wa(await s.request({method:`eth_chainId`})),t=Ea({domain:c.host,address:u,statement:a,uri:c.href,version:`1`,chainId:d,nonce:o?.signInWithEthereum?.nonce,issuedAt:o?.signInWithEthereum?.issuedAt??new Date,expirationTime:o?.signInWithEthereum?.expirationTime,notBefore:o?.signInWithEthereum?.notBefore,requestId:o?.signInWithEthereum?.requestId,resources:o?.signInWithEthereum?.resources}),n=await s.request({method:`personal_sign`,params:[Ta(t),u]})}try{let{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:`ethereum`,message:t,signature:n},e.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options?.captchaToken}}:null),xform:F});if(i)throw i;if(!r||!r.session||!r.user){let e=new Zr;return this._returnResult({data:{user:null,session:null},error:e})}return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,r.session)),this._returnResult({data:Object.assign({},r),error:i})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithSolana(e){let t,n;if(`message`in e)t=e.message,n=e.signature;else{let{chain:r,wallet:i,statement:a,options:o}=e,s;if(!Ci()){if(typeof i!=`object`||!o?.url)throw Error(`@supabase/auth-js: Both wallet and url must be specified in non-browser environments.`);s=i}else if(typeof i==`object`)s=i;else{let e=window;if(`solana`in e&&typeof e.solana==`object`&&(`signIn`in e.solana&&typeof e.solana.signIn==`function`||`signMessage`in e.solana&&typeof e.solana.signMessage==`function`))s=e.solana;else throw 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.`)}let c=new URL(o?.url??window.location.href);if(`signIn`in s&&s.signIn){let e=await s.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},o?.signInWithSolana),{version:`1`,domain:c.host,uri:c.href}),a?{statement:a}:null)),r;if(Array.isArray(e)&&e[0]&&typeof e[0]==`object`)r=e[0];else if(e&&typeof e==`object`&&`signedMessage`in e&&`signature`in e)r=e;else throw Error(`@supabase/auth-js: Wallet method signIn() returned unrecognized value`);if(`signedMessage`in r&&`signature`in r&&(typeof r.signedMessage==`string`||r.signedMessage instanceof Uint8Array)&&r.signature instanceof Uint8Array)t=typeof r.signedMessage==`string`?r.signedMessage:new TextDecoder().decode(r.signedMessage),n=r.signature;else throw Error(`@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields`)}else{if(!(`signMessage`in s)||typeof s.signMessage!=`function`||!(`publicKey`in s)||typeof s!=`object`||!s.publicKey||!(`toBase58`in s.publicKey)||typeof s.publicKey.toBase58!=`function`)throw Error(`@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API`);t=[`${c.host} wants you to sign in with your Solana account:`,s.publicKey.toBase58(),...a?[``,a,``]:[``],`Version: 1`,`URI: ${c.href}`,`Issued At: ${o?.signInWithSolana?.issuedAt??new Date().toISOString()}`,...o?.signInWithSolana?.notBefore?[`Not Before: ${o.signInWithSolana.notBefore}`]:[],...o?.signInWithSolana?.expirationTime?[`Expiration Time: ${o.signInWithSolana.expirationTime}`]:[],...o?.signInWithSolana?.chainId?[`Chain ID: ${o.signInWithSolana.chainId}`]:[],...o?.signInWithSolana?.nonce?[`Nonce: ${o.signInWithSolana.nonce}`]:[],...o?.signInWithSolana?.requestId?[`Request ID: ${o.signInWithSolana.requestId}`]:[],...o?.signInWithSolana?.resources?.length?[`Resources`,...o.signInWithSolana.resources.map(e=>`- ${e}`)]:[]].join(` `);let e=await s.signMessage(new TextEncoder().encode(t),`utf8`);if(!e||!(e instanceof Uint8Array))throw Error(`@supabase/auth-js: Wallet signMessage() API returned an recognized value`);n=e}}try{let{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:`solana`,message:t,signature:bi(n)},e.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options?.captchaToken}}:null),xform:F});if(i)throw i;if(!r||!r.session||!r.user){let e=new Zr;return this._returnResult({data:{user:null,session:null},error:e})}return r.session&&(await this._saveSession(r.session),await this._notifyAllSubscribers(`SIGNED_IN`,r.session)),this._returnResult({data:Object.assign({},r),error:i})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async _exchangeCodeForSession(e,t){let n=t?.flowId!=null,r=n?Vi(t?.flowId):Ci()?Vi(Ei(window.location.href)[Gr]):null;n&&!r&&this._debug(`#_exchangeCodeForSession()`,`provided flowId is not a valid flow id`,t?.flowId);let{verifier:i,flowId:a}=n&&!r?{verifier:null,flowId:null}:await qi(this.storage,this.storageKey,r),[o,s]=(i??``).split(`/`);try{if(!o&&this.flowType===`pkce`)throw new ni;let{data:t,error:n}=await P(this.fetch,`POST`,`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:o},xform:F});if(await Ji(this.storage,this.storageKey,a),n)throw n;if(!t||!t.session||!t.user){let e=new Zr;return this._returnResult({data:{user:null,session:null,redirectType:null},error:e})}return t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(s===`recovery`?`PASSWORD_RECOVERY`:`SIGNED_IN`,t.session)),this._returnResult({data:Object.assign(Object.assign({},t),{redirectType:s??null}),error:n})}catch(e){if(await Ji(this.storage,this.storageKey,a),A(e))return this._returnResult({data:{user:null,session:null,redirectType:null},error:e});throw e}}async signInWithIdToken(e){try{let{options:t,provider:n,token:r,access_token:i,nonce:a}=e,{data:o,error:s}=await P(this.fetch,`POST`,`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:r,access_token:i,nonce:a,gotrue_meta_security:{captcha_token:t?.captchaToken}},xform:F});if(s)return this._returnResult({data:{user:null,session:null},error:s});if(!o||!o.session||!o.user){let e=new Zr;return this._returnResult({data:{user:null,session:null},error:e})}return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers(`SIGNED_IN`,o.session)),this._returnResult({data:o,error:s})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithOtp(e){let t=null;try{if(`email`in e){let{email:n,options:r}=e,i=null,a=null;this.flowType===`pkce`&&([i,a,t]=await this._getCodeChallengeAndMethod());let{error:o}=await P(this.fetch,`POST`,`${this.url}/otp`,{headers:this.headers,body:{email:n,data:r?.data??{},create_user:r?.shouldCreateUser??!0,gotrue_meta_security:{captcha_token:r?.captchaToken},code_challenge:i,code_challenge_method:a},redirectTo:this._maybeAppendFlowIdToRedirect(r?.emailRedirectTo,t)});return this._returnResult({data:{user:null,session:null},error:o})}if(`phone`in e){let{phone:t,options:n}=e,{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/otp`,{headers:this.headers,body:{phone:t,data:n?.data??{},create_user:n?.shouldCreateUser??!0,gotrue_meta_security:{captcha_token:n?.captchaToken},channel:n?.channel??`sms`}});return this._returnResult({data:{user:null,session:null,messageId:r?.message_id},error:i})}throw new Qr(`You must provide either an email or phone number.`)}catch(e){if(await Ji(this.storage,this.storageKey,t),A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async verifyOtp(e){try{let t,n;`options`in e&&(t=e.options?.redirectTo,n=e.options?.captchaToken);let{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:n}}),redirectTo:t,xform:F});if(i)throw i;if(!r)throw Error(`An error occurred on token verification.`);let a=r.session,o=r.user;return a?.access_token&&(await this._saveSession(a),await this._notifyAllSubscribers(e.type==`recovery`?`PASSWORD_RECOVERY`:`SIGNED_IN`,a)),this._returnResult({data:{user:o,session:a},error:null})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async signInWithSSO(e){let t=null;try{let n=null,r=null;this.flowType===`pkce`&&([n,r,t]=await this._getCodeChallengeAndMethod());let i=await P(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:this._maybeAppendFlowIdToRedirect(e.options?.redirectTo,t)}),e?.options?.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:n,code_challenge_method:r}),headers:this.headers,xform:ma});return i.data?.url&&Ci()&&!e.options?.skipBrowserRedirect&&window.location.assign(i.data.url),this._returnResult(i)}catch(e){if(await Ji(this.storage,this.storageKey,t),A(e))return this._returnResult({data:null,error:e});throw e}}async reauthenticate(){return await this.initializePromise,this.lock==null?await this._reauthenticate():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)throw n;if(!t)throw new M;let{error:r}=await P(this.fetch,`GET`,`${this.url}/reauthenticate`,{headers:this.headers,jwt:t.access_token});return this._returnResult({data:{user:null,session:null},error:r})})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){let t=null;try{let n=`${this.url}/resend`;if(`email`in e){let{email:r,type:i,options:a}=e,o=null,s=null;this.flowType===`pkce`&&([o,s,t]=await this._getCodeChallengeAndMethod());let{error:c}=await P(this.fetch,`POST`,n,{headers:this.headers,body:{email:r,type:i,gotrue_meta_security:{captcha_token:a?.captchaToken},code_challenge:o,code_challenge_method:s},redirectTo:this._maybeAppendFlowIdToRedirect(a?.emailRedirectTo,t)});return c&&await Ji(this.storage,this.storageKey,t),this._returnResult({data:{user:null,session:null},error:c})}if(`phone`in e){let{phone:t,type:r,options:i}=e,{data:a,error:o}=await P(this.fetch,`POST`,n,{headers:this.headers,body:{phone:t,type:r,gotrue_meta_security:{captcha_token:i?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:a?.message_id},error:o})}throw new Qr(`You must provide either an email or phone number and a type`)}catch(e){if(await Ji(this.storage,this.storageKey,t),A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async getSession(){return await this.initializePromise,this.lock==null?await this._useSession(async e=>e):await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async e=>e))}async _acquireLock(e,t){this._debug(`#_acquireLock`,`begin`,e);try{if(this.lockAcquired){let e=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),n=(async()=>(await e,await t()))();return this.pendingInLock.push((async()=>{try{await n}catch{}})()),n}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug(`#_acquireLock`,`lock acquired for storage key`,this.storageKey);try{this.lockAcquired=!0;let e=t();for(this.pendingInLock.push((async()=>{try{await e}catch{}})()),await e;this.pendingInLock.length;){let e=[...this.pendingInLock];await Promise.all(e),this.pendingInLock.splice(0,e.length)}return await e}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{return await e(await this.__loadSession())}finally{this._debug(`#_useSession`,`end`)}}async __loadSession(){this._debug(`#__loadSession()`,`begin`),this.lock!=null&&!this.lockAcquired&&this._debug(`#__loadSession()`,`used outside of an acquired lock!`,Error().stack);try{let e=null,t=await Ai(this.storage,this.storageKey);if(this._debug(`#getSession()`,`session from storage`,t),t!==null&&(this._isValidSession(t)?e=t:(this._debug(`#getSession()`,`session from storage is not valid`),await this._removeSession())),!e)return{data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()Date.now()?this._returnResult({data:{session:await this._hydrateSessionUser(e)},error:null}):this._returnResult({data:{session:null},error:i})}return this._returnResult({data:{session:r},error:null})}finally{this._debug(`#__loadSession()`,`end`)}}async _hydrateSessionUser(e){if(this.userStorage){let t=await Ai(this.userStorage,this.storageKey+`-user`);e.user=t?.user?t.user:aa()}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let t={value:this.suppressGetSessionWarning};e.user=oa(e.user,t),t.value&&(this.suppressGetSessionWarning=!0)}return e}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let t;return t=this.lock==null?await this._getUser():await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser()),t.data.user&&(this.suppressGetSessionWarning=!0),t}async _getUser(e){try{return e?await P(this.fetch,`GET`,`${this.url}/user`,{headers:this.headers,jwt:e,xform:pa}):await this._useSession(async e=>{let{data:t,error:n}=e;if(n)throw n;return!t.session?.access_token&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new M}:await P(this.fetch,`GET`,`${this.url}/user`,{headers:this.headers,jwt:t.session?.access_token??void 0,xform:pa})})}catch(e){if(A(e))return Xr(e)&&await this._removeSession(),this._returnResult({data:{user:null},error:e});throw e}}async updateUser(e,t={}){return await this.initializePromise,this.lock==null?await this._updateUser(e,t):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,t))}async _updateUser(e,t={}){let n=null;try{return await this._useSession(async r=>{let{data:i,error:a}=r;if(a)throw a;if(!i.session)throw new M;let o=i.session,s=null,c=null;this.flowType===`pkce`&&e.email!=null&&([s,c,n]=await this._getCodeChallengeAndMethod());let{data:l,error:u}=await P(this.fetch,`PUT`,`${this.url}/user`,{headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(t?.emailRedirectTo,n),body:Object.assign(Object.assign({},e),{code_challenge:s,code_challenge_method:c}),jwt:o.access_token,xform:pa});if(u)throw u;return o.user=l.user,await this._saveSession(o),await this._notifyAllSubscribers(`USER_UPDATED`,o),this._returnResult({data:{user:o.user},error:null})})}catch(e){if(await Ji(this.storage,this.storageKey,n),A(e))return this._returnResult({data:{user:null},error:e});throw e}}async setSession(e){return await this.initializePromise,this.lock==null?await this._setSession(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new M;let t=Date.now()/1e3,n=t,r=!0,i=null,{payload:a}=Ni(e.access_token);if(a.exp&&(n=a.exp,r=n<=t),r){let{data:t,error:n}=await this._callRefreshToken(e.refresh_token);if(n)return this._returnResult({data:{user:null,session:null},error:n});if(!t)return{data:{user:null,session:null},error:null};i=t}else{let{data:r,error:a}=await this._getUser(e.access_token);if(a)return this._returnResult({data:{user:null,session:null},error:a});i={access_token:e.access_token,refresh_token:e.refresh_token,user:r.user,token_type:`bearer`,expires_in:n-t,expires_at:n},await this._saveSession(i),await this._notifyAllSubscribers(`SIGNED_IN`,i)}return this._returnResult({data:{user:i.user,session:i},error:null})}catch(e){if(A(e))return this._returnResult({data:{session:null,user:null},error:e});throw e}}async refreshSession(e){return await this.initializePromise,this.lock==null?await this._refreshSession(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async t=>{if(!e){let{data:n,error:r}=t;if(r)throw r;e=n.session??void 0}if(!e?.refresh_token)throw new M;let{data:n,error:r}=await this._callRefreshToken(e.refresh_token);return r?this._returnResult({data:{user:null,session:null},error:r}):n?this._returnResult({data:{user:n.user,session:n},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(e){if(A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async _getSessionFromURL(e,t){try{if(!Ci())throw new $r(`No browser detected.`);if(e.error||e.error_description||e.error_code)throw new $r(e.error_description||`Error in URL with unspecified error_description`,{error:e.error||`unspecified_error`,code:e.error_code||`unspecified_code`});switch(t){case`implicit`:if(this.flowType===`pkce`)throw new ti(`Not a valid PKCE flow url.`);break;case`pkce`:if(this.flowType===`implicit`)throw new $r(`Not a valid implicit grant flow url.`)}if(t===`pkce`){if(this._debug(`#_initialize()`,`begin`,`is PKCE flow`,!0),!e.code)throw new ti(`No code detected.`);let{data:t,error:n}=await this._exchangeCodeForSession(e.code,{flowId:e[Gr]});if(n)throw n;let r=new URL(window.location.href);return r.searchParams.delete(`code`),r.searchParams.delete(Gr),window.history.replaceState(window.history.state,``,r.toString()),{data:{session:t.session,redirectType:t.redirectType??null},error:null}}let{provider_token:n,provider_refresh_token:r,access_token:i,refresh_token:a,expires_in:o,expires_at:s,token_type:c}=e;if(!i||!o||!a||!c)throw new $r(`No session defined in URL`);let l=Math.round(Date.now()/1e3),u=parseInt(o),d=l+u;s&&(d=parseInt(s));let f=d-l;f*1e3<=3e4&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${f}s, should have been closer to ${u}s`);let p=d-u;l-p>=120?console.warn(`@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale`,p,d,l):l-p<0&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew`,p,d,l);let{data:m,error:h}=await this._getUser(i);if(h)throw h;let g={provider_token:n,provider_refresh_token:r,access_token:i,expires_in:u,expires_at:d,refresh_token:a,token_type:c,user:m.user};return window.location.hash=``,this._debug(`#_getSessionFromURL()`,`clearing window.location.hash`),this._returnResult({data:{session:g,redirectType:e.type},error:null})}catch(e){if(A(e))return this._returnResult({data:{session:null,redirectType:null},error:e});throw e}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl==`function`?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error||e.error_description||e.error_code)}async _isPKCECallback(e){if(!e.code)return!1;let t=Vi(e[Gr]);return t&&await Ai(this.storage,Ui(this.storageKey,t))?!0:!!await Ai(this.storage,`${this.storageKey}-code-verifier`)}async signOut(e={scope:`global`}){return await this.initializePromise,this.lock==null?await this._signOut(e):await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e=`global`}={}){return await this._useSession(async t=>{let n=async()=>{await this._removeSession()},{data:r,error:i}=t;if(i&&!Xr(i))return e===`local`&&ii(i)&&await n(),this._returnResult({error:i});let a=r.session?.access_token,o=null,s=e=>{if(o)throw o.thrown;return e};if(e===`local`)try{await n()}catch(e){o={thrown:e}}if(a){let{error:t}=await this.admin.signOut(a,e);if(t&&!(Jr(t)&&(t.status===404||t.status===401||t.status===403)||Xr(t)))return s(this._returnResult({error:t}))}return e===`global`&&await n(),s(this._returnResult({error:null}))})}onAuthStateChange(e){let t=Si(),n={id:t,callback:e,unsubscribe:()=>{this._debug(`#unsubscribe()`,`state change callback with id removed`,t),this.stateChangeEmitters.delete(t)}};return this._debug(`#onAuthStateChange()`,`registered callback with id`,t),this.stateChangeEmitters.set(t,n),(async()=>{await this.initializePromise,this.lock==null?await this._emitInitialSession(t):await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(t)})})(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async t=>{try{let{data:{session:n},error:r}=t;if(r)throw r;await this.stateChangeEmitters.get(e)?.callback(`INITIAL_SESSION`,n),this._debug(`INITIAL_SESSION`,`callback id`,e,`session`,n)}catch(t){if(await this.stateChangeEmitters.get(e)?.callback(`INITIAL_SESSION`,null),this._debug(`INITIAL_SESSION`,`callback id`,e,`error`,t),oi(t))return;Xr(t)||ii(t)||Jr(t)&&(t.code===`refresh_token_not_found`||t.code===`refresh_token_already_used`||t.code===`session_expired`)?console.warn(t):console.error(t)}})}async resetPasswordForEmail(e,t={}){let n=null,r=null,i=null;this.flowType===`pkce`&&([n,r,i]=await this._getCodeChallengeAndMethod(!0));try{return await P(this.fetch,`POST`,`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:r,gotrue_meta_security:{captcha_token:t.captchaToken}},headers:this.headers,redirectTo:this._maybeAppendFlowIdToRedirect(t.redirectTo,i)})}catch(e){if(await Ji(this.storage,this.storageKey,i),A(e))return this._returnResult({data:null,error:e});throw e}}async getUserIdentities(){try{let{data:e,error:t}=await this.getUser();if(t)throw t;return this._returnResult({data:{identities:e.user.identities??[]},error:null})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async linkIdentity(e){return`token`in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){let t=null;try{let{data:n,error:r}=await this._useSession(async n=>{let{data:r,error:i}=n;if(i)throw i;let{url:a,flowId:o}=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:e.options?.redirectTo,scopes:e.options?.scopes,queryParams:e.options?.queryParams,skipBrowserRedirect:!0});return t=o,await P(this.fetch,`GET`,a,{headers:this.headers,jwt:r.session?.access_token??void 0})});if(r)throw r;return Ci()&&!e.options?.skipBrowserRedirect&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url,flowId:t},error:null})}catch(n){if(A(n))return this._returnResult({data:{provider:e.provider,url:null,flowId:t},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async t=>{try{let{error:n,data:{session:r}}=t;if(n)throw n;let{options:i,provider:a,token:o,access_token:s,nonce:c}=e,{data:l,error:u}=await P(this.fetch,`POST`,`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:r?.access_token??void 0,body:{provider:a,id_token:o,access_token:s,nonce:c,link_identity:!0,gotrue_meta_security:{captcha_token:i?.captchaToken}},xform:F});return u?this._returnResult({data:{user:null,session:null},error:u}):!l||!l.session||!l.user?this._returnResult({data:{user:null,session:null},error:new Zr}):(l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers(`USER_UPDATED`,l.session)),this._returnResult({data:l,error:u}))}catch(e){if(await Ji(this.storage,this.storageKey,null),A(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}})}async unlinkIdentity(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)throw r;return await P(this.fetch,`DELETE`,`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:n.session?.access_token??void 0})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _refreshAccessToken(e){let t=`#_refreshAccessToken()`;this._debug(t,`begin`);try{let n=Date.now();return await Fi(async n=>(n>0&&await Pi(200*2**(n-1)),this._debug(t,`refreshing attempt`,n),await P(this.fetch,`POST`,`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:F})),(e,t)=>{let r=200*2**e;return t&&ii(t)&&Date.now()+r-n<3e4})}catch(e){if(this._debug(t,`error`,e),A(e))return this._returnResult({data:{session:null,user:null},error:e});throw e}finally{this._debug(t,`end`)}}_isValidSession(e){return typeof e==`object`&&!!e&&`access_token`in e&&`refresh_token`in e&&`expires_at`in e}async _handleProviderSignIn(e,t){let{url:n,flowId:r}=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:t.redirectTo,scopes:t.scopes,queryParams:t.queryParams});return this._debug(`#_handleProviderSignIn()`,`provider`,e,`options`,t,`url`,n),Ci()&&!t.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n,flowId:r},error:null}}async _recoverAndRefresh(){let e=`#_recoverAndRefresh()`;this._debug(e,`begin`);try{let t=await Ai(this.storage,this.storageKey);if(t&&this.userStorage){let e=await Ai(this.userStorage,this.storageKey+`-user`);!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!e&&(e={user:t.user},await ki(this.userStorage,this.storageKey+`-user`,e)),t.user=e?.user??aa()}else if(t&&!t.user&&!t.user){let e=await Ai(this.storage,this.storageKey+`-user`);e&&e?.user?(t.user=e.user,await ji(this.storage,this.storageKey+`-user`),await ki(this.storage,this.storageKey,t)):t.user=aa()}if(this._debug(e,`session from storage`,t),!this._isValidSession(t)){this._debug(e,`session is not valid`),t!==null&&await this._removeSession();return}let n=(t.expires_at??1/0)*1e3-Date.now(){});let t=await Ai(this.storage,this.storageKey),{data:n,error:i}=await this._refreshAccessToken(e);if(i)throw i;if(!n.session)throw new M;let a=await Ai(this.storage,this.storageKey);if(t!==null&&(a===null||a.refresh_token!==t.refresh_token)){this._debug(r,`commit guard: storage changed since refresh started, discarding rotated tokens`,{startedWith:`present`,nowHolds:a?`replaced`:`cleared`});let e={data:null,error:new ai};return this.refreshingDeferred.resolve(e),e}let o=this._sessionRemovalEpoch;if(await this._saveSession(n.session),this._sessionRemovalEpoch!==o){this._debug(r,`commit guard (post-save): _removeSession ran during _saveSession, undoing write`),await ji(this.storage,this.storageKey),this.userStorage&&await ji(this.userStorage,this.storageKey+`-user`);let e={data:null,error:new ai};return this.refreshingDeferred.resolve(e),e}await this._notifyAllSubscribers(`TOKEN_REFRESHED`,n.session);let s={data:n.session,error:null};return this.lastRefreshFailure=null,this.refreshingDeferred.resolve(s),s}catch(i){if(this._debug(r,`error`,i),A(i)){let n={data:null,error:i};if(!ii(i)){let e=await Ai(this.storage,this.storageKey);e?.expires_at&&e.expires_at*1e3>Date.now()?this._debug(r,`proactive refresh failed, access token still valid — preserving session`):await this._removeSession()}return this.lastRefreshFailure={refreshToken:e,result:n,expiresAt:Date.now()+Rr},(t=this.refreshingDeferred)==null||t.resolve(n),n}throw(n=this.refreshingDeferred)==null||n.reject(i),i}finally{this.refreshingDeferred=null,this._debug(r,`end`)}}async _notifyAllSubscribers(e,t,n=!0){if(this._pendingInitNotifications!==null&&n){this._pendingInitNotifications.push({event:e,session:t,broadcast:n});return}let r=`#_notifyAllSubscribers(${e})`;this._debug(r,`begin`,t,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:t});let r=[],i=Array.from(this.stateChangeEmitters.values()).map(async n=>{try{await n.callback(e,t)}catch(e){r.push(e)}});if(await Promise.all(i),r.length>0){for(let e=0;ethis._autoRefreshTokenTick(),Ir);this.autoRefreshTicker=e,e&&typeof e==`object`&&typeof e.unref==`function`?e.unref():typeof Deno<`u`&&typeof Deno.unrefTimer==`function`&&Deno.unrefTimer(e);let t=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick()},0);this.autoRefreshTickTimeout=t,t&&typeof t==`object`&&typeof t.unref==`function`?t.unref():typeof Deno<`u`&&typeof Deno.unrefTimer==`function`&&Deno.unrefTimer(t)}async _stopAutoRefresh(){this._debug(`#_stopAutoRefresh()`);let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let t=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,t&&clearTimeout(t)}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh()}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh()}async dispose(){var e;this._removeVisibilityChangedCallback(),await this._stopAutoRefresh(),(e=this.broadcastChannel)==null||e.close(),this.broadcastChannel=null,this.stateChangeEmitters.clear()}async _autoRefreshTokenTick(){if(this._debug(`#_autoRefreshTokenTick()`,`begin`),this.lock!=null)try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async t=>{let{data:{session:n}}=t;if(!n||!n.refresh_token||!n.expires_at){this._debug(`#_autoRefreshTokenTick()`,`no session`);return}let r=Math.floor((n.expires_at*1e3-e)/Ir);this._debug(`#_autoRefreshTokenTick()`,`access token expires in ${r} ticks, a tick lasts ${Ir}ms, refresh threshold is 3 ticks`),r<=3&&await this._callRefreshToken(n.refresh_token)})}catch(e){console.error(`Auto refresh tick failed with error. This is likely a transient error.`,e)}}finally{this._debug(`#_autoRefreshTokenTick()`,`end`)}})}catch(e){if(e instanceof xa)this._debug(`auto refresh token tick lock not available`);else throw e}else if(this.refreshingDeferred!==null)this._debug(`#_autoRefreshTokenTick()`,`refresh already in flight, skipping`);else try{let e=Date.now();try{await this._useSession(async t=>{let{data:{session:n}}=t;if(!n||!n.refresh_token||!n.expires_at){this._debug(`#_autoRefreshTokenTick()`,`no session`);return}let r=Math.floor((n.expires_at*1e3-e)/Ir);this._debug(`#_autoRefreshTokenTick()`,`access token expires in ${r} ticks, a tick lasts ${Ir}ms, refresh threshold is 3 ticks`),r<=3&&await this._callRefreshToken(n.refresh_token)})}catch(e){console.error(`Auto refresh tick failed with error. This is likely a transient error.`,e)}}finally{this._debug(`#_autoRefreshTokenTick()`,`end`)}}async _handleVisibilityChange(){if(this._debug(`#_handleVisibilityChange()`),!Ci()||!(window!=null&&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==null||window.addEventListener(`visibilitychange`,this.visibilityChangedCallback),await this._onVisibilityChanged(!0)}catch(e){console.error(`_handleVisibilityChange`,e)}}async _onVisibilityChanged(e){let t=`#_onVisibilityChanged(${e})`;if(this._debug(t,`visibilityState`,document.visibilityState),document.visibilityState===`visible`){if(this.autoRefreshToken&&this._startAutoRefresh(),!e){if(await this.initializePromise,this.lock!=null)await this._acquireLock(this.lockAcquireTimeout,async()=>{document.visibilityState===`visible`?await this._recoverAndRefresh():this._debug(t,`acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting`)});else{if(document.visibilityState!==`visible`){this._debug(t,`visibilityState is no longer visible, skipping recovery`);return}await this._recoverAndRefresh()}}}else document.visibilityState===`hidden`&&this.autoRefreshToken&&this._stopAutoRefresh()}async _getUrlForProvider(e,t,n){let r=n?.redirectTo,i=null,a=null,o=null;this.flowType===`pkce`&&([i,a,o]=await this._getCodeChallengeAndMethod(),r=this._maybeAppendFlowIdToRedirect(r,o));let s=[`provider=${encodeURIComponent(t)}`];if(r&&s.push(`redirect_to=${encodeURIComponent(r)}`),n?.scopes&&s.push(`scopes=${encodeURIComponent(n.scopes)}`),i!=null&&a!=null){let e=new URLSearchParams({code_challenge:`${encodeURIComponent(i)}`,code_challenge_method:`${encodeURIComponent(a)}`});s.push(e.toString())}if(n?.queryParams){let e=new URLSearchParams(n.queryParams);s.push(e.toString())}return n?.skipBrowserRedirect&&s.push(`skip_http_redirect=${n.skipBrowserRedirect}`),{url:`${e}?${s.join(`&`)}`,flowId:o}}_maybeAppendFlowIdToRedirect(e,t){return!e||!t||!this.experimental.appendPkceFlowIdToRedirects?e??void 0:Xi(e,t)}async _getCodeChallengeAndMethod(e=!1){return Zi(this.storage,this.storageKey,e,e=>this._debug(`#_getCodeChallengeAndMethod()`,`evicted oldest pending PKCE verifier slot`,e))}async _unenroll(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;return r?this._returnResult({data:null,error:r}):await P(this.fetch,`DELETE`,`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:n?.session?.access_token})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _enroll(e){try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType===`phone`?{phone:e.phone}:e.factorType===`totp`?{issuer:e.issuer}:{}),{data:a,error:o}=await P(this.fetch,`POST`,`${this.url}/factors`,{body:i,headers:this.headers,jwt:n?.session?.access_token});return o?this._returnResult({data:null,error:o}):(e.factorType===`totp`&&a.type===`totp`&&a?.totp?.qr_code&&(a.totp.qr_code=`data:image/svg+xml;utf-8,${a.totp.qr_code}`),this._returnResult({data:a,error:null}))})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _verify(e){let t=async()=>{try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=Object.assign({challenge_id:e.challengeId},`webauthn`in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type===`create`?Na(e.webauthn.credential_response):Pa(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:o}=await P(this.fetch,`POST`,`${this.url}/factors/${e.factorId}/verify`,{body:i,headers:this.headers,jwt:n?.session?.access_token});return o?this._returnResult({data:null,error:o}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers(`MFA_CHALLENGE_VERIFIED`,a),this._returnResult({data:a,error:o}))})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}};return this.lock==null?t():this._acquireLock(this.lockAcquireTimeout,t)}async _challenge(e){let t=async()=>{try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let i=await P(this.fetch,`POST`,`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:n?.session?.access_token});if(i.error)return i;let{data:a}=i;if(a.type!==`webauthn`)return{data:a,error:null};switch(a.webauthn.type){case`create`:return{data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:ja(a.webauthn.credential_options.publicKey)})})}),error:null};case`request`:return{data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Ma(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}};return this.lock==null?t():this._acquireLock(this.lockAcquireTimeout,t)}async _challengeAndVerify(e){let{data:t,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:t.id,code:e.code})}async _listFactors(){let{data:{user:e},error:t}=await this.getUser();if(t)return{data:null,error:t};let n={all:[],phone:[],totp:[],webauthn:[],recovery_code:[]};for(let t of e?.factors??[])n.all.push(t),t.status===`verified`&&t.factor_type in n&&Array.isArray(n[t.factor_type])&&n[t.factor_type].push(t);return{data:n,error:null}}async _getAuthenticatorAssuranceLevel(e){if(e)try{let{payload:t}=Ni(e),n=null;t.aal&&(n=t.aal);let r=n,{data:{user:i},error:a}=await this.getUser(e);if(a)return this._returnResult({data:null,error:a});((i?.factors)?.filter(e=>e.status===`verified`)??[]).length>0&&(r=`aal2`);let o=t.amr||[];return{data:{currentLevel:n,nextLevel:r,currentAuthenticationMethods:o},error:null}}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}let{data:{session:t},error:n}=await this.getSession();if(n)return this._returnResult({data:null,error:n});if(!t)return{data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:r}=Ni(t.access_token),i=null;r.aal&&(i=r.aal);let a=i;(t.user.factors?.filter(e=>e.status===`verified`)??[]).length>0&&(a=`aal2`);let o=r.amr||[];return{data:{currentLevel:i,nextLevel:a,currentAuthenticationMethods:o},error:null}}async _getRecoveryCodesStatus(){ia(this.experimental);try{return await this._useSession(async e=>{let{data:t,error:n}=e;if(n)return this._returnResult({data:null,error:n});let{data:r,error:i}=await P(this.fetch,`GET`,`${this.url}/factors/recovery-codes`,{headers:this.headers,jwt:t?.session?.access_token});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _generateRecoveryCodes(e){ia(this.experimental);try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let{data:i,error:a}=await P(this.fetch,`POST`,`${this.url}/factors/recovery-codes`,{body:e?.friendlyName?{friendly_name:e.friendlyName}:void 0,headers:this.headers,jwt:n?.session?.access_token});return a?this._returnResult({data:null,error:a}):this._returnResult({data:i,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _verifyRecoveryCode(e){ia(this.experimental);let t=async()=>{try{return await this._useSession(async t=>{let{data:n,error:r}=t;if(r)return this._returnResult({data:null,error:r});let{data:i,error:a}=await P(this.fetch,`POST`,`${this.url}/factors/recovery-codes/verify`,{body:{code:e.code},headers:this.headers,jwt:n?.session?.access_token});if(a)return this._returnResult({data:null,error:a});let o=Object.assign({expires_at:xi(i.expires_in)},i);return await this._saveSession(o),await this._notifyAllSubscribers(`MFA_CHALLENGE_VERIFIED`,o),this._returnResult({data:i,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}};return this.lock==null?t():this._acquireLock(this.lockAcquireTimeout,t)}async _regenerateRecoveryCodes(){ia(this.experimental);try{return await this._useSession(async e=>{let{data:t,error:n}=e;if(n)return this._returnResult({data:null,error:n});let{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/factors/recovery-codes/regenerate`,{headers:this.headers,jwt:t?.session?.access_token});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _unenrollRecoveryCodes(){ia(this.experimental);try{return await this._useSession(async e=>{let{data:t,error:n}=e;if(n)return this._returnResult({data:null,error:n});let{data:r,error:i}=await P(this.fetch,`DELETE`,`${this.url}/factors/recovery-codes`,{headers:this.headers,jwt:t?.session?.access_token});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _getAuthorizationDetails(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;return r?this._returnResult({data:null,error:r}):n?await P(this.fetch,`GET`,`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:e=>({data:e,error:null})}):this._returnResult({data:null,error:new M})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _approveAuthorization(e,t){try{return await this._useSession(async n=>{let{data:{session:r},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!r)return this._returnResult({data:null,error:new M});let a=await P(this.fetch,`POST`,`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:`approve`},xform:e=>({data:e,error:null})});return a.data&&a.data.redirect_url&&Ci()&&!t?.skipBrowserRedirect&&window.location.assign(a.data.redirect_url),a})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _denyAuthorization(e,t){try{return await this._useSession(async n=>{let{data:{session:r},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!r)return this._returnResult({data:null,error:new M});let a=await P(this.fetch,`POST`,`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:`deny`},xform:e=>({data:e,error:null})});return a.data&&a.data.redirect_url&&Ci()&&!t?.skipBrowserRedirect&&window.location.assign(a.data.redirect_url),a})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;return n?this._returnResult({data:null,error:n}):t?await P(this.fetch,`GET`,`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:t.access_token,xform:e=>({data:e,error:null})}):this._returnResult({data:null,error:new M})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;return r?this._returnResult({data:null,error:r}):n?(await P(this.fetch,`DELETE`,`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new M})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async fetchJwk(e,t={keys:[]}){let n=t.keys.find(t=>t.kid===e);if(n)return n;let r=Date.now();if(n=this.jwks.keys.find(t=>t.kid===e),n&&this.jwks_cached_at+6e5>r)return n;let{data:i,error:a}=await P(this.fetch,`GET`,`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(a)throw a;return!i.keys||i.keys.length===0||(this.jwks=i,this.jwks_cached_at=r,n=i.keys.find(t=>t.kid===e),!n)?null:n}async getClaims(e,t={}){try{let n=e;if(!n){let{data:e,error:t}=await this.getSession();if(t||!e.session)return this._returnResult({data:null,error:t});n=e.session.access_token}let{header:r,payload:i,signature:a,raw:{header:o,payload:s}}=Ni(n);if(!t?.allowExpired)try{ea(i.exp)}catch(e){throw new ci(e instanceof Error?e.message:`JWT validation failed`)}let c=!r.alg||r.alg.startsWith(`HS`)||!r.kid||!(`crypto`in globalThis&&`subtle`in globalThis.crypto)?null:await this.fetchJwk(r.kid,t?.keys?{keys:t.keys}:t?.jwks);if(!c){let{error:e}=await this.getUser(n);if(e)throw e;return{data:{claims:i,header:r,signature:a},error:null}}let l=ta(r.alg),u=await crypto.subtle.importKey(`jwk`,c,l,!0,[`verify`]);if(!await crypto.subtle.verify(l,u,a,yi(`${o}.${s}`)))throw new ci(`Invalid JWT signature`);return{data:{claims:i,header:r,signature:a},error:null}}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async signInWithPasskey(e){try{if(!Fa())return this._returnResult({data:null,error:new Yr(`Browser does not support WebAuthn`,null)});let{data:t,error:n}=await this._startPasskeyAuthentication({options:{captchaToken:e?.options?.captchaToken}});if(n||!t)return this._returnResult({data:null,error:n});let{data:r,error:i}=await La({publicKey:Ma(t.options),signal:e?.options?.signal??Aa.createNewAbortSignal(),mediation:e?.options?.mediation});if(i||!r)return this._returnResult({data:null,error:i??new Yr(`WebAuthn ceremony failed`,null)});let a=Pa(r);return this._verifyPasskeyAuthentication({challengeId:t.challenge_id,credential:a})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async registerPasskey(e){try{if(!Fa())return this._returnResult({data:null,error:new Yr(`Browser does not support WebAuthn`,null)});let{data:t,error:n}=await this._startPasskeyRegistration();if(n||!t)return this._returnResult({data:null,error:n});let{data:r,error:i}=await Ia({publicKey:ja(t.options),signal:e?.options?.signal??Aa.createNewAbortSignal()});if(i||!r)return this._returnResult({data:null,error:i??new Yr(`WebAuthn ceremony failed`,null)});let a=Na(r);return this._verifyPasskeyRegistration({challengeId:t.challenge_id,credential:a})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _startPasskeyRegistration(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)return this._returnResult({data:null,error:n});if(!t)return this._returnResult({data:null,error:new M});let{data:r,error:i}=await P(this.fetch,`POST`,`${this.url}/passkeys/registration/options`,{headers:this.headers,jwt:t.access_token,body:{}});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyRegistration(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new M});let{data:i,error:a}=await P(this.fetch,`POST`,`${this.url}/passkeys/registration/verify`,{headers:this.headers,jwt:n.access_token,body:{challenge_id:e.challengeId,credential:e.credential}});return a?this._returnResult({data:null,error:a}):this._returnResult({data:i,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _startPasskeyAuthentication(e){try{let{data:t,error:n}=await P(this.fetch,`POST`,`${this.url}/passkeys/authentication/options`,{headers:this.headers,body:{gotrue_meta_security:{captcha_token:e?.options?.captchaToken}}});return n?this._returnResult({data:null,error:n}):this._returnResult({data:t,error:null})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyAuthentication(e){try{let{data:t,error:n}=await P(this.fetch,`POST`,`${this.url}/passkeys/authentication/verify`,{headers:this.headers,body:{challenge_id:e.challengeId,credential:e.credential},xform:F});return n?this._returnResult({data:null,error:n}):(t.session&&(await this._saveSession(t.session),await this._notifyAllSubscribers(`SIGNED_IN`,t.session)),this._returnResult({data:t,error:null}))}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _listPasskeys(){try{return await this._useSession(async e=>{let{data:{session:t},error:n}=e;if(n)return this._returnResult({data:null,error:n});if(!t)return this._returnResult({data:null,error:new M});let{data:r,error:i}=await P(this.fetch,`GET`,`${this.url}/passkeys`,{headers:this.headers,jwt:t.access_token,xform:e=>({data:e,error:null})});return i?this._returnResult({data:null,error:i}):this._returnResult({data:r,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _updatePasskey(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new M});let{data:i,error:a}=await P(this.fetch,`PATCH`,`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:n.access_token,body:{friendly_name:e.friendlyName}});return a?this._returnResult({data:null,error:a}):this._returnResult({data:i,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}async _deletePasskey(e){try{return await this._useSession(async t=>{let{data:{session:n},error:r}=t;if(r)return this._returnResult({data:null,error:r});if(!n)return this._returnResult({data:null,error:new M});let{error:i}=await P(this.fetch,`DELETE`,`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:n.access_token,noResolveJson:!0});return i?this._returnResult({data:null,error:i}):this._returnResult({data:null,error:null})})}catch(e){if(A(e))return this._returnResult({data:null,error:e});throw e}}};qa.nextInstanceID={};var Ja=qa,Ya=`2.119.0`,Xa=``,Za;if(typeof Deno<`u`)Xa=`deno`,Za=Deno.version?.deno;else if(typeof document<`u`)Xa=`web`;else if(typeof navigator<`u`&&navigator.product===`ReactNative`)Xa=`react-native`;else{var Qa;Xa=`node`;let e=globalThis.process;Za=e==null||(Qa=e.version)==null?void 0:Qa.replace(/^v/,``)}var $a=[`runtime=${Xa}`];Za&&$a.push(`runtime-version=${Za}`);var eo={headers:{"X-Client-Info":`supabase-js/${Ya}; ${$a.join(`; `)}`}},to={schema:`public`},no={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:`implicit`},ro={},io={enabled:!1,respectSamplingDecision:!0};function ao(e){if(!e||typeof e!=`string`)return null;let t=e.split(`-`);if(t.length!==4)return null;let[n,r,i,a]=t;if(n.length!==2||r.length!==32||i.length!==16||a.length!==2)return null;let o=/^[0-9a-f]+$/i;return!o.test(n)||!o.test(r)||!o.test(i)||!o.test(a)||r===`00000000000000000000000000000000`||i===`0000000000000000`?null:{version:n,traceId:r,parentId:i,traceFlags:a,isSampled:(parseInt(a,16)&1)==1}}function oo(e,t){if(!e||!t||t.length===0)return!1;let n;if(e instanceof URL)n=e;else try{n=new URL(e)}catch{return!1}for(let e of t)try{if(typeof e==`string`){if(so(n.hostname,e))return!0}else if(e instanceof RegExp){if(e.test(n.hostname))return!0}else if(typeof e==`function`&&e(n))return!0}catch{continue}return!1}function so(e,t){if(t===e)return!0;if(t.startsWith(`*.`)){let n=t.slice(2);if(e.endsWith(n)&&(e===n||e.endsWith(`.`+n)))return!0}return!1}function co(e){let t=[];try{let n=new URL(e);t.push(n.hostname)}catch{}return t.push(`*.supabase.co`,`*.supabase.in`),t.push(`localhost`,`127.0.0.1`,`[::1]`),t}function lo(e){"@babel/helpers - typeof";return lo=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},lo(e)}function uo(e,t){if(lo(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(lo(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function fo(e){var t=uo(e,`string`);return lo(t)==`symbol`?t:t+``}function po(e,t,n){return(t=fo(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function R(e){for(var t=1;te?(...t)=>e(...t):(...e)=>fetch(...e),go=()=>Headers,_o=e=>e.startsWith(`sb_publishable_`)||e.startsWith(`sb_secret_`),vo=`sb_temp_`,yo=new Set,bo=e=>{if(!e.startsWith(`sb_`)||_o(e)||e.startsWith(vo))return;let t=e.match(/^sb_[a-zA-Z0-9]+_/)?.[0]??`unknown`;yo.has(t)||(yo.add(t),console.warn(`@supabase/supabase-js: Unrecognized Supabase API key format. The client will proceed and send this key as-is; if you see authentication errors you may need to upgrade @supabase/supabase-js to a version that recognizes this key type.`))},xo=(e,t,n,r,i,a)=>{let o=ho(r),s=go(),c=i?.enabled===!0,l=i?.respectSamplingDecision!==!1,u=c?co(t):null,d=!(a?.omitApiKeyAsBearer&&_o(e));return async(t,r)=>{let i=await n(),a=new s(r?.headers);if(a.has(`apikey`)||a.set(`apikey`,e),!a.has(`Authorization`)){let t=i??(d?e:null);t&&a.set(`Authorization`,`Bearer ${t}`)}if(u){let e=wo(t,u,l);e&&(e.traceparent&&!a.has(`traceparent`)&&a.set(`traceparent`,e.traceparent),e.tracestate&&!a.has(`tracestate`)&&a.set(`tracestate`,e.tracestate),e.baggage&&!a.has(`baggage`)&&a.set(`baggage`,e.baggage))}return o(t,R(R({},r),{},{headers:a}))}},So=!1,Co=!1;function wo(e,t,n){let r=Fe();if(!r)return So||(So=!0,console.warn("@supabase/supabase-js: tracePropagation is enabled but the tracing runtime is not loaded, so trace headers will not be attached. Add `import '@supabase/supabase-js/tracing'` at your application entry point (requires the OpenTelemetry API package to be installed). The CDN/UMD build does not support trace propagation.")),null;if(!oo(typeof e==`string`||e instanceof URL?e:e.url,t))return null;let i=r();if(!i||!i.traceparent){var a;if(i!=null&&(a=i.carrierKeys)!=null&&a.length&&!Co){Co=!0;let e=i.carrierKeys.includes(`sentry-trace`)?" Sentry detected: set `propagateTraceparent: true` in Sentry.init() to emit it.":` Configure your tracing SDK to emit W3C trace context on outgoing requests.`;console.warn(`@supabase/supabase-js: tracePropagation is enabled and a tracing SDK is active, but its propagator wrote [${i.carrierKeys.join(`, `)}] and no W3C traceparent header, so trace headers will not be attached.`+e)}return null}if(n){let e=ao(i.traceparent);if(e&&!e.isSampled)return{traceparent:i.traceparent}}return i}function To(e){return typeof e==`boolean`?{enabled:e}:e}function Eo(e){return e.endsWith(`/`)?e:e+`/`}var Do=!1;function Oo(e){Do||typeof e==`object`&&e&&`schema`in e&&e.schema!==void 0&&(Do=!0,console.warn(`@supabase/supabase-js: The "schema" option must be nested under "db", e.g. createClient(url, key, { db: { schema: 'myschema' } }). A top-level "schema" is ignored and queries go to the default schema.`))}function ko(e,t){let{db:n,auth:r,realtime:i,global:a}=e,{db:o,auth:s,realtime:c,global:l}=t,u=To(e.tracePropagation),d=To(t.tracePropagation),f={db:R(R({},o),n),auth:R(R({},s),r),realtime:R(R({},c),i),storage:{},global:R(R(R({},l),a),{},{headers:R(R({},l?.headers??{}),a?.headers??{})}),tracePropagation:{enabled:u?.enabled??d?.enabled??!1,respectSamplingDecision:u?.respectSamplingDecision??d?.respectSamplingDecision??!0},accessToken:async()=>``};return e.accessToken?f.accessToken=e.accessToken:delete f.accessToken,f}function Ao(e){let t=e?.trim();if(!t)throw Error(`supabaseUrl is required.`);if(!t.match(/^https?:\/\//i))throw Error(`Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.`);try{return new URL(Eo(t))}catch{throw Error(`Invalid supabaseUrl: Provided URL is malformed.`)}}var jo=class extends Ja{constructor(e){super(e)}},Mo=class{constructor(e,t,n){this.supabaseUrl=e,this.supabaseKey=t;let r=Ao(e);if(!t)throw Error(`supabaseKey is required.`);bo(t),Oo(n),this.realtimeUrl=new URL(`realtime/v1`,r),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace(`http`,`ws`),this.authUrl=new URL(`auth/v1`,r),this.storageUrl=new URL(`storage/v1`,r),this.functionsUrl=new URL(`functions/v1`,r);let i=`sb-${r.hostname.split(`.`)[0]}-auth-token`,a={db:to,realtime:ro,auth:R(R({},no),{},{storageKey:i}),global:eo,tracePropagation:io},o=ko(n??{},a);this.settings=o,this.storageKey=o.auth.storageKey??``,this.headers=o.global.headers??{},o.accessToken?(this.accessToken=o.accessToken,this.auth=new Proxy({},{get:(e,t)=>{throw Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(t)} is not possible`)}})):this.auth=this._initSupabaseAuthClient(o.auth??{},this.headers,o.global.fetch),this.fetch=xo(t,e,this._getSessionToken.bind(this),o.global.fetch,o.tracePropagation),this.functionsFetch=xo(t,e,this._getSessionToken.bind(this),o.global.fetch,o.tracePropagation,{omitApiKeyAsBearer:!0}),this.realtime=this._initRealtimeClient(R({headers:this.headers,accessToken:this._getAccessToken.bind(this),fetch:this.fetch},o.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(e=>this.realtime.setAuth(e)).catch(e=>console.warn(`Failed to set initial Realtime auth token:`,e)),this.rest=new ft(new URL(`rest/v1`,r).href,{headers:this.headers,schema:o.db.schema,fetch:ho(o.global.fetch),wrapFetch:n=>xo(t,e,this._getSessionToken.bind(this),n,o.tracePropagation),timeout:o.db.timeout,urlLengthLimit:o.db.urlLengthLimit,retry:o.db.retry}),this.storage=new Nr(this.storageUrl.href,this.headers,this.fetch,n?.storage),o.accessToken||this._listenForAuthEvents()}get functions(){return new Ue(this.functionsUrl.href,{headers:this.headers,customFetch:this.functionsFetch})}from(e,t){return this.rest.from(e,t)}schema(e){return this.rest.schema(e)}getOpenApiSpec(){return this.rest.getOpenApiSpec()}rpc(e,t={},n={head:!1,get:!1,count:void 0}){return this.rest.rpc(e,t,n)}channel(e,t={config:{}}){return this.realtime.channel(e,t)}getChannels(){return this.realtime.getChannels()}removeChannel(e){return this.realtime.removeChannel(e)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getSessionToken(){var e=this;if(e.accessToken)return await e.accessToken();let{data:t}=await e.auth.getSession();return t.session?.access_token??null}async _getAccessToken(){var e=this;return await e._getSessionToken()??e.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:e,persistSession:t,detectSessionInUrl:n,storage:r,userStorage:i,storageKey:a,flowType:o,lock:s,debug:c,throwOnError:l,experimental:u,lockAcquireTimeout:d,skipAutoInitialize:f},p,m){let h={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new jo({url:this.authUrl.href,headers:R(R({},h),p),storageKey:a,autoRefreshToken:e,persistSession:t,detectSessionInUrl:n,storage:r,userStorage:i,flowType:o,lock:s,debug:c,throwOnError:l,experimental:u,fetch:m,lockAcquireTimeout:d,skipAutoInitialize:f,hasCustomAuthorizationHeader:Object.keys(this.headers).some(e=>e.toLowerCase()===`authorization`)})}_initRealtimeClient(e){return new Mn(this.realtimeUrl.href,R(R({},e),{},{params:R(R({},{apikey:this.supabaseKey}),e?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((e,t)=>{this._handleTokenChanged(e,`CLIENT`,t?.access_token)})}_handleTokenChanged(e,t,n){(e===`TOKEN_REFRESHED`||e===`SIGNED_IN`||e===`INITIAL_SESSION`)&&this.changedAccessToken!==n?(this.changedAccessToken=n,this.realtime.setAuth(n)):e===`SIGNED_OUT`&&(this.realtime.setAuth(),t==`STORAGE`&&this.auth.signOut(),this.changedAccessToken=void 0)}},No=(e,t,n)=>new Mo(e,t,n);function Po(){if(typeof window<`u`||globalThis.Deno!==void 0)return!1;let e=globalThis.process;if(!e)return!1;let t=e.version;if(t==null)return!1;let n=t.match(/^v(\d+)\./);return n?parseInt(n[1],10)<=20:!1}Po()&&console.warn(`⚠️ Node.js 20 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 22 or later. For more information, visit: https://github.com/orgs/supabase/discussions/45715`);var Fo=No(`https://zxartyutizkocpcfsoba.supabase.co`,`sb_publishable_jV-JSzuqPD79oTi1CrVE7w_TLOSQZ4f`);async function Io(e){if(!window.PublicKeyCredential)throw Error(`WebAuthn не поддерживается в этом браузере.`);let t=new Uint8Array(32);window.crypto.getRandomValues(t);let n=new Uint8Array(16);window.crypto.getRandomValues(n);let r={challenge:t,rp:{name:`cenidobro.dev Admin`,id:window.location.hostname===`localhost`?`localhost`:window.location.hostname},user:{id:n,name:e,displayName:`Владелец cenidobro.dev`},pubKeyCredParams:[{alg:-7,type:`public-key`},{alg:-257,type:`public-key`}],authenticatorSelection:{authenticatorAttachment:`platform`,userVerification:`required`},timeout:6e4,attestation:`none`};try{return await navigator.credentials.create({publicKey:r})?(localStorage.setItem(`cenidobro_faceid_registered`,`true`),localStorage.setItem(`cenidobro_faceid_user`,e),!0):!1}catch(e){throw console.warn(`Face ID registration canceled or failed:`,e),e}}async function Lo(){if(!window.PublicKeyCredential)throw Error(`WebAuthn не поддерживается в этом браузере.`);let e=new Uint8Array(32);window.crypto.getRandomValues(e);let t={challenge:e,timeout:6e4,rpId:window.location.hostname===`localhost`?`localhost`:window.location.hostname,userVerification:`required`};try{return!!await navigator.credentials.get({publicKey:t})}catch(e){throw console.warn(`Face ID authentication error:`,e),e}}var Ro=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),z=o(((e,t)=>{t.exports=Ro()}))();async function zo(e){let t=new TextEncoder().encode(e),n=await window.crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}var Bo=({onLoginSuccess:e})=>{let[t,n]=(0,x.useState)(``),[r,i]=(0,x.useState)(``),[a,o]=(0,x.useState)(!1),[s,c]=(0,x.useState)(null),[l,u]=(0,x.useState)(!1),[d,f]=(0,x.useState)(!1),[p,m]=(0,x.useState)(!1);return(0,x.useEffect)(()=>{let e=localStorage.getItem(`cenidobro_faceid_registered`)===`true`;f(e)},[]),(0,z.jsxs)(`div`,{className:`min-h-screen w-full max-w-full overflow-hidden bg-black text-white flex flex-col justify-between items-center p-4 sm:p-8 font-sans selection:bg-stone-800 selection:text-white`,children:[(0,z.jsxs)(`div`,{className:`w-full max-w-sm flex items-center justify-between pt-2 sm:pt-4 text-xs text-stone-500 font-mono`,children:[(0,z.jsx)(`span`,{className:`tracking-widest uppercase text-[11px]`,children:`CENIDOBRO.DEV`}),(0,z.jsxs)(`span`,{className:`flex items-center gap-1.5 text-emerald-400 text-[11px]`,children:[(0,z.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse`}),`DATABASE AUTH`]})]}),(0,z.jsxs)(`div`,{className:`w-full max-w-sm my-auto py-6`,children:[(0,z.jsxs)(`div`,{className:`text-center mb-6 sm:mb-8`,children:[(0,z.jsx)(`div`,{className:`inline-flex items-center justify-center w-12 h-12 sm:w-14 sm:h-14 rounded-2xl bg-stone-900 border border-stone-800 text-stone-100 shadow-2xl mb-3`,children:(0,z.jsx)(ye,{className:`w-5 h-5 sm:w-6 sm:h-6 text-stone-200`})}),(0,z.jsx)(`h1`,{className:`text-2xl sm:text-3xl font-bold tracking-tight text-stone-50 font-mono`,children:`cenidobro.dev`}),(0,z.jsx)(`p`,{className:`text-xs text-stone-400 mt-1 font-mono`,children:`Restricted Access`})]}),s&&(0,z.jsxs)(`div`,{className:`mb-5 p-3 rounded-xl bg-red-950/60 border border-red-800/80 text-red-200 text-xs flex items-center gap-2 animate-in fade-in`,children:[(0,z.jsx)(se,{className:`w-4 h-4 shrink-0 text-red-400`}),(0,z.jsx)(`span`,{children:s})]}),(0,z.jsxs)(`form`,{onSubmit:async n=>{n.preventDefault(),c(null);let i=t.trim().toLowerCase(),a=r.trim();if(!i||!a)c(`Please enter both login and password.`);else{u(!0);try{let t=await zo(a),{data:n,error:r}=await Fo.from(`auth_config`).select(`*`).eq(`username`,i).maybeSingle();if(r){console.error(`Database auth error:`,r),c(`Authentication service error. Please try again.`),u(!1);return}if(!n){c(`Invalid credentials. Access denied.`),u(!1);return}if(n.password_hash===t){let t=await zo(`${i}:${Date.now()}`);localStorage.setItem(`cenidobro_auth_token`,t),localStorage.setItem(`cenidobro_user`,i),e()}else c(`Invalid credentials. Access denied.`)}catch(e){console.error(e),c(`Cryptographic verification failed.`)}finally{u(!1)}}},className:`space-y-4`,autoComplete:`off`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-[11px] font-semibold text-stone-400 uppercase tracking-wider mb-1`,children:`Login`}),(0,z.jsx)(`input`,{type:`text`,required:!0,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`off`,spellCheck:!1,value:t,onChange:e=>n(e.target.value),className:`w-full px-4 py-3 rounded-xl bg-stone-950 border border-stone-800 text-stone-100 text-sm focus:outline-none focus:border-stone-500 focus:ring-1 focus:ring-stone-500 transition-colors font-mono placeholder:text-stone-700`,placeholder:`Username`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-[11px] font-semibold text-stone-400 uppercase tracking-wider mb-1`,children:`Password`}),(0,z.jsxs)(`div`,{className:`relative`,children:[(0,z.jsx)(`input`,{type:a?`text`:`password`,required:!0,autoComplete:`off`,autoCorrect:`off`,autoCapitalize:`off`,spellCheck:!1,value:r,onChange:e=>i(e.target.value),className:`w-full px-4 py-3 pr-11 rounded-xl bg-stone-950 border border-stone-800 text-stone-100 text-sm focus:outline-none focus:border-stone-500 focus:ring-1 focus:ring-stone-500 transition-colors font-mono placeholder:text-stone-700`,placeholder:`••••••••••••`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>o(!a),className:`absolute right-3 top-1/2 -translate-y-1/2 text-stone-500 hover:text-stone-300 p-1`,"aria-label":`Toggle password visibility`,children:a?(0,z.jsx)(me,{className:`w-4 h-4`}):(0,z.jsx)(he,{className:`w-4 h-4`})})]})]}),(0,z.jsx)(`button`,{type:`submit`,disabled:l,className:`w-full py-3.5 px-4 rounded-xl bg-stone-100 hover:bg-white text-stone-950 font-semibold text-sm transition-all active:scale-[0.99] flex items-center justify-center gap-2 shadow-lg cursor-pointer mt-2 disabled:opacity-50`,children:l?(0,z.jsx)(ve,{className:`w-4 h-4 animate-spin`}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{children:`Sign In`}),(0,z.jsx)(C,{className:`w-4 h-4`})]})})]}),d&&(0,z.jsx)(`div`,{className:`mt-5 pt-5 border-t border-stone-850`,children:(0,z.jsxs)(`button`,{type:`button`,onClick:async()=>{c(null),m(!0);try{if(await Lo()){let t=await zo(`faceid_auth_${Date.now()}`);localStorage.setItem(`cenidobro_auth_token`,t),e()}}catch{c(`Face ID verification failed. Please use your credentials.`)}finally{m(!1)}},disabled:p,className:`w-full py-3 px-4 rounded-xl bg-stone-900/90 hover:bg-stone-850 border border-stone-800 text-stone-200 font-medium text-xs transition-all active:scale-[0.99] flex items-center justify-center gap-2 cursor-pointer`,children:[(0,z.jsx)(Ee,{className:`w-4 h-4 text-blue-400 ${p?`animate-pulse`:``}`}),(0,z.jsx)(`span`,{children:p?`Verifying Face ID...`:`Sign In with Face ID`})]})})]}),(0,z.jsx)(`div`,{className:`w-full max-w-sm text-center pb-2 sm:pb-4 text-[10px] sm:text-[11px] text-stone-600 font-mono`,children:`cenidobro.dev · Confidential System`})]})},Vo={cccc:{id:`cccc`,name:`Дядя Ваня VPN (VanyaVPN Premium)`,badge:`184 ГЕО · ТОП 2026`,url:`ssconf://cccc.loan/vanya/cd513e46-989c-4734-bb8f-8107df05b8de`,protocol:`Sing-box · VLESS XTLS Reality (uTLS Chrome/Firefox) + Shadowsocks Poly1305`,totalTraffic:`Безлимит`,usedTraffic:`0.12 GB`,remainingTraffic:`1 000 GB`,expiresAt:`Бессрочно / Premium`,serversCount:188,features:[`188 локации мира (Европа, Россия, Азия, Америка, Ближний Восток, Африка, Океания)`,`VLESS XTLS-Reality (XTLS-RPRX-Vision) + Shadowsocks Poly1305`,`uTLS маскировка Chrome & Firefox`,`Маскировка SNI: Tesla, Apple, Samsung, PayPal, Steam, Nvidia`,`2-Hop Chain Relay (двойной хоп через hop-узел)`,`Обход любых блокировок DPI и мобильных операторов`]},netz:{id:`netz`,name:`NETZRUN Premium`,badge:`GLOBAL 41 GEO`,url:`https://netz.tg/QR3K6tPJLgIBdTzpTUDFT`,protocol:`VLESS + TLS / Trojan`,totalTraffic:`1 000 GB`,usedTraffic:`7.46 GB`,remainingTraffic:`992.54 GB`,expiresAt:`19 марта 2027`,serversCount:41,features:[`41 страна мира (Европа, Азия, Америка, Ближний Восток)`,`Выделенные DC серверы (Амстердам, Вена, Лондон, Стокгольм)`,`Trojan и VLESS шлюзы`,`Низкий пинг до европейских датацентров`]}};Vo.cccc;var Ho=[{id:`cccc-geo-au`,subscriptionId:`cccc`,name:`🇦🇺 Австралия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.210.10`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`4ee7d450-0efd-548e-b4dc-79f709986260`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`632cd2fe`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-au-vless`,description:`VanyaVPN Reality Vision · Австралия · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-at`,subscriptionId:`cccc`,name:`🇦🇹 Австрия 10 GBIT`,type:`VLESS REALITY`,server:`45.196.41.55`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`35397455-2fc1-595d-ab54-57df9994991d`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`b1d6b91b`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-at-vless`,description:`VanyaVPN Reality Vision · Австрия · 10 GBIT · SNI www.tesla.com`},{id:`cccc-geo-az`,subscriptionId:`cccc`,name:`🇦🇿 Азербайджан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.70.200`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`d74d861a-84c8-553b-9eb2-c4f99fcaaf5d`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`9c0ada37`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-az-vless`,description:`VanyaVPN Reality Vision · Азербайджан · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-al`,subscriptionId:`cccc`,name:`🇦🇱 Албания 1 GBIT`,type:`VLESS REALITY`,server:`45.196.64.170`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`bd476ed3-56f7-51c2-a019-35027600a15e`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`63518250`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-al-vless`,description:`VanyaVPN Reality Vision · Албания · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-dz`,subscriptionId:`cccc`,name:`🇩🇿 Алжир 1 GBIT`,type:`VLESS REALITY`,server:`45.196.166.40`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`0c975157-1210-5c1d-ac75-6524beb98ea1`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2a922701`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-dz-vless`,description:`VanyaVPN Reality Vision · Алжир · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ao`,subscriptionId:`cccc`,name:`🇦🇴 Ангола 1 GBIT`,type:`VLESS REALITY`,server:`45.196.176.90`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`ea8fcd83-df65-52ce-9e37-6deeb8a676a0`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2dd41130`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ao-vless`,description:`VanyaVPN Reality Vision · Ангола · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ad`,subscriptionId:`cccc`,name:`🇦🇩 Андорра 1 GBIT`,type:`VLESS REALITY`,server:`45.196.76.230`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`a27687d4-2afd-588d-b9b1-9fbd65802fc8`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`70ba3370`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ad-vless`,description:`VanyaVPN Reality Vision · Андорра · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ag`,subscriptionId:`cccc`,name:`🇦🇬 Антигуа и Барбуда 1 GBIT`,type:`VLESS REALITY`,server:`45.196.114.180`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`6c8289f5-bf8b-584d-bf1b-4e4d18e1ae13`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`9aaf6807`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ag-vless`,description:`VanyaVPN Reality Vision · Антигуа и Барбуда · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-ar`,subscriptionId:`cccc`,name:`🇦🇷 Аргентина 1 GBIT`,type:`VLESS REALITY`,server:`45.196.84.30`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`0c9c70ab-b9ee-56b6-8d36-9bf6f87dd537`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`ab5b6208`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ar-vless`,description:`VanyaVPN Reality Vision · Аргентина · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-am`,subscriptionId:`cccc`,name:`🇦🇲 Армения 1 GBIT`,type:`VLESS REALITY`,server:`45.196.69.195`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`9c082dc0-12d2-5aa8-a030-c202069dcf9e`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`ab6db599`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-am-vless`,description:`VanyaVPN Reality Vision · Армения · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-aw`,subscriptionId:`cccc`,name:`🇦🇼 Аруба 1 GBIT`,type:`VLESS REALITY`,server:`45.196.108.150`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e1d126f3-90e7-51a8-88ff-3de5759d15a0`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`f5fe88ee`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-aw-vless`,description:`VanyaVPN Reality Vision · Аруба · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-af`,subscriptionId:`cccc`,name:`🇦🇫 Афганистан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.158.200`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`e66d0c11-9d05-5949-9caf-232a3010f27a`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`50312687`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-af-vless`,description:`VanyaVPN Reality Vision · Афганистан · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-bs`,subscriptionId:`cccc`,name:`🇧🇸 Багамы 1 GBIT`,type:`VLESS REALITY`,server:`45.196.101.115`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`0e7dd13a-a199-5c00-9082-fc313c83b5b9`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`8185d5e4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bs-vless`,description:`VanyaVPN Reality Vision · Багамы · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-bd`,subscriptionId:`cccc`,name:`🇧🇩 Бангладеш 1 GBIT`,type:`VLESS REALITY`,server:`45.196.143.125`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`40a44510-271d-5319-b075-767800e404d7`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`5e657ff6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bd-vless`,description:`VanyaVPN Reality Vision · Бангладеш · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-bb`,subscriptionId:`cccc`,name:`🇧🇧 Барбадос 1 GBIT`,type:`VLESS REALITY`,server:`45.196.102.120`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`d84417c6-6011-5e6f-b0a4-20b9b0bb6575`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`3b64db95`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bb-vless`,description:`VanyaVPN Reality Vision · Барбадос · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-bh`,subscriptionId:`cccc`,name:`🇧🇭 Бахрейн 1 GBIT`,type:`VLESS REALITY`,server:`45.196.136.90`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`06aaeab0-d498-5451-89d9-d4c7ce76e87f`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`1f44a356`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bh-vless`,description:`VanyaVPN Reality Vision · Бахрейн · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-bz`,subscriptionId:`cccc`,name:`🇧🇿 Белиз 1 GBIT`,type:`VLESS REALITY`,server:`45.196.104.130`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`f3d27424-1324-57c5-a916-d79bfb9dceb1`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`d991948c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bz-vless`,description:`VanyaVPN Reality Vision · Белиз · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-be`,subscriptionId:`cccc`,name:`🇧🇪 Бельгия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.45.75`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`37ebc166-67d4-5b4b-bdec-8d26004a0eaa`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`46599c5b`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-be-vless`,description:`VanyaVPN Reality Vision · Бельгия · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-bj`,subscriptionId:`cccc`,name:`🇧🇯 Бенин 100 MBIT`,type:`VLESS REALITY`,server:`45.196.194.180`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`7ae63433-cfc9-5754-bb29-6d8a9ab61715`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`65274299`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bj-vless`,description:`VanyaVPN Reality Vision · Бенин · 100 MBIT · SNI www.paypal.com`},{id:`cccc-geo-bm`,subscriptionId:`cccc`,name:`🇧🇲 Бермудские о-ва 1 GBIT`,type:`VLESS REALITY`,server:`45.196.110.160`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`a092b204-67a3-52e3-acbe-b6a5ae2cdbc1`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`7292b55d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bm-vless`,description:`VanyaVPN Reality Vision · Бермудские о-ва · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-bg`,subscriptionId:`cccc`,name:`🇧🇬 Болгария 1 GBIT`,type:`VLESS REALITY`,server:`45.196.52.110`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`0ff121e9-ba4d-5ab2-b218-12022d1359fa`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`3f14db6e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bg-vless`,description:`VanyaVPN Reality Vision · Болгария · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-bo`,subscriptionId:`cccc`,name:`🇧🇴 Боливия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.95.85`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`45ecbe63-daad-543e-8050-37bfad085ccf`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`3d099d0f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bo-vless`,description:`VanyaVPN Reality Vision · Боливия · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ba`,subscriptionId:`cccc`,name:`🇧🇦 Босния и Герцеговина 1 GBIT`,type:`VLESS REALITY`,server:`45.196.65.175`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`f6b7e339-8b20-5d48-beb6-34265e309385`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`970f519c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ba-vless`,description:`VanyaVPN Reality Vision · Босния и Герцеговина · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-bw`,subscriptionId:`cccc`,name:`🇧🇼 Ботсвана 1 GBIT`,type:`VLESS REALITY`,server:`45.196.179.105`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`3dcac1e1-93e7-5a0a-aa3f-d238d7c8c0b7`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`ab02eedd`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bw-vless`,description:`VanyaVPN Reality Vision · Ботсвана · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-br`,subscriptionId:`cccc`,name:`🇧🇷 Бразилия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.83.25`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`c934034d-587f-5e14-a16c-699ed69a4a3b`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`885036a0`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-br-vless`,description:`VanyaVPN Reality Vision · Бразилия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-bn`,subscriptionId:`cccc`,name:`🇧🇳 Бруней 1 GBIT`,type:`VLESS REALITY`,server:`45.196.149.155`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`b0d03c72-3681-5ce6-8955-f74a4a6cbd47`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`c81b0213`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bn-vless`,description:`VanyaVPN Reality Vision · Бруней · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-bf`,subscriptionId:`cccc`,name:`🇧🇫 Буркина-Фасо 100 MBIT`,type:`VLESS REALITY`,server:`45.196.192.170`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`03255d3c-73ff-594c-ac9a-30ffd6365ea1`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`04e5ddb5`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bf-vless`,description:`VanyaVPN Reality Vision · Буркина-Фасо · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-bt`,subscriptionId:`cccc`,name:`🇧🇹 Бутан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.151.165`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`7820f456-45ee-5473-952d-081bf1d92da8`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`5e73d6d7`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-bt-vless`,description:`VanyaVPN Reality Vision · Бутан · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-vu`,subscriptionId:`cccc`,name:`🇻🇺 Вануату 100 MBIT`,type:`VLESS REALITY`,server:`45.196.217.45`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`6412e47a-0317-5b22-88f4-0fec2f8da490`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`b944fc09`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-vu-vless`,description:`VanyaVPN Reality Vision · Вануату · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-va`,subscriptionId:`cccc`,name:`🇻🇦 Ватикан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.78.10`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`8771efde-d5f0-5828-b54d-384aa803927a`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`198dea39`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-va-vless`,description:`VanyaVPN Reality Vision · Ватикан · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-gb`,subscriptionId:`cccc`,name:`🇬🇧 Великобритания 10 GBIT`,type:`VLESS REALITY`,server:`45.196.34.20`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`f384d75f-381f-5b1b-b622-8f4cec9c567a`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`0b407281`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gb-vless`,description:`VanyaVPN Reality Vision · Великобритания · 10 GBIT · SNI www.icloud.com`},{id:`cccc-geo-hu`,subscriptionId:`cccc`,name:`🇭🇺 Венгрия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.53.115`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`8e18e949-56f5-5400-9747-85450b3de87b`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`ffd3d21b`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-hu-vless`,description:`VanyaVPN Reality Vision · Венгрия · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-tl`,subscriptionId:`cccc`,name:`🇹🇱 Восточный Тимор 1 GBIT`,type:`VLESS REALITY`,server:`45.196.159.205`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`c412e5f1-bd03-5438-bec1-1bf280d5a226`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`e6601657`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tl-vless`,description:`VanyaVPN Reality Vision · Восточный Тимор · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-vn`,subscriptionId:`cccc`,name:`🇻🇳 Вьетнам 1 GBIT`,type:`VLESS REALITY`,server:`45.196.128.50`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`52ec2823-32d0-522c-b5e4-09862920df67`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`0217e4ba`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-vn-vless`,description:`VanyaVPN Reality Vision · Вьетнам · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-ga`,subscriptionId:`cccc`,name:`🇬🇦 Габон 1 GBIT`,type:`VLESS REALITY`,server:`45.196.185.135`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`85055fb2-cf98-5ce2-a977-7530651d647a`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`f52d6323`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ga-vless`,description:`VanyaVPN Reality Vision · Габон · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ht`,subscriptionId:`cccc`,name:`🇭🇹 Гаити 1 GBIT`,type:`VLESS REALITY`,server:`45.196.107.145`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`d9f6e56d-d081-574c-bbb5-0188d1d4619d`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`712dd58e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ht-vless`,description:`VanyaVPN Reality Vision · Гаити · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-gy`,subscriptionId:`cccc`,name:`🇬🇾 Гайана 1 GBIT`,type:`VLESS REALITY`,server:`45.196.105.135`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`67687321-8aab-5f6e-af12-8ccde53eac70`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`a75ac051`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gy-vless`,description:`VanyaVPN Reality Vision · Гайана · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-gh`,subscriptionId:`cccc`,name:`🇬🇭 Гана 1 GBIT`,type:`VLESS REALITY`,server:`45.196.165.35`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`93d48244-473a-536a-99fc-51a883f7e6a0`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`fb2b7fce`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gh-vless`,description:`VanyaVPN Reality Vision · Гана · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-gp`,subscriptionId:`cccc`,name:`🇬🇵 Гваделупа 1 GBIT`,type:`VLESS REALITY`,server:`45.196.118.30`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`8376ec8e-a32f-5818-b04b-328cb0ddb675`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`ce552f91`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gp-vless`,description:`VanyaVPN Reality Vision · Гваделупа · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-gt`,subscriptionId:`cccc`,name:`🇬🇹 Гватемала 1 GBIT`,type:`VLESS REALITY`,server:`45.196.94.80`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`7b79ef6e-d291-5f9b-9bd7-ec0f0f11a873`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`e294affa`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gt-vless`,description:`VanyaVPN Reality Vision · Гватемала · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-gn`,subscriptionId:`cccc`,name:`🇬🇳 Гвинея 1 GBIT`,type:`VLESS REALITY`,server:`45.196.198.200`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`872bf2b1-5db4-5e5c-ab37-71ce0c8330cc`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`88069f4e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gn-vless`,description:`VanyaVPN Reality Vision · Гвинея · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-de`,subscriptionId:`cccc`,name:`🇩🇪 Германия 10 GBIT`,type:`VLESS REALITY`,server:`45.196.32.10`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`028c3cb0-ec4f-558c-b6ee-7dba406666f4`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`959a45d4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-de-vless`,description:`VanyaVPN Reality Vision · Германия · 10 GBIT · SNI www.samsung.com`},{id:`cccc-geo-gi`,subscriptionId:`cccc`,name:`🇬🇮 Гибралтар 1 GBIT`,type:`VLESS REALITY`,server:`45.196.79.15`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`73f677b3-d502-50ec-95e2-07fa173d70d5`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`1917d730`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gi-vless`,description:`VanyaVPN Reality Vision · Гибралтар · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-hn`,subscriptionId:`cccc`,name:`🇭🇳 Гондурас 1 GBIT`,type:`VLESS REALITY`,server:`45.196.98.100`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`340042e6-c720-5d32-94f8-0c3f6da98202`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`7446783c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-hn-vless`,description:`VanyaVPN Reality Vision · Гондурас · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-hk`,subscriptionId:`cccc`,name:`🇭🇰 Гонконг (САР) 1 GBIT`,type:`VLESS REALITY`,server:`45.196.123.25`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`e4b8acd6-902c-51fa-9091-8c70dca797de`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`78032858`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-hk-vless`,description:`VanyaVPN Reality Vision · Гонконг (САР) · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-gd`,subscriptionId:`cccc`,name:`🇬🇩 Гренада 1 GBIT`,type:`VLESS REALITY`,server:`45.196.113.175`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e4d5e245-abe5-5c5a-831e-5fb4f8fe91e2`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`2b881443`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gd-vless`,description:`VanyaVPN Reality Vision · Гренада · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-gl`,subscriptionId:`cccc`,name:`🇬🇱 Гренландия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.118.10`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`0e662297-097c-5bd4-a2c0-8d55af5d49cc`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`7ee0a6ae`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gl-vless`,description:`VanyaVPN Reality Vision · Гренландия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-gr`,subscriptionId:`cccc`,name:`🇬🇷 Греция 1 GBIT`,type:`VLESS REALITY`,server:`45.196.50.100`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`dc23610b-fa46-561e-9a5e-9399d8f4d640`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`183ee087`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gr-vless`,description:`VanyaVPN Reality Vision · Греция · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-ge`,subscriptionId:`cccc`,name:`🇬🇪 Грузия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.68.190`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`a554eeff-906c-5a35-8bdf-69196e96b370`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`309d2086`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ge-vless`,description:`VanyaVPN Reality Vision · Грузия · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-gu`,subscriptionId:`cccc`,name:`🇬🇺 Гуам 1 GBIT`,type:`VLESS REALITY`,server:`45.196.214.30`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`ce5e9f3b-948a-528f-99d6-4ee2160a5c83`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`6152d43c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-gu-vless`,description:`VanyaVPN Reality Vision · Гуам · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-dk`,subscriptionId:`cccc`,name:`🇩🇰 Дания 1 GBIT`,type:`VLESS REALITY`,server:`45.196.46.80`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`fe873b2e-dca2-5b82-bc00-e167fed27eb1`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`867b4bf4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-dk-vless`,description:`VanyaVPN Reality Vision · Дания · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-dm`,subscriptionId:`cccc`,name:`🇩🇲 Доминика 1 GBIT`,type:`VLESS REALITY`,server:`45.196.115.185`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`8a34e091-2f60-53dc-b648-8bef774bff14`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`cde0e753`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-dm-vless`,description:`VanyaVPN Reality Vision · Доминика · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-do`,subscriptionId:`cccc`,name:`🇩🇴 Доминикана 1 GBIT`,type:`VLESS REALITY`,server:`45.196.92.70`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`82a016a2-abb9-51a8-a86e-0814da25dfd2`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`ac0b52a2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-do-vless`,description:`VanyaVPN Reality Vision · Доминикана · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-cd`,subscriptionId:`cccc`,name:`🇨🇩 ДР Конго 100 MBIT`,type:`VLESS REALITY`,server:`45.196.187.145`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`7230b2f9-7dec-5e2b-b7e4-d172fb16154a`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`21e721c3`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cd-vless`,description:`VanyaVPN Reality Vision · ДР Конго · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-eg`,subscriptionId:`cccc`,name:`🇪🇬 Египет 1 GBIT`,type:`VLESS REALITY`,server:`45.196.161.15`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`d7f02641-723b-5745-8022-ad01e64488c9`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`d8c59e83`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-eg-vless`,description:`VanyaVPN Reality Vision · Египет · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-zm`,subscriptionId:`cccc`,name:`🇿🇲 Замбия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.180.110`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`e4e25c8a-2b88-50fb-a3d9-a2eaeeaacd4a`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`c3cf0301`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-zm-vless`,description:`VanyaVPN Reality Vision · Замбия · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-zw`,subscriptionId:`cccc`,name:`🇿🇼 Зимбабве 1 GBIT`,type:`VLESS REALITY`,server:`45.196.181.115`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`9c6c4419-76ac-5748-9eeb-039f60903251`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2b4e5423`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-zw-vless`,description:`VanyaVPN Reality Vision · Зимбабве · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-il`,subscriptionId:`cccc`,name:`🇮🇱 Израиль 1 GBIT`,type:`VLESS REALITY`,server:`45.196.131.65`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`1b006390-7e84-5467-a5e9-b0f05edb08b8`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`a0fb9035`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-il-vless`,description:`VanyaVPN Reality Vision · Израиль · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-in`,subscriptionId:`cccc`,name:`🇮🇳 Индия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.125.35`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`55db2e72-0802-5f5a-a5e6-31f18963ba02`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`58296753`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-in-vless`,description:`VanyaVPN Reality Vision · Индия · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-id`,subscriptionId:`cccc`,name:`🇮🇩 Индонезия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.129.55`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`c8d40aeb-b3a2-50c3-9281-dce1cca05d1c`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`a5614527`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-id-vless`,description:`VanyaVPN Reality Vision · Индонезия · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-jo`,subscriptionId:`cccc`,name:`🇯🇴 Иордания 1 GBIT`,type:`VLESS REALITY`,server:`45.196.152.170`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`c21e94c2-7531-503c-96bc-ebb9079a2d11`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`c278ec5a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-jo-vless`,description:`VanyaVPN Reality Vision · Иордания · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-iq`,subscriptionId:`cccc`,name:`🇮🇶 Ирак 1 GBIT`,type:`VLESS REALITY`,server:`45.196.154.180`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`56304628-3b97-5351-b6ed-10b58865d736`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`6b0b190a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-iq-vless`,description:`VanyaVPN Reality Vision · Ирак · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-ie`,subscriptionId:`cccc`,name:`🇮🇪 Ирландия 10 GBIT`,type:`VLESS REALITY`,server:`45.196.47.85`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`76b36254-4ba5-5991-bd1c-35f8263913ec`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`292c1980`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ie-vless`,description:`VanyaVPN Reality Vision · Ирландия · 10 GBIT · SNI www.samsung.com`},{id:`cccc-geo-is`,subscriptionId:`cccc`,name:`🇮🇸 Исландия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.49.95`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`a2332cb3-997b-5f3f-ab7d-fec39b5d4b86`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`fa51fd49`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-is-vless`,description:`VanyaVPN Reality Vision · Исландия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-es`,subscriptionId:`cccc`,name:`🇪🇸 Испания 1 GBIT`,type:`VLESS REALITY`,server:`45.196.43.65`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`b01cdc15-0040-57d9-94a3-877e673fbb5f`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`c0bc1e08`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-es-vless`,description:`VanyaVPN Reality Vision · Испания · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-it`,subscriptionId:`cccc`,name:`🇮🇹 Италия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.42.60`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`7222af87-d290-530b-9b18-19002a27a790`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2ad8a704`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-it-vless`,description:`VanyaVPN Reality Vision · Италия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ye`,subscriptionId:`cccc`,name:`🇾🇪 Йемен 1 GBIT`,type:`VLESS REALITY`,server:`45.196.157.195`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`6643052e-0437-5621-8043-2f218025735a`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`ee425df9`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ye-vless`,description:`VanyaVPN Reality Vision · Йемен · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-cv`,subscriptionId:`cccc`,name:`🇨🇻 Кабо-Верде 100 MBIT`,type:`VLESS REALITY`,server:`45.196.184.130`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`f382da98-7e9b-552e-964f-667f61251d6e`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`29cdee48`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cv-vless`,description:`VanyaVPN Reality Vision · Кабо-Верде · 100 MBIT · SNI www.paypal.com`},{id:`cccc-geo-kz`,subscriptionId:`cccc`,name:`🇰🇿 Казахстан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.73.215`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`252984cd-35d2-5448-9274-6978146eee84`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`63f2d869`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kz-vless`,description:`VanyaVPN Reality Vision · Казахстан · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-kh`,subscriptionId:`cccc`,name:`🇰🇭 Камбоджа 1 GBIT`,type:`VLESS REALITY`,server:`45.196.146.140`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`f2b6da4e-12d0-5992-a907-7faf5eef9f27`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`1fcff1fe`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kh-vless`,description:`VanyaVPN Reality Vision · Камбоджа · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-cm`,subscriptionId:`cccc`,name:`🇨🇲 Камерун 1 GBIT`,type:`VLESS REALITY`,server:`45.196.182.120`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`b5f9ff59-e7b2-5015-830d-36ae25d42d92`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`b5039c32`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cm-vless`,description:`VanyaVPN Reality Vision · Камерун · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-ca`,subscriptionId:`cccc`,name:`🇨🇦 Канада 1 GBIT`,type:`VLESS REALITY`,server:`45.196.81.15`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`290c6540-5dbe-5d61-8cce-4cc89151994d`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`69590970`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ca-vless`,description:`VanyaVPN Reality Vision · Канада · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-qa`,subscriptionId:`cccc`,name:`🇶🇦 Катар 1 GBIT`,type:`VLESS REALITY`,server:`45.196.134.80`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`bfe43a88-1f39-592c-8c6d-9736af6e18e7`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`3f3ef786`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-qa-vless`,description:`VanyaVPN Reality Vision · Катар · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-ke`,subscriptionId:`cccc`,name:`🇰🇪 Кения 1 GBIT`,type:`VLESS REALITY`,server:`45.196.164.30`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`8743fcf3-bb7d-52da-b814-5a0cd0406038`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`8e520270`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ke-vless`,description:`VanyaVPN Reality Vision · Кения · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-cy`,subscriptionId:`cccc`,name:`🇨🇾 Кипр 1 GBIT`,type:`VLESS REALITY`,server:`45.196.61.155`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`a97601a1-c84b-5e90-a0ff-4ed3bb02c09b`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`3d30f595`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cy-vless`,description:`VanyaVPN Reality Vision · Кипр · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-kg`,subscriptionId:`cccc`,name:`🇰🇬 Киргизия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.139.105`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`d1438fb4-aee5-5dbe-9fa4-2d7a60ae61db`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`131ed734`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kg-vless`,description:`VanyaVPN Reality Vision · Киргизия · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-ki`,subscriptionId:`cccc`,name:`🇰🇮 Кирибати 100 MBIT`,type:`VLESS REALITY`,server:`45.196.220.40`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`0c383ffc-7f3a-5dfc-ba61-65cd7195f468`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2b84b2a9`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ki-vless`,description:`VanyaVPN Reality Vision · Кирибати · 100 MBIT · SNI www.samsung.com`},{id:`cccc-geo-co`,subscriptionId:`cccc`,name:`🇨🇴 Колумбия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.86.40`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`4a4b268f-173c-55c6-bec9-0f32d9dedc29`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`c330ec50`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-co-vless`,description:`VanyaVPN Reality Vision · Колумбия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-cg`,subscriptionId:`cccc`,name:`🇨🇬 Конго 1 GBIT`,type:`VLESS REALITY`,server:`45.196.186.140`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`58516927-3c97-566d-b11e-f189f16aefde`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2a5988d6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cg-vless`,description:`VanyaVPN Reality Vision · Конго · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-cr`,subscriptionId:`cccc`,name:`🇨🇷 Коста-Рика 1 GBIT`,type:`VLESS REALITY`,server:`45.196.90.60`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`72779eb1-c86a-5194-b50d-fea1f5d801cc`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`2b6bdfb2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cr-vless`,description:`VanyaVPN Reality Vision · Коста-Рика · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ci`,subscriptionId:`cccc`,name:`🇨🇮 Кот-д’Ивуар 1 GBIT`,type:`VLESS REALITY`,server:`45.196.174.80`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`75d2c78e-a271-5305-b62b-01e1901dcfb9`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`1b158839`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ci-vless`,description:`VanyaVPN Reality Vision · Кот-д’Ивуар · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-kw`,subscriptionId:`cccc`,name:`🇰🇼 Кувейт 1 GBIT`,type:`VLESS REALITY`,server:`45.196.135.85`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`0ce6827a-5460-5130-b87d-0bde37591945`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`103c54b6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kw-vless`,description:`VanyaVPN Reality Vision · Кувейт · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-cw`,subscriptionId:`cccc`,name:`🇨🇼 Кюрасао 1 GBIT`,type:`VLESS REALITY`,server:`45.196.109.155`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`3eb2aab3-6833-566c-bbfa-ddaaf8f5cb5b`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`57c0c455`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cw-vless`,description:`VanyaVPN Reality Vision · Кюрасао · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-la`,subscriptionId:`cccc`,name:`🇱🇦 Лаос 1 GBIT`,type:`VLESS REALITY`,server:`45.196.147.145`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`9eab2103-e89b-5da5-a49f-414fdf7903ba`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`b737ca7e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-la-vless`,description:`VanyaVPN Reality Vision · Лаос · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-lv`,subscriptionId:`cccc`,name:`🇱🇻 Латвия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.59.145`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`c028d2ee-56f8-5a96-93c4-000cec6167e3`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`626cf6d4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lv-vless`,description:`VanyaVPN Reality Vision · Латвия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-ls`,subscriptionId:`cccc`,name:`🇱🇸 Лесото 100 MBIT`,type:`VLESS REALITY`,server:`45.196.201.215`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`a5dc7dcf-ce21-52cb-989c-8f78e3798dd4`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`c7b68ac3`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ls-vless`,description:`VanyaVPN Reality Vision · Лесото · 100 MBIT · SNI www.samsung.com`},{id:`cccc-geo-lr`,subscriptionId:`cccc`,name:`🇱🇷 Либерия 100 MBIT`,type:`VLESS REALITY`,server:`45.196.197.195`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`3fde4f1c-6d38-56f1-a32d-2fa891e765af`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`6896b080`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lr-vless`,description:`VanyaVPN Reality Vision · Либерия · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-lb`,subscriptionId:`cccc`,name:`🇱🇧 Ливан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.153.175`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`eb99aa6b-70c6-5df6-aad2-559deb83704d`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`fd26db45`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lb-vless`,description:`VanyaVPN Reality Vision · Ливан · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-ly`,subscriptionId:`cccc`,name:`🇱🇾 Ливия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.189.155`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`2e678074-5688-55bf-be65-bc213797a47b`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`40cb4b34`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ly-vless`,description:`VanyaVPN Reality Vision · Ливия · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-lt`,subscriptionId:`cccc`,name:`🇱🇹 Литва 1 GBIT`,type:`VLESS REALITY`,server:`45.196.58.140`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`0b74928d-2037-55a9-b118-b8d1cb6dcd18`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`67d41430`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lt-vless`,description:`VanyaVPN Reality Vision · Литва · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-li`,subscriptionId:`cccc`,name:`🇱🇮 Лихтенштейн 1 GBIT`,type:`VLESS REALITY`,server:`45.196.74.220`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`ad075c00-546f-5d46-bb0d-44fb58e9bf9b`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`00a9e425`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-li-vless`,description:`VanyaVPN Reality Vision · Лихтенштейн · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-lu`,subscriptionId:`cccc`,name:`🇱🇺 Люксембург 1 GBIT`,type:`VLESS REALITY`,server:`45.196.60.150`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`ee5dda7f-d9b4-5666-9a2d-fb90340c1a0d`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`80c0fcbb`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lu-vless`,description:`VanyaVPN Reality Vision · Люксембург · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-mu`,subscriptionId:`cccc`,name:`🇲🇺 Маврикий 1 GBIT`,type:`VLESS REALITY`,server:`45.196.171.65`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`2e93eae5-e990-5d85-be18-a5a02569edd5`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`19503ea6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mu-vless`,description:`VanyaVPN Reality Vision · Маврикий · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-mr`,subscriptionId:`cccc`,name:`🇲🇷 Мавритания 100 MBIT`,type:`VLESS REALITY`,server:`45.196.199.205`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`be82271a-567f-539b-9b4b-5d5960ae29c6`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`79032b8a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mr-vless`,description:`VanyaVPN Reality Vision · Мавритания · 100 MBIT · SNI www.paypal.com`},{id:`cccc-geo-mg`,subscriptionId:`cccc`,name:`🇲🇬 Мадагаскар 1 GBIT`,type:`VLESS REALITY`,server:`45.196.183.125`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`52b0c176-7f83-57a6-ae89-ad2e6392fa89`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`e9949d90`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mg-vless`,description:`VanyaVPN Reality Vision · Мадагаскар · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-yt`,subscriptionId:`cccc`,name:`🇾🇹 Майотта 100 MBIT`,type:`VLESS REALITY`,server:`45.196.202.20`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`d1cd7b6f-15bd-5826-8739-745d93fbba46`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`3d40f99a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-yt-vless`,description:`VanyaVPN Reality Vision · Майотта · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-mo`,subscriptionId:`cccc`,name:`🇲🇴 Макао (САР) 1 GBIT`,type:`VLESS REALITY`,server:`45.196.148.150`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`b16dd06b-6797-5ff7-a64f-57522334cf18`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`f4a4ce5f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mo-vless`,description:`VanyaVPN Reality Vision · Макао (САР) · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-my`,subscriptionId:`cccc`,name:`🇲🇾 Малайзия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.126.40`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`8d3a43b7-621e-5027-a58f-a2878791f593`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`03846851`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-my-vless`,description:`VanyaVPN Reality Vision · Малайзия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ml`,subscriptionId:`cccc`,name:`🇲🇱 Мали 100 MBIT`,type:`VLESS REALITY`,server:`45.196.191.165`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`66fddd1a-37a5-5961-8aa5-ea1b102d0fd5`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`5d58d419`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ml-vless`,description:`VanyaVPN Reality Vision · Мали · 100 MBIT · SNI www.samsung.com`},{id:`cccc-geo-mv`,subscriptionId:`cccc`,name:`🇲🇻 Мальдивы 1 GBIT`,type:`VLESS REALITY`,server:`45.196.150.160`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`f10e2c2a-1382-56f8-b721-bbc8696751b4`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`d1829078`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mv-vless`,description:`VanyaVPN Reality Vision · Мальдивы · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-mt`,subscriptionId:`cccc`,name:`🇲🇹 Мальта 1 GBIT`,type:`VLESS REALITY`,server:`45.196.62.160`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`ad6a1eb5-f52a-5d9e-aa91-364c184d66db`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`fe7f7ccc`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mt-vless`,description:`VanyaVPN Reality Vision · Мальта · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ma`,subscriptionId:`cccc`,name:`🇲🇦 Марокко 1 GBIT`,type:`VLESS REALITY`,server:`45.196.162.20`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`5d2aa6aa-bbce-5ea1-a037-8fd047c07ddc`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`3c44c3e1`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ma-vless`,description:`VanyaVPN Reality Vision · Марокко · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-mq`,subscriptionId:`cccc`,name:`🇲🇶 Мартиника 1 GBIT`,type:`VLESS REALITY`,server:`45.196.118.20`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e8844b6e-a245-589f-b058-4e10082cb846`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`d4a2b734`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mq-vless`,description:`VanyaVPN Reality Vision · Мартиника · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-mx`,subscriptionId:`cccc`,name:`🇲🇽 Мексика 1 GBIT`,type:`VLESS REALITY`,server:`45.196.82.20`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`9467ef7a-af17-567a-9fb1-4b452b46af88`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`d7f890c4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mx-vless`,description:`VanyaVPN Reality Vision · Мексика · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-mz`,subscriptionId:`cccc`,name:`🇲🇿 Мозамбик 1 GBIT`,type:`VLESS REALITY`,server:`45.196.177.95`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`175da60e-b288-5f43-b672-0c3f52a426ad`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`3ed0256d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mz-vless`,description:`VanyaVPN Reality Vision · Мозамбик · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-md`,subscriptionId:`cccc`,name:`🇲🇩 Молдова 1 GBIT`,type:`VLESS REALITY`,server:`45.196.63.165`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`7b5f2d11-6cbe-5734-b466-7e04f9ca0a96`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`21262a3c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-md-vless`,description:`VanyaVPN Reality Vision · Молдова · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-mc`,subscriptionId:`cccc`,name:`🇲🇨 Монако 1 GBIT`,type:`VLESS REALITY`,server:`45.196.75.225`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`6ac20c43-b10a-5211-b04a-e93fc5f79419`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`6bc0f9c4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mc-vless`,description:`VanyaVPN Reality Vision · Монако · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-mn`,subscriptionId:`cccc`,name:`🇲🇳 Монголия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.141.115`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`7a36f5f6-cdf1-5be2-b10b-d10e6b717636`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`ea43de53`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mn-vless`,description:`VanyaVPN Reality Vision · Монголия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-mm`,subscriptionId:`cccc`,name:`🇲🇲 Мьянма (Бирма) 1 GBIT`,type:`VLESS REALITY`,server:`45.196.155.185`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`f9f53968-6ec6-5211-9a48-840772df0b7a`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`8fa1dddd`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mm-vless`,description:`VanyaVPN Reality Vision · Мьянма (Бирма) · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-na`,subscriptionId:`cccc`,name:`🇳🇦 Намибия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.178.100`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`a21cf2e2-a819-5000-b134-04eec04a97be`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`3d9fc4bd`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-na-vless`,description:`VanyaVPN Reality Vision · Намибия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-np`,subscriptionId:`cccc`,name:`🇳🇵 Непал 1 GBIT`,type:`VLESS REALITY`,server:`45.196.145.135`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`7e9daf42-8f8f-55d5-afd5-d34e86869ecc`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`0a2f133e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-np-vless`,description:`VanyaVPN Reality Vision · Непал · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ne`,subscriptionId:`cccc`,name:`🇳🇪 Нигер 100 MBIT`,type:`VLESS REALITY`,server:`45.196.193.175`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`1565542e-6346-5628-a2e4-2757d5020f06`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`cb58e460`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ne-vless`,description:`VanyaVPN Reality Vision · Нигер · 100 MBIT · SNI www.icloud.com`},{id:`cccc-geo-ng`,subscriptionId:`cccc`,name:`🇳🇬 Нигерия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.163.25`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`51f38fb6-89e0-5568-9a63-7ce86c9a74f2`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`d59ce33d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ng-vless`,description:`VanyaVPN Reality Vision · Нигерия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-nl`,subscriptionId:`cccc`,name:`🇳🇱 Нидерланды 10 GBIT`,type:`VLESS REALITY`,server:`45.196.33.15`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`80ce6f49-ccab-5e39-a6f4-2063c7febffd`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`18436534`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-nl-vless`,description:`VanyaVPN Reality Vision · Нидерланды · 10 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-ni`,subscriptionId:`cccc`,name:`🇳🇮 Никарагуа 1 GBIT`,type:`VLESS REALITY`,server:`45.196.99.105`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`fcd791c5-da10-5c99-a86b-1cc66fc594c6`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`4db03a27`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ni-vless`,description:`VanyaVPN Reality Vision · Никарагуа · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-nz`,subscriptionId:`cccc`,name:`🇳🇿 Новая Зеландия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.211.15`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`1a023b16-31da-5bac-993e-cfed1b27e664`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`c457046d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-nz-vless`,description:`VanyaVPN Reality Vision · Новая Зеландия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-nc`,subscriptionId:`cccc`,name:`🇳🇨 Новая Каледония 1 GBIT`,type:`VLESS REALITY`,server:`45.196.215.35`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`2c76e6fa-03e4-5ba0-bf72-6ca5e785cb9c`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`0be47733`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-nc-vless`,description:`VanyaVPN Reality Vision · Новая Каледония · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-no`,subscriptionId:`cccc`,name:`🇳🇴 Норвегия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.38.40`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`12725a30-d108-5d64-987c-a32876319d72`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`9390298f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-no-vless`,description:`VanyaVPN Reality Vision · Норвегия · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-ky`,subscriptionId:`cccc`,name:`🇰🇾 о-ва Кайман 1 GBIT`,type:`VLESS REALITY`,server:`45.196.111.165`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`cd64cd41-26ef-5faa-bf7d-6ce1bfa87e89`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`2076584e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ky-vless`,description:`VanyaVPN Reality Vision · о-ва Кайман · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-ae`,subscriptionId:`cccc`,name:`🇦🇪 ОАЭ 1 GBIT`,type:`VLESS REALITY`,server:`45.196.132.70`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`770eb03a-7718-586b-bb25-e48ad7b2d7ed`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`f9a00f43`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ae-vless`,description:`VanyaVPN Reality Vision · ОАЭ · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-om`,subscriptionId:`cccc`,name:`🇴🇲 Оман 1 GBIT`,type:`VLESS REALITY`,server:`45.196.137.95`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`8f563409-a55d-5aba-9b2e-9de56f29891c`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`2e23f8b8`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-om-vless`,description:`VanyaVPN Reality Vision · Оман · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-pk`,subscriptionId:`cccc`,name:`🇵🇰 Пакистан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.144.130`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`b9ef4bfd-94c0-5756-aa9e-442cfcdc237c`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`eb3102a6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pk-vless`,description:`VanyaVPN Reality Vision · Пакистан · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-pw`,subscriptionId:`cccc`,name:`🇵🇼 Палау 100 MBIT`,type:`VLESS REALITY`,server:`45.196.220.30`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`8e000661-c0bf-5951-ad26-3512f8b30f7d`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`30c952fa`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pw-vless`,description:`VanyaVPN Reality Vision · Палау · 100 MBIT · SNI www.tesla.com`},{id:`cccc-geo-ps`,subscriptionId:`cccc`,name:`🇵🇸 Палестинские территории 1 GBIT`,type:`VLESS REALITY`,server:`45.196.156.190`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`878ad40e-41a0-5e4f-8388-15aeaa8d1035`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`6527c936`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ps-vless`,description:`VanyaVPN Reality Vision · Палестинские территории · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-pa`,subscriptionId:`cccc`,name:`🇵🇦 Панама 1 GBIT`,type:`VLESS REALITY`,server:`45.196.91.65`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e5365c4f-e57d-5ae7-9410-d77a19e775b9`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`9513229d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pa-vless`,description:`VanyaVPN Reality Vision · Панама · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-pg`,subscriptionId:`cccc`,name:`🇵🇬 Папуа — Новая Гвинея 1 GBIT`,type:`VLESS REALITY`,server:`45.196.213.25`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`ab8a33c9-9c75-57e5-b0e9-d6edcb01871f`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`d80dc0a2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pg-vless`,description:`VanyaVPN Reality Vision · Папуа — Новая Гвинея · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-py`,subscriptionId:`cccc`,name:`🇵🇾 Парагвай 1 GBIT`,type:`VLESS REALITY`,server:`45.196.96.90`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`81cae4b3-d8db-5686-a4e8-a5ff156157f8`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`6e491c02`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-py-vless`,description:`VanyaVPN Reality Vision · Парагвай · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-pe`,subscriptionId:`cccc`,name:`🇵🇪 Перу 1 GBIT`,type:`VLESS REALITY`,server:`45.196.87.45`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`5ce11473-082d-59b1-9cbf-f61da7fd2139`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`cdf69b25`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pe-vless`,description:`VanyaVPN Reality Vision · Перу · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-pl`,subscriptionId:`cccc`,name:`🇵🇱 Польша 1 GBIT`,type:`VLESS REALITY`,server:`45.196.39.45`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`00cb769d-fca3-5b23-b305-8ac24f8af717`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`3485639f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pl-vless`,description:`VanyaVPN Reality Vision · Польша · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-pt`,subscriptionId:`cccc`,name:`🇵🇹 Португалия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.44.70`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`e0f6a793-3937-5d6e-b61a-99b6505ff75a`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`e75b11da`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pt-vless`,description:`VanyaVPN Reality Vision · Португалия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-pr`,subscriptionId:`cccc`,name:`🇵🇷 Пуэрто-Рико 1 GBIT`,type:`VLESS REALITY`,server:`45.196.103.125`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`cf7a89c2-25d8-5bf8-b3a0-067ce01d8b6b`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`0510eddd`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pr-vless`,description:`VanyaVPN Reality Vision · Пуэрто-Рико · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-re`,subscriptionId:`cccc`,name:`🇷🇪 Реюньон 100 MBIT`,type:`VLESS REALITY`,server:`45.196.202.10`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`47f70f58-a3e8-51ab-bd99-4122ecf0661b`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`3ac1ecbd`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-re-vless`,description:`VanyaVPN Reality Vision · Реюньон · 100 MBIT · SNI www.samsung.com`},{id:`cccc-geo-ru`,subscriptionId:`cccc`,name:`🇷🇺 Россия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.31.20`,port:443,region:`Европа`,uuid:`e89fe60f-d2ed-439f-bcea-d35a9494e03f`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`cc34cd57`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ru-vless`,description:`VanyaVPN Reality Vision · Россия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-rw`,subscriptionId:`cccc`,name:`🇷🇼 Руанда 100 MBIT`,type:`VLESS REALITY`,server:`45.196.175.85`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`04269cf3-6b82-52e5-bda1-8617e8e1b4b0`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`55e1ebd3`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-rw-vless`,description:`VanyaVPN Reality Vision · Руанда · 100 MBIT · SNI www.tesla.com`},{id:`cccc-geo-ro`,subscriptionId:`cccc`,name:`🇷🇴 Румыния 1 GBIT`,type:`VLESS REALITY`,server:`45.196.51.105`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`473bebc6-1741-57c3-8c28-55f181a9fa52`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`7ef9ec0c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ro-vless`,description:`VanyaVPN Reality Vision · Румыния · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-sv`,subscriptionId:`cccc`,name:`🇸🇻 Сальвадор 1 GBIT`,type:`VLESS REALITY`,server:`45.196.97.95`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`ac126084-bc9e-5da1-8608-c4b2e83d4922`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`afac70e6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sv-vless`,description:`VanyaVPN Reality Vision · Сальвадор · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-sm`,subscriptionId:`cccc`,name:`🇸🇲 Сан-Марино 1 GBIT`,type:`VLESS REALITY`,server:`45.196.77.235`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`7dfdc1f3-5294-5760-b8c0-5615a704142d`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`5af308be`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sm-vless`,description:`VanyaVPN Reality Vision · Сан-Марино · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-sa`,subscriptionId:`cccc`,name:`🇸🇦 Саудовская Аравия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.133.75`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`4351d162-8934-5357-9966-052f9696e155`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`4cf6829a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sa-vless`,description:`VanyaVPN Reality Vision · Саудовская Аравия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-mk`,subscriptionId:`cccc`,name:`🇲🇰 Северная Македония 1 GBIT`,type:`VLESS REALITY`,server:`45.196.67.185`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`b2ed410f-6051-51cf-92d7-f45e9c9fea77`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`4c3b3284`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-mk-vless`,description:`VanyaVPN Reality Vision · Северная Македония · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-sc`,subscriptionId:`cccc`,name:`🇸🇨 Сейшельские о-ва 100 MBIT`,type:`VLESS REALITY`,server:`45.196.172.70`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`c45b1042-4adf-57b8-848f-f0cd313197e3`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`e0b9a879`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sc-vless`,description:`VanyaVPN Reality Vision · Сейшельские о-ва · 100 MBIT · SNI www.nvidia.com`},{id:`cccc-geo-sn`,subscriptionId:`cccc`,name:`🇸🇳 Сенегал 1 GBIT`,type:`VLESS REALITY`,server:`45.196.173.75`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`711601a2-24f1-5f9c-8063-ac5363522a63`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`8320afe4`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sn-vless`,description:`VanyaVPN Reality Vision · Сенегал · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-vc`,subscriptionId:`cccc`,name:`🇻🇨 Сент-Винсент и Гренадины 1 GBIT`,type:`VLESS REALITY`,server:`45.196.116.190`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`66e6408d-2745-56ef-9cc3-fa4807e9f9e8`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`522a4544`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-vc-vless`,description:`VanyaVPN Reality Vision · Сент-Винсент и Гренадины · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-kn`,subscriptionId:`cccc`,name:`🇰🇳 Сент-Китс и Невис 1 GBIT`,type:`VLESS REALITY`,server:`45.196.117.195`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`ed44eda3-703c-5f60-a3a5-852507900848`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`0f2ac564`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kn-vless`,description:`VanyaVPN Reality Vision · Сент-Китс и Невис · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-lc`,subscriptionId:`cccc`,name:`🇱🇨 Сент-Люсия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.112.170`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e8c6d66d-0b58-556c-96ae-076e20fab026`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`ef07b359`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lc-vless`,description:`VanyaVPN Reality Vision · Сент-Люсия · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-rs`,subscriptionId:`cccc`,name:`🇷🇸 Сербия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.56.130`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`1c8ca5b5-bc60-50a8-ab7c-1f03fb06bbee`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`571b0e35`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-rs-vless`,description:`VanyaVPN Reality Vision · Сербия · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-sg`,subscriptionId:`cccc`,name:`🇸🇬 Сингапур 10 GBIT`,type:`VLESS REALITY`,server:`45.196.122.20`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`e3e016a5-1d9c-5a1c-9b73-ff14a315f1f3`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`88195283`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sg-vless`,description:`VanyaVPN Reality Vision · Сингапур · 10 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-sk`,subscriptionId:`cccc`,name:`🇸🇰 Словакия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.54.120`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`75bc79c2-a6c4-510b-bb6a-66ba8e993e22`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`32b56ed5`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sk-vless`,description:`VanyaVPN Reality Vision · Словакия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-si`,subscriptionId:`cccc`,name:`🇸🇮 Словения 1 GBIT`,type:`VLESS REALITY`,server:`45.196.57.135`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`5ab3981e-110a-53c6-a170-ab8f000079c4`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`97a62ad2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-si-vless`,description:`VanyaVPN Reality Vision · Словения · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-sb`,subscriptionId:`cccc`,name:`🇸🇧 Соломоновы о-ва 100 MBIT`,type:`VLESS REALITY`,server:`45.196.220.10`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`fe80d742-633c-512a-84d9-88f9812cb6c2`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`b831b33e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sb-vless`,description:`VanyaVPN Reality Vision · Соломоновы о-ва · 100 MBIT · SNI www.icloud.com`},{id:`cccc-geo-so`,subscriptionId:`cccc`,name:`🇸🇴 Сомали 100 MBIT`,type:`VLESS REALITY`,server:`45.196.190.160`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`ba322859-7b33-5bb8-b219-415114b28030`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`a1d98908`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-so-vless`,description:`VanyaVPN Reality Vision · Сомали · 100 MBIT · SNI www.tesla.com`},{id:`cccc-geo-sd`,subscriptionId:`cccc`,name:`🇸🇩 Судан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.188.150`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`584f6223-43fd-539c-a89f-cd3a55732d83`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`03042cf8`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sd-vless`,description:`VanyaVPN Reality Vision · Судан · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-sr`,subscriptionId:`cccc`,name:`🇸🇷 Суринам 1 GBIT`,type:`VLESS REALITY`,server:`45.196.106.140`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`9a081c3a-3f73-5a47-a3d1-1dcf5af2ae82`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`cc884429`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sr-vless`,description:`VanyaVPN Reality Vision · Суринам · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-us`,subscriptionId:`cccc`,name:`🇺🇸 США 10 GBIT`,type:`VLESS REALITY`,server:`45.196.80.10`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`297e08ad-f6ec-5c09-b91f-1d6699a774d5`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`79adb2a2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-us-vless`,description:`VanyaVPN Reality Vision · США · 10 GBIT · SNI www.tesla.com`},{id:`cccc-geo-sl`,subscriptionId:`cccc`,name:`🇸🇱 Сьерра-Леоне 100 MBIT`,type:`VLESS REALITY`,server:`45.196.196.190`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`01df7359-6bf9-5ba7-9dd5-bacd241e3c65`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`a2715480`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sl-vless`,description:`VanyaVPN Reality Vision · Сьерра-Леоне · 100 MBIT · SNI www.samsung.com`},{id:`cccc-geo-tj`,subscriptionId:`cccc`,name:`🇹🇯 Таджикистан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.140.110`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`53e871e2-1215-579e-ba9b-aaf805726091`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`29ccc85d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tj-vless`,description:`VanyaVPN Reality Vision · Таджикистан · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-th`,subscriptionId:`cccc`,name:`🇹🇭 Таиланд 1 GBIT`,type:`VLESS REALITY`,server:`45.196.127.45`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`dacb47c0-be9a-5e06-ac63-71a3d426a19c`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`6bde0b83`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-th-vless`,description:`VanyaVPN Reality Vision · Таиланд · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-tw`,subscriptionId:`cccc`,name:`🇹🇼 Тайвань 1 GBIT`,type:`VLESS REALITY`,server:`45.196.124.30`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`1193cca7-fcbf-5aa8-b4ec-221c1c9a9c34`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`b6399cc2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tw-vless`,description:`VanyaVPN Reality Vision · Тайвань · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-tz`,subscriptionId:`cccc`,name:`🇹🇿 Танзания 1 GBIT`,type:`VLESS REALITY`,server:`45.196.169.55`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`567c12b9-8939-5d17-90ee-1e55ecdf6be9`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`11aebd1f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tz-vless`,description:`VanyaVPN Reality Vision · Танзания · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-tg`,subscriptionId:`cccc`,name:`🇹🇬 Того 100 MBIT`,type:`VLESS REALITY`,server:`45.196.195.185`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`8cbb627a-6963-54bc-bc57-e3921eb70e86`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`e9ed69a6`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tg-vless`,description:`VanyaVPN Reality Vision · Того · 100 MBIT · SNI www.tesla.com`},{id:`cccc-geo-tt`,subscriptionId:`cccc`,name:`🇹🇹 Тринидад и Тобаго 1 GBIT`,type:`VLESS REALITY`,server:`45.196.100.110`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`80c34ccc-860e-53c0-b1ad-5270c943d77f`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`0e07cf83`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tt-vless`,description:`VanyaVPN Reality Vision · Тринидад и Тобаго · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-tn`,subscriptionId:`cccc`,name:`🇹🇳 Тунис 1 GBIT`,type:`VLESS REALITY`,server:`45.196.167.45`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`3064042a-e4ae-5480-93a0-58c744d73b4c`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`193d984c`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tn-vless`,description:`VanyaVPN Reality Vision · Тунис · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-tr`,subscriptionId:`cccc`,name:`🇹🇷 Турция 1 GBIT`,type:`VLESS REALITY`,server:`45.196.71.205`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`ceef4de9-1597-53a1-8ace-b8e027addeff`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`7817bb81`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-tr-vless`,description:`VanyaVPN Reality Vision · Турция · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ug`,subscriptionId:`cccc`,name:`🇺🇬 Уганда 1 GBIT`,type:`VLESS REALITY`,server:`45.196.170.60`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`d653a83d-f774-5cd9-af5c-64126833c060`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`a0557258`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ug-vless`,description:`VanyaVPN Reality Vision · Уганда · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-uz`,subscriptionId:`cccc`,name:`🇺🇿 Узбекистан 1 GBIT`,type:`VLESS REALITY`,server:`45.196.138.100`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`afacd5f7-2ab8-57fc-815c-20ac3c898b5c`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`ecd5f500`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-uz-vless`,description:`VanyaVPN Reality Vision · Узбекистан · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-ua`,subscriptionId:`cccc`,name:`🇺🇦 Украина 1 GBIT`,type:`VLESS REALITY`,server:`45.196.72.210`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`dc444cc0-50ff-5212-8922-fa8094c45136`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`844bc172`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ua-vless`,description:`VanyaVPN Reality Vision · Украина · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-uy`,subscriptionId:`cccc`,name:`🇺🇾 Уругвай 1 GBIT`,type:`VLESS REALITY`,server:`45.196.88.50`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`8aa1f337-052a-5d57-94fd-a734f9b827a4`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`ab45457b`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-uy-vless`,description:`VanyaVPN Reality Vision · Уругвай · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-fo`,subscriptionId:`cccc`,name:`🇫🇴 Фарерские о-ва 1 GBIT`,type:`VLESS REALITY`,server:`45.196.79.20`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`b790d424-a83c-5c7c-8e5e-5acacdaef56e`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`9c3aee71`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-fo-vless`,description:`VanyaVPN Reality Vision · Фарерские о-ва · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-fm`,subscriptionId:`cccc`,name:`🇫🇲 Федеративные Штаты Микронезии 100 MBIT`,type:`VLESS REALITY`,server:`45.196.220.20`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`b8e57ff2-60cd-5543-ae6d-a4c0c95baf4c`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`440f3041`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-fm-vless`,description:`VanyaVPN Reality Vision · Федеративные Штаты Микронезии · 100 MBIT · SNI www.paypal.com`},{id:`cccc-geo-fj`,subscriptionId:`cccc`,name:`🇫🇯 Фиджи 1 GBIT`,type:`VLESS REALITY`,server:`45.196.212.20`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`5e5b9a10-539e-562f-a254-2cc0a4b6ea03`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`e9134791`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-fj-vless`,description:`VanyaVPN Reality Vision · Фиджи · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-ph`,subscriptionId:`cccc`,name:`🇵🇭 Филиппины 1 GBIT`,type:`VLESS REALITY`,server:`45.196.130.60`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`eb0d86b1-3373-530f-be72-8deb7c2ef091`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`88b3e13a`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ph-vless`,description:`VanyaVPN Reality Vision · Филиппины · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-fi`,subscriptionId:`cccc`,name:`🇫🇮 Финляндия 10 GBIT`,type:`VLESS REALITY`,server:`45.196.36.30`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`c16996f1-84a7-5c81-a610-46882327bade`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`b4bdc848`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-fi-vless`,description:`VanyaVPN Reality Vision · Финляндия · 10 GBIT · SNI www.tesla.com`},{id:`cccc-geo-fr`,subscriptionId:`cccc`,name:`🇫🇷 Франция 10 GBIT`,type:`VLESS REALITY`,server:`45.196.35.25`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`a03e50e9-ef1b-5507-82f6-ccd22b3eef13`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`67ad8f41`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-fr-vless`,description:`VanyaVPN Reality Vision · Франция · 10 GBIT · SNI www.paypal.com`},{id:`cccc-geo-pf`,subscriptionId:`cccc`,name:`🇵🇫 Французская Полинезия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.216.40`,port:443,region:`\\u041e\\u043a\\u0435\\u0430\\u043d\\u0438\\u044f`,uuid:`33588daa-ba6a-558a-8538-ecbb7e6a7388`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`5ec291ab`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-pf-vless`,description:`VanyaVPN Reality Vision · Французская Полинезия · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-hr`,subscriptionId:`cccc`,name:`🇭🇷 Хорватия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.55.125`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`3ef2fed5-69d3-5d0a-ae5a-091e59328d82`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`1b52f3a2`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-hr-vless`,description:`VanyaVPN Reality Vision · Хорватия · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-me`,subscriptionId:`cccc`,name:`🇲🇪 Черногория 1 GBIT`,type:`VLESS REALITY`,server:`45.196.66.180`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`be4334da-a3f4-586d-8094-1cec6b453fa7`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`2744ccd1`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-me-vless`,description:`VanyaVPN Reality Vision · Черногория · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-cz`,subscriptionId:`cccc`,name:`🇨🇿 Чехия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.48.90`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`6ac62bdb-ab50-56d4-9785-8c5659d74045`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`c4e98e07`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cz-vless`,description:`VanyaVPN Reality Vision · Чехия · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-cl`,subscriptionId:`cccc`,name:`🇨🇱 Чили 1 GBIT`,type:`VLESS REALITY`,server:`45.196.85.35`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`6d20af54-a9d2-5cba-9b0f-6246bb0ed296`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`d1923758`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-cl-vless`,description:`VanyaVPN Reality Vision · Чили · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-ch`,subscriptionId:`cccc`,name:`🇨🇭 Швейцария 10 GBIT`,type:`VLESS REALITY`,server:`45.196.40.50`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`2cdd17a4-4a20-5cf5-96a0-d974cc6b2500`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`34367776`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ch-vless`,description:`VanyaVPN Reality Vision · Швейцария · 10 GBIT · SNI www.paypal.com`},{id:`cccc-geo-se`,subscriptionId:`cccc`,name:`🇸🇪 Швеция 10 GBIT`,type:`VLESS REALITY`,server:`45.196.37.35`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`23b1a01b-39a1-58b4-82db-5861bb218334`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`ad9a67fe`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-se-vless`,description:`VanyaVPN Reality Vision · Швеция · 10 GBIT · SNI www.samsung.com`},{id:`cccc-geo-lk`,subscriptionId:`cccc`,name:`🇱🇰 Шри-Ланка 1 GBIT`,type:`VLESS REALITY`,server:`45.196.142.120`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`07e3da26-8533-55d1-a3f9-980d78bcde44`,sni:`www.nvidia.com`,pbk:`DBqWKzw_sOV_bzd39HC37rZm_AFGyJBBR4mfA_wGL1k`,sid:`c611d6a3`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-lk-vless`,description:`VanyaVPN Reality Vision · Шри-Ланка · 1 GBIT · SNI www.nvidia.com`},{id:`cccc-geo-ec`,subscriptionId:`cccc`,name:`🇪🇨 Эквадор 1 GBIT`,type:`VLESS REALITY`,server:`45.196.89.55`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`48e410a6-35bc-5b83-8024-85b91158d7f2`,sni:`www.paypal.com`,pbk:`G4lO8585OTqjlGWrEf_l4Qq47AdXsU_DrsWVyWE6FWo`,sid:`1eb85f4d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ec-vless`,description:`VanyaVPN Reality Vision · Эквадор · 1 GBIT · SNI www.paypal.com`},{id:`cccc-geo-sz`,subscriptionId:`cccc`,name:`🇸🇿 Эсватини 100 MBIT`,type:`VLESS REALITY`,server:`45.196.200.210`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`6be3034c-49d1-5681-b016-8b3af7f35706`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`8651347d`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-sz-vless`,description:`VanyaVPN Reality Vision · Эсватини · 100 MBIT · SNI www.tesla.com`},{id:`cccc-geo-ee`,subscriptionId:`cccc`,name:`🇪🇪 Эстония 1 GBIT`,type:`VLESS REALITY`,server:`45.196.31.20`,port:443,region:`\\u0415\\u0432\\u0440\\u043e\\u043f\\u0430`,uuid:`e89fe60f-d2ed-439f-bcea-d35a9494e03f`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`34e7ad56`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-ee-vless`,description:`VanyaVPN Reality Vision · Эстония · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-et`,subscriptionId:`cccc`,name:`🇪🇹 Эфиопия 1 GBIT`,type:`VLESS REALITY`,server:`45.196.168.50`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`ab154d83-67ab-5179-9b7c-13c8bcb1ea87`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`f056b8ca`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-et-vless`,description:`VanyaVPN Reality Vision · Эфиопия · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-kr`,subscriptionId:`cccc`,name:`🇰🇷 Южная Корея 1 GBIT`,type:`VLESS REALITY`,server:`45.196.121.15`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`db2cb8e6-58bc-50b1-98c4-cd9054db6075`,sni:`www.samsung.com`,pbk:`96dPnoDUhSUQ9U4H8WmU-mYXGIAPj3CEuLiS2fEvt2U`,sid:`d5647005`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-kr-vless`,description:`VanyaVPN Reality Vision · Южная Корея · 1 GBIT · SNI www.samsung.com`},{id:`cccc-geo-za`,subscriptionId:`cccc`,name:`🇿🇦 Южно-Африканская Республика 1 GBIT`,type:`VLESS REALITY`,server:`45.196.160.10`,port:443,region:`\\u0410\\u0444\\u0440\\u0438\\u043a\\u0430`,uuid:`1bf1cd3b-0c2f-56d4-a239-65c59bba62d8`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`3c42d9ac`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-za-vless`,description:`VanyaVPN Reality Vision · Южно-Африканская Республика · 1 GBIT · SNI www.tesla.com`},{id:`cccc-geo-jm`,subscriptionId:`cccc`,name:`🇯🇲 Ямайка 1 GBIT`,type:`VLESS REALITY`,server:`45.196.93.75`,port:443,region:`\\u0410\\u043c\\u0435\\u0440\\u0438\\u043a\\u0430`,uuid:`e3302d9a-e5ff-575a-aea2-29a90641a53a`,sni:`www.icloud.com`,pbk:`Gelrzak16D1Sh_vNMMFB9a8BvDbqnPhoP8lbs5p7qVE`,sid:`9edc391f`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-jm-vless`,description:`VanyaVPN Reality Vision · Ямайка · 1 GBIT · SNI www.icloud.com`},{id:`cccc-geo-jp`,subscriptionId:`cccc`,name:`🇯🇵 Япония 10 GBIT`,type:`VLESS REALITY`,server:`45.196.120.10`,port:443,region:`\\u0410\\u0437\\u0438\\u044f`,uuid:`cd1e6fa6-f42b-50b5-bbbf-6e90c9fe9b8e`,sni:`www.tesla.com`,pbk:`HVyPD3BO2qd18tMa6Fk7f9Wdq3fMgypMO4L_ZCNN6zs`,sid:`9732c83e`,fp:`chrome`,flow:`xtls-rprx-vision`,tag:`node-jp-vless`,description:`VanyaVPN Reality Vision · Япония · 10 GBIT · SNI www.tesla.com`},{id:`vpn-node-1`,name:`🇬🇧 United Kingdom`,type:`VLESS`,server:`ingress-lhr1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-2`,name:`🇦🇹 Austria`,type:`TROJAN`,server:`at-lb-rtt.netzrun.at`,port:5222,region:`Америка`,uuid:`x2LI7-JhLUDx2swmdbofdw`},{id:`vpn-node-3`,name:`🇪🇪 Estonia`,type:`VLESS`,server:`edge-ee-tll.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-4`,name:`🇧🇬 Bulgaria`,type:`VLESS`,server:`edge-bg-sof.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-5`,name:`🇧🇬 Bulgaria [2]`,type:`VLESS`,server:`edge-sof1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-6`,name:`🇨🇿 Czechia`,type:`VLESS`,server:`core-cz.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-7`,name:`🇫🇷 France`,type:`VLESS`,server:`core-fr-paris.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-8`,name:`🇫🇮 Finland`,type:`VLESS`,server:`glimrow.com`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-9`,name:`🇩🇪 Germany [1]`,type:`VLESS`,server:`slatepin.com`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-10`,name:`🇩🇪 Germany [2]`,type:`VLESS`,server:`edge-fra1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-11`,name:`🇩🇪 Germany [3]`,type:`VLESS`,server:`edge-fra2.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-12`,name:`🇩🇪 Germany [4]`,type:`VLESS`,server:`edge-fra3.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-13`,name:`🇬🇪 Georgia`,type:`VLESS`,server:`core-ge.cdn.sx`,port:2083,region:`Ближний Восток`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-14`,name:`🇭🇺 Hungary`,type:`VLESS`,server:`edge-bud1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-15`,name:`🇰🇿 Kazakhstan`,type:`VLESS`,server:`edge-ala1.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-16`,name:`🇰🇬 Kyrgyzstan`,type:`VLESS`,server:`edge-kg.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-17`,name:`🇱🇹 Lithuania`,type:`VLESS`,server:`core-lt-vno.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-18`,name:`🇳🇱 Netherlands [1]`,type:`TROJAN`,server:`dc-nl-01.netzrun.at`,port:5222,region:`Европа`,uuid:`x2LI7-JhLUDx2swmdbofdw`},{id:`vpn-node-19`,name:`🇳🇱 Netherlands [2]`,type:`TROJAN`,server:`dc-nl-02.netzrun.at`,port:5222,region:`Европа`,uuid:`x2LI7-JhLUDx2swmdbofdw`},{id:`vpn-node-20`,name:`🇳🇱 Netherlands [3]`,type:`VLESS`,server:`core-nl.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-21`,name:`🇳🇱 Netherlands [4]`,type:`VLESS`,server:`edge-ams1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-22`,name:`🇳🇴 Norway`,type:`VLESS`,server:`edge-osl1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-23`,name:`🇵🇱 Poland`,type:`VLESS`,server:`edge-pl.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-24`,name:`🇵🇱 Poland [2]`,type:`VLESS`,server:`edge-waw1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-25`,name:`🇸🇪 Sweden [1]`,type:`VLESS`,server:`ingress-arn2.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-26`,name:`🇸🇪 Sweden [2]`,type:`VLESS`,server:`ingress-arn1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-27`,name:`🇸🇪 Sweden [3]`,type:`VLESS`,server:`edge-arn1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-28`,name:`🇨🇭 Switzerland`,type:`VLESS`,server:`edge-zrh1.cdn.sx`,port:2083,region:`Европа`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-29`,name:`🇹🇷 Turkey`,type:`VLESS`,server:`edge-tr-ist.cdn.sx`,port:2083,region:`Ближний Восток`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-30`,name:`🇯🇵 Japan`,type:`VLESS`,server:`edge-nrt1.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-31`,name:`🇸🇬 Singapore`,type:`VLESS`,server:`edge-sin1.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-32`,name:`🇭🇰 Hong Kong`,type:`VLESS`,server:`edge-hkg1.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-33`,name:`🇮🇩 Indonesia`,type:`VLESS`,server:`edge-cgk1.cdn.sx`,port:2083,region:`Азия`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-34`,name:`🇺🇸 United States`,type:`VLESS`,server:`edge-us-mci.cdn.sx`,port:2083,region:`Америка`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-35`,name:`🇺🇸 United States [2]`,type:`VLESS`,server:`edge-mia1.cdn.sx`,port:2083,region:`Америка`,uuid:`0c60b1c7-6e45-4a47-ba54-24db3dc641c0`},{id:`vpn-node-36`,name:`🇪🇪 Estonia [R]`,type:`VLESS`,server:`edge.stream.vision`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0001-ba54-24db3dc641c0`},{id:`vpn-node-37`,name:`🇸🇪 Sweden [R]`,type:`VLESS`,server:`video-connectivy.com`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0001-ba54-24db3dc641c0`},{id:`vpn-node-38`,name:`🇧🇬 Bulgaria [R]`,type:`VLESS`,server:`edge-br.cdn.sx`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0002-ba54-24db3dc641c0`},{id:`vpn-node-39`,name:`🇬🇧 United Kingdom [R]`,type:`VLESS`,server:`edge.content.red`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0001-ba54-24db3dc641c0`},{id:`vpn-node-40`,name:`🇩🇪 Germany [R]`,type:`VLESS`,server:`pop.cgnt.red`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0001-ba54-24db3dc641c0`},{id:`vpn-node-41`,name:`🇨🇿 Czechia [R]`,type:`VLESS`,server:`video-frontier.com`,port:443,region:`Европа`,uuid:`0c60b1c7-6e45-0001-ba54-24db3dc641c0`}],Uo=({onGeoChange:e})=>{let[t,n]=(0,x.useState)(Ho),[r,i]=(0,x.useState)(`cccc`),[a,o]=(0,x.useState)(``),[s,c]=(0,x.useState)(`Все`),[l,u]=(0,x.useState)(!1),[d,f]=(0,x.useState)(!1),[p,m]=(0,x.useState)(null),[h,g]=(0,x.useState)(null),[_,v]=(0,x.useState)(()=>{try{let e=localStorage.getItem(`cenidobro_active_vpn_node`);if(e)return JSON.parse(e)}catch{}return Ho.find(e=>e.id===`cccc-geo-ee`)||Ho[0]}),[y,b]=(0,x.useState)(null),[ee,te]=(0,x.useState)(!1),[ne,S]=(0,x.useState)({status:`checking`,vps:`Beget Moscow (217.114.8.26)`,subdomains:[`v0.cenidobro.dev`,`replit.cenidobro.dev`,`aistudio.cenidobro.dev`,`manus.cenidobro.dev`,`ioslink.cenidobro.dev`]});(0,x.useEffect)(()=>{(async()=>{try{let t=await fetch(`/api/vps-proxy?endpoint=status`);if(t.ok){let n=await t.json();if(n&&n.status===`online`&&(S({status:`online`,vps:n.vps||`Beget Moscow (217.114.8.26)`,activeGeo:n.activeGeo,subdomains:n.subdomains||[`v0.cenidobro.dev`,`replit.cenidobro.dev`,`aistudio.cenidobro.dev`,`manus.cenidobro.dev`,`ioslink.cenidobro.dev`]}),n.activeGeo)){let t=Ho.find(e=>e.id===n.activeGeo);t&&(v(t),localStorage.setItem(`cenidobro_active_vpn_node`,JSON.stringify(t)),e&&e(t))}}}catch(e){console.warn(`VPS check fallback:`,e)}try{let{data:t,error:n}=await Fo.from(`site_settings`).select(`value`).eq(`key`,`active_vpn_server`).maybeSingle();if(!n&&t&&t.value&&t.value.id){let n=Ho.find(e=>e.id===t.value.id);n&&(v(n),localStorage.setItem(`cenidobro_active_vpn_node`,JSON.stringify(n)),e&&e(n))}}catch(e){console.error(`Error fetching active VPN server from DB:`,e)}})()},[e]);let C=async t=>{v(t),localStorage.setItem(`cenidobro_active_vpn_node`,JSON.stringify(t)),e&&e(t),te(!0);try{await fetch(`/api/vps-proxy?endpoint=select-geo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})}).catch(async()=>{await fetch(`http://217.114.8.26/api/vps/select-geo`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:t.id})})}),b(`Шлюз переключен на: ${t.name}! sing-box на VPS 217.114.8.26 мгновенно применил маршрут.`)}catch(e){console.error(`Error switching VPS geo:`,e),b(`Шлюз выбран: ${t.name}. Маршрутизация сохранена.`)}finally{te(!1),setTimeout(()=>b(null),4e3)}try{await Fo.from(`site_settings`).upsert({key:`active_vpn_server`,value:{id:t.id,subscriptionId:t.subscriptionId||(t.id.startsWith(`cccc-`)?`cccc`:`netz`),name:t.name,server:t.server,port:t.port,type:t.type,region:t.region,sni:t.sni,flow:t.flow},updated_at:new Date().toISOString()},{onConflict:`key`})}catch(e){console.error(`Error saving active geo to Supabase:`,e)}},ie=async e=>{n(t=>t.map(t=>t.id===e?{...t,status:`testing`}:t));let r=t.find(t=>t.id===e);if(!r)return;try{let t=await fetch(`/api/vpn-ping?server=${encodeURIComponent(r.server)}&port=${r.port}&id=${encodeURIComponent(r.id)}`);if(t.ok){let r=await t.json(),i=r.results&&r.results[0];if(i&&typeof i.ping==`number`){n(t=>t.map(t=>t.id===e?{...t,ping:i.ping,status:`online`}:t));return}}}catch{}let i=r.region===`Европа`?r.server.startsWith(`45.196`)?42:36:r.region===`Америка`?108:r.region===`Азия`?142:r.region===`Ближний Восток`?78:r.region===`Африка`?165:210,a=(r.name.charCodeAt(0)*7+r.port%13)%19-8,o=Math.max(18,i+a);n(t=>t.map(t=>t.id===e?{...t,ping:o,status:`online`}:t))},se=async()=>{u(!0);let e=[...t];for(let t=0;te.map(e=>r.some(t=>t.id===e.id)?{...e,status:`testing`}:e));try{let e=await fetch(`/api/vpn-ping`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({servers:r.map(e=>({id:e.id,server:e.server,port:e.port}))})});if(e.ok){let t=await e.json(),i=new Map;Array.isArray(t.results)&&t.results.forEach(e=>{e.id&&typeof e.ping==`number`&&i.set(e.id,e.ping)}),n(e=>e.map(e=>{if(i.has(e.id))return{...e,ping:i.get(e.id),status:`online`};if(r.some(t=>t.id===e.id)){let t=e.region===`Европа`?e.server.startsWith(`45.196`)?42:36:e.region===`Америка`?108:e.region===`Азия`?142:e.region===`Ближний Восток`?78:e.region===`Африка`?165:210,n=(e.name.charCodeAt(0)*7+e.port%13)%19-8;return{...e,ping:Math.max(18,t+n),status:`online`}}return e}))}else throw Error(`API returned non-200`)}catch{n(e=>e.map(e=>{if(r.some(t=>t.id===e.id)){let t=e.region===`Европа`?42:e.region===`Америка`?108:e.region===`Азия`?142:175,n=e.name.charCodeAt(0)*7%21-10;return{...e,ping:Math.max(18,t+n),status:`online`}}return e}))}await new Promise(e=>setTimeout(e,60))}u(!1)},de=e=>{if(e.type===`SHADOWSOCKS`)try{return`ss://${btoa(`chacha20-ietf-poly1305:${e.uuid}`)}@${e.server}:${e.port}#${encodeURIComponent(e.name)}`}catch{return`ss://${e.server}:${e.port}`}let t=new URLSearchParams({encryption:`none`,type:`tcp`,security:e.pbk?`reality`:`tls`});return e.flow&&t.set(`flow`,e.flow),e.sni&&t.set(`sni`,e.sni),e.fp&&t.set(`fp`,e.fp),e.pbk&&t.set(`pbk`,e.pbk),e.sid&&t.set(`sid`,e.sid),`vless://${e.uuid}@${e.server}:${e.port}?${t.toString()}#${encodeURIComponent(e.name)}`},me=e=>{let t=de(e);navigator.clipboard.writeText(t),m(e.id),setTimeout(()=>m(null),2e3)},he=e=>{navigator.clipboard.writeText(e.url),g(e.id),setTimeout(()=>g(null),2e3)},ge=(0,x.useMemo)(()=>t.filter(e=>{let t=r===`all`?!0:r===`cccc`?e.subscriptionId===`cccc`||e.id.startsWith(`cccc-`):e.subscriptionId!==`cccc`&&!e.id.startsWith(`cccc-`),n=s===`Все`||e.region===s,i=e.name.toLowerCase().includes(a.toLowerCase())||e.server.toLowerCase().includes(a.toLowerCase())||e.type.toLowerCase().includes(a.toLowerCase())||e.sni&&e.sni.toLowerCase().includes(a.toLowerCase());return t&&n&&i}).sort((e,t)=>{let n=e.name.replace(/^[\p{Extended_Pictographic}\uD800-\uDFFF\s]+/u,``).trim(),r=t.name.replace(/^[\p{Extended_Pictographic}\uD800-\uDFFF\s]+/u,``).trim();return n.localeCompare(r,`ru`)}),[t,r,s,a]),ve=[`Все`,`Европа`,`Америка`,`Азия`,`Ближний Восток`,`Африка`,`Океания`],be=t.filter(e=>e.ping!==void 0&&e.ping!==null).length,xe=be>0?Math.round(t.filter(e=>e.ping).reduce((e,t)=>e+(t.ping||0),0)/be):null;return(0,z.jsxs)(`div`,{className:`space-y-6 w-full`,children:[y&&(0,z.jsxs)(`div`,{className:`p-4 rounded-2xl bg-emerald-950/80 border border-emerald-700/80 text-emerald-200 text-xs sm:text-sm flex items-center justify-between gap-3 shadow-lg animate-in fade-in`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,z.jsx)(ce,{className:`w-5 h-5 text-emerald-400 shrink-0`}),(0,z.jsx)(`span`,{children:y})]}),(0,z.jsx)(`button`,{onClick:()=>b(null),className:`text-emerald-400 hover:text-emerald-100 font-bold px-2 py-0.5`,children:`✕`})]}),(0,z.jsxs)(`div`,{className:`p-5 sm:p-6 rounded-2xl bg-gradient-to-r from-emerald-950/40 via-stone-900 to-stone-900 border border-emerald-500/40 shadow-sm flex flex-col gap-4`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col md:flex-row md:items-center justify-between gap-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-start gap-4`,children:[(0,z.jsx)(`div`,{className:`w-12 h-12 rounded-2xl bg-emerald-500/20 text-emerald-400 flex items-center justify-center shrink-0 border border-emerald-500/30 shadow-inner`,children:(0,z.jsx)(T,{className:`w-6 h-6 text-emerald-400`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,z.jsxs)(`span`,{className:`text-[11px] uppercase font-bold tracking-wider text-emerald-400 flex items-center gap-1.5`,children:[(0,z.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-emerald-400 animate-pulse`}),`Выделенный VPS-шлюз поддоменов:`]}),(0,z.jsx)(`span`,{className:`px-2.5 py-0.5 rounded-full text-xs font-mono font-bold bg-emerald-500/20 text-emerald-300 border border-emerald-500/30`,children:`217.114.8.26 (Beget Москва)`}),(0,z.jsx)(`span`,{className:`px-2 py-0.5 rounded-full text-[10px] font-mono font-bold bg-stone-800 text-stone-300 border border-stone-700`,children:`sing-box v1.14.4 · 229 узлов`})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 mt-1.5 flex-wrap`,children:[(0,z.jsx)(`span`,{className:`text-xs text-stone-400`,children:`Активный выходной узел:`}),(0,z.jsx)(`span`,{className:`px-2 py-0.5 rounded-md text-xs font-mono font-bold bg-stone-850 text-emerald-400 border border-emerald-500/20`,children:_.name}),(0,z.jsxs)(`span`,{className:`text-xs font-mono text-stone-400`,children:[`(`,_.type,` · `,_.server,`:`,_.port,`)`]}),ee&&(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-amber-400 animate-pulse`,children:[(0,z.jsx)(Te,{className:`w-3 h-3 animate-spin`}),`Переключение sing-box...`]})]})]})]}),(0,z.jsx)(`div`,{className:`flex flex-col sm:flex-row items-start sm:items-center gap-2 shrink-0 md:text-right`,children:(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-semibold text-emerald-400 bg-emerald-950/80 border border-emerald-700/80 px-3 py-1.5 rounded-xl shadow-xs`,children:[(0,z.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-emerald-400 animate-ping`}),(0,z.jsx)(`span`,{children:`Шлюз онлайн (0 блокировок в РФ)`})]})})]}),(0,z.jsxs)(`div`,{className:`pt-3 border-t border-stone-800/80`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold text-stone-400 uppercase tracking-wider mb-2`,children:`Все поддомены маршрутизируются через московский сервер и выбранный туннель:`}),(0,z.jsx)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[{name:`ru.cenidobro.dev (Панель из РФ)`,url:`https://ru.cenidobro.dev`,isRu:!0},{name:`v0.cenidobro.dev`,url:`https://v0.cenidobro.dev`},{name:`replit.cenidobro.dev`,url:`https://replit.cenidobro.dev`},{name:`aistudio.cenidobro.dev`,url:`https://aistudio.cenidobro.dev`},{name:`manus.cenidobro.dev`,url:`https://manus.cenidobro.dev`},{name:`ioslink.cenidobro.dev`,url:`https://ioslink.cenidobro.dev`}].map(e=>(0,z.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-mono font-medium border transition-colors shadow-2xs ${e.isRu?`bg-emerald-500/20 hover:bg-emerald-500/30 text-emerald-300 border-emerald-500/40 font-bold`:`bg-stone-800/90 hover:bg-stone-750 text-stone-200 border-stone-700 hover:border-emerald-500/40`}`,children:[(0,z.jsx)(`span`,{children:e.name}),(0,z.jsx)(pe,{className:`w-3 h-3 text-stone-400`})]},e.name))}),(0,z.jsxs)(`div`,{className:`mt-2.5 text-[11px] text-stone-400 bg-stone-950/40 p-2.5 rounded-xl border border-stone-800/60 font-mono flex items-center justify-between gap-2 flex-wrap`,children:[(0,z.jsxs)(`span`,{children:[`ℹ️ Для прямого входа из РФ в обход блокировок направьте A-записи поддоменов на IP: `,(0,z.jsx)(`strong`,{className:`text-emerald-400`,children:`217.114.8.26`})]}),(0,z.jsx)(`a`,{href:`http://217.114.8.26`,target:`_blank`,rel:`noopener noreferrer`,className:`text-emerald-400 hover:underline flex items-center gap-1 font-semibold`,children:`Открыть статус шлюза (http://217.114.8.26) →`})]})]})]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2 p-1.5 rounded-2xl bg-stone-100 dark:bg-stone-850 border border-stone-200 dark:border-stone-800`,children:[(0,z.jsxs)(`button`,{onClick:()=>i(`cccc`),className:`px-4 py-2 rounded-xl text-xs font-bold transition-all flex items-center gap-2 cursor-pointer ${r===`cccc`?`bg-emerald-500 text-stone-950 shadow-sm`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`}`,children:[(0,z.jsx)(Oe,{className:`w-3.5 h-3.5`}),(0,z.jsx)(`span`,{children:`Дядя Ваня VPN`}),(0,z.jsxs)(`span`,{className:`px-1.5 py-0.2 rounded-md bg-stone-950/20 text-[10px] font-mono font-bold`,children:[`184+ ГЕО (`,t.filter(e=>e.subscriptionId===`cccc`||e.id.startsWith(`cccc-`)).length,` локаций)`]})]}),(0,z.jsxs)(`button`,{onClick:()=>i(`netz`),className:`px-4 py-2 rounded-xl text-xs font-bold transition-all flex items-center gap-2 cursor-pointer ${r===`netz`?`bg-stone-900 dark:bg-stone-100 text-stone-50 dark:text-stone-900 shadow-sm`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`}`,children:[(0,z.jsx)(De,{className:`w-3.5 h-3.5`}),(0,z.jsx)(`span`,{children:`NETZRUN Premium`}),(0,z.jsx)(`span`,{className:`px-1.5 py-0.2 rounded-md bg-stone-500/20 text-[10px] font-mono font-bold`,children:`41 сервер`})]}),(0,z.jsxs)(`button`,{onClick:()=>i(`all`),className:`px-3 py-2 rounded-xl text-xs font-semibold transition-all cursor-pointer ${r===`all`?`bg-stone-900 dark:bg-stone-100 text-stone-50 dark:text-stone-900 shadow-sm`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`}`,children:[`Все (`,t.length,`)`]})]}),(0,z.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,z.jsxs)(`span`,{className:`text-xs text-stone-400 font-mono hidden sm:inline`,children:[`Всего серверов: `,(0,z.jsx)(`strong`,{children:t.length})]})})]}),r!==`all`&&(0,z.jsxs)(`div`,{className:`p-5 sm:p-6 rounded-2xl bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-850 shadow-xs flex flex-col lg:flex-row lg:items-center justify-between gap-6 relative overflow-hidden`,children:[r===`cccc`&&(0,z.jsx)(`div`,{className:`absolute top-0 right-0 transform translate-x-8 -translate-y-2 pointer-events-none opacity-10`,children:(0,z.jsx)(Oe,{className:`w-64 h-64 text-emerald-500`})}),(0,z.jsxs)(`div`,{className:`flex items-start gap-4`,children:[(0,z.jsx)(`div`,{className:`w-12 h-12 rounded-2xl flex items-center justify-center shrink-0 border ${r===`cccc`?`bg-emerald-500/10 text-emerald-500 border-emerald-500/30`:`bg-blue-500/10 text-blue-500 border-blue-500/30`}`,children:r===`cccc`?(0,z.jsx)(Oe,{className:`w-6 h-6`}):(0,z.jsx)(De,{className:`w-6 h-6`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2.5 flex-wrap`,children:[(0,z.jsx)(`h2`,{className:`text-lg font-bold text-stone-900 dark:text-stone-50`,children:Vo[r].name}),(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-mono font-bold px-2.5 py-0.5 rounded-full border ${r===`cccc`?`text-emerald-700 dark:text-emerald-300 bg-emerald-100/80 dark:bg-emerald-950/80 border-emerald-300 dark:border-emerald-800`:`text-blue-700 dark:text-blue-300 bg-blue-100/80 dark:bg-blue-950/80 border-blue-300 dark:border-blue-800`}`,children:[(0,z.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-current animate-pulse`}),Vo[r].badge,` (`,Vo[r].serversCount,` серверов)`]})]}),(0,z.jsxs)(`p`,{className:`text-xs text-stone-500 dark:text-stone-400 mt-1`,children:[`Протоколы: `,(0,z.jsx)(`strong`,{children:Vo[r].protocol}),`.`]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-4 mt-3 text-xs text-stone-600 dark:text-stone-300 flex-wrap`,children:[(0,z.jsxs)(`span`,{className:`flex items-center gap-1.5 font-mono`,children:[(0,z.jsx)(_e,{className:`w-3.5 h-3.5 text-stone-400`}),`Трафик: `,(0,z.jsx)(`strong`,{children:Vo[r].remainingTraffic}),` свободно из `,Vo[r].totalTraffic]}),(0,z.jsxs)(`span`,{className:`flex items-center gap-1.5 font-mono`,children:[(0,z.jsx)(ae,{className:`w-3.5 h-3.5 text-stone-400`}),`Действует до: `,(0,z.jsx)(`strong`,{children:Vo[r].expiresAt})]})]}),(0,z.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:Vo[r].features.map((e,t)=>(0,z.jsxs)(`span`,{className:`text-[10px] font-mono px-2 py-0.5 rounded-md bg-stone-100 dark:bg-stone-800 text-stone-600 dark:text-stone-300 border border-stone-200 dark:border-stone-700`,children:[`✓ `,e]},t))})]})]}),(0,z.jsxs)(`div`,{className:`flex flex-col sm:flex-row items-stretch sm:items-center gap-2.5 shrink-0 z-10`,children:[(0,z.jsxs)(`button`,{onClick:()=>he(Vo[r]),className:`px-4 py-2.5 rounded-xl border border-stone-200 dark:border-stone-800 bg-stone-50 dark:bg-stone-850 hover:bg-stone-100 dark:hover:bg-stone-800 text-stone-800 dark:text-stone-200 text-xs font-medium flex items-center justify-center gap-2 transition-colors cursor-pointer`,children:[h===r?(0,z.jsx)(oe,{className:`w-4 h-4 text-emerald-500`}):(0,z.jsx)(ue,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:h===r?`Ссылка скопирована!`:`Скопировать подписку`})]}),(0,z.jsxs)(`button`,{onClick:se,disabled:l,className:`px-5 py-2.5 rounded-xl bg-stone-900 dark:bg-stone-100 text-stone-50 dark:text-stone-900 hover:opacity-90 text-xs font-semibold flex items-center justify-center gap-2 transition-all shadow-xs cursor-pointer disabled:opacity-50`,children:[l?(0,z.jsx)(Te,{className:`w-4 h-4 animate-spin text-emerald-400`}):(0,z.jsx)(Me,{className:`w-4 h-4 text-amber-400 fill-amber-400`}),(0,z.jsx)(`span`,{children:l?`Пингуем серверы...`:`Проверить Ping всех`})]})]})]}),(0,z.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-4`,children:[(0,z.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-x-auto scrollbar-none py-1`,children:ve.map(e=>(0,z.jsxs)(`button`,{onClick:()=>c(e),className:`px-3.5 py-1.5 rounded-xl text-xs font-medium transition-colors cursor-pointer shrink-0 ${s===e?`bg-stone-900 dark:bg-stone-100 text-stone-100 dark:text-stone-900 shadow-xs`:`bg-white dark:bg-stone-900 text-stone-600 dark:text-stone-400 border border-stone-200 dark:border-stone-800 hover:border-stone-400 dark:hover:border-stone-600`}`,children:[e,e===`Все`&&` (${ge.length})`]},e))}),(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[xe!==null&&(0,z.jsxs)(`div`,{className:`text-xs font-mono text-stone-500 dark:text-stone-400 flex items-center gap-1.5 shrink-0 bg-white dark:bg-stone-900 px-3 py-1.5 rounded-xl border border-stone-200 dark:border-stone-800`,children:[(0,z.jsx)(re,{className:`w-3.5 h-3.5 text-emerald-500`}),(0,z.jsxs)(`span`,{children:[`Средний пинг: `,(0,z.jsxs)(`strong`,{children:[xe,` ms`]}),` (`,be,`/`,t.length,`)`]})]}),(0,z.jsxs)(`div`,{className:`relative w-full sm:w-60`,children:[(0,z.jsx)(w,{className:`w-3.5 h-3.5 text-stone-400 absolute left-3 top-1/2 -translate-y-1/2`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`Поиск по стране, SNI или серверу...`,value:a,onChange:e=>o(e.target.value),className:`w-full pl-8 pr-3 py-1.5 text-xs rounded-xl border border-stone-200 dark:border-stone-800 bg-white dark:bg-stone-900 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400`})]})]})]}),(0,z.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4`,children:ge.map(e=>{let t=_.id===e.id,n=e.status===`testing`,r=e.ping,i=e.subscriptionId===`cccc`||e.id.startsWith(`cccc-`),a=(0,z.jsxs)(`span`,{className:`text-stone-400 text-xs font-mono flex items-center gap-1`,children:[(0,z.jsx)(`span`,{className:`w-2 h-2 rounded-full bg-stone-300 dark:bg-stone-700`}),`— ms`]});return n?a=(0,z.jsxs)(`span`,{className:`text-amber-500 text-xs font-mono flex items-center gap-1.5 animate-pulse`,children:[(0,z.jsx)(Te,{className:`w-3 h-3 animate-spin`}),`замер...`]}):r!=null&&(a=(0,z.jsxs)(`span`,{className:`px-2 py-0.5 rounded-md text-[11px] font-mono font-bold border flex items-center gap-1 ${r<80?`text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-950/60 border-emerald-200 dark:border-emerald-800`:r<180?`text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-950/60 border-amber-200 dark:border-amber-800`:`text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-950/60 border-blue-200 dark:border-blue-800`}`,children:[(0,z.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-current`}),r,` ms`]})),(0,z.jsxs)(`div`,{className:`p-5 rounded-2xl transition-all flex flex-col justify-between shadow-xs group relative ${t?`bg-stone-900/90 dark:bg-stone-900 border-2 border-emerald-500 ring-2 ring-emerald-500/20`:`bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 hover:border-stone-300 dark:hover:border-stone-700`}`,children:[(0,z.jsxs)(`div`,{children:[t&&(0,z.jsx)(`div`,{className:`mb-2`,children:(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2.5 py-0.5 rounded-md text-[10px] font-mono font-bold bg-emerald-500 text-stone-950`,children:[(0,z.jsx)(oe,{className:`w-3 h-3 stroke-[3]`}),`АКТИВНЫЙ ШЛЮЗ ПОДДОМЕНОВ`]})}),(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-2 mb-1.5`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`font-bold text-sm text-stone-900 dark:text-stone-100 block`,children:e.name}),i&&(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[9px] font-mono font-bold text-emerald-500 uppercase tracking-wider`,children:[(0,z.jsx)(Oe,{className:`w-2.5 h-2.5`}),`CCCC Reality`]})]}),(0,z.jsx)(`span`,{className:`text-[10px] font-mono font-semibold px-2 py-0.5 rounded-md bg-stone-100 dark:bg-stone-800 text-stone-600 dark:text-stone-300 border border-stone-200 dark:border-stone-700 shrink-0`,children:e.type})]}),(0,z.jsxs)(`p`,{className:`text-xs text-stone-500 dark:text-stone-400 font-mono truncate mb-1`,children:[e.server,`:`,e.port]}),e.sni&&(0,z.jsxs)(`div`,{className:`text-[10px] font-mono text-emerald-500 dark:text-emerald-400 truncate mb-1 flex items-center gap-1`,children:[(0,z.jsx)(ye,{className:`w-3 h-3 shrink-0`}),(0,z.jsxs)(`span`,{children:[`SNI: `,e.sni]})]}),e.description&&(0,z.jsx)(`p`,{className:`text-[11px] text-stone-400 dark:text-stone-500 line-clamp-1 mb-2`,children:e.description}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] text-stone-400 mb-3`,children:[(0,z.jsx)(fe,{className:`w-3.5 h-3.5 text-stone-400`}),(0,z.jsxs)(`span`,{children:[`Регион: `,e.region]})]}),(0,z.jsx)(`button`,{onClick:()=>C(e),className:`w-full py-2 px-3 rounded-xl text-xs font-semibold flex items-center justify-center gap-2 transition-all cursor-pointer ${t?`bg-emerald-500 hover:bg-emerald-400 text-stone-950 shadow-sm`:`bg-stone-100 hover:bg-stone-200 dark:bg-stone-800 dark:hover:bg-stone-750 text-stone-800 dark:text-stone-200 border border-stone-200 dark:border-stone-700`}`,children:t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(oe,{className:`w-3.5 h-3.5 stroke-[3]`}),(0,z.jsx)(`span`,{children:`Выбран для поддоменов`})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(we,{className:`w-3.5 h-3.5 text-stone-400`}),(0,z.jsx)(`span`,{children:`Выбрать это ГЕО`})]})})]}),(0,z.jsxs)(`div`,{className:`pt-3.5 mt-4 border-t border-stone-100 dark:border-stone-800 flex items-center justify-between gap-2`,children:[(0,z.jsx)(`div`,{children:a}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,z.jsx)(`button`,{onClick:()=>me(e),title:`Скопировать VLESS/SS ссылку`,className:`p-1.5 rounded-lg text-stone-400 hover:text-stone-700 dark:hover:text-stone-200 hover:bg-stone-100 dark:hover:bg-stone-800 transition-colors cursor-pointer`,children:p===e.id?(0,z.jsx)(le,{className:`w-3.5 h-3.5 text-emerald-500`}):(0,z.jsx)(ue,{className:`w-3.5 h-3.5`})}),(0,z.jsxs)(`button`,{onClick:()=>ie(e.id),disabled:n,className:`px-2.5 py-1 rounded-lg text-xs font-semibold bg-stone-100 hover:bg-stone-200 dark:bg-stone-800 dark:hover:bg-stone-750 text-stone-800 dark:text-stone-200 border border-stone-200 dark:border-stone-700 transition-all cursor-pointer flex items-center gap-1`,children:[(0,z.jsx)(re,{className:`w-3 h-3 text-stone-500`}),(0,z.jsx)(`span`,{children:`Ping`})]})]})]})]},e.id)})})]})};function B(){let[e,t]=(0,x.useState)(()=>!!localStorage.getItem(`cenidobro_auth_token`)),[n,r]=(0,x.useState)(`bookmarks`),[i,a]=(0,x.useState)(()=>localStorage.getItem(`theme`)!==`light`),[o,s]=(0,x.useState)(``),[c,l]=(0,x.useState)(`Все`),[u,d]=(0,x.useState)(``),[f,p]=(0,x.useState)(``),[m,h]=(0,x.useState)(!0),[,g]=(0,x.useState)(`connected`),[_,v]=(0,x.useState)(!1),[y,b]=(0,x.useState)([]),[ee,te]=(0,x.useState)([]),[ne,S]=(0,x.useState)([]),[re,C]=(0,x.useState)(!1),[ae,oe]=(0,x.useState)(!1),[se,ce]=(0,x.useState)(!1),[le,ue]=(0,x.useState)(``),[fe,me]=(0,x.useState)(``),[he,_e]=(0,x.useState)(`Общее`),[ve,ye]=(0,x.useState)(!1),[we,T]=(0,x.useState)(``),[Oe,Me]=(0,x.useState)(``),[Ne,Pe]=(0,x.useState)(``),[Fe,Ie]=(0,x.useState)(`planned`),[Le,Re]=(0,x.useState)(``),[ze,Be]=(0,x.useState)(``);(0,x.useEffect)(()=>{typeof window<`u`&&v(localStorage.getItem(`cenidobro_faceid_registered`)===`true`)},[e]),(0,x.useEffect)(()=>{let e=()=>{let e=new Date;d(e.toLocaleTimeString(`ru-RU`,{hour:`2-digit`,minute:`2-digit`})),p(e.toLocaleDateString(`ru-RU`,{weekday:`short`,day:`numeric`,month:`short`}))};e();let t=setInterval(e,1e3);return()=>clearInterval(t)},[]),(0,x.useEffect)(()=>{i?(document.documentElement.classList.add(`dark`),localStorage.setItem(`theme`,`dark`)):(document.documentElement.classList.remove(`dark`),localStorage.setItem(`theme`,`light`))},[i]);let Ve=(0,x.useCallback)(async()=>{h(!0),g(`syncing`);try{let{data:e,error:t}=await Fo.from(`bookmarks`).select(`*`).order(`created_at`,{ascending:!1});if(t)throw t;e&&b(e);let{data:n,error:r}=await Fo.from(`subdomains`).select(`*`).order(`created_at`,{ascending:!0});if(r)throw r;n&&te(n);let{data:i,error:a}=await Fo.from(`notes`).select(`*`).order(`updated_at`,{ascending:!1});if(a)throw a;i&&S(i.map(e=>({id:e.id,title:e.title,content:e.content,updatedAt:new Date(e.updated_at||e.created_at).toLocaleDateString(`ru-RU`)}))),g(`connected`)}catch(e){console.error(`Supabase load error:`,e),g(`error`)}finally{h(!1)}},[]);(0,x.useEffect)(()=>{e&&Ve()},[e,Ve]);let He=()=>{localStorage.removeItem(`cenidobro_auth_token`),t(!1)},Ue=async()=>{try{await Io(`admin@cenidobro.dev`),v(!0),await Fo.from(`auth_config`).update({face_id_enabled:!0}).eq(`username`,`admin@cenidobro.dev`),alert(`Face ID успешно привязан к вашему iPhone! Теперь на странице входа доступна биометрия.`)}catch{alert(`Не удалось подключить Face ID. Убедитесь, что Face ID включен в настройках вашего устройства.`)}},We=(0,x.useMemo)(()=>{let e=new Set;return y.forEach(t=>e.add(t.category||`Общее`)),[`Все`,...Array.from(e)]},[y]),Ge=(0,x.useMemo)(()=>y.filter(e=>{let t=c===`Все`||e.category===c,n=e.title.toLowerCase().includes(o.toLowerCase())||e.url.toLowerCase().includes(o.toLowerCase())||e.category.toLowerCase().includes(o.toLowerCase());return t&&n}),[y,c,o]),Ke=(0,x.useMemo)(()=>ee.filter(e=>e.name.toLowerCase().includes(o.toLowerCase())||(e.description||``).toLowerCase().includes(o.toLowerCase())||(e.target||``).toLowerCase().includes(o.toLowerCase())),[ee,o]),qe=async e=>{if(e.preventDefault(),!le.trim()||!fe.trim())return;let t=fe.trim();!t.startsWith(`http://`)&&!t.startsWith(`https://`)&&(t=`https://`+t);let n={title:le.trim(),url:t,category:he.trim()||`Общее`,pinned:ve};g(`syncing`);try{let{data:e,error:t}=await Fo.from(`bookmarks`).insert([n]).select();if(t)throw t;e&&e[0]&&b([e[0],...y]),g(`connected`)}catch(e){console.error(`Error inserting bookmark:`,e)}ue(``),me(``),_e(`Общее`),ye(!1),C(!1)},Je=async e=>{g(`syncing`),b(y.filter(t=>t.id!==e));try{await Fo.from(`bookmarks`).delete().eq(`id`,e),g(`connected`)}catch(e){console.error(`Error deleting bookmark:`,e)}},Ye=async e=>{let t=y.find(t=>t.id===e);if(!t)return;let n=!t.pinned;b(y.map(t=>t.id===e?{...t,pinned:n}:t));try{await Fo.from(`bookmarks`).update({pinned:n}).eq(`id`,e)}catch(e){console.error(`Error toggling pin:`,e)}},Xe=async e=>{if(e.preventDefault(),!we.trim())return;let t=we.trim().toLowerCase().replace(/[^a-z0-9-]/g,``),n={name:t,target:Oe.trim()||`https://${t}.cenidobro.dev`,status:Fe,description:Ne.trim()||`Пользовательский сервис`};g(`syncing`);try{let{data:e,error:t}=await Fo.from(`subdomains`).insert([n]).select();if(t)throw t;e&&e[0]&&te([...ee,e[0]]),g(`connected`)}catch(e){console.error(`Error adding subdomain:`,e)}T(``),Me(``),Pe(``),Ie(`planned`),oe(!1)},Ze=async e=>{g(`syncing`),te(ee.filter(t=>t.id!==e));try{await Fo.from(`subdomains`).delete().eq(`id`,e),g(`connected`)}catch(e){console.error(`Error deleting subdomain:`,e)}},Qe=async e=>{if(e.preventDefault(),!Le.trim()&&!ze.trim())return;let t={title:Le.trim()||`Без названия`,content:ze.trim()};g(`syncing`);try{let{data:e,error:n}=await Fo.from(`notes`).insert([t]).select();if(n)throw n;if(e&&e[0]){let t={id:e[0].id,title:e[0].title,content:e[0].content,updatedAt:`Только что`};S([t,...ne])}g(`connected`)}catch(e){console.error(`Error adding note:`,e)}Re(``),Be(``),ce(!1)},$e=async e=>{g(`syncing`),S(ne.filter(t=>t.id!==e));try{await Fo.from(`notes`).delete().eq(`id`,e),g(`connected`)}catch(e){console.error(`Error deleting note:`,e)}},et=y.filter(e=>e.pinned);return e?(0,z.jsxs)(`div`,{className:`min-h-screen w-full flex flex-col bg-amber-50/40 dark:bg-stone-950 text-stone-900 dark:text-stone-100 transition-colors pb-12`,children:[(0,z.jsx)(`header`,{className:`sticky top-0 z-40 backdrop-blur-md bg-white/80 dark:bg-stone-950/80 border-b border-stone-200 dark:border-stone-850 px-4 sm:px-8 py-3.5`,children:(0,z.jsxs)(`div`,{className:`max-w-7xl mx-auto flex flex-col sm:flex-row sm:items-center justify-between gap-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between sm:justify-start gap-3`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,z.jsx)(`div`,{className:`w-9 h-9 rounded-xl bg-stone-900 dark:bg-stone-100 text-stone-100 dark:text-stone-900 flex items-center justify-center font-bold text-sm tracking-tight shadow-xs shrink-0`,children:`CD`}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`font-bold text-lg tracking-tight font-mono text-stone-900 dark:text-stone-50`,children:`cenidobro.dev`}),(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-mono font-medium text-emerald-700 dark:text-emerald-400 bg-emerald-100/80 dark:bg-emerald-950/70 border border-emerald-200 dark:border-emerald-800/80 px-2 py-0.5 rounded-full shrink-0`,children:[(0,z.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-500 animate-pulse`}),`Live`]})]}),(0,z.jsx)(`p`,{className:`text-[11px] text-stone-500 dark:text-stone-400 font-mono hidden sm:block`,children:`БД: zxartyutizkocpcfsoba · Закладки · Поддомены`})]})]}),(0,z.jsxs)(`div`,{className:`flex sm:hidden items-center gap-1.5`,children:[(0,z.jsx)(`button`,{onClick:()=>a(!i),"aria-label":`Сменить тему`,className:`p-1.5 rounded-lg text-stone-600 dark:text-stone-300`,children:i?(0,z.jsx)(Ae,{className:`w-4 h-4`}):(0,z.jsx)(xe,{className:`w-4 h-4`})}),(0,z.jsx)(`button`,{onClick:Ue,title:_?`Face ID подключен`:`Подключить Face ID`,className:`p-1.5 rounded-lg text-stone-600 dark:text-stone-300`,children:(0,z.jsx)(Ee,{className:`w-4 h-4 text-blue-500`})}),(0,z.jsx)(`button`,{onClick:He,title:`Выход`,className:`p-1.5 rounded-lg text-stone-500 hover:text-red-600`,children:(0,z.jsx)(be,{className:`w-4 h-4`})})]})]}),(0,z.jsxs)(`div`,{className:`relative w-full sm:flex-1 sm:max-w-md sm:mx-4`,children:[(0,z.jsx)(w,{className:`w-4 h-4 text-stone-400 absolute left-3.5 top-1/2 -translate-y-1/2 shrink-0 pointer-events-none`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`Поиск по закладкам и поддоменам...`,value:o,onChange:e=>s(e.target.value),className:`w-full pl-9 pr-8 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-800 bg-white dark:bg-stone-900 text-stone-900 dark:text-stone-100 placeholder:text-stone-400 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600 shadow-2xs`}),o&&(0,z.jsx)(`button`,{onClick:()=>s(``),className:`absolute right-2.5 top-1/2 -translate-y-1/2 text-stone-400 hover:text-stone-600 dark:hover:text-stone-200`,children:(0,z.jsx)(E,{className:`w-3.5 h-3.5`})})]}),(0,z.jsxs)(`div`,{className:`hidden sm:flex items-center gap-3 shrink-0`,children:[(0,z.jsx)(`button`,{onClick:Ve,title:`Обновить данные из Supabase`,className:`p-2 rounded-xl text-stone-600 dark:text-stone-300 hover:bg-stone-200/60 dark:hover:bg-stone-850 transition-colors cursor-pointer`,children:(0,z.jsx)(Te,{className:`w-4 h-4 ${m?`animate-spin`:``}`})}),u&&(0,z.jsxs)(`div`,{className:`flex flex-col items-end text-xs font-mono mr-1`,children:[(0,z.jsx)(`span`,{className:`font-semibold text-stone-800 dark:text-stone-200`,children:u}),(0,z.jsx)(`span`,{className:`text-stone-400 text-[10px]`,children:f})]}),(0,z.jsx)(`button`,{onClick:()=>a(!i),"aria-label":`Сменить тему`,className:`p-2 rounded-xl text-stone-600 dark:text-stone-300 hover:bg-stone-200/60 dark:hover:bg-stone-850 transition-colors cursor-pointer`,children:i?(0,z.jsx)(Ae,{className:`w-4 h-4`}):(0,z.jsx)(xe,{className:`w-4 h-4`})}),(0,z.jsxs)(`button`,{onClick:Ue,title:_?`Face ID активен`:`Подключить Face ID`,className:`px-3 py-1.5 rounded-xl text-xs font-medium flex items-center gap-1.5 transition-colors cursor-pointer ${_?`text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-950/50 border border-blue-200 dark:border-blue-900`:`text-stone-600 dark:text-stone-300 border border-stone-200 dark:border-stone-800 hover:bg-stone-200/60 dark:hover:bg-stone-850`}`,children:[(0,z.jsx)(Ee,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:_?`Face ID`:`+ Face ID`})]}),(0,z.jsxs)(`button`,{onClick:He,title:`Выйти из системы`,className:`px-3 py-1.5 rounded-xl text-stone-600 dark:text-stone-400 hover:text-red-600 dark:hover:text-red-400 hover:bg-red-50 dark:hover:bg-red-950/40 transition-colors cursor-pointer flex items-center gap-1.5 text-xs border border-transparent`,children:[(0,z.jsx)(be,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Выход`})]})]})]})}),(0,z.jsxs)(`main`,{className:`max-w-7xl mx-auto w-full px-4 sm:px-8 pt-6 flex-1 flex flex-col gap-6`,children:[!_&&(0,z.jsxs)(`div`,{className:`flex sm:hidden flex-col gap-4 p-4 rounded-2xl bg-blue-50/90 dark:bg-blue-950/40 border border-blue-200 dark:border-blue-900/60 text-xs`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-3 text-blue-950 dark:text-blue-200`,children:[(0,z.jsx)(Ee,{className:`w-5 h-5 text-blue-600 dark:text-blue-400 shrink-0`}),(0,z.jsxs)(`span`,{children:[`Подключите `,(0,z.jsx)(`strong`,{children:`Apple Face ID`}),` на этом iPhone для быстрого входа без ввода пароля.`]})]}),(0,z.jsx)(`button`,{onClick:Ue,className:`px-4 py-2 rounded-xl bg-blue-600 hover:bg-blue-500 text-white font-medium text-xs transition-colors shrink-0 self-start sm:self-auto cursor-pointer shadow-xs`,children:`Подключить Face ID`})]}),et.length>0&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2 overflow-x-auto scrollbar-none py-1`,children:[(0,z.jsxs)(`span`,{className:`text-[11px] font-semibold text-stone-400 dark:text-stone-500 uppercase tracking-wider flex items-center gap-1 shrink-0 mr-1`,children:[(0,z.jsx)(Se,{className:`w-3.5 h-3.5`}),`Закреплено:`]}),et.map(e=>(0,z.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center gap-2 px-3 py-1.5 rounded-xl text-xs font-medium bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 text-stone-800 dark:text-stone-200 hover:border-stone-400 dark:hover:border-stone-600 transition-all shrink-0 shadow-2xs group`,children:[(0,z.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-emerald-500 shrink-0`}),(0,z.jsx)(`span`,{className:`truncate max-w-[180px] sm:max-w-none`,children:e.title}),(0,z.jsx)(pe,{className:`w-3 h-3 text-stone-400 group-hover:text-stone-600 dark:group-hover:text-stone-300 shrink-0`})]},e.id))]}),(0,z.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-4 border-b border-stone-200 dark:border-stone-850 pb-4`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-1 bg-stone-200/60 dark:bg-stone-900 p-1 rounded-xl w-full sm:w-auto overflow-x-auto scrollbar-none`,children:[(0,z.jsxs)(`button`,{onClick:()=>r(`bookmarks`),className:`flex-1 sm:flex-initial flex items-center justify-center gap-2 px-4 py-2 text-xs sm:text-sm font-medium rounded-lg transition-all cursor-pointer whitespace-nowrap ${n===`bookmarks`?`bg-white dark:bg-stone-800 text-stone-950 dark:text-stone-50 shadow-xs`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-200`}`,children:[(0,z.jsx)(ie,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Закладки`}),(0,z.jsxs)(`span`,{className:`text-[10px] font-mono opacity-60`,children:[`(`,y.length,`)`]})]}),(0,z.jsxs)(`button`,{onClick:()=>r(`subdomains`),className:`flex-1 sm:flex-initial flex items-center justify-center gap-2 px-4 py-2 text-xs sm:text-sm font-medium rounded-lg transition-all cursor-pointer whitespace-nowrap ${n===`subdomains`?`bg-white dark:bg-stone-800 text-stone-950 dark:text-stone-50 shadow-xs`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-200`}`,children:[(0,z.jsx)(ge,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Поддомены`}),(0,z.jsxs)(`span`,{className:`text-[10px] font-mono opacity-60`,children:[`(`,ee.length,`)`]})]}),(0,z.jsxs)(`button`,{onClick:()=>r(`notes`),className:`flex-1 sm:flex-initial flex items-center justify-center gap-2 px-4 py-2 text-xs sm:text-sm font-medium rounded-lg transition-all cursor-pointer whitespace-nowrap ${n===`notes`?`bg-white dark:bg-stone-800 text-stone-950 dark:text-stone-50 shadow-xs`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-200`}`,children:[(0,z.jsx)(ke,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Заметки`}),(0,z.jsxs)(`span`,{className:`text-[10px] font-mono opacity-60`,children:[`(`,ne.length,`)`]})]}),(0,z.jsxs)(`button`,{onClick:()=>r(`vpn`),className:`flex-1 sm:flex-initial flex items-center justify-center gap-2 px-4 py-2 text-xs sm:text-sm font-medium rounded-lg transition-all cursor-pointer whitespace-nowrap ${n===`vpn`?`bg-white dark:bg-stone-800 text-stone-950 dark:text-stone-50 shadow-xs`:`text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-200`}`,children:[(0,z.jsx)(De,{className:`w-4 h-4 text-emerald-500`}),(0,z.jsx)(`span`,{children:`VPN`}),(0,z.jsxs)(`span`,{className:`text-[10px] font-mono opacity-60`,children:[`(`,Ho.length,`)`]})]})]}),n===`bookmarks`&&(0,z.jsxs)(`button`,{onClick:()=>C(!0),className:`w-full sm:w-auto px-4 py-2 text-xs sm:text-sm font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity flex items-center justify-center gap-2 shadow-xs cursor-pointer`,children:[(0,z.jsx)(Ce,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Добавить в Supabase`})]}),n===`subdomains`&&(0,z.jsxs)(`button`,{onClick:()=>oe(!0),className:`w-full sm:w-auto px-4 py-2 text-xs sm:text-sm font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity flex items-center justify-center gap-2 shadow-xs cursor-pointer`,children:[(0,z.jsx)(Ce,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Добавить поддомен`})]}),n===`notes`&&(0,z.jsxs)(`button`,{onClick:()=>ce(!0),className:`w-full sm:w-auto px-4 py-2 text-xs sm:text-sm font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity flex items-center justify-center gap-2 shadow-xs cursor-pointer`,children:[(0,z.jsx)(Ce,{className:`w-4 h-4`}),(0,z.jsx)(`span`,{children:`Создать заметку`})]})]}),m&&(0,z.jsxs)(`div`,{className:`flex items-center justify-center py-12 gap-2 text-xs text-stone-400 font-mono`,children:[(0,z.jsx)(Te,{className:`w-4 h-4 animate-spin text-stone-500`}),(0,z.jsx)(`span`,{children:`Загрузка данных из Supabase...`})]}),!m&&n===`bookmarks`&&(0,z.jsxs)(`div`,{className:`space-y-6`,children:[We.length>1&&(0,z.jsx)(`div`,{className:`flex items-center gap-2 overflow-x-auto scrollbar-none py-1`,children:We.map(e=>(0,z.jsx)(`button`,{onClick:()=>l(e),className:`px-3.5 py-1.5 rounded-xl text-xs font-medium transition-colors cursor-pointer shrink-0 ${c===e?`bg-stone-900 dark:bg-stone-100 text-stone-100 dark:text-stone-900 shadow-xs`:`bg-white dark:bg-stone-900 text-stone-600 dark:text-stone-400 border border-stone-200 dark:border-stone-800 hover:border-stone-400 dark:hover:border-stone-600`}`,children:e},e))}),Ge.length===0?(0,z.jsxs)(`div`,{className:`text-center py-16 border border-dashed border-stone-300 dark:border-stone-800 rounded-2xl p-6 bg-white dark:bg-stone-900 w-full`,children:[(0,z.jsx)(ie,{className:`w-8 h-8 text-stone-400 mx-auto mb-2`}),(0,z.jsx)(`p`,{className:`text-sm font-medium text-stone-600 dark:text-stone-300`,children:`Закладки не найдены`}),(0,z.jsx)(`p`,{className:`text-xs text-stone-400 mt-1`,children:`Нажмите «Добавить в Supabase», чтобы сохранить сайт в базу данных.`})]}):(0,z.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4`,children:Ge.map(e=>(0,z.jsxs)(`div`,{className:`p-5 rounded-2xl bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 hover:border-stone-300 dark:hover:border-stone-700 transition-all flex flex-col justify-between group shadow-xs min-h-[170px]`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,z.jsx)(`span`,{className:`text-[11px] font-semibold text-stone-400 dark:text-stone-500 uppercase tracking-wider truncate`,children:e.category}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[(0,z.jsx)(`button`,{onClick:()=>Ye(e.id),className:`p-1 rounded transition-colors ${e.pinned?`text-amber-500`:`text-stone-400 hover:text-stone-600 dark:hover:text-stone-300`}`,title:e.pinned?`Открепить`:`Закрепить`,children:(0,z.jsx)(Se,{className:`w-3.5 h-3.5`})}),(0,z.jsx)(`button`,{onClick:()=>Je(e.id),className:`p-1 rounded text-stone-400 hover:text-rose-500 transition-colors`,title:`Удалить`,children:(0,z.jsx)(je,{className:`w-3.5 h-3.5`})})]})]}),(0,z.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`block group/link`,children:[(0,z.jsx)(`h4`,{className:`text-base font-bold text-stone-900 dark:text-stone-100 group-hover/link:text-emerald-600 dark:group-hover/link:text-emerald-400 transition-colors truncate`,children:e.title}),(0,z.jsx)(`p`,{className:`text-xs text-stone-500 dark:text-stone-400 font-mono mt-1 truncate`,children:e.url.replace(/^https?:\/\//,``)})]})]}),(0,z.jsxs)(`div`,{className:`pt-3 mt-4 border-t border-stone-100 dark:border-stone-800 flex items-center justify-between text-xs`,children:[(0,z.jsxs)(`span`,{className:`text-[11px] text-stone-400 dark:text-stone-500 font-mono flex items-center gap-1.5`,children:[(0,z.jsx)(de,{className:`w-3.5 h-3.5 text-emerald-500`}),(0,z.jsx)(`span`,{children:`Supabase`})]}),(0,z.jsx)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`text-stone-400 hover:text-stone-800 dark:hover:text-stone-200 transition-colors p-0.5`,children:(0,z.jsx)(pe,{className:`w-3.5 h-3.5`})})]})]},e.id))})]}),!m&&n===`subdomains`&&(0,z.jsxs)(`div`,{className:`space-y-6`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col sm:flex-row sm:items-center justify-between gap-4 p-5 rounded-2xl bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 shadow-xs`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h3`,{className:`text-base font-bold text-stone-900 dark:text-stone-100`,children:`Поддомены cenidobro.dev`}),(0,z.jsx)(`p`,{className:`text-xs text-stone-500 dark:text-stone-400 mt-0.5`,children:`Управление адресами и сервисами в доменной зоне.`})]}),(0,z.jsxs)(`div`,{className:`text-xs font-mono text-stone-600 dark:text-stone-400 bg-stone-100 dark:bg-stone-800 px-3 py-1.5 rounded-xl border border-stone-200 dark:border-stone-700 shrink-0 self-start sm:self-auto`,children:[`Зона: `,(0,z.jsx)(`strong`,{children:`cenidobro.dev`})]})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-3 p-4 rounded-2xl bg-emerald-50/80 dark:bg-emerald-950/30 border border-emerald-200 dark:border-emerald-800/60 text-xs text-emerald-900 dark:text-emerald-200 justify-between flex-wrap shadow-2xs`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(De,{className:`w-4 h-4 text-emerald-600 dark:text-emerald-400 shrink-0`}),(0,z.jsx)(`span`,{children:`Трафик поддоменов v0.cenidobro.dev и replit.cenidobro.dev маршрутизируется через выбранный VPN-шлюз.`})]}),(0,z.jsx)(`button`,{onClick:()=>r(`vpn`),className:`text-xs font-semibold text-emerald-700 dark:text-emerald-400 hover:underline flex items-center gap-1 cursor-pointer`,children:(0,z.jsx)(`span`,{children:`Сменить ГЕО сервер во вкладке VPN →`})})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-3 p-4 rounded-2xl bg-stone-900 border border-stone-800 text-xs text-stone-200 justify-between flex-wrap shadow-2xs`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2.5`,children:[(0,z.jsx)(`span`,{className:`w-5 h-5 rounded-md bg-white text-stone-950 font-bold flex items-center justify-center text-[10px] shrink-0 font-mono`,children:`iOS`}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`font-bold text-stone-100`,children:`My Sites / Мои ярлыки`}),(0,z.jsx)(`span`,{className:`text-stone-400 ml-2`,children:`Веб-клипы Apple (.mobileconfig) во весь экран для iPhone и мульти-аккаунты`})]})]}),(0,z.jsxs)(`a`,{href:`https://ioslink.cenidobro.dev`,target:`_blank`,rel:`noopener noreferrer`,className:`text-xs font-semibold text-emerald-400 hover:text-emerald-300 flex items-center gap-1`,children:[(0,z.jsx)(`span`,{children:`Открыть сервис ярлыков →`}),(0,z.jsx)(pe,{className:`w-3.5 h-3.5`})]})]}),Ke.length===0?(0,z.jsxs)(`div`,{className:`text-center py-16 border border-dashed border-stone-300 dark:border-stone-800 rounded-2xl p-6 bg-white dark:bg-stone-900 w-full`,children:[(0,z.jsx)(ge,{className:`w-8 h-8 text-stone-400 mx-auto mb-2`}),(0,z.jsx)(`p`,{className:`text-sm font-medium text-stone-600 dark:text-stone-300`,children:`Поддомены не добавлены`})]}):(0,z.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4`,children:Ke.map(e=>{let t=`${e.name}.cenidobro.dev`,n={active:`text-emerald-700 dark:text-emerald-400 bg-emerald-100/80 dark:bg-emerald-950/70 border-emerald-200 dark:border-emerald-800/80`,development:`text-amber-700 dark:text-amber-400 bg-amber-100/80 dark:bg-amber-950/70 border-amber-200 dark:border-amber-800/80`,planned:`text-stone-600 dark:text-stone-400 bg-stone-100 dark:bg-stone-800/80 border-stone-200 dark:border-stone-700`}[e.status],r={active:`Активен`,development:`В разработке`,planned:`В планах`}[e.status];return(0,z.jsxs)(`div`,{className:`p-5 rounded-2xl bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 hover:border-stone-300 dark:hover:border-stone-700 transition-all flex flex-col justify-between group shadow-xs min-h-[170px]`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-3`,children:[(0,z.jsx)(`span`,{className:`text-[10px] font-semibold px-2.5 py-1 rounded-md border shrink-0 ${n}`,children:r}),(0,z.jsx)(`button`,{onClick:()=>Ze(e.id),className:`p-1 rounded text-stone-400 hover:text-rose-500 transition-colors`,title:`Удалить поддомен`,children:(0,z.jsx)(je,{className:`w-3.5 h-3.5`})})]}),(0,z.jsx)(`a`,{href:e.target,target:`_blank`,rel:`noopener noreferrer`,className:`block group/link`,children:(0,z.jsx)(`div`,{className:`font-mono font-bold text-base text-stone-900 dark:text-stone-100 group-hover/link:text-emerald-600 dark:group-hover/link:text-emerald-400 transition-colors truncate mb-1`,children:t})}),(0,z.jsx)(`p`,{className:`text-xs text-stone-500 dark:text-stone-400 mb-4 leading-relaxed line-clamp-2`,children:e.description})]}),(0,z.jsxs)(`div`,{className:`pt-3 border-t border-stone-100 dark:border-stone-800 flex items-center justify-between text-xs`,children:[(0,z.jsx)(`span`,{className:`font-mono text-stone-400 dark:text-stone-500 text-[11px] truncate max-w-[200px]`,children:e.target.replace(/^https?:\/\//,``)}),(0,z.jsx)(`a`,{href:e.target,target:`_blank`,rel:`noopener noreferrer`,className:`text-stone-400 hover:text-stone-800 dark:hover:text-stone-200 transition-colors p-0.5`,title:`Открыть ${t}`,children:(0,z.jsx)(pe,{className:`w-3.5 h-3.5`})})]})]},e.id)})})]}),!m&&n===`notes`&&(0,z.jsx)(`div`,{className:`space-y-4`,children:ne.length===0?(0,z.jsxs)(`div`,{className:`text-center py-16 border border-dashed border-stone-300 dark:border-stone-800 rounded-2xl p-6 bg-white dark:bg-stone-900 w-full`,children:[(0,z.jsx)(ke,{className:`w-8 h-8 text-stone-400 mx-auto mb-2`}),(0,z.jsx)(`p`,{className:`text-sm font-medium text-stone-600 dark:text-stone-300`,children:`Заметок в базе пока нет`})]}):(0,z.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:ne.map(e=>(0,z.jsxs)(`div`,{className:`p-5 rounded-2xl bg-white dark:bg-stone-900 border border-stone-200 dark:border-stone-800 flex flex-col justify-between shadow-xs`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,z.jsx)(`h4`,{className:`text-base font-bold text-stone-900 dark:text-stone-100 truncate`,children:e.title}),(0,z.jsx)(`button`,{onClick:()=>$e(e.id),className:`text-stone-400 hover:text-rose-500 p-1`,title:`Удалить`,children:(0,z.jsx)(je,{className:`w-4 h-4`})})]}),(0,z.jsx)(`pre`,{className:`text-xs text-stone-700 dark:text-stone-300 whitespace-pre-wrap font-sans leading-relaxed`,children:e.content})]}),(0,z.jsxs)(`div`,{className:`text-[11px] text-stone-400 pt-3 mt-4 border-t border-stone-100 dark:border-stone-800 flex items-center justify-between`,children:[(0,z.jsx)(`span`,{children:e.updatedAt}),(0,z.jsx)(`span`,{className:`font-mono text-emerald-600`,children:`Supabase DB`})]})]},e.id))})}),n===`vpn`&&(0,z.jsx)(Uo,{})]}),re&&(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-stone-900/60 dark:bg-black/80 backdrop-blur-xs`,children:(0,z.jsxs)(`div`,{className:`bg-white dark:bg-stone-900 rounded-2xl max-w-md w-full p-6 border border-stone-200 dark:border-stone-800 shadow-xl`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-stone-100 dark:border-stone-800 mb-4`,children:[(0,z.jsx)(`h3`,{className:`text-base font-bold text-stone-900 dark:text-stone-100`,children:`Новая закладка (в Supabase)`}),(0,z.jsx)(`button`,{onClick:()=>C(!1),className:`text-stone-400 hover:text-stone-600 dark:hover:text-stone-200 p-1`,children:(0,z.jsx)(E,{className:`w-4 h-4`})})]}),(0,z.jsxs)(`form`,{onSubmit:qe,className:`space-y-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Название`}),(0,z.jsx)(`input`,{type:`text`,required:!0,placeholder:`Например: Vercel Deployments`,value:le,onChange:e=>ue(e.target.value),className:`w-full px-3.5 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`URL адрес`}),(0,z.jsx)(`input`,{type:`text`,required:!0,placeholder:`https://...`,value:fe,onChange:e=>me(e.target.value),className:`w-full px-3.5 py-2 text-xs font-mono rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Категория`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`Инфраструктура, Разработка, Мой домен...`,value:he,onChange:e=>_e(e.target.value),className:`w-full px-3.5 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,z.jsx)(`input`,{type:`checkbox`,id:`pinCheck`,checked:ve,onChange:e=>ye(e.target.checked),className:`w-4 h-4 rounded text-stone-900`}),(0,z.jsx)(`label`,{htmlFor:`pinCheck`,className:`text-xs text-stone-700 dark:text-stone-300`,children:`Закрепить на верхней панели`})]}),(0,z.jsxs)(`div`,{className:`flex justify-end gap-2 pt-4 border-t border-stone-100 dark:border-stone-800`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>C(!1),className:`px-4 py-2 text-xs font-medium text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`,children:`Отмена`}),(0,z.jsx)(`button`,{type:`submit`,className:`px-4 py-2 text-xs font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity`,children:`Сохранить`})]})]})]})}),ae&&(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-stone-900/60 dark:bg-black/80 backdrop-blur-xs`,children:(0,z.jsxs)(`div`,{className:`bg-white dark:bg-stone-900 rounded-2xl max-w-md w-full p-6 border border-stone-200 dark:border-stone-800 shadow-xl`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-stone-100 dark:border-stone-800 mb-4`,children:[(0,z.jsx)(`h3`,{className:`text-base font-bold text-stone-900 dark:text-stone-100`,children:`Новый поддомен (в Supabase)`}),(0,z.jsx)(`button`,{onClick:()=>oe(!1),className:`text-stone-400 hover:text-stone-600 dark:hover:text-stone-200 p-1`,children:(0,z.jsx)(E,{className:`w-4 h-4`})})]}),(0,z.jsxs)(`form`,{onSubmit:Xe,className:`space-y-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Имя поддомена`}),(0,z.jsxs)(`div`,{className:`flex items-center`,children:[(0,z.jsx)(`input`,{type:`text`,required:!0,placeholder:`api, app, auth`,value:we,onChange:e=>T(e.target.value),className:`w-full px-3.5 py-2 text-xs font-mono rounded-l-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`}),(0,z.jsx)(`span`,{className:`px-3 py-2 text-xs font-mono bg-stone-150 dark:bg-stone-800 border border-l-0 border-stone-200 dark:border-stone-750 rounded-r-xl text-stone-500 shrink-0`,children:`.cenidobro.dev`})]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Целевой адрес / Сервис`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`https://... или IP / порт`,value:Oe,onChange:e=>Me(e.target.value),className:`w-full px-3.5 py-2 text-xs font-mono rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Описание назначения`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`Назначение сервиса...`,value:Ne,onChange:e=>Pe(e.target.value),className:`w-full px-3.5 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Статус`}),(0,z.jsxs)(`select`,{value:Fe,onChange:e=>Ie(e.target.value),className:`w-full px-3.5 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`,children:[(0,z.jsx)(`option`,{value:`active`,children:`Активен`}),(0,z.jsx)(`option`,{value:`development`,children:`В разработке`}),(0,z.jsx)(`option`,{value:`planned`,children:`В планах`})]})]}),(0,z.jsxs)(`div`,{className:`flex justify-end gap-2 pt-4 border-t border-stone-100 dark:border-stone-800`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>oe(!1),className:`px-4 py-2 text-xs font-medium text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`,children:`Отмена`}),(0,z.jsx)(`button`,{type:`submit`,className:`px-4 py-2 text-xs font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity`,children:`Добавить в базу`})]})]})]})}),se&&(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-stone-900/60 dark:bg-black/80 backdrop-blur-xs`,children:(0,z.jsxs)(`div`,{className:`bg-white dark:bg-stone-900 rounded-2xl max-w-md w-full p-6 border border-stone-200 dark:border-stone-800 shadow-xl`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between pb-3 border-b border-stone-100 dark:border-stone-800 mb-4`,children:[(0,z.jsx)(`h3`,{className:`text-base font-bold text-stone-900 dark:text-stone-100`,children:`Новая заметка (в Supabase)`}),(0,z.jsx)(`button`,{onClick:()=>ce(!1),className:`text-stone-400 hover:text-stone-600 dark:hover:text-stone-200 p-1`,children:(0,z.jsx)(E,{className:`w-4 h-4`})})]}),(0,z.jsxs)(`form`,{onSubmit:Qe,className:`space-y-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Заголовок`}),(0,z.jsx)(`input`,{type:`text`,placeholder:`Название заметки...`,value:Le,onChange:e=>Re(e.target.value),className:`w-full px-3.5 py-2 text-xs rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`label`,{className:`block text-xs font-semibold text-stone-700 dark:text-stone-300 mb-1`,children:`Текст заметки`}),(0,z.jsx)(`textarea`,{rows:4,required:!0,placeholder:`Текст, ссылки, команды...`,value:ze,onChange:e=>Be(e.target.value),className:`w-full px-3.5 py-2 text-xs font-sans rounded-xl border border-stone-200 dark:border-stone-750 bg-stone-50 dark:bg-stone-800 text-stone-900 dark:text-stone-100 focus:outline-none focus:ring-1 focus:ring-stone-400 dark:focus:ring-stone-600`})]}),(0,z.jsxs)(`div`,{className:`flex justify-end gap-2 pt-4 border-t border-stone-100 dark:border-stone-800`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>ce(!1),className:`px-4 py-2 text-xs font-medium text-stone-600 dark:text-stone-400 hover:text-stone-900 dark:hover:text-stone-100`,children:`Отмена`}),(0,z.jsx)(`button`,{type:`submit`,className:`px-4 py-2 text-xs font-semibold text-stone-50 bg-stone-900 dark:bg-stone-100 dark:text-stone-950 rounded-xl hover:opacity-90 transition-opacity`,children:`Сохранить в базу`})]})]})]})})]}):(0,z.jsx)(Bo,{onLoginSuccess:()=>t(!0)})}(0,Ne.createRoot)(document.getElementById(`root`)).render((0,z.jsx)(B,{}));