se 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l}return null}function ke(o){switch(typeof o){case"boolean":case"number":case"string":case"undefined":return o;case"object":return o;default:return""}}function ee(o){var l=o.type;return(o=o.nodeName)&&o.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function re(o){var l=ee(o)?"checked":"value",f=Object.getOwnPropertyDescriptor(o.constructor.prototype,l),v=""+o[l];if(!o.hasOwnProperty(l)&&typeof f<"u"&&typeof f.get=="function"&&typeof f.set=="function"){var y=f.get,_=f.set;return Object.defineProperty(o,l,{configurable:!0,get:function(){return y.call(this)},set:function(E){v=""+E,_.call(this,E)}}),Object.defineProperty(o,l,{enumerable:f.enumerable}),{getValue:function(){return v},setValue:function(E){v=""+E},stopTracking:function(){o._valueTracker=null,delete o[l]}}}}function Ae(o){o._valueTracker||(o._valueTracker=re(o))}function Z(o){if(!o)return!1;var l=o._valueTracker;if(!l)return!0;var f=l.getValue(),v="";return o&&(v=ee(o)?o.checked?"true":"false":o.value),o=v,o!==f?(l.setValue(o),!0):!1}function gt(o){if(o=o||(typeof document<"u"?document:void 0),typeof o>"u")return null;try{return o.activeElement||o.body}catch{return o.body}}function De(o,l){var f=l.checked;return X({},l,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:f??o._wrapperState.initialChecked})}function Ft(o,l){var f=l.defaultValue==null?"":l.defaultValue,v=l.checked!=null?l.checked:l.defaultChecked;f=ke(l.value!=null?l.value:f),o._wrapperState={initialChecked:v,initialValue:f,controlled:l.type==="checkbox"||l.type==="radio"?l.checked!=null:l.value!=null}}function Wt(o,l){l=l.checked,l!=null&&P(o,"checked",l,!1)}function Kr(o,l){Wt(o,l);var f=ke(l.value),v=l.type;if(f!=null)v==="number"?(f===0&&o.value===""||o.value!=f)&&(o.value=""+f):o.value!==""+f&&(o.value=""+f);else if(v==="submit"||v==="reset"){o.removeAttribute("value");return}l.hasOwnProperty("value")?yh(o,l.type,f):l.hasOwnProperty("defaultValue")&&yh(o,l.type,ke(l.defaultValue)),l.checked==null&&l.defaultChecked!=null&&(o.defaultChecked=!!l.defaultChecked)}function xs(o,l,f){if(l.hasOwnProperty("value")||l.hasOwnProperty("defaultValue")){var v=l.type;if(!(v!=="submit"&&v!=="reset"||l.value!==void 0&&l.value!==null))return;l=""+o._wrapperState.initialValue,f||l===o.value||(o.value=l),o.defaultValue=l}f=o.name,f!==""&&(o.name=""),o.defaultChecked=!!o._wrapperState.initialChecked,f!==""&&(o.name=f)}function yh(o,l,f){(l!=="number"||gt(o.ownerDocument)!==o)&&(f==null?o.defaultValue=""+o._wrapperState.initialValue:o.defaultValue!==""+f&&(o.defaultValue=""+f))}var _s=Array.isArray;function Za(o,l,f,v){if(o=o.options,l){l={};for(var y=0;y<f.length;y++)l["$"+f[y]]=!0;for(f=0;f<o.length;f++)y=l.hasOwnProperty("$"+o[f].value),o[f].selected!==y&&(o[f].selected=y),y&&v&&(o[f].defaultSelected=!0)}else{for(f=""+ke(f),l=null,y=0;y<o.length;y++){if(o[y].value===f){o[y].selected=!0,v&&(o[y].defaultSelected=!0);return}l!==null||o[y].disabled||(l=o[y])}l!==null&&(l.selected=!0)}}function wh(o,l){if(l.dangerouslySetInnerHTML!=null)throw Error(r(91));return X({},l,{value:void 0,defaultValue:void 0,children:""+o._wrapperState.initialValue})}function fw(o,l){var f=l.value;if(f==null){if(f=l.children,l=l.defaultValue,f!=null){if(l!=null)throw Error(r(92));if(_s(f)){if(1<f.length)throw Error(r(93));f=f[0]}l=f}l==null&&(l=""),f=l}o._wrapperState={initialValue:ke(f)}}function hw(o,l){var f=ke(l.value),v=ke(l.defaultValue);f!=null&&(f=""+f,f!==o.value&&(o.value=f),l.defaultValue==null&&o.defaultValue!==f&&(o.defaultValue=f)),v!=null&&(o.defaultValue=""+v)}function pw(o){var l=o.textContent;l===o._wrapperState.initialValue&&l!==""&&l!==null&&(o.value=l)}function vw(o){switch(o){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function bh(o,l){return o==null||o==="http://www.w3.org/1999/xhtml"?vw(l):o==="http://www.w3.org/2000/svg"&&l==="foreignObject"?"http://www.w3.org/1999/xhtml":o}var Eu,mw=function(o){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(l,f,v,y){MSApp.execUnsafeLocalFunction(function(){return o(l,f,v,y)})}:o}(function(o,l){if(o.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in o)o.innerHTML=l;else{for(Eu=Eu||document.createElement("div"),Eu.innerHTML="<svg>"+l.valueOf().toString()+"</svg>",l=Eu.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;l.firstChild;)o.appendChild(l.firstChild)}});function Ss(o,l){if(l){var f=o.firstChild;if(f&&f===o.lastChild&&f.nodeType===3){f.nodeValue=l;return}}o.textContent=l}var ks={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},$I=["Webkit","ms","Moz","O"];Object.keys(ks).forEach(function(o){$I.forEach(function(l){l=l+o.charAt(0).toUpperCase()+o.substring(1),ks[l]=ks[o]})});function gw(o,l,f){return l==null||typeof l=="boolean"||l===""?"":f||typeof l!="number"||l===0||ks.hasOwnProperty(o)&&ks[o]?(""+l).trim():l+"px"}function yw(o,l){o=o.style;for(var f in l)if(l.hasOwnProperty(f)){var v=f.indexOf("--")===0,y=gw(f,l[f],v);f==="float"&&(f="cssFloat"),v?o.setProperty(f,y):o[f]=y}}var LI=X({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xh(o,l){if(l){if(LI[o]&&(l.children!=null||l.dangerouslySetInnerHTML!=null))throw Error(r(137,o));if(l.dangerouslySetInnerHTML!=null){if(l.children!=null)throw Error(r(60));if(typeof l.dangerouslySetInnerHTML!="object"||!("__html"in l.dangerouslySetInnerHTML))throw Error(r(61))}if(l.style!=null&&typeof l.style!="object")throw Error(r(62))}}function _h(o,l){if(o.indexOf("-")===-1)return typeof l.is=="string";switch(o){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Sh=null;function kh(o){return o=o.target||o.srcElement||window,o.correspondingUseElement&&(o=o.correspondingUseElement),o.nodeType===3?o.parentNode:o}var Ph=null,eo=null,to=null;function ww(o){if(o=Ks(o)){if(typeof Ph!="function")throw Error(r(280));var l=o.stateNode;l&&(l=Yu(l),Ph(o.stateNode,o.type,l))}}function bw(o){eo?to?to.push(o):to=[o]:eo=o}function xw(){if(eo){var o=eo,l=to;if(to=eo=null,ww(o),l)for(o=0;o<l.length;o++)ww(l[o])}}function _w(o,l){return o(l)}function Sw(){}var Eh=!1;function kw(o,l,f){if(Eh)return o(l,f);Eh=!0;try{return _w(o,l,f)}finally{Eh=!1,(eo!==null||to!==null)&&(Sw(),xw())}}function Ps(o,l){var f=o.stateNode;if(f===null)return null;var v=Yu(f);if(v===null)return null;f=v[l];e:switch(l){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(v=!v.disabled)||(o=o.type,v=!(o==="button"||o==="input"||o==="select"||o==="textarea")),o=!v;break e;default:o=!1}if(o)return null;if(f&&typeof f!="function")throw Error(r(231,l,typeof f));return f}var Oh=!1;if(u)try{var Es={};Object.defineProperty(Es,"passive",{get:function(){Oh=!0}}),window.addEventListener("test",Es,Es),window.removeEventListener("test",Es,Es)}catch{Oh=!1}function zI(o,l,f,v,y,_,E,T,I){var U=Array.prototype.slice.call(arguments,3);try{l.apply(f,U)}catch(G){this.onError(G)}}var Os=!1,Ou=null,Au=!1,Ah=null,UI={onError:function(o){Os=!0,Ou=o}};function BI(o,l,f,v,y,_,E,T,I){Os=!1,Ou=null,zI.apply(UI,arguments)}function FI(o,l,f,v,y,_,E,T,I){if(BI.apply(this,arguments),Os){if(Os){var U=Ou;Os=!1,Ou=null}else throw Error(r(198));Au||(Au=!0,Ah=U)}}function ta(o){var l=o,f=o;if(o.alternate)for(;l.return;)l=l.return;else{o=l;do l=o,l.flags&4098&&(f=l.return),o=l.return;while(o)}return l.tag===3?f:null}function Pw(o){if(o.tag===13){var l=o.memoizedState;if(l===null&&(o=o.alternate,o!==null&&(l=o.memoizedState)),l!==null)return l.dehydrated}return null}function Ew(o){if(ta(o)!==o)throw Error(r(188))}function WI(o){var l=o.alternate;if(!l){if(l=ta(o),l===null)throw Error(r(188));return l!==o?null:o}for(var f=o,v=l;;){var y=f.return;if(y===null)break;var _=y.alternate;if(_===null){if(v=y.return,v!==null){f=v;continue}break}if(y.child===_.child){for(_=y.child;_;){if(_===f)return Ew(y),o;if(_===v)return Ew(y),l;_=_.sibling}throw Error(r(188))}if(f.return!==v.return)f=y,v=_;else{for(var E=!1,T=y.child;T;){if(T===f){E=!0,f=y,v=_;break}if(T===v){E=!0,v=y,f=_;break}T=T.sibling}if(!E){for(T=_.child;T;){if(T===f){E=!0,f=_,v=y;break}if(T===v){E=!0,v=_,f=y;break}T=T.sibling}if(!E)throw Error(r(189))}}if(f.alternate!==v)throw Error(r(190))}if(f.tag!==3)throw Error(r(188));return f.stateNode.current===f?o:l}function Ow(o){return o=WI(o),o!==null?Aw(o):null}function Aw(o){if(o.tag===5||o.tag===6)return o;for(o=o.child;o!==null;){var l=Aw(o);if(l!==null)return l;o=o.sibling}return null}var Cw=t.unstable_scheduleCallback,jw=t.unstable_cancelCallback,qI=t.unstable_shouldYield,HI=t.unstable_requestPaint,dt=t.unstable_now,KI=t.unstable_getCurrentPriorityLevel,Ch=t.unstable_ImmediatePriority,Tw=t.unstable_UserBlockingPriority,Cu=t.unstable_NormalPriority,VI=t.unstable_LowPriority,Nw=t.unstable_IdlePriority,ju=null,pn=null;function GI(o){if(pn&&typeof pn.onCommitFiberRoot=="function")try{pn.onCommitFiberRoot(ju,o,void 0,(o.current.flags&128)===128)}catch{}}var Vr=Math.clz32?Math.clz32:JI,YI=Math.log,XI=Math.LN2;function JI(o){return o>>>=0,o===0?32:31-(YI(o)/XI|0)|0}var Tu=64,Nu=4194304;function As(o){switch(o&-o){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:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return o&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return o}}function Iu(o,l){var f=o.pendingLanes;if(f===0)return 0;var v=0,y=o.suspendedLanes,_=o.pingedLanes,E=f&268435455;if(E!==0){var T=E&~y;T!==0?v=As(T):(_&=E,_!==0&&(v=As(_)))}else E=f&~y,E!==0?v=As(E):_!==0&&(v=As(_));if(v===0)return 0;if(l!==0&&l!==v&&!(l&y)&&(y=v&-v,_=l&-l,y>=_||y===16&&(_&4194240)!==0))return l;if(v&4&&(v|=f&16),l=o.entangledLanes,l!==0)for(o=o.entanglements,l&=v;0<l;)f=31-Vr(l),y=1<<f,v|=o[f],l&=~y;return v}function QI(o,l){switch(o){case 1:case 2:case 4:return l+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return l+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ZI(o,l){for(var f=o.suspendedLanes,v=o.pingedLanes,y=o.expirationTimes,_=o.pendingLanes;0<_;){var E=31-Vr(_),T=1<<E,I=y[E];I===-1?(!(T&f)||T&v)&&(y[E]=QI(T,l)):I<=l&&(o.expiredLanes|=T),_&=~T}}function jh(o){return o=o.pendingLanes&-1073741825,o!==0?o:o&1073741824?1073741824:0}function Iw(){var o=Tu;return Tu<<=1,!(Tu&4194240)&&(Tu=64),o}function Th(o){for(var l=[],f=0;31>f;f++)l.push(o);return l}function Cs(o,l,f){o.pendingLanes|=l,l!==536870912&&(o.suspendedLanes=0,o.pingedLanes=0),o=o.eventTimes,l=31-Vr(l),o[l]=f}function e2(o,l){var f=o.pendingLanes&~l;o.pendingLanes=l,o.suspendedLanes=0,o.pingedLanes=0,o.expiredLanes&=l,o.mutableReadLanes&=l,o.entangledLanes&=l,l=o.entanglements;var v=o.eventTimes;for(o=o.expirationTimes;0<f;){var y=31-Vr(f),_=1<<y;l[y]=0,v[y]=-1,o[y]=-1,f&=~_}}function Nh(o,l){var f=o.entangledLanes|=l;for(o=o.entanglements;f;){var v=31-Vr(f),y=1<<v;y&l|o[v]&l&&(o[v]|=l),f&=~y}}var Me=0;function Rw(o){return o&=-o,1<o?4<o?o&268435455?16:536870912:4:1}var Dw,Ih,Mw,$w,Lw,Rh=!1,Ru=[],mi=null,gi=null,yi=null,js=new Map,Ts=new Map,wi=[],t2="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function zw(o,l){switch(o){case"focusin":case"focusout":mi=null;break;case"dragenter":case"dragleave":gi=null;break;case"mouseover":case"mouseout":yi=null;break;case"pointerover":case"pointerout":js.delete(l.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ts.delete(l.pointerId)}}function Ns(o,l,f,v,y,_){return o===null||o.nativeEvent!==_?(o={blockedOn:l,domEventName:f,eventSystemFlags:v,nativeEvent:_,targetContainers:[y]},l!==null&&(l=Ks(l),l!==null&&Ih(l)),o):(o.eventSystemFlags|=v,l=o.targetContainers,y!==null&&l.indexOf(y)===-1&&l.push(y),o)}function r2(o,l,f,v,y){switch(l){case"focusin":return mi=Ns(mi,o,l,f,v,y),!0;case"dragenter":return gi=Ns(gi,o,l,f,v,y),!0;case"mouseover":return yi=Ns(yi,o,l,f,v,y),!0;case"pointerover":var _=y.pointerId;return js.set(_,Ns(js.get(_)||null,o,l,f,v,y)),!0;case"gotpointercapture":return _=y.pointerId,Ts.set(_,Ns(Ts.get(_)||null,o,l,f,v,y)),!0}return!1}function Uw(o){var l=ra(o.target);if(l!==null){var f=ta(l);if(f!==null){if(l=f.tag,l===13){if(l=Pw(f),l!==null){o.blockedOn=l,Lw(o.priority,function(){Mw(f)});return}}else if(l===3&&f.stateNode.current.memoizedState.isDehydrated){o.blockedOn=f.tag===3?f.stateNode.containerInfo:null;return}}}o.blockedOn=null}function Du(o){if(o.blockedOn!==null)return!1;for(var l=o.targetContainers;0<l.length;){var f=Mh(o.domEventName,o.eventSystemFlags,l[0],o.nativeEvent);if(f===null){f=o.nativeEvent;var v=new f.constructor(f.type,f);Sh=v,f.target.dispatchEvent(v),Sh=null}else return l=Ks(f),l!==null&&Ih(l),o.blockedOn=f,!1;l.shift()}return!0}function Bw(o,l,f){Du(o)&&f.delete(l)}function n2(){Rh=!1,mi!==null&&Du(mi)&&(mi=null),gi!==null&&Du(gi)&&(gi=null),yi!==null&&Du(yi)&&(yi=null),js.forEach(Bw),Ts.forEach(Bw)}function Is(o,l){o.blockedOn===l&&(o.blockedOn=null,Rh||(Rh=!0,t.unstable_scheduleCallback(t.unstable_NormalPriority,n2)))}function Rs(o){function l(y){return Is(y,o)}if(0<Ru.length){Is(Ru[0],o);for(var f=1;f<Ru.length;f++){var v=Ru[f];v.blockedOn===o&&(v.blockedOn=null)}}for(mi!==null&&Is(mi,o),gi!==null&&Is(gi,o),yi!==null&&Is(yi,o),js.forEach(l),Ts.forEach(l),f=0;f<wi.length;f++)v=wi[f],v.blockedOn===o&&(v.blockedOn=null);for(;0<wi.length&&(f=wi[0],f.blockedOn===null);)Uw(f),f.blockedOn===null&&wi.shift()}var ro=C.ReactCurrentBatchConfig,Mu=!0;function i2(o,l,f,v){var y=Me,_=ro.transition;ro.transition=null;try{Me=1,Dh(o,l,f,v)}finally{Me=y,ro.transition=_}}function a2(o,l,f,v){var y=Me,_=ro.transition;ro.transition=null;try{Me=4,Dh(o,l,f,v)}finally{Me=y,ro.transition=_}}function Dh(o,l,f,v){if(Mu){var y=Mh(o,l,f,v);if(y===null)Zh(o,l,v,$u,f),zw(o,v);else if(r2(y,o,l,f,v))v.stopPropagation();else if(zw(o,v),l&4&&-1<t2.indexOf(o)){for(;y!==null;){var _=Ks(y);if(_!==null&&Dw(_),_=Mh(o,l,f,v),_===null&&Zh(o,l,v,$u,f),_===y)break;y=_}y!==null&&v.stopPropagation()}else Zh(o,l,v,null,f)}}var $u=null;function Mh(o,l,f,v){if($u=null,o=kh(v),o=ra(o),o!==null)if(l=ta(o),l===null)o=null;else if(f=l.tag,f===13){if(o=Pw(l),o!==null)return o;o=null}else if(f===3){if(l.stateNode.current.memoizedState.isDehydrated)return l.tag===3?l.stateNode.containerInfo:null;o=null}else l!==o&&(o=null);return $u=o,null}function Fw(o){switch(o){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(KI()){case Ch:return 1;case Tw:return 4;case Cu:case VI:return 16;case Nw:return 536870912;default:return 16}default:return 16}}var bi=null,$h=null,Lu=null;function Ww(){if(Lu)return Lu;var o,l=$h,f=l.length,v,y="value"in bi?bi.value:bi.textContent,_=y.length;for(o=0;o<f&&l[o]===y[o];o++);var E=f-o;for(v=1;v<=E&&l[f-v]===y[_-v];v++);return Lu=y.slice(o,1<v?1-v:void 0)}function zu(o){var l=o.keyCode;return"charCode"in o?(o=o.charCode,o===0&&l===13&&(o=13)):o=l,o===10&&(o=13),32<=o||o===13?o:0}function Uu(){return!0}function qw(){return!1}function yr(o){function l(f,v,y,_,E){this._reactName=f,this._targetInst=y,this.type=v,this.nativeEvent=_,this.target=E,this.currentTarget=null;for(var T in o)o.hasOwnProperty(T)&&(f=o[T],this[T]=f?f(_):_[T]);return this.isDefaultPrevented=(_.defaultPrevented!=null?_.defaultPrevented:_.returnValue===!1)?Uu:qw,this.isPropagationStopped=qw,this}return X(l.prototype,{preventDefault:function(){this.defaultPrevented=!0;var f=this.nativeEvent;f&&(f.preventDefault?f.preventDefault():typeof f.returnValue!="unknown"&&(f.returnValue=!1),this.isDefaultPrevented=Uu)},stopPropagation:function(){var f=this.nativeEvent;f&&(f.stopPropagation?f.stopPropagation():typeof f.cancelBubble!="unknown"&&(f.cancelBubble=!0),this.isPropagationStopped=Uu)},persist:function(){},isPersistent:Uu}),l}var no={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(o){return o.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Lh=yr(no),Ds=X({},no,{view:0,detail:0}),o2=yr(Ds),zh,Uh,Ms,Bu=X({},Ds,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Fh,button:0,buttons:0,relatedTarget:function(o){return o.relatedTarget===void 0?o.fromElement===o.srcElement?o.toElement:o.fromElement:o.relatedTarget},movementX:function(o){return"movementX"in o?o.movementX:(o!==Ms&&(Ms&&o.type==="mousemove"?(zh=o.screenX-Ms.screenX,Uh=o.screenY-Ms.screenY):Uh=zh=0,Ms=o),zh)},movementY:function(o){return"movementY"in o?o.movementY:Uh}}),Hw=yr(Bu),s2=X({},Bu,{dataTransfer:0}),l2=yr(s2),u2=X({},Ds,{relatedTarget:0}),Bh=yr(u2),c2=X({},no,{animationName:0,elapsedTime:0,pseudoElement:0}),d2=yr(c2),f2=X({},no,{clipboardData:function(o){return"clipboardData"in o?o.clipboardData:window.clipboardData}}),h2=yr(f2),p2=X({},no,{data:0}),Kw=yr(p2),v2={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},m2={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},g2={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function y2(o){var l=this.nativeEvent;return l.getModifierState?l.getModifierState(o):(o=g2[o])?!!l[o]:!1}function Fh(){return y2}var w2=X({},Ds,{key:function(o){if(o.key){var l=v2[o.key]||o.key;if(l!=="Unidentified")return l}return o.type==="keypress"?(o=zu(o),o===13?"Enter":String.fromCharCode(o)):o.type==="keydown"||o.type==="keyup"?m2[o.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Fh,charCode:function(o){return o.type==="keypress"?zu(o):0},keyCode:function(o){return o.type==="keydown"||o.type==="keyup"?o.keyCode:0},which:function(o){return o.type==="keypress"?zu(o):o.type==="keydown"||o.type==="keyup"?o.keyCode:0}}),b2=yr(w2),x2=X({},Bu,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Vw=yr(x2),_2=X({},Ds,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Fh}),S2=yr(_2),k2=X({},no,{propertyName:0,elapsedTime:0,pseudoElement:0}),P2=yr(k2),E2=X({},Bu,{deltaX:function(o){return"deltaX"in o?o.deltaX:"wheelDeltaX"in o?-o.wheelDeltaX:0},deltaY:function(o){return"deltaY"in o?o.deltaY:"wheelDeltaY"in o?-o.wheelDeltaY:"wheelDelta"in o?-o.wheelDelta:0},deltaZ:0,deltaMode:0}),O2=yr(E2),A2=[9,13,27,32],Wh=u&&"CompositionEvent"in window,$s=null;u&&"documentMode"in document&&($s=document.documentMode);var C2=u&&"TextEvent"in window&&!$s,Gw=u&&(!Wh||$s&&8<$s&&11>=$s),Yw=" ",Xw=!1;function Jw(o,l){switch(o){case"keyup":return A2.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Qw(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var io=!1;function j2(o,l){switch(o){case"compositionend":return Qw(l);case"keypress":return l.which!==32?null:(Xw=!0,Yw);case"textInput":return o=l.data,o===Yw&&Xw?null:o;default:return null}}function T2(o,l){if(io)return o==="compositionend"||!Wh&&Jw(o,l)?(o=Ww(),Lu=$h=bi=null,io=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1<l.char.length)return l.char;if(l.which)return String.fromCharCode