diff --git a/build/static/js/main.dd76cdc0.js b/build/static/js/main.dd76cdc0.js
new file mode 100644
index 0000000..d77b8d8
--- /dev/null
+++ b/build/static/js/main.dd76cdc0.js
@@ -0,0 +1,3 @@
+/*! For license information please see main.dd76cdc0.js.LICENSE.txt */
+(()=>{var e={97:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e="",t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,a(n)))}return e}function a(e){if("string"===typeof e||"number"===typeof e)return e;if("object"!==typeof e)return"";if(Array.isArray(e))return o.apply(null,e);if(e.toString!==Object.prototype.toString&&!e.toString.toString().includes("[native code]"))return e.toString();var t="";for(var n in e)r.call(e,n)&&e[n]&&(t=i(t,n));return t}function i(e,t){return t?e?e+" "+t:e+t:e}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},276:(e,t)=>{"use strict";var n,r=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.server_context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),p=Symbol.for("react.suspense_list"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen");function g(e){if("object"===typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case a:case s:case i:case f:case p:return e;default:switch(e=e&&e.$$typeof){case u:case c:case d:case m:case h:case l:return e;default:return t}}case o:return t}}}n=Symbol.for("react.module.reference"),t.ForwardRef=d,t.isMemo=function(e){return g(e)===h}},317:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,a=s(e),i=a[0],l=a[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),u=0,d=l>0?i-4:i;for(n=0;n<d;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,a=[],i=16383,s=0,c=r-o;s<c;s+=i)a.push(l(e,s,s+i>c?c:s+i));1===o?(t=e[r-1],a.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],a.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return a.join("")};for(var n=[],r=[],o="undefined"!==typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)n[i]=a[i],r[a.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,a,i=[],s=t;s<r;s+=3)o=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),i.push(n[(a=o)>>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},365:e=>{var t,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"===typeof setTimeout?setTimeout:o}catch(e){t=o}try{n="function"===typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var s,l=[],c=!1,u=-1;function d(){c&&s&&(c=!1,s.length?l=s.concat(l):u=-1,l.length&&f())}function f(){if(!c){var e=i(d);c=!0;for(var t=l.length;t;){for(s=l,l=[];++u<t;)s&&s[u].run();u=-1,t=l.length}s=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===a||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function h(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||c||i(f)},p.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=h,r.addListener=h,r.once=h,r.off=h,r.removeListener=h,r.removeAllListeners=h,r.emit=h,r.prependListener=h,r.prependOnceListener=h,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},478:(e,t,n)=>{"use strict";const r=n(317),o=n(956),a="function"===typeof Symbol&&"function"===typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.hp=l,t.IS=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"===typeof e){if("string"===typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return d(e)}return c(e,t,n)}function c(e,t,n){if("string"===typeof e)return function(e,t){"string"===typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if($(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if($(e,ArrayBuffer)||e&&$(e.buffer,ArrayBuffer))return p(e,t,n);if("undefined"!==typeof SharedArrayBuffer&&($(e,SharedArrayBuffer)||e&&$(e.buffer,SharedArrayBuffer)))return p(e,t,n);if("number"===typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|h(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!==typeof e.length||G(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!==typeof Symbol&&null!=Symbol.toPrimitive&&"function"===typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!==typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function d(e){return u(e),s(e<0?0:0|h(e))}function f(e){const t=e.length<0?0:0|h(e.length),n=s(t);for(let r=0;r<t;r+=1)n[r]=255&e[r];return n}function p(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('"length" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function h(e){if(e>=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||$(e,ArrayBuffer))return e.byteLength;if("string"!==typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Q(e).length;default:if(o)return r?-1:V(e).length;t=(""+t).toLowerCase(),o=!0}}function v(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return N(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return C(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,o){if(0===e.length)return-1;if("string"===typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),G(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"===typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"===typeof t)return t&=255,"function"===typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){let a,i=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(a=n;a<s;a++)if(c(e,a)===c(t,-1===r?0:a-r)){if(-1===r&&(r=a),a-r+1===l)return r*i}else-1!==r&&(a-=a-r),r=-1}else for(n+l>s&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let r=0;r<l;r++)if(c(e,a+r)!==c(t,r)){n=!1;break}if(n)return a}return-1}function w(e,t,n,r){n=Number(n)||0;const o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;const a=t.length;let i;for(r>a/2&&(r=a/2),i=0;i<r;++i){const r=parseInt(t.substr(2*i,2),16);if(G(r))return i;e[n+i]=r}return i}function x(e,t,n,r){return K(V(t,e.length-n),e,n,r)}function k(e,t,n,r){return K(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return K(Q(t),e,n,r)}function E(e,t,n,r){return K(function(e,t){let n,r,o;const a=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,o=n%256,a.push(o),a.push(r);return a}(t,e.length-n),e,n,r)}function C(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function N(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o<n;){const t=e[o];let a=null,i=t>239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:n=e[o+1],128===(192&n)&&(l=(31&t)<<6|63&n,l>127&&(a=l));break;case 3:n=e[o+1],r=e[o+2],128===(192&n)&&128===(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=e[o+1],r=e[o+2],s=e[o+3],128===(192&n)&&128===(192&r)&&128===(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=i}return function(e){const t=e.length;if(t<=j)return String.fromCharCode.apply(String,e);let n="",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=j));return n}(r)}l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||"undefined"===typeof console||"function"!==typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(l.prototype,"parent",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,"offset",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return u(e),e<=0?s(e):void 0!==t?"string"===typeof n?s(e).fill(t,n):s(e).fill(t):s(e)}(e,t,n)},l.allocUnsafe=function(e){return d(e)},l.allocUnsafeSlow=function(e){return d(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),$(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let o=0,a=Math.min(n,r);o<a;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let o=0;for(n=0;n<e.length;++n){let t=e[n];if($(t,Uint8Array))o+t.length>r.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)g(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)g(this,t,t+3),g(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)g(this,t,t+7),g(this,t+1,t+6),g(this,t+2,t+5),g(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?"":0===arguments.length?N(this,0,e):v.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e="";const n=t.IS;return e=this.toString("hex",0,n).replace(/(.{2})/g,"$1 ").trim(),this.length>n&&(e+=" ... "),"<Buffer "+e+">"},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if($(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let a=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const s=Math.min(a,i),c=this.slice(r,o),u=e.slice(t,n);for(let l=0;l<s;++l)if(c[l]!==u[l]){a=c[l],i=u[l];break}return a<i?-1:i<a?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return y(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return y(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"===typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let a=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return x(this,e,t,n);case"ascii":case"latin1":case"binary":return k(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const j=4096;function D(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function P(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function T(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let o="";for(let a=t;a<n;++a)o+=X[e[a]];return o}function _(e,t,n){const r=e.slice(t,n);let o="";for(let a=0;a<r.length-1;a+=2)o+=String.fromCharCode(r[a]+256*r[a+1]);return o}function O(e,t,n){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,r,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<a)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function R(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function A(e,t,n,r,o){U(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n+7]=a,a>>=8,e[n+6]=a,a>>=8,e[n+5]=a,a>>=8,e[n+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function L(e,t,n,r,o,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function I(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function F(e,t,n,r,a){return t=+t,n>>>=0,a||L(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||O(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<<BigInt(32))})),l.prototype.readBigUInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<<BigInt(32))+BigInt(o)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=this[e],o=1,a=0;for(;++a<t&&(o*=256);)r+=this[e+a]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||O(e,t,this.length);let r=t,o=1,a=this[e+--r];for(;r>0&&(o*=256);)a+=this[e+--r]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||O(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||O(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=J((function(e){Y(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||W(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||O(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||O(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,a=0;for(this[t]=255&e;++a<n&&(o*=256);)this[t+a]=e/o&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){M(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=0,a=1,i=0;for(this[t]=255&e;++o<n&&(a*=256);)e<0&&0===i&&0!==this[t+o-1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);M(this,e,t,n,r-1,-r)}let o=n-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a|0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=J((function(e){return R(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=J((function(e){return A(this,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return I(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return I(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return F(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return F(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);const o=r-n;return this===e&&"function"===typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},l.prototype.fill=function(e,t,n,r){if("string"===typeof e){if("string"===typeof t?(r=t,t=0,n=this.length):"string"===typeof n&&(r=n,n=this.length),void 0!==r&&"string"!==typeof r)throw new TypeError("encoding must be a string");if("string"===typeof r&&!l.isEncoding(r))throw new TypeError("Unknown encoding: "+r);if(1===e.length){const t=e.charCodeAt(0);("utf8"===r&&t<128||"latin1"===r)&&(e=t)}}else"number"===typeof e?e&=255:"boolean"===typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;let o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"===typeof e)for(o=t;o<n;++o)this[o]=e;else{const a=l.isBuffer(e)?e:l.from(e,r),i=a.length;if(0===i)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(o=0;o<n-t;++o)this[o+t]=a[o%i]}return this};const z={};function B(e,t,n){z[e]=class extends n{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name="".concat(this.name," [").concat(e,"]"),this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}}function H(e){let t="",n=e.length;const r="-"===e[0]?1:0;for(;n>=r+4;n-=3)t="_".concat(e.slice(n-3,n)).concat(t);return"".concat(e.slice(0,n)).concat(t)}function U(e,t,n,r,o,a){if(e>n||e<t){const r="bigint"===typeof t?"n":"";let o;throw o=a>3?0===t||t===BigInt(0)?">= 0".concat(r," and < 2").concat(r," ** ").concat(8*(a+1)).concat(r):">= -(2".concat(r," ** ").concat(8*(a+1)-1).concat(r,") and < 2 ** ")+"".concat(8*(a+1)-1).concat(r):">= ".concat(t).concat(r," and <= ").concat(n).concat(r),new z.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,n){Y(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||W(t,e.length-(n+1))}(r,o,a)}function Y(e,t){if("number"!==typeof e)throw new z.ERR_INVALID_ARG_TYPE(t,"number",e)}function W(e,t,n){if(Math.floor(e)!==e)throw Y(e,n),new z.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new z.ERR_BUFFER_OUT_OF_BOUNDS;throw new z.ERR_OUT_OF_RANGE(n||"offset",">= ".concat(n?1:0," and <= ").concat(t),e)}B("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?"".concat(e," is outside of buffer bounds"):"Attempt to access memory outside buffer bounds"}),RangeError),B("ERR_INVALID_ARG_TYPE",(function(e,t){return'The "'.concat(e,'" argument must be of type number. Received type ').concat(typeof t)}),TypeError),B("ERR_OUT_OF_RANGE",(function(e,t,n){let r='The value of "'.concat(e,'" is out of range.'),o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=H(String(n)):"bigint"===typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=H(o)),o+="n"),r+=" It must be ".concat(t,". Received ").concat(o),r}),RangeError);const q=/[^+/0-9A-Za-z-_]/g;function V(e,t){let n;t=t||1/0;const r=e.length;let o=null;const a=[];for(let i=0;i<r;++i){if(n=e.charCodeAt(i),n>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&a.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function Q(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(q,"")).length<2)return"";for(;e.length%4!==0;)e+="=";return e}(e))}function K(e,t,n,r){let o;for(o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function $(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function G(e){return e!==e}const X=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function J(e){return"undefined"===typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},483:(e,t,n)=>{"use strict";e.exports=n(592)},556:(e,t,n)=>{"use strict";var r=n(557),o=n(483),a=n(998);function i(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function s(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function l(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!==(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function c(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function u(e){if(l(e)!==e)throw Error(i(188))}function d(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e;for(e=e.child;null!==e;){if(null!==(t=d(e)))return t;e=e.sibling}return null}var f=Object.assign,p=Symbol.for("react.element"),h=Symbol.for("react.transitional.element"),m=Symbol.for("react.portal"),v=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),y=Symbol.for("react.profiler"),b=Symbol.for("react.provider"),w=Symbol.for("react.consumer"),x=Symbol.for("react.context"),k=Symbol.for("react.forward_ref"),S=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),C=Symbol.for("react.memo"),N=Symbol.for("react.lazy");Symbol.for("react.scope");var j=Symbol.for("react.activity");Symbol.for("react.legacy_hidden"),Symbol.for("react.tracing_marker");var D=Symbol.for("react.memo_cache_sentinel");Symbol.for("react.view_transition");var P=Symbol.iterator;function T(e){return null===e||"object"!==typeof e?null:"function"===typeof(e=P&&e[P]||e["@@iterator"])?e:null}var _=Symbol.for("react.client.reference");function O(e){if(null==e)return null;if("function"===typeof e)return e.$$typeof===_?null:e.displayName||e.name||null;if("string"===typeof e)return e;switch(e){case v:return"Fragment";case y:return"Profiler";case g:return"StrictMode";case S:return"Suspense";case E:return"SuspenseList";case j:return"Activity"}if("object"===typeof e)switch(e.$$typeof){case m:return"Portal";case x:return(e.displayName||"Context")+".Provider";case w:return(e._context.displayName||"Context")+".Consumer";case k:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case C:return null!==(t=e.displayName||null)?t:O(e.type)||"Memo";case N:t=e._payload,e=e._init;try{return O(e(t))}catch(n){}}return null}var M=Array.isArray,R=o.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,L={pending:!1,data:null,method:null,action:null},I=[],F=-1;function z(e){return{current:e}}function B(e){0>F||(e.current=I[F],I[F]=null,F--)}function H(e,t){F++,I[F]=e.current,e.current=t}var U=z(null),Y=z(null),W=z(null),q=z(null);function V(e,t){switch(H(W,t),H(Y,e),H(U,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?od(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)e=ad(t=od(t),e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}B(U),H(U,e)}function Q(){B(U),B(Y),B(W)}function K(e){null!==e.memoizedState&&H(q,e);var t=U.current,n=ad(t,e.type);t!==n&&(H(Y,e),H(U,n))}function $(e){Y.current===e&&(B(U),B(Y)),q.current===e&&(B(q),Kd._currentValue=L)}var G=Object.prototype.hasOwnProperty,X=r.unstable_scheduleCallback,J=r.unstable_cancelCallback,Z=r.unstable_shouldYield,ee=r.unstable_requestPaint,te=r.unstable_now,ne=r.unstable_getCurrentPriorityLevel,re=r.unstable_ImmediatePriority,oe=r.unstable_UserBlockingPriority,ae=r.unstable_NormalPriority,ie=r.unstable_LowPriority,se=r.unstable_IdlePriority,le=r.log,ce=r.unstable_setDisableYieldValue,ue=null,de=null;function fe(e){if("function"===typeof le&&ce(e),de&&"function"===typeof de.setStrictMode)try{de.setStrictMode(ue,e)}catch(t){}}var pe=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(he(e)/me|0)|0},he=Math.log,me=Math.LN2;var ve=256,ge=4194304;function ye(e){var t=42&e;if(0!==t)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:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 16777216:case 33554432:return 62914560&e;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function be(e,t,n){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var s=134217727&r;return 0!==s?0!==(r=s&~a)?o=ye(r):0!==(i&=s)?o=ye(i):n||0!==(n=s&~e)&&(o=ye(n)):0!==(s=r&~a)?o=ye(s):0!==i?o=ye(i):n||0!==(n=r&~e)&&(o=ye(n)),0===o?0:0!==t&&t!==o&&0===(t&a)&&((a=o&-o)>=(n=t&-t)||32===a&&0!==(4194048&n))?t:o}function we(e,t){return 0===(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)}function xe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ke(){var e=ve;return 0===(4194048&(ve<<=1))&&(ve=256),e}function Se(){var e=ge;return 0===(62914560&(ge<<=1))&&(ge=4194304),e}function Ee(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ce(e,t){e.pendingLanes|=t,268435456!==t&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ne(e,t,n){e.pendingLanes|=t,e.suspendedLanes&=~t;var r=31-pe(t);e.entangledLanes|=t,e.entanglements[r]=1073741824|e.entanglements[r]|4194090&n}function je(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-pe(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}function De(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:e=128;break;case 268435456:e=134217728;break;default:e=0}return e}function Pe(e){return 2<(e&=-e)?8<e?0!==(134217727&e)?32:268435456:8:2}function Te(){var e=A.p;return 0!==e?e:void 0===(e=window.event)?32:uf(e.type)}var _e=Math.random().toString(36).slice(2),Oe="__reactFiber$"+_e,Me="__reactProps$"+_e,Re="__reactContainer$"+_e,Ae="__reactEvents$"+_e,Le="__reactListeners$"+_e,Ie="__reactHandles$"+_e,Fe="__reactResources$"+_e,ze="__reactMarker$"+_e;function Be(e){delete e[Oe],delete e[Me],delete e[Ae],delete e[Le],delete e[Ie]}function He(e){var t=e[Oe];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Re]||n[Oe]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=bd(e);null!==e;){if(n=e[Oe])return n;e=bd(e)}return t}n=(e=n).parentNode}return null}function Ue(e){if(e=e[Oe]||e[Re]){var t=e.tag;if(5===t||6===t||13===t||26===t||27===t||3===t)return e}return null}function Ye(e){var t=e.tag;if(5===t||26===t||27===t||6===t)return e.stateNode;throw Error(i(33))}function We(e){var t=e[Fe];return t||(t=e[Fe]={hoistableStyles:new Map,hoistableScripts:new Map}),t}function qe(e){e[ze]=!0}var Ve=new Set,Qe={};function Ke(e,t){$e(e,t),$e(e+"Capture",t)}function $e(e,t){for(Qe[e]=t,e=0;e<t.length;e++)Ve.add(t[e])}var Ge,Xe,Je=RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$"),Ze={},et={};function tt(e,t,n){if(o=t,G.call(et,o)||!G.call(Ze,o)&&(Je.test(o)?et[o]=!0:(Ze[o]=!0,0)))if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":return void e.removeAttribute(t);case"boolean":var r=t.toLowerCase().slice(0,5);if("data-"!==r&&"aria-"!==r)return void e.removeAttribute(t)}e.setAttribute(t,""+n)}var o}function nt(e,t,n){if(null===n)e.removeAttribute(t);else{switch(typeof n){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(t)}e.setAttribute(t,""+n)}}function rt(e,t,n,r){if(null===r)e.removeAttribute(n);else{switch(typeof r){case"undefined":case"function":case"symbol":case"boolean":return void e.removeAttribute(n)}e.setAttributeNS(t,n,""+r)}}function ot(e){if(void 0===Ge)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Ge=t&&t[1]||"",Xe=-1<n.stack.indexOf("\n    at")?" (<anonymous>)":-1<n.stack.indexOf("@")?"@unknown:0:0":""}return"\n"+Ge+e+Xe}var at=!1;function it(e,t){if(!e||at)return"";at=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,"props",{set:function(){throw Error()}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(n,[])}catch(o){var r=o}Reflect.construct(e,[],n)}else{try{n.call()}catch(a){r=a}e.call(n.prototype)}}else{try{throw Error()}catch(i){r=i}(n=e())&&"function"===typeof n.catch&&n.catch((function(){}))}}catch(s){if(s&&r&&"string"===typeof s.stack)return[s.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,"name");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var a=r.DetermineComponentFrameRoot(),i=a[0],s=a[1];if(i&&s){var l=i.split("\n"),c=s.split("\n");for(o=r=0;r<l.length&&!l[r].includes("DetermineComponentFrameRoot");)r++;for(;o<c.length&&!c[o].includes("DetermineComponentFrameRoot");)o++;if(r===l.length||o===c.length)for(r=l.length-1,o=c.length-1;1<=r&&0<=o&&l[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(l[r]!==c[o]){if(1!==r||1!==o)do{if(r--,0>--o||l[r]!==c[o]){var u="\n"+l[r].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=r&&0<=o);break}}}finally{at=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:"")?ot(n):""}function st(e){switch(e.tag){case 26:case 27:case 5:return ot(e.type);case 16:return ot("Lazy");case 13:return ot("Suspense");case 19:return ot("SuspenseList");case 0:case 15:return it(e.type,!1);case 11:return it(e.type.render,!1);case 1:return it(e.type,!0);case 31:return ot("Activity");default:return""}}function lt(e){try{var t="";do{t+=st(e),e=e.return}while(e);return t}catch(n){return"\nError generating stack: "+n.message+"\n"+n.stack}}function ct(e){switch(typeof e){case"bigint":case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function ut(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function dt(e){e._valueTracker||(e._valueTracker=function(e){var t=ut(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&"undefined"!==typeof n&&"function"===typeof n.get&&"function"===typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function ft(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ut(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function pt(e){if("undefined"===typeof(e=e||("undefined"!==typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}var ht=/[\n"\\]/g;function mt(e){return e.replace(ht,(function(e){return"\\"+e.charCodeAt(0).toString(16)+" "}))}function vt(e,t,n,r,o,a,i,s){e.name="",null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i?e.type=i:e.removeAttribute("type"),null!=t?"number"===i?(0===t&&""===e.value||e.value!=t)&&(e.value=""+ct(t)):e.value!==""+ct(t)&&(e.value=""+ct(t)):"submit"!==i&&"reset"!==i||e.removeAttribute("value"),null!=t?yt(e,i,ct(t)):null!=n?yt(e,i,ct(n)):null!=r&&e.removeAttribute("value"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&"function"!==typeof o&&"symbol"!==typeof o),null!=s&&"function"!==typeof s&&"symbol"!==typeof s&&"boolean"!==typeof s?e.name=""+ct(s):e.removeAttribute("name")}function gt(e,t,n,r,o,a,i,s){if(null!=a&&"function"!==typeof a&&"symbol"!==typeof a&&"boolean"!==typeof a&&(e.type=a),null!=t||null!=n){if(!("submit"!==a&&"reset"!==a||void 0!==t&&null!==t))return;n=null!=n?""+ct(n):"",t=null!=t?""+ct(t):n,s||t===e.value||(e.value=t),e.defaultValue=t}r="function"!==typeof(r=null!=r?r:o)&&"symbol"!==typeof r&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,null!=i&&"function"!==typeof i&&"symbol"!==typeof i&&"boolean"!==typeof i&&(e.name=i)}function yt(e,t,n){"number"===t&&pt(e.ownerDocument)===e||e.defaultValue===""+n||(e.defaultValue=""+n)}function bt(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ct(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function wt(e,t,n){null==t||((t=""+ct(t))!==e.value&&(e.value=t),null!=n)?e.defaultValue=null!=n?""+ct(n):"":e.defaultValue!==t&&(e.defaultValue=t)}function xt(e,t,n,r){if(null==t){if(null!=r){if(null!=n)throw Error(i(92));if(M(r)){if(1<r.length)throw Error(i(93));r=r[0]}n=r}null==n&&(n=""),t=n}n=ct(t),e.defaultValue=n,(r=e.textContent)===n&&""!==r&&null!==r&&(e.value=r)}function kt(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var St=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function Et(e,t,n){var r=0===t.indexOf("--");null==n||"boolean"===typeof n||""===n?r?e.setProperty(t,""):"float"===t?e.cssFloat="":e[t]="":r?e.setProperty(t,n):"number"!==typeof n||0===n||St.has(t)?"float"===t?e.cssFloat=n:e[t]=(""+n).trim():e[t]=n+"px"}function Ct(e,t,n){if(null!=t&&"object"!==typeof t)throw Error(i(62));if(e=e.style,null!=n){for(var r in n)!n.hasOwnProperty(r)||null!=t&&t.hasOwnProperty(r)||(0===r.indexOf("--")?e.setProperty(r,""):"float"===r?e.cssFloat="":e[r]="");for(var o in t)r=t[o],t.hasOwnProperty(o)&&n[o]!==r&&Et(e,o,r)}else for(var a in t)t.hasOwnProperty(a)&&Et(e,a,t[a])}function Nt(e){if(-1===e.indexOf("-"))return!1;switch(e){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 jt=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vectorEffect","vector-effect"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),Dt=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function Pt(e){return Dt.test(""+e)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":e}var Tt=null;function _t(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ot=null,Mt=null;function Rt(e){var t=Ue(e);if(t&&(e=t.stateNode)){var n=e[Me]||null;e:switch(e=t.stateNode,t.type){case"input":if(vt(e,n.value,n.defaultValue,n.defaultValue,n.checked,n.defaultChecked,n.type,n.name),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll('input[name="'+mt(""+t)+'"][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=r[Me]||null;if(!o)throw Error(i(90));vt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(t=0;t<n.length;t++)(r=n[t]).form===e.form&&ft(r)}break e;case"textarea":wt(e,n.value,n.defaultValue);break e;case"select":null!=(t=n.value)&&bt(e,!!n.multiple,t,!1)}}}var At=!1;function Lt(e,t,n){if(At)return e(t,n);At=!0;try{return e(t)}finally{if(At=!1,(null!==Ot||null!==Mt)&&(Hc(),Ot&&(t=Ot,e=Mt,Mt=Ot=null,Rt(t),e)))for(t=0;t<e.length;t++)Rt(e[t])}}function It(e,t){var n=e.stateNode;if(null===n)return null;var r=n[Me]||null;if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!==typeof n)throw Error(i(231,t,typeof n));return n}var Ft=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),zt=!1;if(Ft)try{var Bt={};Object.defineProperty(Bt,"passive",{get:function(){zt=!0}}),window.addEventListener("test",Bt,Bt),window.removeEventListener("test",Bt,Bt)}catch(Rf){zt=!1}var Ht=null,Ut=null,Yt=null;function Wt(){if(Yt)return Yt;var e,t,n=Ut,r=n.length,o="value"in Ht?Ht.value:Ht.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Yt=o.slice(e,1<t?1-t:void 0)}function qt(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function Vt(){return!0}function Qt(){return!1}function Kt(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?Vt:Qt,this.isPropagationStopped=Qt,this}return f(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!==typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=Vt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!==typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=Vt)},persist:function(){},isPersistent:Vt}),t}var $t,Gt,Xt,Jt={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Zt=Kt(Jt),en=f({},Jt,{view:0,detail:0}),tn=Kt(en),nn=f({},en,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:hn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Xt&&(Xt&&"mousemove"===e.type?($t=e.screenX-Xt.screenX,Gt=e.screenY-Xt.screenY):Gt=$t=0,Xt=e),$t)},movementY:function(e){return"movementY"in e?e.movementY:Gt}}),rn=Kt(nn),on=Kt(f({},nn,{dataTransfer:0})),an=Kt(f({},en,{relatedTarget:0})),sn=Kt(f({},Jt,{animationName:0,elapsedTime:0,pseudoElement:0})),ln=Kt(f({},Jt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}})),cn=Kt(f({},Jt,{data:0})),un={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},dn={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"},fn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function pn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=fn[e])&&!!t[e]}function hn(){return pn}var mn=Kt(f({},en,{key:function(e){if(e.key){var t=un[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=qt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?dn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:hn,charCode:function(e){return"keypress"===e.type?qt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?qt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}})),vn=Kt(f({},nn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),gn=Kt(f({},en,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:hn})),yn=Kt(f({},Jt,{propertyName:0,elapsedTime:0,pseudoElement:0})),bn=Kt(f({},nn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),wn=Kt(f({},Jt,{newState:0,oldState:0})),xn=[9,13,27,32],kn=Ft&&"CompositionEvent"in window,Sn=null;Ft&&"documentMode"in document&&(Sn=document.documentMode);var En=Ft&&"TextEvent"in window&&!Sn,Cn=Ft&&(!kn||Sn&&8<Sn&&11>=Sn),Nn=String.fromCharCode(32),jn=!1;function Dn(e,t){switch(e){case"keyup":return-1!==xn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Pn(e){return"object"===typeof(e=e.detail)&&"data"in e?e.data:null}var Tn=!1;var _n={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function On(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!_n[e.type]:"textarea"===t}function Mn(e,t,n,r){Ot?Mt?Mt.push(r):Mt=[r]:Ot=r,0<(t=Wu(t,"onChange")).length&&(n=new Zt("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Rn=null,An=null;function Ln(e){Lu(e,0)}function In(e){if(ft(Ye(e)))return e}function Fn(e,t){if("change"===e)return t}var zn=!1;if(Ft){var Bn;if(Ft){var Hn="oninput"in document;if(!Hn){var Un=document.createElement("div");Un.setAttribute("oninput","return;"),Hn="function"===typeof Un.oninput}Bn=Hn}else Bn=!1;zn=Bn&&(!document.documentMode||9<document.documentMode)}function Yn(){Rn&&(Rn.detachEvent("onpropertychange",Wn),An=Rn=null)}function Wn(e){if("value"===e.propertyName&&In(An)){var t=[];Mn(t,An,e,_t(e)),Lt(Ln,t)}}function qn(e,t,n){"focusin"===e?(Yn(),An=n,(Rn=t).attachEvent("onpropertychange",Wn)):"focusout"===e&&Yn()}function Vn(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return In(An)}function Qn(e,t){if("click"===e)return In(t)}function Kn(e,t){if("input"===e||"change"===e)return In(t)}var $n="function"===typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e===1/t)||e!==e&&t!==t};function Gn(e,t){if($n(e,t))return!0;if("object"!==typeof e||null===e||"object"!==typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!G.call(t,o)||!$n(e[o],t[o]))return!1}return!0}function Xn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Jn(e,t){var n,r=Xn(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Xn(r)}}function Zn(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?Zn(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function er(e){for(var t=pt((e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window).document);t instanceof e.HTMLIFrameElement;){try{var n="string"===typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=pt((e=t.contentWindow).document)}return t}function tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var nr=Ft&&"documentMode"in document&&11>=document.documentMode,rr=null,or=null,ar=null,ir=!1;function sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ir||null==rr||rr!==pt(r)||("selectionStart"in(r=rr)&&tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},ar&&Gn(ar,r)||(ar=r,0<(r=Wu(or,"onSelect")).length&&(t=new Zt("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=rr)))}function lr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var cr={animationend:lr("Animation","AnimationEnd"),animationiteration:lr("Animation","AnimationIteration"),animationstart:lr("Animation","AnimationStart"),transitionrun:lr("Transition","TransitionRun"),transitionstart:lr("Transition","TransitionStart"),transitioncancel:lr("Transition","TransitionCancel"),transitionend:lr("Transition","TransitionEnd")},ur={},dr={};function fr(e){if(ur[e])return ur[e];if(!cr[e])return e;var t,n=cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in dr)return ur[e]=n[t];return e}Ft&&(dr=document.createElement("div").style,"AnimationEvent"in window||(delete cr.animationend.animation,delete cr.animationiteration.animation,delete cr.animationstart.animation),"TransitionEvent"in window||delete cr.transitionend.transition);var pr=fr("animationend"),hr=fr("animationiteration"),mr=fr("animationstart"),vr=fr("transitionrun"),gr=fr("transitionstart"),yr=fr("transitioncancel"),br=fr("transitionend"),wr=new Map,xr="abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function kr(e,t){wr.set(e,t),Ke(t,[e])}xr.push("scrollEnd");var Sr=new WeakMap;function Er(e,t){if("object"===typeof e&&null!==e){var n=Sr.get(e);return void 0!==n?n:(t={value:e,source:t,stack:lt(t)},Sr.set(e,t),t)}return{value:e,source:t,stack:lt(t)}}var Cr=[],Nr=0,jr=0;function Dr(){for(var e=Nr,t=jr=Nr=0;t<e;){var n=Cr[t];Cr[t++]=null;var r=Cr[t];Cr[t++]=null;var o=Cr[t];Cr[t++]=null;var a=Cr[t];if(Cr[t++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&Or(n,o,a)}}function Pr(e,t,n,r){Cr[Nr++]=e,Cr[Nr++]=t,Cr[Nr++]=n,Cr[Nr++]=r,jr|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function Tr(e,t,n,r){return Pr(e,t,n,r),Mr(e)}function _r(e,t){return Pr(e,null,null,t),Mr(e)}function Or(e,t,n){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n);for(var o=!1,a=e.return;null!==a;)a.childLanes|=n,null!==(r=a.alternate)&&(r.childLanes|=n),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==t&&(o=31-pe(n),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[t]:r.push(t),t.lane=536870912|n),a):null}function Mr(e){if(50<Oc)throw Oc=0,Mc=null,Error(i(185));for(var t=e.return;null!==t;)t=(e=t).return;return 3===e.tag?e.stateNode:null}var Rr={};function Ar(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Lr(e,t,n,r){return new Ar(e,t,n,r)}function Ir(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Fr(e,t){var n=e.alternate;return null===n?((n=Lr(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=65011712&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n.refCleanup=e.refCleanup,n}function zr(e,t){e.flags&=65011714;var n=e.alternate;return null===n?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function Br(e,t,n,r,o,a){var s=0;if(r=e,"function"===typeof e)Ir(e)&&(s=1);else if("string"===typeof e)s=function(e,t,n){if(1===n||null!=t.itemProp)return!1;switch(e){case"meta":case"title":return!0;case"style":if("string"!==typeof t.precedence||"string"!==typeof t.href||""===t.href)break;return!0;case"link":if("string"!==typeof t.rel||"string"!==typeof t.href||""===t.href||t.onLoad||t.onError)break;return"stylesheet"!==t.rel||(e=t.disabled,"string"===typeof t.precedence&&null==e);case"script":if(t.async&&"function"!==typeof t.async&&"symbol"!==typeof t.async&&!t.onLoad&&!t.onError&&t.src&&"string"===typeof t.src)return!0}return!1}(e,n,U.current)?26:"html"===e||"head"===e||"body"===e?27:5;else e:switch(e){case j:return(e=Lr(31,n,t,o)).elementType=j,e.lanes=a,e;case v:return Hr(n.children,o,a,t);case g:s=8,o|=24;break;case y:return(e=Lr(12,n,t,2|o)).elementType=y,e.lanes=a,e;case S:return(e=Lr(13,n,t,o)).elementType=S,e.lanes=a,e;case E:return(e=Lr(19,n,t,o)).elementType=E,e.lanes=a,e;default:if("object"===typeof e&&null!==e)switch(e.$$typeof){case b:case x:s=10;break e;case w:s=9;break e;case k:s=11;break e;case C:s=14;break e;case N:s=16,r=null;break e}s=29,n=Error(i(130,null===e?"null":typeof e,"")),r=null}return(t=Lr(s,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Hr(e,t,n,r){return(e=Lr(7,e,r,t)).lanes=n,e}function Ur(e,t,n){return(e=Lr(6,e,null,t)).lanes=n,e}function Yr(e,t,n){return(t=Lr(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}var Wr=[],qr=0,Vr=null,Qr=0,Kr=[],$r=0,Gr=null,Xr=1,Jr="";function Zr(e,t){Wr[qr++]=Qr,Wr[qr++]=Vr,Vr=e,Qr=t}function eo(e,t,n){Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Gr=e;var r=Xr;e=Jr;var o=32-pe(r)-1;r&=~(1<<o),n+=1;var a=32-pe(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xr=1<<32-pe(t)+o|n<<o|r,Jr=a+e}else Xr=1<<a|n<<o|r,Jr=e}function to(e){null!==e.return&&(Zr(e,1),eo(e,1,0))}function no(e){for(;e===Vr;)Vr=Wr[--qr],Wr[qr]=null,Qr=Wr[--qr],Wr[qr]=null;for(;e===Gr;)Gr=Kr[--$r],Kr[$r]=null,Jr=Kr[--$r],Kr[$r]=null,Xr=Kr[--$r],Kr[$r]=null}var ro=null,oo=null,ao=!1,io=null,so=!1,lo=Error(i(519));function co(e){throw vo(Er(Error(i(418,"")),e)),lo}function uo(e){var t=e.stateNode,n=e.type,r=e.memoizedProps;switch(t[Oe]=e,t[Me]=r,n){case"dialog":Iu("cancel",t),Iu("close",t);break;case"iframe":case"object":case"embed":Iu("load",t);break;case"video":case"audio":for(n=0;n<Ru.length;n++)Iu(Ru[n],t);break;case"source":Iu("error",t);break;case"img":case"image":case"link":Iu("error",t),Iu("load",t);break;case"details":Iu("toggle",t);break;case"input":Iu("invalid",t),gt(t,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0),dt(t);break;case"select":Iu("invalid",t);break;case"textarea":Iu("invalid",t),xt(t,r.value,r.defaultValue,r.children),dt(t)}"string"!==typeof(n=r.children)&&"number"!==typeof n&&"bigint"!==typeof n||t.textContent===""+n||!0===r.suppressHydrationWarning||Gu(t.textContent,n)?(null!=r.popover&&(Iu("beforetoggle",t),Iu("toggle",t)),null!=r.onScroll&&Iu("scroll",t),null!=r.onScrollEnd&&Iu("scrollend",t),null!=r.onClick&&(t.onclick=Xu),t=!0):t=!1,t||co(e)}function fo(e){for(ro=e.return;ro;)switch(ro.tag){case 5:case 13:return void(so=!1);case 27:case 3:return void(so=!0);default:ro=ro.return}}function po(e){if(e!==ro)return!1;if(!ao)return fo(e),ao=!0,!1;var t,n=e.tag;if((t=3!==n&&27!==n)&&((t=5===n)&&(t=!("form"!==(t=e.type)&&"button"!==t)||id(e.type,e.memoizedProps)),t=!t),t&&oo&&co(e),fo(e),13===n){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,n=0;e;){if(8===e.nodeType)if("/$"===(t=e.data)){if(0===n){oo=gd(e.nextSibling);break e}n--}else"$"!==t&&"$!"!==t&&"$?"!==t||n++;e=e.nextSibling}oo=null}}else 27===n?(n=oo,pd(e.type)?(e=yd,yd=null,oo=e):oo=n):oo=ro?gd(e.stateNode.nextSibling):null;return!0}function ho(){oo=ro=null,ao=!1}function mo(){var e=io;return null!==e&&(null===bc?bc=e:bc.push.apply(bc,e),io=null),e}function vo(e){null===io?io=[e]:io.push(e)}var go=z(null),yo=null,bo=null;function wo(e,t,n){H(go,t._currentValue),t._currentValue=n}function xo(e){e._currentValue=go.current,B(go)}function ko(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function So(e,t,n,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var s=o.child;a=a.firstContext;e:for(;null!==a;){var l=a;a=o;for(var c=0;c<t.length;c++)if(l.context===t[c]){a.lanes|=n,null!==(l=a.alternate)&&(l.lanes|=n),ko(a.return,n,e),r||(s=null);break e}a=l.next}}else if(18===o.tag){if(null===(s=o.return))throw Error(i(341));s.lanes|=n,null!==(a=s.alternate)&&(a.lanes|=n),ko(s,n,e),s=null}else s=o.child;if(null!==s)s.return=o;else for(s=o;null!==s;){if(s===e){s=null;break}if(null!==(o=s.sibling)){o.return=s.return,s=o;break}s=s.return}o=s}}function Eo(e,t,n,r){e=null;for(var o=t,a=!1;null!==o;){if(!a)if(0!==(524288&o.flags))a=!0;else if(0!==(262144&o.flags))break;if(10===o.tag){var s=o.alternate;if(null===s)throw Error(i(387));if(null!==(s=s.memoizedProps)){var l=o.type;$n(o.pendingProps.value,s.value)||(null!==e?e.push(l):e=[l])}}else if(o===q.current){if(null===(s=o.alternate))throw Error(i(387));s.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(Kd):e=[Kd])}o=o.return}null!==e&&So(t,e,n,r),t.flags|=262144}function Co(e){for(e=e.firstContext;null!==e;){if(!$n(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function No(e){yo=e,bo=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function jo(e){return Po(yo,e)}function Do(e,t){return null===yo&&No(e),Po(e,t)}function Po(e,t){var n=t._currentValue;if(t={context:t,memoizedValue:n,next:null},null===bo){if(null===e)throw Error(i(308));bo=t,e.dependencies={lanes:0,firstContext:t},e.flags|=524288}else bo=bo.next=t;return n}var To="undefined"!==typeof AbortController?AbortController:function(){var e=[],t=this.signal={aborted:!1,addEventListener:function(t,n){e.push(n)}};this.abort=function(){t.aborted=!0,e.forEach((function(e){return e()}))}},_o=r.unstable_scheduleCallback,Oo=r.unstable_NormalPriority,Mo={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function Ro(){return{controller:new To,data:new Map,refCount:0}}function Ao(e){e.refCount--,0===e.refCount&&_o(Oo,(function(){e.controller.abort()}))}var Lo=null,Io=0,Fo=0,zo=null;function Bo(){if(0===--Io&&null!==Lo){null!==zo&&(zo.status="fulfilled");var e=Lo;Lo=null,Fo=0,zo=null;for(var t=0;t<e.length;t++)(0,e[t])()}}var Ho=R.S;R.S=function(e,t){"object"===typeof t&&null!==t&&"function"===typeof t.then&&function(e,t){if(null===Lo){var n=Lo=[];Io=0,Fo=Pu(),zo={status:"pending",value:void 0,then:function(e){n.push(e)}}}Io++,t.then(Bo,Bo)}(0,t),null!==Ho&&Ho(e,t)};var Uo=z(null);function Yo(){var e=Uo.current;return null!==e?e:rc.pooledCache}function Wo(e,t){H(Uo,null===t?Uo.current:t.pool)}function qo(){var e=Yo();return null===e?null:{parent:Mo._currentValue,pool:e}}var Vo=Error(i(460)),Qo=Error(i(474)),Ko=Error(i(542)),$o={then:function(){}};function Go(e){return"fulfilled"===(e=e.status)||"rejected"===e}function Xo(){}function Jo(e,t,n){switch(void 0===(n=e[n])?e.push(t):n!==t&&(t.then(Xo,Xo),t=n),t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e;default:if("string"===typeof t.status)t.then(Xo,Xo);else{if(null!==(e=rc)&&100<e.shellSuspendCounter)throw Error(i(482));(e=t).status="pending",e.then((function(e){if("pending"===t.status){var n=t;n.status="fulfilled",n.value=e}}),(function(e){if("pending"===t.status){var n=t;n.status="rejected",n.reason=e}}))}switch(t.status){case"fulfilled":return t.value;case"rejected":throw ta(e=t.reason),e}throw Zo=t,Vo}}var Zo=null;function ea(){if(null===Zo)throw Error(i(459));var e=Zo;return Zo=null,e}function ta(e){if(e===Vo||e===Ko)throw Error(i(483))}var na=!1;function ra(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function oa(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 aa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function ia(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!==(2&nc)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,t=Mr(e),Or(e,null,n),t}return Pr(e,r,t,n),Mr(e)}function sa(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!==(4194048&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}function la(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var ca=!1;function ua(){if(ca){if(null!==zo)throw zo}}function da(e,t,n,r){ca=!1;var o=e.updateQueue;na=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=-536870913&s.lane,h=p!==s.lane;if(h?(ac&p)===p:(r&p)===p){0!==p&&p===Fo&&(ca=!0),null!==u&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});e:{var m=e,v=s;p=t;var g=n;switch(v.tag){case 1:if("function"===typeof(m=v.payload)){d=m.call(g,d,p);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null===(p="function"===typeof(m=v.payload)?m.call(g,d,p):m)||void 0===p)break e;d=f({},d,p);break e;case 2:na=!0}}null!==(p=s.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=h,l=d):u=u.next=h,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(h=s).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}}null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),pc|=i,e.lanes=i,e.memoizedState=d}}function fa(e,t){if("function"!==typeof e)throw Error(i(191,e));e.call(t)}function pa(e,t){var n=e.callbacks;if(null!==n)for(e.callbacks=null,e=0;e<n.length;e++)fa(n[e],t)}var ha=z(null),ma=z(0);function va(e,t){H(ma,e=dc),H(ha,t),dc=e|t.baseLanes}function ga(){H(ma,dc),H(ha,ha.current)}function ya(){dc=ma.current,B(ha),B(ma)}var ba=0,wa=null,xa=null,ka=null,Sa=!1,Ea=!1,Ca=!1,Na=0,ja=0,Da=null,Pa=0;function Ta(){throw Error(i(321))}function _a(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!$n(e[n],t[n]))return!1;return!0}function Oa(e,t,n,r,o,a){return ba=a,wa=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,R.H=null===e||null===e.memoizedState?Vi:Qi,Ca=!1,a=n(r,o),Ca=!1,Ea&&(a=Ra(t,n,r,o)),Ma(e),a}function Ma(e){R.H=qi;var t=null!==xa&&null!==xa.next;if(ba=0,ka=xa=wa=null,Sa=!1,ja=0,Da=null,t)throw Error(i(300));null===e||js||null!==(e=e.dependencies)&&Co(e)&&(js=!0)}function Ra(e,t,n,r){wa=e;var o=0;do{if(Ea&&(Da=null),ja=0,Ea=!1,25<=o)throw Error(i(301));if(o+=1,ka=xa=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}R.H=Ki,a=t(n,r)}while(Ea);return a}function Aa(){var e=R.H,t=e.useState()[0];return t="function"===typeof t.then?Ha(t):t,e=e.useState()[0],(null!==xa?xa.memoizedState:null)!==e&&(wa.flags|=1024),t}function La(){var e=0!==Na;return Na=0,e}function Ia(e,t,n){t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~n}function Fa(e){if(Sa){for(e=e.memoizedState;null!==e;){var t=e.queue;null!==t&&(t.pending=null),e=e.next}Sa=!1}ba=0,ka=xa=wa=null,Ea=!1,ja=Na=0,Da=null}function za(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ka?wa.memoizedState=ka=e:ka=ka.next=e,ka}function Ba(){if(null===xa){var e=wa.alternate;e=null!==e?e.memoizedState:null}else e=xa.next;var t=null===ka?wa.memoizedState:ka.next;if(null!==t)ka=t,xa=e;else{if(null===e){if(null===wa.alternate)throw Error(i(467));throw Error(i(310))}e={memoizedState:(xa=e).memoizedState,baseState:xa.baseState,baseQueue:xa.baseQueue,queue:xa.queue,next:null},null===ka?wa.memoizedState=ka=e:ka=ka.next=e}return ka}function Ha(e){var t=ja;return ja+=1,null===Da&&(Da=[]),e=Jo(Da,e,t),t=wa,null===(null===ka?t.memoizedState:ka.next)&&(t=t.alternate,R.H=null===t||null===t.memoizedState?Vi:Qi),e}function Ua(e){if(null!==e&&"object"===typeof e){if("function"===typeof e.then)return Ha(e);if(e.$$typeof===x)return jo(e)}throw Error(i(438,String(e)))}function Ya(e){var t=null,n=wa.updateQueue;if(null!==n&&(t=n.memoCache),null==t){var r=wa.alternate;null!==r&&(null!==(r=r.updateQueue)&&(null!=(r=r.memoCache)&&(t={data:r.data.map((function(e){return e.slice()})),index:0})))}if(null==t&&(t={data:[],index:0}),null===n&&(n={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=n),n.memoCache=t,void 0===(n=t.data[t.index]))for(n=t.data[t.index]=Array(e),r=0;r<e;r++)n[r]=D;return t.index++,n}function Wa(e,t){return"function"===typeof t?t(e):t}function qa(e){return Va(Ba(),xa,e)}function Va(e,t,n){var r=e.queue;if(null===r)throw Error(i(311));r.lastRenderedReducer=n;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}t.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{var l=s=null,c=null,u=t=o.next,d=!1;do{var f=-536870913&u.lane;if(f!==u.lane?(ac&f)===f:(ba&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===Fo&&(d=!0);else{if((ba&p)===p){u=u.next,p===Fo&&(d=!0);continue}f={lane:0,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=f,s=a):c=c.next=f,wa.lanes|=p,pc|=p}f=u.action,Ca&&n(a,f),a=u.hasEagerState?u.eagerState:n(a,f)}else p={lane:f,revertLane:u.revertLane,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(l=c=p,s=a):c=c.next=p,wa.lanes|=f,pc|=f;u=u.next}while(null!==u&&u!==t);if(null===c?s=a:c.next=l,!$n(a,e.memoizedState)&&(js=!0,d&&null!==(n=zo)))throw n;e.memoizedState=a,e.baseState=s,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function Qa(e){var t=Ba(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);$n(a,t.memoizedState)||(js=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function Ka(e,t,n){var r=wa,o=Ba(),a=ao;if(a){if(void 0===n)throw Error(i(407));n=n()}else n=t();var s=!$n((xa||o).memoizedState,n);if(s&&(o.memoizedState=n,js=!0),o=o.queue,gi(2048,8,Xa.bind(null,r,o,e),[e]),o.getSnapshot!==t||s||null!==ka&&1&ka.memoizedState.tag){if(r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,o,n,t),null),null===rc)throw Error(i(349));a||0!==(124&ba)||$a(r,t,n)}return n}function $a(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=wa.updateQueue)?(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ga(e,t,n,r){t.value=n,t.getSnapshot=r,Ja(t)&&Za(e)}function Xa(e,t,n){return n((function(){Ja(t)&&Za(e)}))}function Ja(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!$n(e,n)}catch(r){return!0}}function Za(e){var t=_r(e,2);null!==t&&Lc(t,e,2)}function ei(e){var t=za();if("function"===typeof e){var n=e;if(e=n(),Ca){fe(!0);try{n()}finally{fe(!1)}}}return t.memoizedState=t.baseState=e,t.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:e},t}function ti(e,t,n,r){return e.baseState=n,Va(e,xa,"function"===typeof r?r:Wa)}function ni(e,t,n,r,o){if(Ui(e))throw Error(i(485));if(null!==(e=t.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==R.T?n(!0):a.isTransition=!1,r(a),null===(n=t.pending)?(a.next=t.pending=a,ri(t,a)):(a.next=n.next,t.pending=n.next=a)}}function ri(e,t){var n=t.action,r=t.payload,o=e.state;if(t.isTransition){var a=R.T,i={};R.T=i;try{var s=n(o,r),l=R.S;null!==l&&l(i,s),oi(e,t,s)}catch(c){ii(e,t,c)}finally{R.T=a}}else try{oi(e,t,a=n(o,r))}catch(u){ii(e,t,u)}}function oi(e,t,n){null!==n&&"object"===typeof n&&"function"===typeof n.then?n.then((function(n){ai(e,t,n)}),(function(n){return ii(e,t,n)})):ai(e,t,n)}function ai(e,t,n){t.status="fulfilled",t.value=n,si(t),e.state=n,null!==(t=e.pending)&&((n=t.next)===t?e.pending=null:(n=n.next,t.next=n,ri(e,n)))}function ii(e,t,n){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do{t.status="rejected",t.reason=n,si(t),t=t.next}while(t!==r)}e.action=null}function si(e){e=e.listeners;for(var t=0;t<e.length;t++)(0,e[t])()}function li(e,t){return t}function ci(e,t){if(ao){var n=rc.formState;if(null!==n){e:{var r=wa;if(ao){if(oo){t:{for(var o=oo,a=so;8!==o.nodeType;){if(!a){o=null;break t}if(null===(o=gd(o.nextSibling))){o=null;break t}}o="F!"===(a=o.data)||"F"===a?o:null}if(o){oo=gd(o.nextSibling),r="F!"===o.data;break e}}co(r)}r=!1}r&&(t=n[0])}}return(n=za()).memoizedState=n.baseState=t,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:t},n.queue=r,n=zi.bind(null,wa,r),r.dispatch=n,r=ei(!1),a=Hi.bind(null,wa,!1,r.queue),o={state:t,dispatch:null,action:e,pending:null},(r=za()).queue=o,n=ni.bind(null,wa,o,a,n),o.dispatch=n,r.memoizedState=e,[t,n,!1]}function ui(e){return di(Ba(),xa,e)}function di(e,t,n){if(t=Va(e,t,li)[0],e=qa(Wa)[0],"object"===typeof t&&null!==t&&"function"===typeof t.then)try{var r=Ha(t)}catch(i){if(i===Vo)throw Ko;throw i}else r=t;var o=(t=Ba()).queue,a=o.dispatch;return n!==t.memoizedState&&(wa.flags|=2048,hi(9,{destroy:void 0,resource:void 0},fi.bind(null,o,n),null)),[r,a,e]}function fi(e,t){e.action=t}function pi(e){var t=Ba(),n=xa;if(null!==n)return di(t,n,e);Ba(),t=t.memoizedState;var r=(n=Ba()).queue.dispatch;return n.memoizedState=e,[t,r,!1]}function hi(e,t,n,r){return e={tag:e,create:n,deps:r,inst:t,next:null},null===(t=wa.updateQueue)&&(t={lastEffect:null,events:null,stores:null,memoCache:null},wa.updateQueue=t),null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function mi(){return Ba().memoizedState}function vi(e,t,n,r){var o=za();r=void 0===r?null:r,wa.flags|=e,o.memoizedState=hi(1|t,{destroy:void 0,resource:void 0},n,r)}function gi(e,t,n,r){var o=Ba();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==xa&&null!==r&&_a(r,xa.memoizedState.deps)?o.memoizedState=hi(t,a,n,r):(wa.flags|=e,o.memoizedState=hi(1|t,a,n,r))}function yi(e,t){vi(8390656,8,e,t)}function bi(e,t){gi(2048,8,e,t)}function wi(e,t){return gi(4,2,e,t)}function xi(e,t){return gi(4,4,e,t)}function ki(e,t){if("function"===typeof t){e=e();var n=t(e);return function(){"function"===typeof n?n():t(null)}}if(null!==t&&void 0!==t)return e=e(),t.current=e,function(){t.current=null}}function Si(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,gi(4,4,ki.bind(null,t,e),n)}function Ei(){}function Ci(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;return null!==t&&_a(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ni(e,t){var n=Ba();t=void 0===t?null:t;var r=n.memoizedState;if(null!==t&&_a(t,r[1]))return r[0];if(r=e(),Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r}function ji(e,t,n){return void 0===n||0!==(1073741824&ba)?e.memoizedState=t:(e.memoizedState=n,e=Ac(),wa.lanes|=e,pc|=e,n)}function Di(e,t,n,r){return $n(n,t)?n:null!==ha.current?(e=ji(e,n,r),$n(e,t)||(js=!0),e):0===(42&ba)?(js=!0,e.memoizedState=n):(e=Ac(),wa.lanes|=e,pc|=e,t)}function Pi(e,t,n,r,o){var a=A.p;A.p=0!==a&&8>a?a:8;var i=R.T,s={};R.T=s,Hi(e,!1,t,n);try{var l=o(),c=R.S;if(null!==c&&c(s,l),null!==l&&"object"===typeof l&&"function"===typeof l.then)Bi(e,t,function(e,t){var n=[],r={status:"pending",value:null,reason:null,then:function(e){n.push(e)}};return e.then((function(){r.status="fulfilled",r.value=t;for(var e=0;e<n.length;e++)(0,n[e])(t)}),(function(e){for(r.status="rejected",r.reason=e,e=0;e<n.length;e++)(0,n[e])(void 0)})),r}(l,r),Rc());else Bi(e,t,r,Rc())}catch(u){Bi(e,t,{then:function(){},status:"rejected",reason:u},Rc())}finally{A.p=a,R.T=i}}function Ti(){}function _i(e,t,n,r){if(5!==e.tag)throw Error(i(476));var o=Oi(e).queue;Pi(e,o,t,L,null===n?Ti:function(){return Mi(e),n(r)})}function Oi(e){var t=e.memoizedState;if(null!==t)return t;var n={};return(t={memoizedState:L,baseState:L,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:L},next:null}).next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Wa,lastRenderedState:n},next:null},e.memoizedState=t,null!==(e=e.alternate)&&(e.memoizedState=t),t}function Mi(e){Bi(e,Oi(e).next.queue,{},Rc())}function Ri(){return jo(Kd)}function Ai(){return Ba().memoizedState}function Li(){return Ba().memoizedState}function Ii(e){for(var t=e.return;null!==t;){switch(t.tag){case 24:case 3:var n=Rc(),r=ia(t,e=aa(n),n);return null!==r&&(Lc(r,t,n),sa(r,t,n)),t={cache:Ro()},void(e.payload=t)}t=t.return}}function Fi(e,t,n){var r=Rc();n={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null},Ui(e)?Yi(t,n):null!==(n=Tr(e,t,n,r))&&(Lc(n,e,r),Wi(n,t,r))}function zi(e,t,n){Bi(e,t,n,Rc())}function Bi(e,t,n,r){var o={lane:r,revertLane:0,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ui(e))Yi(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,$n(s,i))return Pr(e,t,o,0),null===rc&&Dr(),!1}catch(l){}if(null!==(n=Tr(e,t,o,r)))return Lc(n,e,r),Wi(n,t,r),!0}return!1}function Hi(e,t,n,r){if(r={lane:2,revertLane:Pu(),action:r,hasEagerState:!1,eagerState:null,next:null},Ui(e)){if(t)throw Error(i(479))}else null!==(t=Tr(e,n,r,2))&&Lc(t,e,2)}function Ui(e){var t=e.alternate;return e===wa||null!==t&&t===wa}function Yi(e,t){Ea=Sa=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Wi(e,t,n){if(0!==(4194048&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,je(e,n)}}var qi={readContext:jo,use:Ua,useCallback:Ta,useContext:Ta,useEffect:Ta,useImperativeHandle:Ta,useLayoutEffect:Ta,useInsertionEffect:Ta,useMemo:Ta,useReducer:Ta,useRef:Ta,useState:Ta,useDebugValue:Ta,useDeferredValue:Ta,useTransition:Ta,useSyncExternalStore:Ta,useId:Ta,useHostTransitionStatus:Ta,useFormState:Ta,useActionState:Ta,useOptimistic:Ta,useMemoCache:Ta,useCacheRefresh:Ta},Vi={readContext:jo,use:Ua,useCallback:function(e,t){return za().memoizedState=[e,void 0===t?null:t],e},useContext:jo,useEffect:yi,useImperativeHandle:function(e,t,n){n=null!==n&&void 0!==n?n.concat([e]):null,vi(4194308,4,ki.bind(null,t,e),n)},useLayoutEffect:function(e,t){return vi(4194308,4,e,t)},useInsertionEffect:function(e,t){vi(4,2,e,t)},useMemo:function(e,t){var n=za();t=void 0===t?null:t;var r=e();if(Ca){fe(!0);try{e()}finally{fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=za();if(void 0!==n){var o=n(t);if(Ca){fe(!0);try{n(t)}finally{fe(!1)}}}else o=t;return r.memoizedState=r.baseState=o,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},r.queue=e,e=e.dispatch=Fi.bind(null,wa,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},za().memoizedState=e},useState:function(e){var t=(e=ei(e)).queue,n=zi.bind(null,wa,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ei,useDeferredValue:function(e,t){return ji(za(),e,t)},useTransition:function(){var e=ei(!1);return e=Pi.bind(null,wa,e.queue,!0,!1),za().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=wa,o=za();if(ao){if(void 0===n)throw Error(i(407));n=n()}else{if(n=t(),null===rc)throw Error(i(349));0!==(124&ac)||$a(r,t,n)}o.memoizedState=n;var a={value:n,getSnapshot:t};return o.queue=a,yi(Xa.bind(null,r,a,e),[e]),r.flags|=2048,hi(9,{destroy:void 0,resource:void 0},Ga.bind(null,r,a,n,t),null),n},useId:function(){var e=za(),t=rc.identifierPrefix;if(ao){var n=Jr;t="\xab"+t+"R"+(n=(Xr&~(1<<32-pe(Xr)-1)).toString(32)+n),0<(n=Na++)&&(t+="H"+n.toString(32)),t+="\xbb"}else t="\xab"+t+"r"+(n=Pa++).toString(32)+"\xbb";return e.memoizedState=t},useHostTransitionStatus:Ri,useFormState:ci,useActionState:ci,useOptimistic:function(e){var t=za();t.memoizedState=t.baseState=e;var n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return t.queue=n,t=Hi.bind(null,wa,!0,n),n.dispatch=t,[e,t]},useMemoCache:Ya,useCacheRefresh:function(){return za().memoizedState=Ii.bind(null,wa)}},Qi={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:qa,useRef:mi,useState:function(){return qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){return Di(Ba(),xa.memoizedState,e,t)},useTransition:function(){var e=qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:ui,useActionState:ui,useOptimistic:function(e,t){return ti(Ba(),0,e,t)},useMemoCache:Ya,useCacheRefresh:Li},Ki={readContext:jo,use:Ua,useCallback:Ci,useContext:jo,useEffect:bi,useImperativeHandle:Si,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ni,useReducer:Qa,useRef:mi,useState:function(){return Qa(Wa)},useDebugValue:Ei,useDeferredValue:function(e,t){var n=Ba();return null===xa?ji(n,e,t):Di(n,xa.memoizedState,e,t)},useTransition:function(){var e=Qa(Wa)[0],t=Ba().memoizedState;return["boolean"===typeof e?e:Ha(e),t]},useSyncExternalStore:Ka,useId:Ai,useHostTransitionStatus:Ri,useFormState:pi,useActionState:pi,useOptimistic:function(e,t){var n=Ba();return null!==xa?ti(n,0,e,t):(n.baseState=e,[e,n.queue.dispatch])},useMemoCache:Ya,useCacheRefresh:Li},$i=null,Gi=0;function Xi(e){var t=Gi;return Gi+=1,null===$i&&($i=[]),Jo($i,e,t)}function Ji(e,t){t=t.props.ref,e.ref=void 0!==t?t:null}function Zi(e,t){if(t.$$typeof===p)throw Error(i(525));throw e=Object.prototype.toString.call(t),Error(i(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function es(e){return(0,e._init)(e._payload)}function ts(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e){for(var t=new Map;null!==e;)null!==e.key?t.set(e.key,e):t.set(e.index,e),e=e.sibling;return t}function o(e,t){return(e=Fr(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=67108866,n):r:(t.flags|=67108866,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=67108866),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Ur(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===v?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"===typeof a&&null!==a&&a.$$typeof===N&&es(a)===t.type)?(Ji(t=o(t,n.props),n),t.return=e,t):(Ji(t=Br(n.type,n.key,n.props,null,e.mode,r),n),t.return=e,t)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yr(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Hr(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"===typeof t&&""!==t||"number"===typeof t||"bigint"===typeof t)return(t=Ur(""+t,e.mode,n)).return=e,t;if("object"===typeof t&&null!==t){switch(t.$$typeof){case h:return Ji(n=Br(t.type,t.key,t.props,null,e.mode,n),t),n.return=e,n;case m:return(t=Yr(t,e.mode,n)).return=e,t;case N:return f(e,t=(0,t._init)(t._payload),n)}if(M(t)||T(t))return(t=Hr(t,e.mode,n,null)).return=e,t;if("function"===typeof t.then)return f(e,Xi(t),n);if(t.$$typeof===x)return f(e,Do(e,t),n);Zi(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"===typeof n&&""!==n||"number"===typeof n||"bigint"===typeof n)return null!==o?null:l(e,t,""+n,r);if("object"===typeof n&&null!==n){switch(n.$$typeof){case h:return n.key===o?c(e,t,n,r):null;case m:return n.key===o?u(e,t,n,r):null;case N:return p(e,t,n=(o=n._init)(n._payload),r)}if(M(n)||T(n))return null!==o?null:d(e,t,n,r,null);if("function"===typeof n.then)return p(e,t,Xi(n),r);if(n.$$typeof===x)return p(e,t,Do(e,n),r);Zi(e,n)}return null}function g(e,t,n,r,o){if("string"===typeof r&&""!==r||"number"===typeof r||"bigint"===typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"===typeof r&&null!==r){switch(r.$$typeof){case h:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case m:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case N:return g(e,t,n,r=(0,r._init)(r._payload),o)}if(M(r)||T(r))return d(t,e=e.get(n)||null,r,o,null);if("function"===typeof r.then)return g(e,t,n,Xi(r),o);if(r.$$typeof===x)return g(e,t,n,Do(t,r),o);Zi(t,r)}return null}function y(l,c,u,d){if("object"===typeof u&&null!==u&&u.type===v&&null===u.key&&(u=u.props.children),"object"===typeof u&&null!==u){switch(u.$$typeof){case h:e:{for(var b=u.key;null!==c;){if(c.key===b){if((b=u.type)===v){if(7===c.tag){n(l,c.sibling),(d=o(c,u.props.children)).return=l,l=d;break e}}else if(c.elementType===b||"object"===typeof b&&null!==b&&b.$$typeof===N&&es(b)===c.type){n(l,c.sibling),Ji(d=o(c,u.props),u),d.return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}u.type===v?((d=Hr(u.props.children,l.mode,d,u.key)).return=l,l=d):(Ji(d=Br(u.type,u.key,u.props,null,l.mode,d),u),d.return=l,l=d)}return s(l);case m:e:{for(b=u.key;null!==c;){if(c.key===b){if(4===c.tag&&c.stateNode.containerInfo===u.containerInfo&&c.stateNode.implementation===u.implementation){n(l,c.sibling),(d=o(c,u.children||[])).return=l,l=d;break e}n(l,c);break}t(l,c),c=c.sibling}(d=Yr(u,l.mode,d)).return=l,l=d}return s(l);case N:return y(l,c,u=(b=u._init)(u._payload),d)}if(M(u))return function(o,i,s,l){for(var c=null,u=null,d=i,h=i=0,m=null;null!==d&&h<s.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var v=p(o,d,s[h],l);if(null===v){null===d&&(d=m);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,h),null===u?c=v:u.sibling=v,u=v,d=m}if(h===s.length)return n(o,d),ao&&Zr(o,h),c;if(null===d){for(;h<s.length;h++)null!==(d=f(o,s[h],l))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return ao&&Zr(o,h),c}for(d=r(d);h<s.length;h++)null!==(m=g(d,o,h,s[h],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(o,e)})),ao&&Zr(o,h),c}(l,c,u,d);if(T(u)){if("function"!==typeof(b=T(u)))throw Error(i(150));return function(o,s,l,c){if(null==l)throw Error(i(151));for(var u=null,d=null,h=s,m=s=0,v=null,y=l.next();null!==h&&!y.done;m++,y=l.next()){h.index>m?(v=h,h=null):v=h.sibling;var b=p(o,h,y.value,c);if(null===b){null===h&&(h=v);break}e&&h&&null===b.alternate&&t(o,h),s=a(b,s,m),null===d?u=b:d.sibling=b,d=b,h=v}if(y.done)return n(o,h),ao&&Zr(o,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=f(o,y.value,c))&&(s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Zr(o,m),u}for(h=r(h);!y.done;m++,y=l.next())null!==(y=g(h,o,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=a(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),ao&&Zr(o,m),u}(l,c,u=b.call(u),d)}if("function"===typeof u.then)return y(l,c,Xi(u),d);if(u.$$typeof===x)return y(l,c,Do(l,u),d);Zi(l,u)}return"string"===typeof u&&""!==u||"number"===typeof u||"bigint"===typeof u?(u=""+u,null!==c&&6===c.tag?(n(l,c.sibling),(d=o(c,u)).return=l,l=d):(n(l,c),(d=Ur(u,l.mode,d)).return=l,l=d),s(l)):n(l,c)}return function(e,t,n,r){try{Gi=0;var o=y(e,t,n,r);return $i=null,o}catch(i){if(i===Vo||i===Ko)throw i;var a=Lr(29,i,null,e.mode);return a.lanes=r,a.return=e,a}}}var ns=ts(!0),rs=ts(!1),os=z(null),as=null;function is(e){var t=e.alternate;H(us,1&us.current),H(os,e),null===as&&(null===t||null!==ha.current||null!==t.memoizedState)&&(as=e)}function ss(e){if(22===e.tag){if(H(us,us.current),H(os,e),null===as){var t=e.alternate;null!==t&&null!==t.memoizedState&&(as=e)}}else ls()}function ls(){H(us,us.current),H(os,os.current)}function cs(e){B(os),as===e&&(as=null),B(us)}var us=z(0);function ds(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||vd(n)))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!==(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}function fs(e,t,n,r){n=null===(n=n(r,t=e.memoizedState))||void 0===n?t:f({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ps={enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rc(),o=aa(r);o.tag=1,o.payload=t,void 0!==n&&null!==n&&(o.callback=n),null!==(t=ia(e,o,r))&&(Lc(t,e,r),sa(t,e,r))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rc(),r=aa(n);r.tag=2,void 0!==t&&null!==t&&(r.callback=t),null!==(t=ia(e,r,n))&&(Lc(t,e,n),sa(t,e,n))}};function hs(e,t,n,r,o,a,i){return"function"===typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!Gn(n,r)||!Gn(o,a))}function ms(e,t,n,r){e=t.state,"function"===typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"===typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ps.enqueueReplaceState(t,t.state,null)}function vs(e,t){var n=t;if("ref"in t)for(var r in n={},t)"ref"!==r&&(n[r]=t[r]);if(e=e.defaultProps)for(var o in n===t&&(n=f({},n)),e)void 0===n[o]&&(n[o]=e[o]);return n}var gs="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function ys(e){gs(e)}function bs(e){console.error(e)}function ws(e){gs(e)}function xs(e,t){try{(0,e.onUncaughtError)(t.value,{componentStack:t.stack})}catch(n){setTimeout((function(){throw n}))}}function ks(e,t,n){try{(0,e.onCaughtError)(n.value,{componentStack:n.stack,errorBoundary:1===t.tag?t.stateNode:null})}catch(r){setTimeout((function(){throw r}))}}function Ss(e,t,n){return(n=aa(n)).tag=3,n.payload={element:null},n.callback=function(){xs(e,t)},n}function Es(e){return(e=aa(e)).tag=3,e}function Cs(e,t,n,r){var o=n.type.getDerivedStateFromError;if("function"===typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ks(t,n,r)}}var i=n.stateNode;null!==i&&"function"===typeof i.componentDidCatch&&(e.callback=function(){ks(t,n,r),"function"!==typeof o&&(null===Ec?Ec=new Set([this]):Ec.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:""})})}var Ns=Error(i(461)),js=!1;function Ds(e,t,n,r){t.child=null===e?rs(t,null,n,r):ns(t,e.child,n,r)}function Ps(e,t,n,r,o){n=n.render;var a=t.ref;if("ref"in r){var i={};for(var s in r)"ref"!==s&&(i[s]=r[s])}else i=r;return No(t),r=Oa(e,t,n,i,a,o),s=La(),null===e||js?(ao&&s&&to(t),t.flags|=1,Ds(e,t,r,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ts(e,t,n,r,o){if(null===e){var a=n.type;return"function"!==typeof a||Ir(a)||void 0!==a.defaultProps||null!==n.compare?((e=Br(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_s(e,t,a,r,o))}if(a=e.child,!Gs(e,o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:Gn)(i,r)&&e.ref===t.ref)return $s(e,t,o)}return t.flags|=1,(e=Fr(a,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(Gn(a,r)&&e.ref===t.ref){if(js=!1,t.pendingProps=r=a,!Gs(e,o))return t.lanes=e.lanes,$s(e,t,o);0!==(131072&e.flags)&&(js=!0)}}return As(e,t,n,r,o)}function Os(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode){if(0!==(128&t.flags)){if(r=null!==a?a.baseLanes|n:n,null!==e){for(o=t.child=e.child,a=0;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;t.childLanes=a&~r}else t.childLanes=0,t.child=null;return Ms(e,t,r,n)}if(0===(536870912&n))return t.lanes=t.childLanes=536870912,Ms(e,t,null!==a?a.baseLanes|n:n,n);t.memoizedState={baseLanes:0,cachePool:null},null!==e&&Wo(0,null!==a?a.cachePool:null),null!==a?va(t,a):ga(),ss(t)}else null!==a?(Wo(0,a.cachePool),va(t,a),ls(),t.memoizedState=null):(null!==e&&Wo(0,null),ga(),ls());return Ds(e,t,o,n),t.child}function Ms(e,t,n,r){var o=Yo();return o=null===o?null:{parent:Mo._currentValue,pool:o},t.memoizedState={baseLanes:n,cachePool:o},null!==e&&Wo(0,null),ga(),ss(t),null!==e&&Eo(e,t,r,!0),null}function Rs(e,t){var n=t.ref;if(null===n)null!==e&&null!==e.ref&&(t.flags|=4194816);else{if("function"!==typeof n&&"object"!==typeof n)throw Error(i(284));null!==e&&e.ref===n||(t.flags|=4194816)}}function As(e,t,n,r,o){return No(t),n=Oa(e,t,n,r,void 0,o),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,o),t.child):(Ia(e,t,o),$s(e,t,o))}function Ls(e,t,n,r,o,a){return No(t),t.updateQueue=null,n=Ra(t,r,n,o),Ma(e),r=La(),null===e||js?(ao&&r&&to(t),t.flags|=1,Ds(e,t,n,a),t.child):(Ia(e,t,a),$s(e,t,a))}function Is(e,t,n,r,o){if(No(t),null===t.stateNode){var a=Rr,i=n.contextType;"object"===typeof i&&null!==i&&(a=jo(i)),a=new n(r,a),t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,a.updater=ps,t.stateNode=a,a._reactInternals=t,(a=t.stateNode).props=r,a.state=t.memoizedState,a.refs={},ra(t),i=n.contextType,a.context="object"===typeof i&&null!==i?jo(i):Rr,a.state=t.memoizedState,"function"===typeof(i=n.getDerivedStateFromProps)&&(fs(t,n,i,r),a.state=t.memoizedState),"function"===typeof n.getDerivedStateFromProps||"function"===typeof a.getSnapshotBeforeUpdate||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||(i=a.state,"function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ps.enqueueReplaceState(a,a.state,null),da(t,r,a,o),ua(),a.state=t.memoizedState),"function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!0}else if(null===e){a=t.stateNode;var s=t.memoizedProps,l=vs(n,s);a.props=l;var c=a.context,u=n.contextType;i=Rr,"object"===typeof u&&null!==u&&(i=jo(u));var d=n.getDerivedStateFromProps;u="function"===typeof d||"function"===typeof a.getSnapshotBeforeUpdate,s=t.pendingProps!==s,u||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(s||c!==i)&&ms(t,a,r,i),na=!1;var f=t.memoizedState;a.state=f,da(t,r,a,o),ua(),c=t.memoizedState,s||f!==c||na?("function"===typeof d&&(fs(t,n,d,r),c=t.memoizedState),(l=na||hs(t,n,l,r,f,c,i))?(u||"function"!==typeof a.UNSAFE_componentWillMount&&"function"!==typeof a.componentWillMount||("function"===typeof a.componentWillMount&&a.componentWillMount(),"function"===typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"===typeof a.componentDidMount&&(t.flags|=4194308)):("function"===typeof a.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=c),a.props=r,a.state=c,a.context=i,r=l):("function"===typeof a.componentDidMount&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,oa(e,t),u=vs(n,i=t.memoizedProps),a.props=u,d=t.pendingProps,f=a.context,c=n.contextType,l=Rr,"object"===typeof c&&null!==c&&(l=jo(c)),(c="function"===typeof(s=n.getDerivedStateFromProps)||"function"===typeof a.getSnapshotBeforeUpdate)||"function"!==typeof a.UNSAFE_componentWillReceiveProps&&"function"!==typeof a.componentWillReceiveProps||(i!==d||f!==l)&&ms(t,a,r,l),na=!1,f=t.memoizedState,a.state=f,da(t,r,a,o),ua();var p=t.memoizedState;i!==d||f!==p||na||null!==e&&null!==e.dependencies&&Co(e.dependencies)?("function"===typeof s&&(fs(t,n,s,r),p=t.memoizedState),(u=na||hs(t,n,u,r,f,p,l)||null!==e&&null!==e.dependencies&&Co(e.dependencies))?(c||"function"!==typeof a.UNSAFE_componentWillUpdate&&"function"!==typeof a.componentWillUpdate||("function"===typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,l),"function"===typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,l)),"function"===typeof a.componentDidUpdate&&(t.flags|=4),"function"===typeof a.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=l,r=u):("function"!==typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!==typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Rs(e,t),r=0!==(128&t.flags),a||r?(a=t.stateNode,n=r&&"function"!==typeof n.getDerivedStateFromError?null:a.render(),t.flags|=1,null!==e&&r?(t.child=ns(t,e.child,null,o),t.child=ns(t,null,n,o)):Ds(e,t,n,o),t.memoizedState=a.state,e=t.child):e=$s(e,t,o),e}function Fs(e,t,n,r){return ho(),t.flags|=256,Ds(e,t,n,r),t.child}var zs={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Bs(e){return{baseLanes:e,cachePool:qo()}}function Hs(e,t,n){return e=null!==e?e.childLanes&~n:0,t&&(e|=vc),e}function Us(e,t,n){var r,o=t.pendingProps,a=!1,s=0!==(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!==(2&us.current)),r&&(a=!0,t.flags&=-129),r=0!==(32&t.flags),t.flags&=-33,null===e){if(ao){if(a?is(t):ls(),ao){var l,c=oo;if(l=c){e:{for(l=c,c=so;8!==l.nodeType;){if(!c){c=null;break e}if(null===(l=gd(l.nextSibling))){c=null;break e}}c=l}null!==c?(t.memoizedState={dehydrated:c,treeContext:null!==Gr?{id:Xr,overflow:Jr}:null,retryLane:536870912,hydrationErrors:null},(l=Lr(18,null,null,0)).stateNode=c,l.return=t,t.child=l,ro=t,oo=null,l=!0):l=!1}l||co(t)}if(null!==(c=t.memoizedState)&&null!==(c=c.dehydrated))return vd(c)?t.lanes=32:t.lanes=536870912,null;cs(t)}return c=o.children,o=o.fallback,a?(ls(),c=Ws({mode:"hidden",children:c},a=t.mode),o=Hr(o,a,n,null),c.return=t,o.return=t,c.sibling=o,t.child=c,(a=t.child).memoizedState=Bs(n),a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),Ys(t,c))}if(null!==(l=e.memoizedState)&&null!==(c=l.dehydrated)){if(s)256&t.flags?(is(t),t.flags&=-257,t=qs(e,t,n)):null!==t.memoizedState?(ls(),t.child=e.child,t.flags|=128,t=null):(ls(),a=o.fallback,c=t.mode,o=Ws({mode:"visible",children:o.children},c),(a=Hr(a,c,n,null)).flags|=2,o.return=t,a.return=t,o.sibling=a,t.child=o,ns(t,e.child,null,n),(o=t.child).memoizedState=Bs(n),o.childLanes=Hs(e,r,n),t.memoizedState=zs,t=a);else if(is(t),vd(c)){if(r=c.nextSibling&&c.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(i(419))).stack="",o.digest=r,vo({value:o,source:null,stack:null}),t=qs(e,t,n)}else if(js||Eo(e,t,n,!1),r=0!==(n&e.childLanes),js||r){if(null!==(r=rc)&&(0!==(o=0!==((o=0!==(42&(o=n&-n))?1:De(o))&(r.suspendedLanes|n))?0:o)&&o!==l.retryLane))throw l.retryLane=o,_r(e,o),Lc(r,e,o),Ns;"$?"===c.data||Qc(),t=qs(e,t,n)}else"$?"===c.data?(t.flags|=192,t.child=e.child,t=null):(e=l.treeContext,oo=gd(c.nextSibling),ro=t,ao=!0,io=null,so=!1,null!==e&&(Kr[$r++]=Xr,Kr[$r++]=Jr,Kr[$r++]=Gr,Xr=e.id,Jr=e.overflow,Gr=t),(t=Ys(t,o.children)).flags|=4096);return t}return a?(ls(),a=o.fallback,c=t.mode,u=(l=e.child).sibling,(o=Fr(l,{mode:"hidden",children:o.children})).subtreeFlags=65011712&l.subtreeFlags,null!==u?a=Fr(u,a):(a=Hr(a,c,n,null)).flags|=2,a.return=t,o.return=t,o.sibling=a,t.child=o,o=a,a=t.child,null===(c=e.child.memoizedState)?c=Bs(n):(null!==(l=c.cachePool)?(u=Mo._currentValue,l=l.parent!==u?{parent:u,pool:u}:l):l=qo(),c={baseLanes:c.baseLanes|n,cachePool:l}),a.memoizedState=c,a.childLanes=Hs(e,r,n),t.memoizedState=zs,o):(is(t),e=(n=e.child).sibling,(n=Fr(n,{mode:"visible",children:o.children})).return=t,n.sibling=null,null!==e&&(null===(r=t.deletions)?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n)}function Ys(e,t){return(t=Ws({mode:"visible",children:t},e.mode)).return=e,e.child=t}function Ws(e,t){return(e=Lr(22,e,null,t)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function qs(e,t,n){return ns(t,e.child,null,n),(e=Ys(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),ko(e.return,t,n)}function Qs(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ks(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Ds(e,t,r.children,n),0!==(2&(r=us.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!==(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vs(e,n,t);else if(19===e.tag)Vs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}switch(H(us,r),o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ds(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Qs(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ds(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Qs(t,!0,n,null,a);break;case"together":Qs(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function $s(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),pc|=t.lanes,0===(n&t.childLanes)){if(null===e)return null;if(Eo(e,t,n,!1),0===(n&t.childLanes))return null}if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Fr(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Fr(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Gs(e,t){return 0!==(e.lanes&t)||!(null===(e=e.dependencies)||!Co(e))}function Xs(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps)js=!0;else{if(!Gs(e,n)&&0===(128&t.flags))return js=!1,function(e,t,n){switch(t.tag){case 3:V(t,t.stateNode.containerInfo),wo(0,Mo,e.memoizedState.cache),ho();break;case 27:case 5:K(t);break;case 4:V(t,t.stateNode.containerInfo);break;case 10:wo(0,t.type,t.memoizedProps.value);break;case 13:var r=t.memoizedState;if(null!==r)return null!==r.dehydrated?(is(t),t.flags|=128,null):0!==(n&t.child.childLanes)?Us(e,t,n):(is(t),null!==(e=$s(e,t,n))?e.sibling:null);is(t);break;case 19:var o=0!==(128&e.flags);if((r=0!==(n&t.childLanes))||(Eo(e,t,n,!1),r=0!==(n&t.childLanes)),o){if(r)return Ks(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),H(us,us.current),r)break;return null;case 22:case 23:return t.lanes=0,Os(e,t,n);case 24:wo(0,Mo,e.memoizedState.cache)}return $s(e,t,n)}(e,t,n);js=0!==(131072&e.flags)}else js=!1,ao&&0!==(1048576&t.flags)&&eo(t,Qr,t.index);switch(t.lanes=0,t.tag){case 16:e:{e=t.pendingProps;var r=t.elementType,o=r._init;if(r=o(r._payload),t.type=r,"function"!==typeof r){if(void 0!==r&&null!==r){if((o=r.$$typeof)===k){t.tag=11,t=Ps(null,t,r,e,n);break e}if(o===C){t.tag=14,t=Ts(null,t,r,e,n);break e}}throw t=O(r)||r,Error(i(306,t,""))}Ir(r)?(e=vs(r,e),t.tag=1,t=Is(null,t,r,e,n)):(t.tag=0,t=As(null,t,r,e,n))}return t;case 0:return As(e,t,t.type,t.pendingProps,n);case 1:return Is(e,t,r=t.type,o=vs(r,t.pendingProps),n);case 3:e:{if(V(t,t.stateNode.containerInfo),null===e)throw Error(i(387));r=t.pendingProps;var a=t.memoizedState;o=a.element,oa(e,t),da(t,r,null,n);var s=t.memoizedState;if(r=s.cache,wo(0,Mo,r),r!==a.cache&&So(t,[Mo],n,!0),ua(),r=s.element,a.isDehydrated){if(a={element:r,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=a,t.memoizedState=a,256&t.flags){t=Fs(e,t,r,n);break e}if(r!==o){vo(o=Er(Error(i(424)),t)),t=Fs(e,t,r,n);break e}if(9===(e=t.stateNode.containerInfo).nodeType)e=e.body;else e="HTML"===e.nodeName?e.ownerDocument.body:e;for(oo=gd(e.firstChild),ro=t,ao=!0,io=null,so=!0,n=rs(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ho(),r===o){t=$s(e,t,n);break e}Ds(e,t,r,n)}t=t.child}return t;case 26:return Rs(e,t),null===e?(n=Dd(t.type,null,t.pendingProps,null))?t.memoizedState=n:ao||(n=t.type,e=t.pendingProps,(r=rd(W.current).createElement(n))[Oe]=t,r[Me]=e,ed(r,n,e),qe(r),t.stateNode=r):t.memoizedState=Dd(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:return K(t),null===e&&ao&&(r=t.stateNode=wd(t.type,t.pendingProps,W.current),ro=t,so=!0,o=oo,pd(t.type)?(yd=o,oo=gd(r.firstChild)):oo=o),Ds(e,t,t.pendingProps.children,n),Rs(e,t),null===e&&(t.flags|=4194304),t.child;case 5:return null===e&&ao&&((o=r=oo)&&(null!==(r=function(e,t,n,r){for(;1===e.nodeType;){var o=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&("INPUT"!==e.nodeName||"hidden"!==e.type))break}else if(r){if(!e[ze])switch(t){case"meta":if(!e.hasAttribute("itemprop"))break;return e;case"link":if("stylesheet"===(a=e.getAttribute("rel"))&&e.hasAttribute("data-precedence"))break;if(a!==o.rel||e.getAttribute("href")!==(null==o.href||""===o.href?null:o.href)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin)||e.getAttribute("title")!==(null==o.title?null:o.title))break;return e;case"style":if(e.hasAttribute("data-precedence"))break;return e;case"script":if(((a=e.getAttribute("src"))!==(null==o.src?null:o.src)||e.getAttribute("type")!==(null==o.type?null:o.type)||e.getAttribute("crossorigin")!==(null==o.crossOrigin?null:o.crossOrigin))&&a&&e.hasAttribute("async")&&!e.hasAttribute("itemprop"))break;return e;default:return e}}else{if("input"!==t||"hidden"!==e.type)return e;var a=null==o.name?null:""+o.name;if("hidden"===o.type&&e.getAttribute("name")===a)return e}if(null===(e=gd(e.nextSibling)))break}return null}(r,t.type,t.pendingProps,so))?(t.stateNode=r,ro=t,oo=gd(r.firstChild),so=!1,o=!0):o=!1),o||co(t)),K(t),o=t.type,a=t.pendingProps,s=null!==e?e.memoizedProps:null,r=a.children,id(o,a)?r=null:null!==s&&id(o,s)&&(t.flags|=32),null!==t.memoizedState&&(o=Oa(e,t,Aa,null,null,n),Kd._currentValue=o),Rs(e,t),Ds(e,t,r,n),t.child;case 6:return null===e&&ao&&((e=n=oo)&&(null!==(n=function(e,t,n){if(""===t)return null;for(;3!==e.nodeType;){if((1!==e.nodeType||"INPUT"!==e.nodeName||"hidden"!==e.type)&&!n)return null;if(null===(e=gd(e.nextSibling)))return null}return e}(n,t.pendingProps,so))?(t.stateNode=n,ro=t,oo=null,e=!0):e=!1),e||co(t)),null;case 13:return Us(e,t,n);case 4:return V(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ns(t,null,r,n):Ds(e,t,r,n),t.child;case 11:return Ps(e,t,t.type,t.pendingProps,n);case 7:return Ds(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ds(e,t,t.pendingProps.children,n),t.child;case 10:return r=t.pendingProps,wo(0,t.type,r.value),Ds(e,t,r.children,n),t.child;case 9:return o=t.type._context,r=t.pendingProps.children,No(t),r=r(o=jo(o)),t.flags|=1,Ds(e,t,r,n),t.child;case 14:return Ts(e,t,t.type,t.pendingProps,n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 19:return Ks(e,t,n);case 31:return r=t.pendingProps,n=t.mode,r={mode:r.mode,children:r.children},null===e?((n=Ws(r,n)).ref=t.ref,t.child=n,n.return=t,t=n):((n=Fr(e.child,r)).ref=t.ref,t.child=n,n.return=t,t=n),t;case 22:return Os(e,t,n);case 24:return No(t),r=jo(Mo),null===e?(null===(o=Yo())&&(o=rc,a=Ro(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=n),o=a),t.memoizedState={parent:r,cache:o},ra(t),wo(0,Mo,o)):(0!==(e.lanes&n)&&(oa(e,t),da(t,null,null,n),ua()),o=e.memoizedState,a=t.memoizedState,o.parent!==r?(o={parent:r,cache:r},t.memoizedState=o,0===t.lanes&&(t.memoizedState=t.updateQueue.baseState=o),wo(0,Mo,r)):(r=a.cache,wo(0,Mo,r),r!==o.cache&&So(t,[Mo],n,!0))),Ds(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(i(156,t.tag))}function Js(e){e.flags|=4}function Zs(e,t){if("stylesheet"!==t.type||0!==(4&t.state.loading))e.flags&=-16777217;else if(e.flags|=16777216,!Hd(t)){if(null!==(t=os.current)&&((4194048&ac)===ac?null!==as:(62914560&ac)!==ac&&0===(536870912&ac)||t!==as))throw Zo=$o,Qo;e.flags|=8192}}function el(e,t){null!==t&&(e.flags|=4),16384&e.flags&&(t=22!==e.tag?Se():536870912,e.lanes|=t,gc|=t)}function tl(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function nl(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=65011712&o.subtreeFlags,r|=65011712&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function rl(e,t,n){var r=t.pendingProps;switch(no(t),t.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return nl(t),null;case 3:return n=t.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),t.memoizedState.cache!==r&&(t.flags|=2048),xo(Mo),Q(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),null!==e&&null!==e.child||(po(t)?Js(t):null===e||e.memoizedState.isDehydrated&&0===(256&t.flags)||(t.flags|=1024,mo())),nl(t),null;case 26:return n=t.memoizedState,null===e?(Js(t),null!==n?(nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217)):n?n!==e.memoizedState?(Js(t),nl(t),Zs(t,n)):(nl(t),t.flags&=-16777217):(e.memoizedProps!==r&&Js(t),nl(t),t.flags&=-16777217),null;case 27:$(t),n=W.current;var o=t.type;if(null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}e=U.current,po(t)?uo(t):(e=wd(o,r,n),t.stateNode=e,Js(t))}return nl(t),null;case 5:if($(t),n=t.type,null!==e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if(!r){if(null===t.stateNode)throw Error(i(166));return nl(t),null}if(e=U.current,po(t))uo(t);else{switch(o=rd(W.current),e){case 1:e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case 2:e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;default:switch(n){case"svg":e=o.createElementNS("http://www.w3.org/2000/svg",n);break;case"math":e=o.createElementNS("http://www.w3.org/1998/Math/MathML",n);break;case"script":(e=o.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild);break;case"select":e="string"===typeof r.is?o.createElement("select",{is:r.is}):o.createElement("select"),r.multiple?e.multiple=!0:r.size&&(e.size=r.size);break;default:e="string"===typeof r.is?o.createElement(n,{is:r.is}):o.createElement(n)}}e[Oe]=t,e[Me]=r;e:for(o=t.child;null!==o;){if(5===o.tag||6===o.tag)e.appendChild(o.stateNode);else if(4!==o.tag&&27!==o.tag&&null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break e;for(;null===o.sibling;){if(null===o.return||o.return===t)break e;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=e;e:switch(ed(e,n,r),n){case"button":case"input":case"select":case"textarea":e=!!r.autoFocus;break e;case"img":e=!0;break e;default:e=!1}e&&Js(t)}}return nl(t),t.flags&=-16777217,null;case 6:if(e&&null!=t.stateNode)e.memoizedProps!==r&&Js(t);else{if("string"!==typeof r&&null===t.stateNode)throw Error(i(166));if(e=W.current,po(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,null!==(o=ro))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[Oe]=t,(e=!!(e.nodeValue===n||null!==r&&!0===r.suppressHydrationWarning||Gu(e.nodeValue,n)))||co(t)}else(e=rd(e).createTextNode(r))[Oe]=t,t.stateNode=e}return nl(t),null;case 13:if(r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(i(318));if(!(o=null!==(o=t.memoizedState)?o.dehydrated:null))throw Error(i(317));o[Oe]=t}else ho(),0===(128&t.flags)&&(t.memoizedState=null),t.flags|=4;nl(t),o=!1}else o=mo(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o)return 256&t.flags?(cs(t),t):(cs(t),null)}if(cs(t),0!==(128&t.flags))return t.lanes=n,t;if(n=null!==r,e=null!==e&&null!==e.memoizedState,n){o=null,null!==(r=t.child).alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool);var a=null;null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)}return n!==e&&n&&(t.child.flags|=8192),el(t,t.updateQueue),nl(t),null;case 4:return Q(),null===e&&Bu(t.stateNode.containerInfo),nl(t),null;case 10:return xo(t.type),nl(t),null;case 19:if(B(us),null===(o=t.memoizedState))return nl(t),null;if(r=0!==(128&t.flags),null===(a=o.rendering))if(r)tl(o,!1);else{if(0!==fc||null!==e&&0!==(128&e.flags))for(e=t.child;null!==e;){if(null!==(a=ds(e))){for(t.flags|=128,tl(o,!1),e=a.updateQueue,t.updateQueue=e,el(t,e),t.subtreeFlags=0,e=n,n=t.child;null!==n;)zr(n,e),n=n.sibling;return H(us,1&us.current|2),t.child}e=e.sibling}null!==o.tail&&te()>kc&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ds(a))){if(t.flags|=128,r=!0,e=e.updateQueue,t.updateQueue=e,el(t,e),tl(o,!0),null===o.tail&&"hidden"===o.tailMode&&!a.alternate&&!ao)return nl(t),null}else 2*te()-o.renderingStartTime>kc&&536870912!==n&&(t.flags|=128,r=!0,tl(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(null!==(e=o.last)?e.sibling=a:t.child=a,o.last=a)}return null!==o.tail?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=te(),t.sibling=null,e=us.current,H(us,r?1&e|2:1&e),t):(nl(t),null);case 22:case 23:return cs(t),ya(),r=null!==t.memoizedState,null!==e?null!==e.memoizedState!==r&&(t.flags|=8192):r&&(t.flags|=8192),r?0!==(536870912&n)&&0===(128&t.flags)&&(nl(t),6&t.subtreeFlags&&(t.flags|=8192)):nl(t),null!==(n=t.updateQueue)&&el(t,n.retryQueue),n=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),r=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),null!==e&&B(Uo),null;case 24:return n=null,null!==e&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),xo(Mo),nl(t),null;case 25:case 30:return null}throw Error(i(156,t.tag))}function ol(e,t){switch(no(t),t.tag){case 1:return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return xo(Mo),Q(),0!==(65536&(e=t.flags))&&0===(128&e)?(t.flags=-65537&e|128,t):null;case 26:case 27:case 5:return $(t),null;case 13:if(cs(t),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(i(340));ho()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return B(us),null;case 4:return Q(),null;case 10:return xo(t.type),null;case 22:case 23:return cs(t),ya(),null!==e&&B(Uo),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 24:return xo(Mo),null;default:return null}}function al(e,t){switch(no(t),t.tag){case 3:xo(Mo),Q();break;case 26:case 27:case 5:$(t);break;case 4:Q();break;case 13:cs(t);break;case 19:B(us);break;case 10:xo(t.type);break;case 22:case 23:cs(t),ya(),null!==e&&B(Uo);break;case 24:xo(Mo)}}function il(e,t){try{var n=t.updateQueue,r=null!==n?n.lastEffect:null;if(null!==r){var o=r.next;n=o;do{if((n.tag&e)===e){r=void 0;var a=n.create,i=n.inst;r=a(),i.destroy=r}n=n.next}while(n!==o)}}catch(s){uu(t,t.return,s)}}function sl(e,t,n){try{var r=t.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,s=i.destroy;if(void 0!==s){i.destroy=void 0,o=t;var l=n,c=s;try{c()}catch(u){uu(o,l,u)}}}r=r.next}while(r!==a)}}catch(u){uu(t,t.return,u)}}function ll(e){var t=e.updateQueue;if(null!==t){var n=e.stateNode;try{pa(t,n)}catch(r){uu(e,e.return,r)}}}function cl(e,t,n){n.props=vs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(r){uu(e,t,r)}}function ul(e,t){try{var n=e.ref;if(null!==n){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}"function"===typeof n?e.refCleanup=n(r):n.current=r}}catch(o){uu(e,t,o)}}function dl(e,t){var n=e.ref,r=e.refCleanup;if(null!==n)if("function"===typeof r)try{r()}catch(o){uu(e,t,o)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if("function"===typeof n)try{n(null)}catch(a){uu(e,t,a)}else n.current=null}function fl(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{e:switch(t){case"button":case"input":case"select":case"textarea":n.autoFocus&&r.focus();break e;case"img":n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(o){uu(e,e.return,o)}}function pl(e,t,n){try{var r=e.stateNode;!function(e,t,n,r){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var o=null,a=null,s=null,l=null,c=null,u=null,d=null;for(h in n){var f=n[h];if(n.hasOwnProperty(h)&&null!=f)switch(h){case"checked":case"value":break;case"defaultValue":c=f;default:r.hasOwnProperty(h)||Ju(e,t,h,null,r,f)}}for(var p in r){var h=r[p];if(f=n[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case"type":a=h;break;case"name":o=h;break;case"checked":u=h;break;case"defaultChecked":d=h;break;case"value":s=h;break;case"defaultValue":l=h;break;case"children":case"dangerouslySetInnerHTML":if(null!=h)throw Error(i(137,t));break;default:h!==f&&Ju(e,t,p,h,r,f)}}return void vt(e,s,l,c,u,d,a,o);case"select":for(a in h=s=l=p=null,n)if(c=n[a],n.hasOwnProperty(a)&&null!=c)switch(a){case"value":break;case"multiple":h=c;default:r.hasOwnProperty(a)||Ju(e,t,a,null,r,c)}for(o in r)if(a=r[o],c=n[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case"value":p=a;break;case"defaultValue":l=a;break;case"multiple":s=a;default:a!==c&&Ju(e,t,o,a,r,c)}return t=l,n=s,r=h,void(null!=p?bt(e,!!n,p,!1):!!r!==!!n&&(null!=t?bt(e,!!n,t,!0):bt(e,!!n,n?[]:"",!1)));case"textarea":for(l in h=p=null,n)if(o=n[l],n.hasOwnProperty(l)&&null!=o&&!r.hasOwnProperty(l))switch(l){case"value":case"children":break;default:Ju(e,t,l,null,r,o)}for(s in r)if(o=r[s],a=n[s],r.hasOwnProperty(s)&&(null!=o||null!=a))switch(s){case"value":p=o;break;case"defaultValue":h=o;break;case"children":break;case"dangerouslySetInnerHTML":if(null!=o)throw Error(i(91));break;default:o!==a&&Ju(e,t,s,o,r,a)}return void wt(e,p,h);case"option":for(var m in n)if(p=n[m],n.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m))if("selected"===m)e.selected=!1;else Ju(e,t,m,null,r,p);for(c in r)if(p=r[c],h=n[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h))if("selected"===c)e.selected=p&&"function"!==typeof p&&"symbol"!==typeof p;else Ju(e,t,c,p,r,h);return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var v in n)p=n[v],n.hasOwnProperty(v)&&null!=p&&!r.hasOwnProperty(v)&&Ju(e,t,v,null,r,p);for(u in r)if(p=r[u],h=n[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case"children":case"dangerouslySetInnerHTML":if(null!=p)throw Error(i(137,t));break;default:Ju(e,t,u,p,r,h)}return;default:if(Nt(t)){for(var g in n)p=n[g],n.hasOwnProperty(g)&&void 0!==p&&!r.hasOwnProperty(g)&&Zu(e,t,g,void 0,r,p);for(d in r)p=r[d],h=n[d],!r.hasOwnProperty(d)||p===h||void 0===p&&void 0===h||Zu(e,t,d,p,r,h);return}}for(var y in n)p=n[y],n.hasOwnProperty(y)&&null!=p&&!r.hasOwnProperty(y)&&Ju(e,t,y,null,r,p);for(f in r)p=r[f],h=n[f],!r.hasOwnProperty(f)||p===h||null==p&&null==h||Ju(e,t,f,p,r,h)}(r,e.type,n,t),r[Me]=t}catch(o){uu(e,e.return,o)}}function hl(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&pd(e.type)||4===e.tag}function ml(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||hl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&pd(e.type))continue e;if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function vl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?(9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).insertBefore(e,t):((t=9===n.nodeType?n.body:"HTML"===n.nodeName?n.ownerDocument.body:n).appendChild(e),null!==(n=n._reactRootContainer)&&void 0!==n||null!==t.onclick||(t.onclick=Xu));else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode,t=null),null!==(e=e.child)))for(vl(e,t,n),e=e.sibling;null!==e;)vl(e,t,n),e=e.sibling}function gl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&(27===r&&pd(e.type)&&(n=e.stateNode),null!==(e=e.child)))for(gl(e,t,n),e=e.sibling;null!==e;)gl(e,t,n),e=e.sibling}function yl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,o=t.attributes;o.length;)t.removeAttributeNode(o[0]);ed(t,r,n),t[Oe]=e,t[Me]=n}catch(a){uu(e,e.return,a)}}var bl=!1,wl=!1,xl=!1,kl="function"===typeof WeakSet?WeakSet:Set,Sl=null;function El(e,t,n){var r=n.flags;switch(n.tag){case 0:case 11:case 15:Il(e,n),4&r&&il(5,n);break;case 1:if(Il(e,n),4&r)if(e=n.stateNode,null===t)try{e.componentDidMount()}catch(i){uu(n,n.return,i)}else{var o=vs(n.type,t.memoizedProps);t=t.memoizedState;try{e.componentDidUpdate(o,t,e.__reactInternalSnapshotBeforeUpdate)}catch(s){uu(n,n.return,s)}}64&r&&ll(n),512&r&&ul(n,n.return);break;case 3:if(Il(e,n),64&r&&null!==(e=n.updateQueue)){if(t=null,null!==n.child)switch(n.child.tag){case 27:case 5:case 1:t=n.child.stateNode}try{pa(e,t)}catch(i){uu(n,n.return,i)}}break;case 27:null===t&&4&r&&yl(n);case 26:case 5:Il(e,n),null===t&&4&r&&fl(n),512&r&&ul(n,n.return);break;case 12:Il(e,n);break;case 13:Il(e,n),4&r&&Tl(e,n),64&r&&(null!==(e=n.memoizedState)&&(null!==(e=e.dehydrated)&&function(e,t){var n=e.ownerDocument;if("$?"!==e.data||"complete"===n.readyState)t();else{var r=function(){t(),n.removeEventListener("DOMContentLoaded",r)};n.addEventListener("DOMContentLoaded",r),e._reactRetry=r}}(e,n=hu.bind(null,n))));break;case 22:if(!(r=null!==n.memoizedState||bl)){t=null!==t&&null!==t.memoizedState||wl,o=bl;var a=wl;bl=r,(wl=t)&&!a?zl(e,n,0!==(8772&n.subtreeFlags)):Il(e,n),bl=o,wl=a}break;case 30:break;default:Il(e,n)}}function Cl(e){var t=e.alternate;null!==t&&(e.alternate=null,Cl(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&Be(t)),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}var Nl=null,jl=!1;function Dl(e,t,n){for(n=n.child;null!==n;)Pl(e,t,n),n=n.sibling}function Pl(e,t,n){if(de&&"function"===typeof de.onCommitFiberUnmount)try{de.onCommitFiberUnmount(ue,n)}catch(a){}switch(n.tag){case 26:wl||dl(n,t),Dl(e,t,n),n.memoizedState?n.memoizedState.count--:n.stateNode&&(n=n.stateNode).parentNode.removeChild(n);break;case 27:wl||dl(n,t);var r=Nl,o=jl;pd(n.type)&&(Nl=n.stateNode,jl=!1),Dl(e,t,n),xd(n.stateNode),Nl=r,jl=o;break;case 5:wl||dl(n,t);case 6:if(r=Nl,o=jl,Nl=null,Dl(e,t,n),jl=o,null!==(Nl=r))if(jl)try{(9===Nl.nodeType?Nl.body:"HTML"===Nl.nodeName?Nl.ownerDocument.body:Nl).removeChild(n.stateNode)}catch(i){uu(n,t,i)}else try{Nl.removeChild(n.stateNode)}catch(i){uu(n,t,i)}break;case 18:null!==Nl&&(jl?(hd(9===(e=Nl).nodeType?e.body:"HTML"===e.nodeName?e.ownerDocument.body:e,n.stateNode),Df(e)):hd(Nl,n.stateNode));break;case 4:r=Nl,o=jl,Nl=n.stateNode.containerInfo,jl=!0,Dl(e,t,n),Nl=r,jl=o;break;case 0:case 11:case 14:case 15:wl||sl(2,n,t),wl||sl(4,n,t),Dl(e,t,n);break;case 1:wl||(dl(n,t),"function"===typeof(r=n.stateNode).componentWillUnmount&&cl(n,t,r)),Dl(e,t,n);break;case 21:Dl(e,t,n);break;case 22:wl=(r=wl)||null!==n.memoizedState,Dl(e,t,n),wl=r;break;default:Dl(e,t,n)}}function Tl(e,t){if(null===t.memoizedState&&(null!==(e=t.alternate)&&(null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))))try{Df(e)}catch(n){uu(t,t.return,n)}}function _l(e,t){var n=function(e){switch(e.tag){case 13:case 19:var t=e.stateNode;return null===t&&(t=e.stateNode=new kl),t;case 22:return null===(t=(e=e.stateNode)._retryCache)&&(t=e._retryCache=new kl),t;default:throw Error(i(435,e.tag))}}(e);t.forEach((function(t){var r=mu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}function Ol(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r],a=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 27:if(pd(l.type)){Nl=l.stateNode,jl=!1;break e}break;case 5:Nl=l.stateNode,jl=!1;break e;case 3:case 4:Nl=l.stateNode.containerInfo,jl=!0;break e}l=l.return}if(null===Nl)throw Error(i(160));Pl(a,s,o),Nl=null,jl=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&t.subtreeFlags)for(t=t.child;null!==t;)Rl(t,e),t=t.sibling}var Ml=null;function Rl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:Ol(t,e),Al(e),4&r&&(sl(3,e,e.return),il(3,e),sl(5,e,e.return));break;case 1:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),64&r&&bl&&(null!==(e=e.updateQueue)&&(null!==(r=e.callbacks)&&(n=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===n?r:n.concat(r))));break;case 26:var o=Ml;if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),4&r){var a=null!==n?n.memoizedState:null;if(r=e.memoizedState,null===n)if(null===r)if(null===e.stateNode){e:{r=e.type,n=e.memoizedProps,o=o.ownerDocument||o;t:switch(r){case"title":(!(a=o.getElementsByTagName("title")[0])||a[ze]||a[Oe]||"http://www.w3.org/2000/svg"===a.namespaceURI||a.hasAttribute("itemprop"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector("head > title"))),ed(a,r,n),a[Oe]=e,qe(a),r=a;break e;case"link":var s=zd("link","href",o).get(r+(n.href||""));if(s)for(var l=0;l<s.length;l++)if((a=s[l]).getAttribute("href")===(null==n.href||""===n.href?null:n.href)&&a.getAttribute("rel")===(null==n.rel?null:n.rel)&&a.getAttribute("title")===(null==n.title?null:n.title)&&a.getAttribute("crossorigin")===(null==n.crossOrigin?null:n.crossOrigin)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;case"meta":if(s=zd("meta","content",o).get(r+(n.content||"")))for(l=0;l<s.length;l++)if((a=s[l]).getAttribute("content")===(null==n.content?null:""+n.content)&&a.getAttribute("name")===(null==n.name?null:n.name)&&a.getAttribute("property")===(null==n.property?null:n.property)&&a.getAttribute("http-equiv")===(null==n.httpEquiv?null:n.httpEquiv)&&a.getAttribute("charset")===(null==n.charSet?null:n.charSet)){s.splice(l,1);break t}ed(a=o.createElement(r),r,n),o.head.appendChild(a);break;default:throw Error(i(468,r))}a[Oe]=e,qe(a),r=a}e.stateNode=r}else Bd(o,e.type,e.stateNode);else e.stateNode=Rd(o,r,e.memoizedProps);else a!==r?(null===a?null!==n.stateNode&&(n=n.stateNode).parentNode.removeChild(n):a.count--,null===r?Bd(o,e.type,e.stateNode):Rd(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&pl(e,e.memoizedProps,n.memoizedProps)}break;case 27:Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),null!==n&&4&r&&pl(e,e.memoizedProps,n.memoizedProps);break;case 5:if(Ol(t,e),Al(e),512&r&&(wl||null===n||dl(n,n.return)),32&e.flags){o=e.stateNode;try{kt(o,"")}catch(h){uu(e,e.return,h)}}4&r&&null!=e.stateNode&&pl(e,o=e.memoizedProps,null!==n?n.memoizedProps:o),1024&r&&(xl=!0);break;case 6:if(Ol(t,e),Al(e),4&r){if(null===e.stateNode)throw Error(i(162));r=e.memoizedProps,n=e.stateNode;try{n.nodeValue=r}catch(h){uu(e,e.return,h)}}break;case 3:if(Fd=null,o=Ml,Ml=Ed(t.containerInfo),Ol(t,e),Ml=o,Al(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Df(t.containerInfo)}catch(h){uu(e,e.return,h)}xl&&(xl=!1,Ll(e));break;case 4:r=Ml,Ml=Ed(e.stateNode.containerInfo),Ol(t,e),Al(e),Ml=r;break;case 12:default:Ol(t,e),Al(e);break;case 13:Ol(t,e),Al(e),8192&e.child.flags&&null!==e.memoizedState!==(null!==n&&null!==n.memoizedState)&&(xc=te()),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));break;case 22:o=null!==e.memoizedState;var c=null!==n&&null!==n.memoizedState,u=bl,d=wl;if(bl=u||o,wl=d||c,Ol(t,e),wl=d,bl=u,Al(e),8192&r)e:for(t=e.stateNode,t._visibility=o?-2&t._visibility:1|t._visibility,o&&(null===n||c||bl||wl||Fl(e)),n=null,t=e;;){if(5===t.tag||26===t.tag){if(null===n){c=n=t;try{if(a=c.stateNode,o)"function"===typeof(s=a.style).setProperty?s.setProperty("display","none","important"):s.display="none";else{l=c.stateNode;var f=c.memoizedProps.style,p=void 0!==f&&null!==f&&f.hasOwnProperty("display")?f.display:null;l.style.display=null==p||"boolean"===typeof p?"":(""+p).trim()}}catch(h){uu(c,c.return,h)}}}else if(6===t.tag){if(null===n){c=t;try{c.stateNode.nodeValue=o?"":c.memoizedProps}catch(h){uu(c,c.return,h)}}}else if((22!==t.tag&&23!==t.tag||null===t.memoizedState||t===e)&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;null===t.sibling;){if(null===t.return||t.return===e)break e;n===t&&(n=null),t=t.return}n===t&&(n=null),t.sibling.return=t.return,t=t.sibling}4&r&&(null!==(r=e.updateQueue)&&(null!==(n=r.retryQueue)&&(r.retryQueue=null,_l(e,n))));break;case 19:Ol(t,e),Al(e),4&r&&(null!==(r=e.updateQueue)&&(e.updateQueue=null,_l(e,r)));case 30:case 21:}}function Al(e){var t=e.flags;if(2&t){try{for(var n,r=e.return;null!==r;){if(hl(r)){n=r;break}r=r.return}if(null==n)throw Error(i(160));switch(n.tag){case 27:var o=n.stateNode;gl(e,ml(e),o);break;case 5:var a=n.stateNode;32&n.flags&&(kt(a,""),n.flags&=-33),gl(e,ml(e),a);break;case 3:case 4:var s=n.stateNode.containerInfo;vl(e,ml(e),s);break;default:throw Error(i(161))}}catch(l){uu(e,e.return,l)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Ll(e){if(1024&e.subtreeFlags)for(e=e.child;null!==e;){var t=e;Ll(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),e=e.sibling}}function Il(e,t){if(8772&t.subtreeFlags)for(t=t.child;null!==t;)El(e,t.alternate,t),t=t.sibling}function Fl(e){for(e=e.child;null!==e;){var t=e;switch(t.tag){case 0:case 11:case 14:case 15:sl(4,t,t.return),Fl(t);break;case 1:dl(t,t.return);var n=t.stateNode;"function"===typeof n.componentWillUnmount&&cl(t,t.return,n),Fl(t);break;case 27:xd(t.stateNode);case 26:case 5:dl(t,t.return),Fl(t);break;case 22:null===t.memoizedState&&Fl(t);break;default:Fl(t)}e=e.sibling}}function zl(e,t,n){for(n=n&&0!==(8772&t.subtreeFlags),t=t.child;null!==t;){var r=t.alternate,o=e,a=t,i=a.flags;switch(a.tag){case 0:case 11:case 15:zl(o,a,n),il(4,a);break;case 1:if(zl(o,a,n),"function"===typeof(o=(r=a).stateNode).componentDidMount)try{o.componentDidMount()}catch(c){uu(r,r.return,c)}if(null!==(o=(r=a).updateQueue)){var s=r.stateNode;try{var l=o.shared.hiddenCallbacks;if(null!==l)for(o.shared.hiddenCallbacks=null,o=0;o<l.length;o++)fa(l[o],s)}catch(c){uu(r,r.return,c)}}n&&64&i&&ll(a),ul(a,a.return);break;case 27:yl(a);case 26:case 5:zl(o,a,n),n&&null===r&&4&i&&fl(a),ul(a,a.return);break;case 12:zl(o,a,n);break;case 13:zl(o,a,n),n&&4&i&&Tl(o,a);break;case 22:null===a.memoizedState&&zl(o,a,n),ul(a,a.return);break;case 30:break;default:zl(o,a,n)}t=t.sibling}}function Bl(e,t){var n=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(n=e.memoizedState.cachePool.pool),e=null,null!==t.memoizedState&&null!==t.memoizedState.cachePool&&(e=t.memoizedState.cachePool.pool),e!==n&&(null!=e&&e.refCount++,null!=n&&Ao(n))}function Hl(e,t){e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e))}function Ul(e,t,n,r){if(10256&t.subtreeFlags)for(t=t.child;null!==t;)Yl(e,t,n,r),t=t.sibling}function Yl(e,t,n,r){var o=t.flags;switch(t.tag){case 0:case 11:case 15:Ul(e,t,n,r),2048&o&&il(9,t);break;case 1:case 13:default:Ul(e,t,n,r);break;case 3:Ul(e,t,n,r),2048&o&&(e=null,null!==t.alternate&&(e=t.alternate.memoizedState.cache),(t=t.memoizedState.cache)!==e&&(t.refCount++,null!=e&&Ao(e)));break;case 12:if(2048&o){Ul(e,t,n,r),e=t.stateNode;try{var a=t.memoizedProps,i=a.id,s=a.onPostCommit;"function"===typeof s&&s(i,null===t.alternate?"mount":"update",e.passiveEffectDuration,-0)}catch(l){uu(t,t.return,l)}}else Ul(e,t,n,r);break;case 23:break;case 22:a=t.stateNode,i=t.alternate,null!==t.memoizedState?2&a._visibility?Ul(e,t,n,r):ql(e,t):2&a._visibility?Ul(e,t,n,r):(a._visibility|=2,Wl(e,t,n,r,0!==(10256&t.subtreeFlags))),2048&o&&Bl(i,t);break;case 24:Ul(e,t,n,r),2048&o&&Hl(t.alternate,t)}}function Wl(e,t,n,r,o){for(o=o&&0!==(10256&t.subtreeFlags),t=t.child;null!==t;){var a=e,i=t,s=n,l=r,c=i.flags;switch(i.tag){case 0:case 11:case 15:Wl(a,i,s,l,o),il(8,i);break;case 23:break;case 22:var u=i.stateNode;null!==i.memoizedState?2&u._visibility?Wl(a,i,s,l,o):ql(a,i):(u._visibility|=2,Wl(a,i,s,l,o)),o&&2048&c&&Bl(i.alternate,i);break;case 24:Wl(a,i,s,l,o),o&&2048&c&&Hl(i.alternate,i);break;default:Wl(a,i,s,l,o)}t=t.sibling}}function ql(e,t){if(10256&t.subtreeFlags)for(t=t.child;null!==t;){var n=e,r=t,o=r.flags;switch(r.tag){case 22:ql(n,r),2048&o&&Bl(r.alternate,r);break;case 24:ql(n,r),2048&o&&Hl(r.alternate,r);break;default:ql(n,r)}t=t.sibling}}var Vl=8192;function Ql(e){if(e.subtreeFlags&Vl)for(e=e.child;null!==e;)Kl(e),e=e.sibling}function Kl(e){switch(e.tag){case 26:Ql(e),e.flags&Vl&&null!==e.memoizedState&&function(e,t,n){if(null===Ud)throw Error(i(475));var r=Ud;if("stylesheet"===t.type&&("string"!==typeof n.media||!1!==matchMedia(n.media).matches)&&0===(4&t.state.loading)){if(null===t.instance){var o=Pd(n.href),a=e.querySelector(Td(o));if(a)return null!==(e=a._p)&&"object"===typeof e&&"function"===typeof e.then&&(r.count++,r=Wd.bind(r),e.then(r,r)),t.state.loading|=4,t.instance=a,void qe(a);a=e.ownerDocument||e,n=_d(n),(o=kd.get(o))&&Ld(n,o),qe(a=a.createElement("link"));var s=a;s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",n),t.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(t,e),(e=t.state.preload)&&0===(3&t.state.loading)&&(r.count++,t=Wd.bind(r),e.addEventListener("load",t),e.addEventListener("error",t))}}(Ml,e.memoizedState,e.memoizedProps);break;case 5:default:Ql(e);break;case 3:case 4:var t=Ml;Ml=Ed(e.stateNode.containerInfo),Ql(e),Ml=t;break;case 22:null===e.memoizedState&&(null!==(t=e.alternate)&&null!==t.memoizedState?(t=Vl,Vl=16777216,Ql(e),Vl=t):Ql(e))}}function $l(e){var t=e.alternate;if(null!==t&&null!==(e=t.child)){t.child=null;do{t=e.sibling,e.sibling=null,e=t}while(null!==e)}}function Gl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)Xl(e),e=e.sibling}function Xl(e){switch(e.tag){case 0:case 11:case 15:Gl(e),2048&e.flags&&sl(9,e,e.return);break;case 3:case 12:default:Gl(e);break;case 22:var t=e.stateNode;null!==e.memoizedState&&2&t._visibility&&(null===e.return||13!==e.return.tag)?(t._visibility&=-3,Jl(e)):Gl(e)}}function Jl(e){var t=e.deletions;if(0!==(16&e.flags)){if(null!==t)for(var n=0;n<t.length;n++){var r=t[n];Sl=r,Zl(r,e)}$l(e)}for(e=e.child;null!==e;){switch((t=e).tag){case 0:case 11:case 15:sl(8,t,t.return),Jl(t);break;case 22:2&(n=t.stateNode)._visibility&&(n._visibility&=-3,Jl(t));break;default:Jl(t)}e=e.sibling}}function Zl(e,t){for(;null!==Sl;){var n=Sl;switch(n.tag){case 0:case 11:case 15:sl(8,n,t);break;case 23:case 22:if(null!==n.memoizedState&&null!==n.memoizedState.cachePool){var r=n.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:Ao(n.memoizedState.cache)}if(null!==(r=n.child))r.return=n,Sl=r;else e:for(n=e;null!==Sl;){var o=(r=Sl).sibling,a=r.return;if(Cl(r),r===n){Sl=null;break e}if(null!==o){o.return=a,Sl=o;break e}Sl=a}}}var ec={getCacheForType:function(e){var t=jo(Mo),n=t.data.get(e);return void 0===n&&(n=e(),t.data.set(e,n)),n}},tc="function"===typeof WeakMap?WeakMap:Map,nc=0,rc=null,oc=null,ac=0,ic=0,sc=null,lc=!1,cc=!1,uc=!1,dc=0,fc=0,pc=0,hc=0,mc=0,vc=0,gc=0,yc=null,bc=null,wc=!1,xc=0,kc=1/0,Sc=null,Ec=null,Cc=0,Nc=null,jc=null,Dc=0,Pc=0,Tc=null,_c=null,Oc=0,Mc=null;function Rc(){if(0!==(2&nc)&&0!==ac)return ac&-ac;if(null!==R.T){return 0!==Fo?Fo:Pu()}return Te()}function Ac(){0===vc&&(vc=0===(536870912&ac)||ao?ke():536870912);var e=os.current;return null!==e&&(e.flags|=32),vc}function Lc(e,t,n){(e!==rc||2!==ic&&9!==ic)&&null===e.cancelPendingCommit||(Yc(e,0),Bc(e,ac,vc,!1)),Ce(e,n),0!==(2&nc)&&e===rc||(e===rc&&(0===(2&nc)&&(hc|=n),4===fc&&Bc(e,ac,vc,!1)),ku(e))}function Ic(e,t,n){if(0!==(6&nc))throw Error(i(327));for(var r=!n&&0===(124&t)&&0===(t&e.expiredLanes)||we(e,t),o=r?function(e,t){var n=nc;nc|=2;var r=qc(),o=Vc();rc!==e||ac!==t?(Sc=null,kc=te()+500,Yc(e,t)):cc=we(e,t);e:for(;;)try{if(0!==ic&&null!==oc){t=oc;var a=sc;t:switch(ic){case 1:ic=0,sc=null,Zc(e,t,a,1);break;case 2:case 9:if(Go(a)){ic=0,sc=null,Jc(t);break}t=function(){2!==ic&&9!==ic||rc!==e||(ic=7),ku(e)},a.then(t,t);break e;case 3:ic=7;break e;case 4:ic=5;break e;case 7:Go(a)?(ic=0,sc=null,Jc(t)):(ic=0,sc=null,Zc(e,t,a,7));break;case 5:var s=null;switch(oc.tag){case 26:s=oc.memoizedState;case 5:case 27:var l=oc;if(!s||Hd(s)){ic=0,sc=null;var c=l.sibling;if(null!==c)oc=c;else{var u=l.return;null!==u?(oc=u,eu(u)):oc=null}break t}}ic=0,sc=null,Zc(e,t,a,5);break;case 6:ic=0,sc=null,Zc(e,t,a,6);break;case 8:Uc(),fc=6;break e;default:throw Error(i(462))}}Gc();break}catch(d){Wc(e,d)}return bo=yo=null,R.H=r,R.A=o,nc=n,null!==oc?0:(rc=null,ac=0,Dr(),fc)}(e,t):Kc(e,t,!0),a=r;;){if(0===o){cc&&!r&&Bc(e,t,0,!1);break}if(n=e.current.alternate,!a||zc(n)){if(2===o){if(a=t,e.errorRecoveryDisabledLanes&a)var s=0;else s=0!==(s=-536870913&e.pendingLanes)?s:536870912&s?536870912:0;if(0!==s){t=s;e:{var l=e;o=yc;var c=l.current.memoizedState.isDehydrated;if(c&&(Yc(l,s).flags|=256),2!==(s=Kc(l,s,!1))){if(uc&&!c){l.errorRecoveryDisabledLanes|=a,hc|=a,o=4;break e}a=bc,bc=o,null!==a&&(null===bc?bc=a:bc.push.apply(bc,a))}o=s}if(a=!1,2!==o)continue}}if(1===o){Yc(e,0),Bc(e,t,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(i(345));case 4:if((4194048&t)!==t)break;case 6:Bc(r,t,vc,!lc);break e;case 2:bc=null;break;case 3:case 5:break;default:throw Error(i(329))}if((62914560&t)===t&&10<(o=xc+300-te())){if(Bc(r,t,vc,!lc),0!==be(r,0,!0))break e;r.timeoutHandle=ld(Fc.bind(null,r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,2,-0,0),o)}else Fc(r,n,bc,Sc,wc,t,vc,hc,gc,lc,a,0,-0,0)}break}o=Kc(e,t,!1),a=!1}ku(e)}function Fc(e,t,n,r,o,a,s,l,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=t.subtreeFlags)||16785408===(16785408&f))&&(Ud={stylesheets:null,count:0,unsuspend:Yd},Kl(t),null!==(f=function(){if(null===Ud)throw Error(i(475));var e=Ud;return e.stylesheets&&0===e.count&&Vd(e,e.stylesheets),0<e.count?function(t){var n=setTimeout((function(){if(e.stylesheets&&Vd(e,e.stylesheets),e.unsuspend){var t=e.unsuspend;e.unsuspend=null,t()}}),6e4);return e.unsuspend=t,function(){e.unsuspend=null,clearTimeout(n)}}:null}())))return e.cancelPendingCommit=f(nu.bind(null,e,t,a,n,r,o,s,l,c,d,1,p,h)),void Bc(e,a,s,!u);nu(e,t,a,n,r,o,s,l,c)}function zc(e){for(var t=e;;){var n=t.tag;if((0===n||11===n||15===n)&&16384&t.flags&&(null!==(n=t.updateQueue)&&null!==(n=n.stores)))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!$n(a(),o))return!1}catch(i){return!1}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function Bc(e,t,n,r){t&=~mc,t&=~hc,e.suspendedLanes|=t,e.pingedLanes&=~t,r&&(e.warmLanes|=t),r=e.expirationTimes;for(var o=t;0<o;){var a=31-pe(o),i=1<<a;r[a]=-1,o&=~i}0!==n&&Ne(e,n,t)}function Hc(){return 0!==(6&nc)||(Su(0,!1),!1)}function Uc(){if(null!==oc){if(0===ic)var e=oc.return;else bo=yo=null,Fa(e=oc),$i=null,Gi=0,e=oc;for(;null!==e;)al(e.alternate,e),e=e.return;oc=null}}function Yc(e,t){var n=e.timeoutHandle;-1!==n&&(e.timeoutHandle=-1,cd(n)),null!==(n=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,n()),Uc(),rc=e,oc=n=Fr(e.current,null),ac=t,ic=0,sc=null,lc=!1,cc=we(e,t),uc=!1,gc=vc=mc=hc=pc=fc=0,bc=yc=null,wc=!1,0!==(8&t)&&(t|=32&t);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=t;0<r;){var o=31-pe(r),a=1<<o;t|=e[o],r&=~a}return dc=t,Dr(),n}function Wc(e,t){wa=null,R.H=qi,t===Vo||t===Ko?(t=ea(),ic=3):t===Qo?(t=ea(),ic=4):ic=t===Ns?8:null!==t&&"object"===typeof t&&"function"===typeof t.then?6:1,sc=t,null===oc&&(fc=1,xs(e,Er(t,e.current)))}function qc(){var e=R.H;return R.H=qi,null===e?qi:e}function Vc(){var e=R.A;return R.A=ec,e}function Qc(){fc=4,lc||(4194048&ac)!==ac&&null!==os.current||(cc=!0),0===(134217727&pc)&&0===(134217727&hc)||null===rc||Bc(rc,ac,vc,!1)}function Kc(e,t,n){var r=nc;nc|=2;var o=qc(),a=Vc();rc===e&&ac===t||(Sc=null,Yc(e,t)),t=!1;var i=fc;e:for(;;)try{if(0!==ic&&null!==oc){var s=oc,l=sc;switch(ic){case 8:Uc(),i=6;break e;case 3:case 2:case 9:case 6:null===os.current&&(t=!0);var c=ic;if(ic=0,sc=null,Zc(e,s,l,c),n&&cc){i=0;break e}break;default:c=ic,ic=0,sc=null,Zc(e,s,l,c)}}$c(),i=fc;break}catch(u){Wc(e,u)}return t&&e.shellSuspendCounter++,bo=yo=null,nc=r,R.H=o,R.A=a,null===oc&&(rc=null,ac=0,Dr()),i}function $c(){for(;null!==oc;)Xc(oc)}function Gc(){for(;null!==oc&&!Z();)Xc(oc)}function Xc(e){var t=Xs(e.alternate,e,dc);e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Jc(e){var t=e,n=t.alternate;switch(t.tag){case 15:case 0:t=Ls(n,t,t.pendingProps,t.type,void 0,ac);break;case 11:t=Ls(n,t,t.pendingProps,t.type.render,t.ref,ac);break;case 5:Fa(t);default:al(n,t),t=Xs(n,t=oc=zr(t,dc),dc)}e.memoizedProps=e.pendingProps,null===t?eu(e):oc=t}function Zc(e,t,n,r){bo=yo=null,Fa(t),$i=null,Gi=0;var o=t.return;try{if(function(e,t,n,r,o){if(n.flags|=32768,null!==r&&"object"===typeof r&&"function"===typeof r.then){if(null!==(t=n.alternate)&&Eo(t,n,o,!0),null!==(n=os.current)){switch(n.tag){case 13:return null===as?Qc():null===n.alternate&&0===fc&&(fc=3),n.flags&=-257,n.flags|=65536,n.lanes=o,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?n.updateQueue=new Set([r]):t.add(r),du(e,r,o)),!1;case 22:return n.flags|=65536,r===$o?n.flags|=16384:(null===(t=n.updateQueue)?(t={transitions:null,markerInstances:null,retryQueue:new Set([r])},n.updateQueue=t):null===(n=t.retryQueue)?t.retryQueue=new Set([r]):n.add(r),du(e,r,o)),!1}throw Error(i(435,n.tag))}return du(e,r,o),Qc(),!1}if(ao)return null!==(t=os.current)?(0===(65536&t.flags)&&(t.flags|=256),t.flags|=65536,t.lanes=o,r!==lo&&vo(Er(e=Error(i(422),{cause:r}),n))):(r!==lo&&vo(Er(t=Error(i(423),{cause:r}),n)),(e=e.current.alternate).flags|=65536,o&=-o,e.lanes|=o,r=Er(r,n),la(e,o=Ss(e.stateNode,r,o)),4!==fc&&(fc=2)),!1;var a=Error(i(520),{cause:r});if(a=Er(a,n),null===yc?yc=[a]:yc.push(a),4!==fc&&(fc=2),null===t)return!0;r=Er(r,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=o&-o,n.lanes|=e,la(n,e=Ss(n.stateNode,r,e)),!1;case 1:if(t=n.type,a=n.stateNode,0===(128&n.flags)&&("function"===typeof t.getDerivedStateFromError||null!==a&&"function"===typeof a.componentDidCatch&&(null===Ec||!Ec.has(a))))return n.flags|=65536,o&=-o,n.lanes|=o,Cs(o=Es(o),e,n,r),la(n,o),!1}n=n.return}while(null!==n);return!1}(e,o,t,n,ac))return fc=1,xs(e,Er(n,e.current)),void(oc=null)}catch(a){if(null!==o)throw oc=o,a;return fc=1,xs(e,Er(n,e.current)),void(oc=null)}32768&t.flags?(ao||1===r?e=!0:cc||0!==(536870912&ac)?e=!1:(lc=e=!0,(2===r||9===r||3===r||6===r)&&(null!==(r=os.current)&&13===r.tag&&(r.flags|=16384))),tu(t,e)):eu(t)}function eu(e){var t=e;do{if(0!==(32768&t.flags))return void tu(t,lc);e=t.return;var n=rl(t.alternate,t,dc);if(null!==n)return void(oc=n);if(null!==(t=t.sibling))return void(oc=t);oc=t=e}while(null!==t);0===fc&&(fc=5)}function tu(e,t){do{var n=ol(e.alternate,e);if(null!==n)return n.flags&=32767,void(oc=n);if(null!==(n=e.return)&&(n.flags|=32768,n.subtreeFlags=0,n.deletions=null),!t&&null!==(e=e.sibling))return void(oc=e);oc=e=n}while(null!==e);fc=6,oc=null}function nu(e,t,n,r,o,a,s,l,c){e.cancelPendingCommit=null;do{su()}while(0!==Cc);if(0!==(6&nc))throw Error(i(327));if(null!==t){if(t===e.current)throw Error(i(177));if(a=t.lanes|t.childLanes,function(e,t,n,r,o,a){var i=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,l=e.expirationTimes,c=e.hiddenUpdates;for(n=i&~n;0<n;){var u=31-pe(n),d=1<<u;s[u]=0,l[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-536870913)}n&=~d}0!==r&&Ne(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~t))}(e,n,a|=jr,s,l,c),e===rc&&(oc=rc=null,ac=0),jc=t,Nc=e,Dc=n,Pc=a,Tc=o,_c=r,0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?(e.callbackNode=null,e.callbackPriority=0,X(ae,(function(){return lu(),null}))):(e.callbackNode=null,e.callbackPriority=0),r=0!==(13878&t.flags),0!==(13878&t.subtreeFlags)||r){r=R.T,R.T=null,o=A.p,A.p=2,s=nc,nc|=4;try{!function(e,t){if(e=e.containerInfo,td=nf,tr(e=er(e))){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch(v){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,f=e,p=null;t:for(;;){for(var h;f!==n||0!==o&&3!==f.nodeType||(l=s+o),f!==a||0!==r&&3!==f.nodeType||(c=s+r),3===f.nodeType&&(s+=f.nodeValue.length),null!==(h=f.firstChild);)p=f,f=h;for(;;){if(f===e)break t;if(p===n&&++u===o&&(l=s),p===a&&++d===r&&(c=s),null!==(h=f.nextSibling))break;p=(f=p).parentNode}f=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(nd={focusedElem:e,selectionRange:n},nf=!1,Sl=t;null!==Sl;)if(e=(t=Sl).child,0!==(1024&t.subtreeFlags)&&null!==e)e.return=t,Sl=e;else for(;null!==Sl;){switch(a=(t=Sl).alternate,e=t.flags,t.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!==(1024&e)&&null!==a){e=void 0,n=t,o=a.memoizedProps,a=a.memoizedState,r=n.stateNode;try{var m=vs(n.type,o,(n.elementType,n.type));e=r.getSnapshotBeforeUpdate(m,a),r.__reactInternalSnapshotBeforeUpdate=e}catch(g){uu(n,n.return,g)}}break;case 3:if(0!==(1024&e))if(9===(n=(e=t.stateNode.containerInfo).nodeType))md(e);else if(1===n)switch(e.nodeName){case"HEAD":case"HTML":case"BODY":md(e);break;default:e.textContent=""}break;default:if(0!==(1024&e))throw Error(i(163))}if(null!==(e=t.sibling)){e.return=t.return,Sl=e;break}Sl=t.return}}(e,t)}finally{nc=s,A.p=o,R.T=r}}Cc=1,ru(),ou(),au()}}function ru(){if(1===Cc){Cc=0;var e=Nc,t=jc,n=0!==(13878&t.flags);if(0!==(13878&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{Rl(t,e);var a=nd,i=er(e.containerInfo),s=a.focusedElem,l=a.selectionRange;if(i!==s&&s&&s.ownerDocument&&Zn(s.ownerDocument.documentElement,s)){if(null!==l&&tr(s)){var c=l.start,u=l.end;if(void 0===u&&(u=c),"selectionStart"in s)s.selectionStart=c,s.selectionEnd=Math.min(u,s.value.length);else{var d=s.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=s.textContent.length,m=Math.min(l.start,h),v=void 0===l.end?m:Math.min(l.end,h);!p.extend&&m>v&&(i=v,v=m,m=i);var g=Jn(s,m),y=Jn(s,v);if(g&&y&&(1!==p.rangeCount||p.anchorNode!==g.node||p.anchorOffset!==g.offset||p.focusNode!==y.node||p.focusOffset!==y.offset)){var b=d.createRange();b.setStart(g.node,g.offset),p.removeAllRanges(),m>v?(p.addRange(b),p.extend(y.node,y.offset)):(b.setEnd(y.node,y.offset),p.addRange(b))}}}}for(d=[],p=s;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for("function"===typeof s.focus&&s.focus(),s=0;s<d.length;s++){var w=d[s];w.element.scrollLeft=w.left,w.element.scrollTop=w.top}}nf=!!td,nd=td=null}finally{nc=o,A.p=r,R.T=n}}e.current=t,Cc=2}}function ou(){if(2===Cc){Cc=0;var e=Nc,t=jc,n=0!==(8772&t.flags);if(0!==(8772&t.subtreeFlags)||n){n=R.T,R.T=null;var r=A.p;A.p=2;var o=nc;nc|=4;try{El(e,t.alternate,t)}finally{nc=o,A.p=r,R.T=n}}Cc=3}}function au(){if(4===Cc||3===Cc){Cc=0,ee();var e=Nc,t=jc,n=Dc,r=_c;0!==(10256&t.subtreeFlags)||0!==(10256&t.flags)?Cc=5:(Cc=0,jc=Nc=null,iu(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(Ec=null),Pe(n),t=t.stateNode,de&&"function"===typeof de.onCommitFiberRoot)try{de.onCommitFiberRoot(ue,t,void 0,128===(128&t.current.flags))}catch(l){}if(null!==r){t=R.T,o=A.p,A.p=2,R.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var s=r[i];a(s.value,{componentStack:s.stack})}}finally{R.T=t,A.p=o}}0!==(3&Dc)&&su(),ku(e),o=e.pendingLanes,0!==(4194090&n)&&0!==(42&o)?e===Mc?Oc++:(Oc=0,Mc=e):Oc=0,Su(0,!1)}}function iu(e,t){0===(e.pooledCacheLanes&=t)&&(null!=(t=e.pooledCache)&&(e.pooledCache=null,Ao(t)))}function su(e){return ru(),ou(),au(),lu()}function lu(){if(5!==Cc)return!1;var e=Nc,t=Pc;Pc=0;var n=Pe(Dc),r=R.T,o=A.p;try{A.p=32>n?32:n,R.T=null,n=Tc,Tc=null;var a=Nc,s=Dc;if(Cc=0,jc=Nc=null,Dc=0,0!==(6&nc))throw Error(i(331));var l=nc;if(nc|=4,Xl(a.current),Yl(a,a.current,s,n),nc=l,Su(0,!1),de&&"function"===typeof de.onPostCommitFiberRoot)try{de.onPostCommitFiberRoot(ue,a)}catch(c){}return!0}finally{A.p=o,R.T=r,iu(e,t)}}function cu(e,t,n){t=Er(n,t),null!==(e=ia(e,t=Ss(e.stateNode,t,2),2))&&(Ce(e,2),ku(e))}function uu(e,t,n){if(3===e.tag)cu(e,e,n);else for(;null!==t;){if(3===t.tag){cu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"===typeof t.type.getDerivedStateFromError||"function"===typeof r.componentDidCatch&&(null===Ec||!Ec.has(r))){e=Er(n,e),null!==(r=ia(t,n=Es(2),2))&&(Cs(n,r,t,e),Ce(r,2),ku(r));break}}t=t.return}}function du(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new tc;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(uc=!0,o.add(n),e=fu.bind(null,e,t,n),t.then(e,e))}function fu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,rc===e&&(ac&n)===n&&(4===fc||3===fc&&(62914560&ac)===ac&&300>te()-xc?0===(2&nc)&&Yc(e,0):mc|=n,gc===ac&&(gc=0)),ku(e)}function pu(e,t){0===t&&(t=Se()),null!==(e=_r(e,t))&&(Ce(e,t),ku(e))}function hu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),pu(e,n)}function mu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}null!==r&&r.delete(t),pu(e,n)}var vu=null,gu=null,yu=!1,bu=!1,wu=!1,xu=0;function ku(e){e!==gu&&null===e.next&&(null===gu?vu=gu=e:gu=gu.next=e),bu=!0,yu||(yu=!0,dd((function(){0!==(6&nc)?X(re,Eu):Cu()})))}function Su(e,t){if(!wu&&bu){wu=!0;do{for(var n=!1,r=vu;null!==r;){if(!t)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-pe(42|e)+1)-1,a=201326741&(a&=o&~(i&~s))?201326741&a|1:a?2|a:0}0!==a&&(n=!0,Du(r,a))}else a=ac,0===(3&(a=be(r,r===rc?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||we(r,a)||(n=!0,Du(r,a));r=r.next}}while(n);wu=!1}}function Eu(){Cu()}function Cu(){bu=yu=!1;var e=0;0!==xu&&(function(){var e=window.event;if(e&&"popstate"===e.type)return e!==sd&&(sd=e,!0);return sd=null,!1}()&&(e=xu),xu=0);for(var t=te(),n=null,r=vu;null!==r;){var o=r.next,a=Nu(r,t);0===a?(r.next=null,null===n?vu=o:n.next=o,null===o&&(gu=n)):(n=r,(0!==e||0!==(3&a))&&(bu=!0)),r=o}Su(e,!1)}function Nu(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-62914561&e.pendingLanes;0<a;){var i=31-pe(a),s=1<<i,l=o[i];-1===l?0!==(s&n)&&0===(s&r)||(o[i]=xe(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}if(n=ac,n=be(e,e===(t=rc)?n:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===n||e===t&&(2===ic||9===ic)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&J(r),e.callbackNode=null,e.callbackPriority=0;if(0===(3&n)||we(e,n)){if((t=n&-n)===e.callbackPriority)return t;switch(null!==r&&J(r),Pe(n)){case 2:case 8:n=oe;break;case 32:default:n=ae;break;case 268435456:n=se}return r=ju.bind(null,e),n=X(n,r),e.callbackPriority=t,e.callbackNode=n,t}return null!==r&&null!==r&&J(r),e.callbackPriority=2,e.callbackNode=null,2}function ju(e,t){if(0!==Cc&&5!==Cc)return e.callbackNode=null,e.callbackPriority=0,null;var n=e.callbackNode;if(su()&&e.callbackNode!==n)return null;var r=ac;return 0===(r=be(e,e===rc?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(Ic(e,r,t),Nu(e,te()),null!=e.callbackNode&&e.callbackNode===n?ju.bind(null,e):null)}function Du(e,t){if(su())return null;Ic(e,t,!0)}function Pu(){return 0===xu&&(xu=ke()),xu}function Tu(e){return null==e||"symbol"===typeof e||"boolean"===typeof e?null:"function"===typeof e?e:Pt(""+e)}function _u(e,t){var n=t.ownerDocument.createElement("input");return n.name=t.name,n.value=t.value,e.id&&n.setAttribute("form",e.id),t.parentNode.insertBefore(n,t),e=new FormData(e),n.parentNode.removeChild(n),e}for(var Ou=0;Ou<xr.length;Ou++){var Mu=xr[Ou];kr(Mu.toLowerCase(),"on"+(Mu[0].toUpperCase()+Mu.slice(1)))}kr(pr,"onAnimationEnd"),kr(hr,"onAnimationIteration"),kr(mr,"onAnimationStart"),kr("dblclick","onDoubleClick"),kr("focusin","onFocus"),kr("focusout","onBlur"),kr(vr,"onTransitionRun"),kr(gr,"onTransitionStart"),kr(yr,"onTransitionCancel"),kr(br,"onTransitionEnd"),$e("onMouseEnter",["mouseout","mouseover"]),$e("onMouseLeave",["mouseout","mouseover"]),$e("onPointerEnter",["pointerout","pointerover"]),$e("onPointerLeave",["pointerout","pointerover"]),Ke("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Ke("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),Ke("onBeforeInput",["compositionend","keypress","textInput","paste"]),Ke("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Ke("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ru="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Au=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ru));function Lu(e,t){t=0!==(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;a=s,o.currentTarget=c;try{a(o)}catch(u){gs(u)}o.currentTarget=null,a=l}}}}function Iu(e,t){var n=t[Ae];void 0===n&&(n=t[Ae]=new Set);var r=e+"__bubble";n.has(r)||(Hu(t,e,2,!1),n.add(r))}function Fu(e,t,n){var r=0;t&&(r|=4),Hu(n,e,r,t)}var zu="_reactListening"+Math.random().toString(36).slice(2);function Bu(e){if(!e[zu]){e[zu]=!0,Ve.forEach((function(t){"selectionchange"!==t&&(Au.has(t)||Fu(t,!1,e),Fu(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[zu]||(t[zu]=!0,Fu("selectionchange",!1,t))}}function Hu(e,t,n,r){switch(uf(t)){case 2:var o=rf;break;case 8:o=of;break;default:o=af}n=o.bind(null,t,n,e),o=void 0,!zt||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Uu(e,t,n,r,o){var a=r;if(0===(1&t)&&0===(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==s;){if(null===(i=He(s)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}s=s.parentNode}}r=r.return}Lt((function(){var r=a,o=_t(n),i=[];e:{var s=wr.get(e);if(void 0!==s){var c=Zt,u=e;switch(e){case"keypress":if(0===qt(n))break e;case"keydown":case"keyup":c=mn;break;case"focusin":u="focus",c=an;break;case"focusout":u="blur",c=an;break;case"beforeblur":case"afterblur":c=an;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=rn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=on;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=gn;break;case pr:case hr:case mr:c=sn;break;case br:c=yn;break;case"scroll":case"scrollend":c=tn;break;case"wheel":c=bn;break;case"copy":case"cut":case"paste":c=ln;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=vn;break;case"toggle":case"beforetoggle":c=wn}var d=0!==(4&t),f=!d&&("scroll"===e||"scrollend"===e),p=d?null!==s?s+"Capture":null:s;d=[];for(var h,m=r;null!==m;){var v=m;if(h=v.stateNode,5!==(v=v.tag)&&26!==v&&27!==v||null===h||null===p||null!=(v=It(m,p))&&d.push(Yu(m,v,h)),f)break;m=m.return}0<d.length&&(s=new c(s,u,null,n,o),i.push({event:s,listeners:d}))}}if(0===(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===Tt||!(u=n.relatedTarget||n.fromElement)||!He(u)&&!u[Re])&&(c||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=r,null!==(u=(u=n.relatedTarget||n.toElement)?He(u):null)&&(f=l(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=rn,v="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(d=vn,v="onPointerLeave",p="onPointerEnter",m="pointer"),f=null==c?s:Ye(c),h=null==u?s:Ye(u),(s=new d(v,m+"leave",c,n,o)).target=f,s.relatedTarget=h,v=null,He(o)===r&&((d=new d(p,m+"enter",u,n,o)).target=h,d.relatedTarget=f,v=d),f=v,c&&u)e:{for(p=u,m=0,h=d=c;h;h=qu(h))m++;for(h=0,v=p;v;v=qu(v))h++;for(;0<m-h;)d=qu(d),m--;for(;0<h-m;)p=qu(p),h--;for(;m--;){if(d===p||null!==p&&d===p.alternate)break e;d=qu(d),p=qu(p)}d=null}else d=null;null!==c&&Vu(i,s,c,d,!1),null!==u&&null!==f&&Vu(i,f,u,d,!0)}if("select"===(c=(s=r?Ye(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var g=Fn;else if(On(s))if(zn)g=Kn;else{g=Vn;var y=qn}else!(c=s.nodeName)||"input"!==c.toLowerCase()||"checkbox"!==s.type&&"radio"!==s.type?r&&Nt(r.elementType)&&(g=Fn):g=Qn;switch(g&&(g=g(e,r))?Mn(i,g,n,o):(y&&y(e,s,r),"focusout"===e&&r&&"number"===s.type&&null!=r.memoizedProps.value&&yt(s,"number",s.value)),y=r?Ye(r):window,e){case"focusin":(On(y)||"true"===y.contentEditable)&&(rr=y,or=r,ar=null);break;case"focusout":ar=or=rr=null;break;case"mousedown":ir=!0;break;case"contextmenu":case"mouseup":case"dragend":ir=!1,sr(i,n,o);break;case"selectionchange":if(nr)break;case"keydown":case"keyup":sr(i,n,o)}var b;if(kn)e:{switch(e){case"compositionstart":var w="onCompositionStart";break e;case"compositionend":w="onCompositionEnd";break e;case"compositionupdate":w="onCompositionUpdate";break e}w=void 0}else Tn?Dn(e,n)&&(w="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(w="onCompositionStart");w&&(Cn&&"ko"!==n.locale&&(Tn||"onCompositionStart"!==w?"onCompositionEnd"===w&&Tn&&(b=Wt()):(Ut="value"in(Ht=o)?Ht.value:Ht.textContent,Tn=!0)),0<(y=Wu(r,w)).length&&(w=new cn(w,e,null,n,o),i.push({event:w,listeners:y}),b?w.data=b:null!==(b=Pn(n))&&(w.data=b))),(b=En?function(e,t){switch(e){case"compositionend":return Pn(t);case"keypress":return 32!==t.which?null:(jn=!0,Nn);case"textInput":return(e=t.data)===Nn&&jn?null:e;default:return null}}(e,n):function(e,t){if(Tn)return"compositionend"===e||!kn&&Dn(e,t)?(e=Wt(),Yt=Ut=Ht=null,Tn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Cn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(w=Wu(r,"onBeforeInput")).length&&(y=new cn("onBeforeInput","beforeinput",null,n,o),i.push({event:y,listeners:w}),y.data=b)),function(e,t,n,r,o){if("submit"===t&&n&&n.stateNode===o){var a=Tu((o[Me]||null).action),i=r.submitter;i&&null!==(t=(t=i[Me]||null)?Tu(t.formAction):i.getAttribute("formAction"))&&(a=t,i=null);var s=new Zt("action","action",null,r,o);e.push({event:s,listeners:[{instance:null,listener:function(){if(r.defaultPrevented){if(0!==xu){var e=i?_u(o,i):new FormData(o);_i(n,{pending:!0,data:e,method:o.method,action:a},null,e)}}else"function"===typeof a&&(s.preventDefault(),e=i?_u(o,i):new FormData(o),_i(n,{pending:!0,data:e,method:o.method,action:a},a,e))},currentTarget:o}]})}}(i,e,r,n,o)}Lu(i,t)}))}function Yu(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Wu(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=It(e,n))&&r.unshift(Yu(e,o,a)),null!=(o=It(e,t))&&r.push(Yu(e,o,a))),3===e.tag)return r;e=e.return}return[]}function qu(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag&&27!==e.tag);return e||null}function Vu(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(s=s.tag,null!==l&&l===r)break;5!==s&&26!==s&&27!==s||null===c||(l=c,o?null!=(c=It(n,a))&&i.unshift(Yu(n,c,l)):o||null!=(c=It(n,a))&&i.push(Yu(n,c,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Qu=/\r\n?/g,Ku=/\u0000|\uFFFD/g;function $u(e){return("string"===typeof e?e:""+e).replace(Qu,"\n").replace(Ku,"")}function Gu(e,t){return t=$u(t),$u(e)===t}function Xu(){}function Ju(e,t,n,r,o,a){switch(n){case"children":"string"===typeof r?"body"===t||"textarea"===t&&""===r||kt(e,r):("number"===typeof r||"bigint"===typeof r)&&"body"!==t&&kt(e,""+r);break;case"className":nt(e,"class",r);break;case"tabIndex":nt(e,"tabindex",r);break;case"dir":case"role":case"viewBox":case"width":case"height":nt(e,n,r);break;case"style":Ct(e,r,a);break;case"data":if("object"!==t){nt(e,"data",r);break}case"src":case"href":if(""===r&&("a"!==t||"href"!==n)){e.removeAttribute(n);break}if(null==r||"function"===typeof r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"action":case"formAction":if("function"===typeof r){e.setAttribute(n,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}if("function"===typeof a&&("formAction"===n?("input"!==t&&Ju(e,t,"name",o.name,o,null),Ju(e,t,"formEncType",o.formEncType,o,null),Ju(e,t,"formMethod",o.formMethod,o,null),Ju(e,t,"formTarget",o.formTarget,o,null)):(Ju(e,t,"encType",o.encType,o,null),Ju(e,t,"method",o.method,o,null),Ju(e,t,"target",o.target,o,null))),null==r||"symbol"===typeof r||"boolean"===typeof r){e.removeAttribute(n);break}r=Pt(""+r),e.setAttribute(n,r);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"multiple":e.multiple=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"muted":e.muted=r&&"function"!==typeof r&&"symbol"!==typeof r;break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":case"autoFocus":break;case"xlinkHref":if(null==r||"function"===typeof r||"boolean"===typeof r||"symbol"===typeof r){e.removeAttribute("xlink:href");break}n=Pt(""+r),e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""+r):e.removeAttribute(n);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInline":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,""):e.removeAttribute(n);break;case"capture":case"download":!0===r?e.setAttribute(n,""):!1!==r&&null!=r&&"function"!==typeof r&&"symbol"!==typeof r?e.setAttribute(n,r):e.removeAttribute(n);break;case"cols":case"rows":case"size":case"span":null!=r&&"function"!==typeof r&&"symbol"!==typeof r&&!isNaN(r)&&1<=r?e.setAttribute(n,r):e.removeAttribute(n);break;case"rowSpan":case"start":null==r||"function"===typeof r||"symbol"===typeof r||isNaN(r)?e.removeAttribute(n):e.setAttribute(n,r);break;case"popover":Iu("beforetoggle",e),Iu("toggle",e),tt(e,"popover",r);break;case"xlinkActuate":rt(e,"http://www.w3.org/1999/xlink","xlink:actuate",r);break;case"xlinkArcrole":rt(e,"http://www.w3.org/1999/xlink","xlink:arcrole",r);break;case"xlinkRole":rt(e,"http://www.w3.org/1999/xlink","xlink:role",r);break;case"xlinkShow":rt(e,"http://www.w3.org/1999/xlink","xlink:show",r);break;case"xlinkTitle":rt(e,"http://www.w3.org/1999/xlink","xlink:title",r);break;case"xlinkType":rt(e,"http://www.w3.org/1999/xlink","xlink:type",r);break;case"xmlBase":rt(e,"http://www.w3.org/XML/1998/namespace","xml:base",r);break;case"xmlLang":rt(e,"http://www.w3.org/XML/1998/namespace","xml:lang",r);break;case"xmlSpace":rt(e,"http://www.w3.org/XML/1998/namespace","xml:space",r);break;case"is":tt(e,"is",r);break;case"innerText":case"textContent":break;default:(!(2<n.length)||"o"!==n[0]&&"O"!==n[0]||"n"!==n[1]&&"N"!==n[1])&&tt(e,n=jt.get(n)||n,r)}}function Zu(e,t,n,r,o,a){switch(n){case"style":Ct(e,r,a);break;case"dangerouslySetInnerHTML":if(null!=r){if("object"!==typeof r||!("__html"in r))throw Error(i(61));if(null!=(n=r.__html)){if(null!=o.children)throw Error(i(60));e.innerHTML=n}}break;case"children":"string"===typeof r?kt(e,r):("number"===typeof r||"bigint"===typeof r)&&kt(e,""+r);break;case"onScroll":null!=r&&Iu("scroll",e);break;case"onScrollEnd":null!=r&&Iu("scrollend",e);break;case"onClick":null!=r&&(e.onclick=Xu);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":case"innerText":case"textContent":break;default:Qe.hasOwnProperty(n)||("o"!==n[0]||"n"!==n[1]||(o=n.endsWith("Capture"),t=n.slice(2,o?n.length-7:void 0),"function"===typeof(a=null!=(a=e[Me]||null)?a[n]:null)&&e.removeEventListener(t,a,o),"function"!==typeof r)?n in e?e[n]=r:!0===r?e.setAttribute(n,""):tt(e,n,r):("function"!==typeof a&&null!==a&&(n in e?e[n]=null:e.hasAttribute(n)&&e.removeAttribute(n)),e.addEventListener(t,r,o)))}}function ed(e,t,n){switch(t){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":Iu("error",e),Iu("load",e);var r,o=!1,a=!1;for(r in n)if(n.hasOwnProperty(r)){var s=n[r];if(null!=s)switch(r){case"src":o=!0;break;case"srcSet":a=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,r,s,n,null)}}return a&&Ju(e,t,"srcSet",n.srcSet,n,null),void(o&&Ju(e,t,"src",n.src,n,null));case"input":Iu("invalid",e);var l=r=s=a=null,c=null,u=null;for(o in n)if(n.hasOwnProperty(o)){var d=n[o];if(null!=d)switch(o){case"name":a=d;break;case"type":s=d;break;case"checked":c=d;break;case"defaultChecked":u=d;break;case"value":r=d;break;case"defaultValue":l=d;break;case"children":case"dangerouslySetInnerHTML":if(null!=d)throw Error(i(137,t));break;default:Ju(e,t,o,d,n,null)}}return gt(e,r,l,c,u,s,a,!1),void dt(e);case"select":for(a in Iu("invalid",e),o=s=r=null,n)if(n.hasOwnProperty(a)&&null!=(l=n[a]))switch(a){case"value":r=l;break;case"defaultValue":s=l;break;case"multiple":o=l;default:Ju(e,t,a,l,n,null)}return t=r,n=s,e.multiple=!!o,void(null!=t?bt(e,!!o,t,!1):null!=n&&bt(e,!!o,n,!0));case"textarea":for(s in Iu("invalid",e),r=a=o=null,n)if(n.hasOwnProperty(s)&&null!=(l=n[s]))switch(s){case"value":o=l;break;case"defaultValue":a=l;break;case"children":r=l;break;case"dangerouslySetInnerHTML":if(null!=l)throw Error(i(91));break;default:Ju(e,t,s,l,n,null)}return xt(e,o,a,r),void dt(e);case"option":for(c in n)if(n.hasOwnProperty(c)&&null!=(o=n[c]))if("selected"===c)e.selected=o&&"function"!==typeof o&&"symbol"!==typeof o;else Ju(e,t,c,o,n,null);return;case"dialog":Iu("beforetoggle",e),Iu("toggle",e),Iu("cancel",e),Iu("close",e);break;case"iframe":case"object":Iu("load",e);break;case"video":case"audio":for(o=0;o<Ru.length;o++)Iu(Ru[o],e);break;case"image":Iu("error",e),Iu("load",e);break;case"details":Iu("toggle",e);break;case"embed":case"source":case"link":Iu("error",e),Iu("load",e);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(u in n)if(n.hasOwnProperty(u)&&null!=(o=n[u]))switch(u){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,t));default:Ju(e,t,u,o,n,null)}return;default:if(Nt(t)){for(d in n)n.hasOwnProperty(d)&&(void 0!==(o=n[d])&&Zu(e,t,d,o,n,void 0));return}}for(l in n)n.hasOwnProperty(l)&&(null!=(o=n[l])&&Ju(e,t,l,o,n,null))}var td=null,nd=null;function rd(e){return 9===e.nodeType?e:e.ownerDocument}function od(e){switch(e){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function ad(e,t){if(0===e)switch(t){case"svg":return 1;case"math":return 2;default:return 0}return 1===e&&"foreignObject"===t?0:e}function id(e,t){return"textarea"===e||"noscript"===e||"string"===typeof t.children||"number"===typeof t.children||"bigint"===typeof t.children||"object"===typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var sd=null;var ld="function"===typeof setTimeout?setTimeout:void 0,cd="function"===typeof clearTimeout?clearTimeout:void 0,ud="function"===typeof Promise?Promise:void 0,dd="function"===typeof queueMicrotask?queueMicrotask:"undefined"!==typeof ud?function(e){return ud.resolve(null).then(e).catch(fd)}:ld;function fd(e){setTimeout((function(){throw e}))}function pd(e){return"head"===e}function hd(e,t){var n=t,r=0,o=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0<r&&8>r){n=r;var i=e.ownerDocument;if(1&n&&xd(i.documentElement),2&n&&xd(i.body),4&n)for(xd(n=i.head),i=n.firstChild;i;){var s=i.nextSibling,l=i.nodeName;i[ze]||"SCRIPT"===l||"STYLE"===l||"LINK"===l&&"stylesheet"===i.rel.toLowerCase()||n.removeChild(i),i=s}}if(0===o)return e.removeChild(a),void Df(t);o--}else"$"===n||"$?"===n||"$!"===n?o++:r=n.charCodeAt(0)-48;else r=0;n=a}while(n);Df(t)}function md(e){var t=e.firstChild;for(t&&10===t.nodeType&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case"HTML":case"HEAD":case"BODY":md(n),Be(n);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if("stylesheet"===n.rel.toLowerCase())continue}e.removeChild(n)}}function vd(e){return"$!"===e.data||"$?"===e.data&&"complete"===e.ownerDocument.readyState}function gd(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t||"F!"===t||"F"===t)break;if("/$"===t)return null}}return e}var yd=null;function bd(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}function wd(e,t,n){switch(t=rd(n),e){case"html":if(!(e=t.documentElement))throw Error(i(452));return e;case"head":if(!(e=t.head))throw Error(i(453));return e;case"body":if(!(e=t.body))throw Error(i(454));return e;default:throw Error(i(451))}}function xd(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);Be(e)}var kd=new Map,Sd=new Set;function Ed(e){return"function"===typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var Cd=A.d;A.d={f:function(){var e=Cd.f(),t=Hc();return e||t},r:function(e){var t=Ue(e);null!==t&&5===t.tag&&"form"===t.type?Mi(t):Cd.r(e)},D:function(e){Cd.D(e),jd("dns-prefetch",e,null)},C:function(e,t){Cd.C(e,t),jd("preconnect",e,t)},L:function(e,t,n){Cd.L(e,t,n);var r=Nd;if(r&&e&&t){var o='link[rel="preload"][as="'+mt(t)+'"]';"image"===t&&n&&n.imageSrcSet?(o+='[imagesrcset="'+mt(n.imageSrcSet)+'"]',"string"===typeof n.imageSizes&&(o+='[imagesizes="'+mt(n.imageSizes)+'"]')):o+='[href="'+mt(e)+'"]';var a=o;switch(t){case"style":a=Pd(e);break;case"script":a=Od(e)}kd.has(a)||(e=f({rel:"preload",href:"image"===t&&n&&n.imageSrcSet?void 0:e,as:t},n),kd.set(a,e),null!==r.querySelector(o)||"style"===t&&r.querySelector(Td(a))||"script"===t&&r.querySelector(Md(a))||(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}},m:function(e,t){Cd.m(e,t);var n=Nd;if(n&&e){var r=t&&"string"===typeof t.as?t.as:"script",o='link[rel="modulepreload"][as="'+mt(r)+'"][href="'+mt(e)+'"]',a=o;switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":a=Od(e)}if(!kd.has(a)&&(e=f({rel:"modulepreload",href:e},t),kd.set(a,e),null===n.querySelector(o))){switch(r){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(n.querySelector(Md(a)))return}ed(r=n.createElement("link"),"link",e),qe(r),n.head.appendChild(r)}}},X:function(e,t){Cd.X(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}},S:function(e,t,n){Cd.S(e,t,n);var r=Nd;if(r&&e){var o=We(r).hoistableStyles,a=Pd(e);t=t||"default";var i=o.get(a);if(!i){var s={loading:0,preload:null};if(i=r.querySelector(Td(a)))s.loading=5;else{e=f({rel:"stylesheet",href:e,"data-precedence":t},n),(n=kd.get(a))&&Ld(e,n);var l=i=r.createElement("link");qe(l),ed(l,"link",e),l._p=new Promise((function(e,t){l.onload=e,l.onerror=t})),l.addEventListener("load",(function(){s.loading|=1})),l.addEventListener("error",(function(){s.loading|=2})),s.loading|=4,Ad(i,t,r)}i={type:"stylesheet",instance:i,count:1,state:s},o.set(a,i)}}},M:function(e,t){Cd.M(e,t);var n=Nd;if(n&&e){var r=We(n).hoistableScripts,o=Od(e),a=r.get(o);a||((a=n.querySelector(Md(o)))||(e=f({src:e,async:!0,type:"module"},t),(t=kd.get(o))&&Id(e,t),qe(a=n.createElement("script")),ed(a,"link",e),n.head.appendChild(a)),a={type:"script",instance:a,count:1,state:null},r.set(o,a))}}};var Nd="undefined"===typeof document?null:document;function jd(e,t,n){var r=Nd;if(r&&"string"===typeof t&&t){var o=mt(t);o='link[rel="'+e+'"][href="'+o+'"]',"string"===typeof n&&(o+='[crossorigin="'+n+'"]'),Sd.has(o)||(Sd.add(o),e={rel:e,crossOrigin:n,href:t},null===r.querySelector(o)&&(ed(t=r.createElement("link"),"link",e),qe(t),r.head.appendChild(t)))}}function Dd(e,t,n,r){var o,a,s,l,c=(c=W.current)?Ed(c):null;if(!c)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return"string"===typeof n.precedence&&"string"===typeof n.href?(t=Pd(n.href),(r=(n=We(c).hoistableStyles).get(t))||(r={type:"style",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};case"link":if("stylesheet"===n.rel&&"string"===typeof n.href&&"string"===typeof n.precedence){e=Pd(n.href);var u=We(c).hoistableStyles,d=u.get(e);if(d||(c=c.ownerDocument||c,d={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=c.querySelector(Td(e)))&&!u._p&&(d.instance=u,d.state.loading=5),kd.has(e)||(n={rel:"preload",as:"style",href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},kd.set(e,n),u||(o=c,a=e,s=n,l=d.state,o.querySelector('link[rel="preload"][as="style"]['+a+"]")?l.loading=1:(a=o.createElement("link"),l.preload=a,a.addEventListener("load",(function(){return l.loading|=1})),a.addEventListener("error",(function(){return l.loading|=2})),ed(a,"link",s),qe(a),o.head.appendChild(a))))),t&&null===r)throw Error(i(528,""));return d}if(t&&null!==r)throw Error(i(529,""));return null;case"script":return t=n.async,"string"===typeof(n=n.src)&&t&&"function"!==typeof t&&"symbol"!==typeof t?(t=Od(n),(r=(n=We(c).hoistableScripts).get(t))||(r={type:"script",instance:null,count:0,state:null},n.set(t,r)),r):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pd(e){return'href="'+mt(e)+'"'}function Td(e){return'link[rel="stylesheet"]['+e+"]"}function _d(e){return f({},e,{"data-precedence":e.precedence,precedence:null})}function Od(e){return'[src="'+mt(e)+'"]'}function Md(e){return"script[async]"+e}function Rd(e,t,n){if(t.count++,null===t.instance)switch(t.type){case"style":var r=e.querySelector('style[data-href~="'+mt(n.href)+'"]');if(r)return t.instance=r,qe(r),r;var o=f({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return qe(r=(e.ownerDocument||e).createElement("style")),ed(r,"style",o),Ad(r,n.precedence,e),t.instance=r;case"stylesheet":o=Pd(n.href);var a=e.querySelector(Td(o));if(a)return t.state.loading|=4,t.instance=a,qe(a),a;r=_d(n),(o=kd.get(o))&&Ld(r,o),qe(a=(e.ownerDocument||e).createElement("link"));var s=a;return s._p=new Promise((function(e,t){s.onload=e,s.onerror=t})),ed(a,"link",r),t.state.loading|=4,Ad(a,n.precedence,e),t.instance=a;case"script":return a=Od(n.src),(o=e.querySelector(Md(a)))?(t.instance=o,qe(o),o):(r=n,(o=kd.get(a))&&Id(r=f({},n),o),qe(o=(e=e.ownerDocument||e).createElement("script")),ed(o,"link",r),e.head.appendChild(o),t.instance=o);case"void":return null;default:throw Error(i(443,t.type))}else"stylesheet"===t.type&&0===(4&t.state.loading)&&(r=t.instance,t.state.loading|=4,Ad(r,n.precedence,e));return t.instance}function Ad(e,t,n){for(var r=n.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var s=r[i];if(s.dataset.precedence===t)a=s;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(t=9===n.nodeType?n.head:n).insertBefore(e,t.firstChild)}function Ld(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.title&&(e.title=t.title)}function Id(e,t){null==e.crossOrigin&&(e.crossOrigin=t.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=t.referrerPolicy),null==e.integrity&&(e.integrity=t.integrity)}var Fd=null;function zd(e,t,n){if(null===Fd){var r=new Map,o=Fd=new Map;o.set(n,r)}else(r=(o=Fd).get(n))||(r=new Map,o.set(n,r));if(r.has(e))return r;for(r.set(e,null),n=n.getElementsByTagName(e),o=0;o<n.length;o++){var a=n[o];if(!(a[ze]||a[Oe]||"link"===e&&"stylesheet"===a.getAttribute("rel"))&&"http://www.w3.org/2000/svg"!==a.namespaceURI){var i=a.getAttribute(t)||"";i=e+i;var s=r.get(i);s?s.push(a):r.set(i,[a])}}return r}function Bd(e,t,n){(e=e.ownerDocument||e).head.insertBefore(n,"title"===t?e.querySelector("head > title"):null)}function Hd(e){return"stylesheet"!==e.type||0!==(3&e.state.loading)}var Ud=null;function Yd(){}function Wd(){if(this.count--,0===this.count)if(this.stylesheets)Vd(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}var qd=null;function Vd(e,t){e.stylesheets=null,null!==e.unsuspend&&(e.count++,qd=new Map,t.forEach(Qd,e),qd=null,Wd.call(e))}function Qd(e,t){if(!(4&t.state.loading)){var n=qd.get(e);if(n)var r=n.get(null);else{n=new Map,qd.set(e,n);for(var o=e.querySelectorAll("link[data-precedence],style[data-precedence]"),a=0;a<o.length;a++){var i=o[a];"LINK"!==i.nodeName&&"not all"===i.getAttribute("media")||(n.set(i.dataset.precedence,i),r=i)}r&&n.set(null,r)}i=(o=t.instance).getAttribute("data-precedence"),(a=n.get(i)||r)===r&&n.set(null,o),n.set(i,o),this.count++,r=Wd.bind(this),o.addEventListener("load",r),o.addEventListener("error",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),t.state.loading|=4}}var Kd={$$typeof:x,Provider:null,Consumer:null,_currentValue:L,_currentValue2:L,_threadCount:0};function $d(e,t,n,r,o,a,i,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=Ee(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ee(0),this.hiddenUpdates=Ee(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function Gd(e,t,n,r,o,a,i,s,l,c,u,d){return e=new $d(e,t,n,i,s,l,c,d),t=1,!0===a&&(t|=24),a=Lr(3,null,null,t),e.current=a,a.stateNode=e,(t=Ro()).refCount++,e.pooledCache=t,t.refCount++,a.memoizedState={element:r,isDehydrated:n,cache:t},ra(a),e}function Xd(e){return e?e=Rr:Rr}function Jd(e,t,n,r,o,a){o=Xd(o),null===r.context?r.context=o:r.pendingContext=o,(r=aa(t)).payload={element:n},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(n=ia(e,r,t))&&(Lc(n,0,t),sa(n,e,t))}function Zd(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ef(e,t){Zd(e,t),(e=e.alternate)&&Zd(e,t)}function tf(e){if(13===e.tag){var t=_r(e,67108864);null!==t&&Lc(t,0,67108864),ef(e,67108864)}}var nf=!0;function rf(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=2,af(e,t,n,r)}finally{A.p=a,R.T=o}}function of(e,t,n,r){var o=R.T;R.T=null;var a=A.p;try{A.p=8,af(e,t,n,r)}finally{A.p=a,R.T=o}}function af(e,t,n,r){if(nf){var o=sf(r);if(null===o)Uu(e,t,r,lf,n),bf(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return ff=wf(ff,e,t,n,r,o),!0;case"dragenter":return pf=wf(pf,e,t,n,r,o),!0;case"mouseover":return hf=wf(hf,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return mf.set(a,wf(mf.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,vf.set(a,wf(vf.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(bf(e,r),4&t&&-1<yf.indexOf(e)){for(;null!==o;){var a=Ue(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ye(a.pendingLanes);if(0!==i){var s=a;for(s.pendingLanes|=2,s.entangledLanes|=2;i;){var l=1<<31-pe(i);s.entanglements[1]|=l,i&=~l}ku(a),0===(6&nc)&&(kc=te()+500,Su(0,!1))}}break;case 13:null!==(s=_r(a,2))&&Lc(s,0,2),Hc(),ef(a,2)}if(null===(a=sf(r))&&Uu(e,t,r,lf,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Uu(e,t,r,null,n)}}function sf(e){return cf(e=_t(e))}var lf=null;function cf(e){if(lf=null,null!==(e=He(e))){var t=l(e);if(null===t)e=null;else{var n=t.tag;if(13===n){if(null!==(e=c(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null)}}return lf=e,null}function uf(e){switch(e){case"beforetoggle":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"toggle":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 2;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(ne()){case re:return 2;case oe:return 8;case ae:case ie:return 32;case se:return 268435456;default:return 32}default:return 32}}var df=!1,ff=null,pf=null,hf=null,mf=new Map,vf=new Map,gf=[],yf="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split(" ");function bf(e,t){switch(e){case"focusin":case"focusout":ff=null;break;case"dragenter":case"dragleave":pf=null;break;case"mouseover":case"mouseout":hf=null;break;case"pointerover":case"pointerout":mf.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":vf.delete(t.pointerId)}}function wf(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=Ue(t))&&tf(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function xf(e){var t=He(e.target);if(null!==t){var n=l(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=c(n)))return e.blockedOn=t,void function(e,t){var n=A.p;try{return A.p=e,t()}finally{A.p=n}}(e.priority,(function(){if(13===n.tag){var e=Rc();e=De(e);var t=_r(n,e);null!==t&&Lc(t,0,e),ef(n,e)}}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function kf(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=sf(e.nativeEvent);if(null!==n)return null!==(t=Ue(n))&&tf(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Tt=r,n.target.dispatchEvent(r),Tt=null,t.shift()}return!0}function Sf(e,t,n){kf(e)&&n.delete(t)}function Ef(){df=!1,null!==ff&&kf(ff)&&(ff=null),null!==pf&&kf(pf)&&(pf=null),null!==hf&&kf(hf)&&(hf=null),mf.forEach(Sf),vf.forEach(Sf)}function Cf(e,t){e.blockedOn===t&&(e.blockedOn=null,df||(df=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ef)))}var Nf=null;function jf(e){Nf!==e&&(Nf=e,r.unstable_scheduleCallback(r.unstable_NormalPriority,(function(){Nf===e&&(Nf=null);for(var t=0;t<e.length;t+=3){var n=e[t],r=e[t+1],o=e[t+2];if("function"!==typeof r){if(null===cf(r||n))continue;break}var a=Ue(n);null!==a&&(e.splice(t,3),t-=3,_i(a,{pending:!0,data:o,method:n.method,action:r},r,o))}})))}function Df(e){function t(t){return Cf(t,e)}null!==ff&&Cf(ff,e),null!==pf&&Cf(pf,e),null!==hf&&Cf(hf,e),mf.forEach(t),vf.forEach(t);for(var n=0;n<gf.length;n++){var r=gf[n];r.blockedOn===e&&(r.blockedOn=null)}for(;0<gf.length&&null===(n=gf[0]).blockedOn;)xf(n),null===n.blockedOn&&gf.shift();if(null!=(n=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<n.length;r+=3){var o=n[r],a=n[r+1],i=o[Me]||null;if("function"===typeof a)i||jf(n);else if(i){var s=null;if(a&&a.hasAttribute("formAction")){if(o=a,i=a[Me]||null)s=i.formAction;else if(null!==cf(o))continue}else s=i.action;"function"===typeof s?n[r+1]=s:(n.splice(r,3),r-=3),jf(n)}}}function Pf(e){this._internalRoot=e}function Tf(e){this._internalRoot=e}Tf.prototype.render=Pf.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(i(409));Jd(t.current,Rc(),e,t,null,null)},Tf.prototype.unmount=Pf.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;Jd(e.current,2,null,e,null,null),Hc(),t[Re]=null}},Tf.prototype.unstable_scheduleHydration=function(e){if(e){var t=Te();e={blockedOn:null,target:e,priority:t};for(var n=0;n<gf.length&&0!==t&&t<gf[n].priority;n++);gf.splice(n,0,e),0===n&&xf(e)}};var _f=o.version;if("19.1.0"!==_f)throw Error(i(527,_f,"19.1.0"));A.findDOMNode=function(e){var t=e._reactInternals;if(void 0===t){if("function"===typeof e.render)throw Error(i(188));throw e=Object.keys(e).join(","),Error(i(268,e))}return e=function(e){var t=e.alternate;if(!t){if(null===(t=l(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return u(o),e;if(a===r)return u(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var s=!1,c=o.child;c;){if(c===n){s=!0,n=o,r=a;break}if(c===r){s=!0,r=o,n=a;break}c=c.sibling}if(!s){for(c=a.child;c;){if(c===n){s=!0,n=a,r=o;break}if(c===r){s=!0,r=a,n=o;break}c=c.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(t),e=null===(e=null!==e?d(e):null)?null:e.stateNode};var Of={bundleType:0,version:"19.1.0",rendererPackageName:"react-dom",currentDispatcherRef:R,reconcilerVersion:"19.1.0"};if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var Mf=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Mf.isDisabled&&Mf.supportsFiber)try{ue=Mf.inject(Of),de=Mf}catch(Af){}}t.createRoot=function(e,t){if(!s(e))throw Error(i(299));var n=!1,r="",o=ys,a=bs,l=ws;return null!==t&&void 0!==t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onUncaughtError&&(o=t.onUncaughtError),void 0!==t.onCaughtError&&(a=t.onCaughtError),void 0!==t.onRecoverableError&&(l=t.onRecoverableError),void 0!==t.unstable_transitionCallbacks&&t.unstable_transitionCallbacks),t=Gd(e,1,!1,null,0,n,r,o,a,l,0,null),e[Re]=t.current,Bu(e),new Pf(t)},t.hydrateRoot=function(e,t,n){if(!s(e))throw Error(i(299));var r=!1,o="",a=ys,l=bs,c=ws,u=null;return null!==n&&void 0!==n&&(!0===n.unstable_strictMode&&(r=!0),void 0!==n.identifierPrefix&&(o=n.identifierPrefix),void 0!==n.onUncaughtError&&(a=n.onUncaughtError),void 0!==n.onCaughtError&&(l=n.onCaughtError),void 0!==n.onRecoverableError&&(c=n.onRecoverableError),void 0!==n.unstable_transitionCallbacks&&n.unstable_transitionCallbacks,void 0!==n.formState&&(u=n.formState)),(t=Gd(e,1,!0,t,0,r,o,a,l,c,0,u)).context=Xd(null),n=t.current,(o=aa(r=De(r=Rc()))).callback=null,ia(n,o,r),n=r,t.current.lanes=n,Ce(t,n),ku(t),e[Re]=t.current,Bu(e),new Tf(t)},t.version="19.1.0"},557:(e,t,n)=>{"use strict";e.exports=n(696)},592:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,v={};function g(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!==typeof e&&"function"!==typeof e&&null!=e)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")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var w=b.prototype=new y;w.constructor=b,m(w,g.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k={H:null,A:null,T:null,S:null,V:null},S=Object.prototype.hasOwnProperty;function E(e,t,r,o,a,i){return r=i.ref,{$$typeof:n,type:e,key:t,ref:void 0!==r?r:null,props:i}}function C(e){return"object"===typeof e&&null!==e&&e.$$typeof===n}var N=/\/+/g;function j(e,t){return"object"===typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function D(){}function P(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l,c,u=!1;if(null===e)u=!0;else switch(s){case"bigint":case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0;break;case f:return P((u=e._init)(e._payload),t,o,a,i)}}if(u)return i=i(e),u=""===a?"."+j(e,0):a,x(i)?(o="",null!=u&&(o=u.replace(N,"$&/")+"/"),P(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(l=i,c=o+(null==i.key||e&&e.key===i.key?"":(""+i.key).replace(N,"$&/")+"/")+u,i=E(l.type,c,void 0,0,0,l.props)),t.push(i)),1;u=0;var d,h=""===a?".":a+":";if(x(e))for(var m=0;m<e.length;m++)u+=P(a=e[m],t,o,s=h+j(a,m),i);else if("function"===typeof(m=null===(d=e)||"object"!==typeof d?null:"function"===typeof(d=p&&d[p]||d["@@iterator"])?d:null))for(e=m.call(e),m=0;!(a=e.next()).done;)u+=P(a=a.value,t,o,s=h+j(a,m++),i);else if("object"===s){if("function"===typeof e.then)return P(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"===typeof e.status?e.then(D,D):(e.status="pending",e.then((function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)}),(function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)}))),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(e),t,o,a,i);throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.")}return u}function T(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function _(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O="function"===typeof reportError?reportError:function(e){if("object"===typeof window&&"function"===typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"===typeof e&&null!==e&&"string"===typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"===typeof process&&"function"===typeof process.emit)return void process.emit("uncaughtException",e);console.error(e)};function M(){}t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=u,t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,t.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},t.cache=function(e){return function(){return e.apply(null,arguments)}},t.cloneElement=function(e,t,n){if(null===e||void 0===e)throw Error("The argument must be a React element, but you passed "+e+".");var r=m({},e.props),o=e.key;if(null!=t)for(a in void 0!==t.ref&&void 0,void 0!==t.key&&(o=""+t.key),t)!S.call(t,a)||"key"===a||"__self"===a||"__source"===a||"ref"===a&&void 0===t.ref||(r[a]=t[a]);var a=arguments.length-2;if(1===a)r.children=n;else if(1<a){for(var i=Array(a),s=0;s<a;s++)i[s]=arguments[s+2];r.children=i}return E(e.type,o,void 0,0,0,r)},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:s,_context:e},e},t.createElement=function(e,t,n){var r,o={},a=null;if(null!=t)for(r in void 0!==t.key&&(a=""+t.key),t)S.call(t,r)&&"key"!==r&&"__self"!==r&&"__source"!==r&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1<i){for(var s=Array(i),l=0;l<i;l++)s[l]=arguments[l+2];o.children=s}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return E(e,a,void 0,0,0,o)},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:_}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.T,n={};k.T=n;try{var r=e(),o=k.S;null!==o&&o(n,r),"object"===typeof r&&null!==r&&"function"===typeof r.then&&r.then(M,O)}catch(a){O(a)}finally{k.T=t}},t.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},t.use=function(e){return k.H.use(e)},t.useActionState=function(e,t,n){return k.H.useActionState(e,t,n)},t.useCallback=function(e,t){return k.H.useCallback(e,t)},t.useContext=function(e){return k.H.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e,t){return k.H.useDeferredValue(e,t)},t.useEffect=function(e,t,n){var r=k.H;if("function"===typeof n)throw Error("useEffect CRUD overload is not enabled in this build of React.");return r.useEffect(e,t)},t.useId=function(){return k.H.useId()},t.useImperativeHandle=function(e,t,n){return k.H.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return k.H.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return k.H.useLayoutEffect(e,t)},t.useMemo=function(e,t){return k.H.useMemo(e,t)},t.useOptimistic=function(e,t){return k.H.useOptimistic(e,t)},t.useReducer=function(e,t,n){return k.H.useReducer(e,t,n)},t.useRef=function(e){return k.H.useRef(e)},t.useState=function(e){return k.H.useState(e)},t.useSyncExternalStore=function(e,t,n){return k.H.useSyncExternalStore(e,t,n)},t.useTransition=function(){return k.H.useTransition()},t.version="19.1.0"},696:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if(t.unstable_now=void 0,"object"===typeof performance&&"function"===typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,p=3,h=!1,m=!1,v=!1,g=!1,y="function"===typeof setTimeout?setTimeout:null,b="function"===typeof clearTimeout?clearTimeout:null,w="undefined"!==typeof setImmediate?setImmediate:null;function x(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(v=!1,x(e),!m)if(null!==r(c))m=!0,E||(E=!0,S());else{var t=r(u);null!==t&&O(k,t.startTime-e)}}var S,E=!1,C=-1,N=5,j=-1;function D(){return!!g||!(t.unstable_now()-j<N)}function P(){if(g=!1,E){var e=t.unstable_now();j=e;var n=!0;try{e:{m=!1,v&&(v=!1,b(C),C=-1),h=!0;var a=p;try{t:{for(x(e),f=r(c);null!==f&&!(f.expirationTime>e&&D());){var i=f.callback;if("function"===typeof i){f.callback=null,p=f.priorityLevel;var s=i(f.expirationTime<=e);if(e=t.unstable_now(),"function"===typeof s){f.callback=s,x(e),n=!0;break t}f===r(c)&&o(c),x(e)}else o(c);f=r(c)}if(null!==f)n=!0;else{var l=r(u);null!==l&&O(k,l.startTime-e),n=!1}}break e}finally{f=null,p=a,h=!1}n=void 0}}finally{n?S():E=!1}}}if("function"===typeof w)S=function(){w(P)};else if("undefined"!==typeof MessageChannel){var T=new MessageChannel,_=T.port2;T.port1.onmessage=P,S=function(){_.postMessage(null)}}else S=function(){y(P,0)};function O(e,n){C=y((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):N=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=n}},t.unstable_requestPaint=function(){g=!0},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"===typeof a&&null!==a?a="number"===typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(v?(b(C),C=-1):v=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,E||(E=!0,S()))),e},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},719:(e,t)=>{"use strict";var n=Symbol.for("react.transitional.element"),r=Symbol.for("react.fragment");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var a in r={},t)"key"!==a&&(r[a]=t[a]);else r=t;return t=r.ref,{$$typeof:n,type:e,key:o,ref:void 0!==t?t:null,props:r}}t.Fragment=r,t.jsx=o,t.jsxs=o},723:(e,t,n)=>{"use strict";e.exports=n(719)},775:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(556)},808:(e,t,n)=>{"use strict";e.exports=n(276)},904:(e,t,n)=>{"use strict";var r=n(483);function o(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},s=Symbol.for("react.portal");var l=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,t){return"font"===e?"":"string"===typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(o(299));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:s,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.flushSync=function(e){var t=l.T,n=i.p;try{if(l.T=null,i.p=2,e)return e()}finally{l.T=t,i.p=n,i.d.f()}},t.preconnect=function(e,t){"string"===typeof e&&(t?t="string"===typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:t=null,i.d.C(e,t))},t.prefetchDNS=function(e){"string"===typeof e&&i.d.D(e)},t.preinit=function(e,t){if("string"===typeof e&&t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin),o="string"===typeof t.integrity?t.integrity:void 0,a="string"===typeof t.fetchPriority?t.fetchPriority:void 0;"style"===n?i.d.S(e,"string"===typeof t.precedence?t.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):"script"===n&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:"string"===typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"===typeof e)if("object"===typeof t&&null!==t){if(null==t.as||"script"===t.as){var n=c(t.as,t.crossOrigin);i.d.M(e,{crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0})}}else null==t&&i.d.M(e)},t.preload=function(e,t){if("string"===typeof e&&"object"===typeof t&&null!==t&&"string"===typeof t.as){var n=t.as,r=c(n,t.crossOrigin);i.d.L(e,n,{crossOrigin:r,integrity:"string"===typeof t.integrity?t.integrity:void 0,nonce:"string"===typeof t.nonce?t.nonce:void 0,type:"string"===typeof t.type?t.type:void 0,fetchPriority:"string"===typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"===typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"===typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"===typeof t.imageSizes?t.imageSizes:void 0,media:"string"===typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"===typeof e)if(t){var n=c(t.as,t.crossOrigin);i.d.m(e,{as:"string"===typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:n,integrity:"string"===typeof t.integrity?t.integrity:void 0})}else i.d.m(e)},t.requestFormReset=function(e){i.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return l.H.useFormState(e,t,n)},t.useFormStatus=function(){return l.H.useHostTransitionStatus()},t.version="19.1.0"},956:(e,t)=>{t.read=function(e,t,n,r,o){var a,i,s=8*o-r-1,l=(1<<s)-1,c=l>>1,u=-7,d=n?o-1:0,f=n?-1:1,p=e[t+d];for(d+=f,a=p&(1<<-u)-1,p>>=-u,u+=s;u>0;a=256*a+e[t+d],d+=f,u-=8);for(i=a&(1<<-u)-1,a>>=-u,u+=r;u>0;i=256*i+e[t+d],d+=f,u-=8);if(0===a)a=1-c;else{if(a===l)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,r),a-=c}return(p?-1:1)*i*Math.pow(2,a-r)},t.write=function(e,t,n,r,o,a){var i,s,l,c=8*a-o-1,u=(1<<c)-1,d=u>>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:a-1,h=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+d>=1?f/l:f*Math.pow(2,1-d))*l>=2&&(i++,l/=2),i+d>=u?(s=0,i=u):i+d>=1?(s=(t*l-1)*Math.pow(2,o),i+=d):(s=t*Math.pow(2,d-1)*Math.pow(2,o),i=0));o>=8;e[n+p]=255&s,p+=h,s/=256,o-=8);for(i=i<<o|s,c+=o;c>0;e[n+p]=255&i,p+=h,i/=256,c-=8);e[n+p-h]|=128*m}},998:(e,t,n)=>{"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(904)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.m=e,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;n.t=function(r,o){if(1&o&&(r=this(r)),8&o)return r;if("object"===typeof r&&r){if(4&o&&r.__esModule)return r;if(16&o&&"function"===typeof r.then)return r}var a=Object.create(null);n.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&r;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>r[e]));return i.default=()=>r,n.d(a,i),a}})(),n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>"static/js/"+e+".116b9008.chunk.js",n.miniCssF=e=>{},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="frontend:";n.l=(r,o,a,i)=>{if(e[r])e[r].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var d=c[u];if(d.getAttribute("src")==r||d.getAttribute("data-webpack")==t+a){s=d;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,n.nc&&s.setAttribute("nonce",n.nc),s.setAttribute("data-webpack",t+a),s.src=r),e[r]=[o];var f=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(n))),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=f.bind(null,s.onerror),s.onload=f.bind(null,s.onload),l&&document.head.appendChild(s)}}})(),n.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",(()=>{var e={792:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var a=new Promise(((n,r)=>o=e[t]=[n,r]));r.push(o[2]=a);var i=n.p+n.u(t),s=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var a=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,a,i=r[0],s=r[1],l=r[2],c=0;if(i.some((t=>0!==e[t]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(l)l(n)}for(t&&t(r);c<i.length;c++)a=i[c],n.o(e,a)&&e[a]&&e[a][0](),e[a]=0},r=self.webpackChunkfrontend=self.webpackChunkfrontend||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";var e={};n.r(e),n.d(e,{hasBrowserEnv:()=>Ft,hasStandardBrowserEnv:()=>Bt,hasStandardBrowserWebWorkerEnv:()=>Ht,navigator:()=>zt,origin:()=>Ut});var t,r=n(483),o=n.t(r,2),a=n(775),i=n(998),s=n.t(i,2);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(t||(t={}));const c="popstate";function u(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function d(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function f(e,t){return{usr:e.state,key:e.key,idx:t}}function p(e,t,n,r){return void 0===n&&(n=null),l({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?m(t):t,{state:n,key:t&&t.key||r||Math.random().toString(36).substr(2,8)})}function h(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function m(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function v(e,n,r,o){void 0===o&&(o={});let{window:a=document.defaultView,v5Compat:i=!1}=o,s=a.history,d=t.Pop,m=null,v=g();function g(){return(s.state||{idx:null}).idx}function y(){d=t.Pop;let e=g(),n=null==e?null:e-v;v=e,m&&m({action:d,location:w.location,delta:n})}function b(e){let t="null"!==a.location.origin?a.location.origin:a.location.href,n="string"===typeof e?e:h(e);return n=n.replace(/ $/,"%20"),u(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==v&&(v=0,s.replaceState(l({},s.state,{idx:v}),""));let w={get action(){return d},get location(){return e(a,s)},listen(e){if(m)throw new Error("A history only accepts one active listener");return a.addEventListener(c,y),m=e,()=>{a.removeEventListener(c,y),m=null}},createHref:e=>n(a,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,n){d=t.Push;let o=p(w.location,e,n);r&&r(o,e),v=g()+1;let l=f(o,v),c=w.createHref(o);try{s.pushState(l,"",c)}catch(u){if(u instanceof DOMException&&"DataCloneError"===u.name)throw u;a.location.assign(c)}i&&m&&m({action:d,location:w.location,delta:1})},replace:function(e,n){d=t.Replace;let o=p(w.location,e,n);r&&r(o,e),v=g();let a=f(o,v),l=w.createHref(o);s.replaceState(a,"",l),i&&m&&m({action:d,location:w.location,delta:0})},go:e=>s.go(e)};return w}var g;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(g||(g={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function y(e,t,n){return void 0===n&&(n="/"),b(e,t,n,!1)}function b(e,t,n,r){let o=M(("string"===typeof t?m(t):t).pathname||"/",n);if(null==o)return null;let a=w(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let s=0;null==i&&s<a.length;++s){let e=O(o);i=T(a[s],e,r)}return i}function w(e,t,n,r){void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r="");let o=(e,o,a)=>{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(u(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let s=F([r,i.relativePath]),l=n.concat(i);e.children&&e.children.length>0&&(u(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+s+'".'),w(e.children,t,l,s)),(null!=e.path||e.index)&&t.push({path:s,score:P(s,e.index),routesMeta:l})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of x(e.path))o(e,t,r);else o(e,t)})),t}function x(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=x(r.join("/")),s=[];return s.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&s.push(...i),s.map((t=>e.startsWith("/")&&""===t?"/":t))}const k=/^:[\w-]+$/,S=3,E=2,C=1,N=10,j=-2,D=e=>"*"===e;function P(e,t){let n=e.split("/"),r=n.length;return n.some(D)&&(r+=j),t&&(r+=E),n.filter((e=>!D(e))).reduce(((e,t)=>e+(k.test(t)?S:""===t?C:N)),r)}function T(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let s=0;s<r.length;++s){let e=r[s],l=s===r.length-1,c="/"===a?t:t.slice(a.length)||"/",u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:l},c),d=e.route;if(!u&&l&&n&&!r[r.length-1].route.index&&(u=_({path:e.relativePath,caseSensitive:e.caseSensitive,end:!1},c)),!u)return null;Object.assign(o,u.params),i.push({params:o,pathname:F([a,u.pathname]),pathnameBase:z(F([a,u.pathnameBase])),route:d}),"/"!==u.pathnameBase&&(a=F([a,u.pathnameBase]))}return i}function _(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);d("*"===e||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were "'+e.replace(/\*$/,"/*")+'" because the `*` character must always follow a `/` in the pattern. To get rid of this warning, please change the route path to "'+e.replace(/\*$/,"/*")+'".');let r=[],o="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,((e,t,n)=>(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))");let a=new RegExp(o,t?void 0:"i");return[a,r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),s=o.slice(1),l=r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const l=s[n];return e[r]=o&&!l?void 0:(l||"").replace(/%2F/g,"/"),e}),{});return{params:l,pathname:a,pathnameBase:i,pattern:e}}function O(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return d(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function M(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function R(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"].  Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.'}function A(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function L(e,t){let n=A(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}function I(e,t,n,r){let o;void 0===r&&(r=!1),"string"===typeof e?o=m(e):(o=l({},e),u(!o.pathname||!o.pathname.includes("?"),R("?","pathname","search",o)),u(!o.pathname||!o.pathname.includes("#"),R("#","pathname","hash",o)),u(!o.search||!o.search.includes("#"),R("#","search","hash",o)));let a,i=""===e||""===o.pathname,s=i?"/":o.pathname;if(null==s)a=n;else{let e=t.length-1;if(!r&&s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let c=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"===typeof e?m(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:B(r),hash:H(o)}}(o,a),d=s&&"/"!==s&&s.endsWith("/"),f=(i||"."===s)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!f||(c.pathname+="/"),c}const F=e=>e.join("/").replace(/\/\/+/g,"/"),z=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),B=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",H=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;function U(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const Y=["post","put","patch","delete"],W=(new Set(Y),["get",...Y]);new Set(W),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred");function q(){return q=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},q.apply(this,arguments)}const V=r.createContext(null);const Q=r.createContext(null);const K=r.createContext(null);const $=r.createContext(null);const G=r.createContext({outlet:null,matches:[],isDataRoute:!1});const X=r.createContext(null);function J(){return null!=r.useContext($)}function Z(){return J()||u(!1),r.useContext($).location}function ee(e){r.useContext(K).static||r.useLayoutEffect(e)}function te(){let{isDataRoute:e}=r.useContext(G);return e?function(){let{router:e}=fe(ue.UseNavigateStable),t=he(de.UseNavigateStable),n=r.useRef(!1);return ee((()=>{n.current=!0})),r.useCallback((function(r,o){void 0===o&&(o={}),n.current&&("number"===typeof r?e.navigate(r):e.navigate(r,q({fromRouteId:t},o)))}),[e,t])}():function(){J()||u(!1);let e=r.useContext(V),{basename:t,future:n,navigator:o}=r.useContext(K),{matches:a}=r.useContext(G),{pathname:i}=Z(),s=JSON.stringify(L(a,n.v7_relativeSplatPath)),l=r.useRef(!1);return ee((()=>{l.current=!0})),r.useCallback((function(n,r){if(void 0===r&&(r={}),!l.current)return;if("number"===typeof n)return void o.go(n);let a=I(n,JSON.parse(s),i,"path"===r.relative);null==e&&"/"!==t&&(a.pathname="/"===a.pathname?t:F([t,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[t,o,s,i,e])}()}const ne=r.createContext(null);function re(){let{matches:e}=r.useContext(G),t=e[e.length-1];return t?t.params:{}}function oe(e,n,o,a){J()||u(!1);let{navigator:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),c=l[l.length-1],d=c?c.params:{},f=(c&&c.pathname,c?c.pathnameBase:"/");c&&c.route;let p,h=Z();if(n){var v;let e="string"===typeof n?m(n):n;"/"===f||(null==(v=e.pathname)?void 0:v.startsWith(f))||u(!1),p=e}else p=h;let g=p.pathname||"/",b=g;if("/"!==f){let e=f.replace(/^\//,"").split("/");b="/"+g.replace(/^\//,"").split("/").slice(e.length).join("/")}let w=!s&&o&&o.matches&&o.matches.length>0?o.matches:y(e,{pathname:b});let x=ce(w&&w.map((e=>Object.assign({},e,{params:Object.assign({},d,e.params),pathname:F([f,i.encodeLocation?i.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?f:F([f,i.encodeLocation?i.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),l,o,a);return n&&x?r.createElement($.Provider,{value:{location:q({pathname:"/",search:"",hash:"",state:null,key:"default"},p),navigationType:t.Pop}},x):x}function ae(){let e=function(){var e;let t=r.useContext(X),n=pe(de.UseRouteError),o=he(de.UseRouteError);if(void 0!==t)return t;return null==(e=n.errors)?void 0:e[o]}(),t=U(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,o="rgba(200,200,200, 0.5)",a={padding:"0.5rem",backgroundColor:o};return r.createElement(r.Fragment,null,r.createElement("h2",null,"Unexpected Application Error!"),r.createElement("h3",{style:{fontStyle:"italic"}},t),n?r.createElement("pre",{style:a},n):null,null)}const ie=r.createElement(ae,null);class se extends r.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?r.createElement(G.Provider,{value:this.props.routeContext},r.createElement(X.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function le(e){let{routeContext:t,match:n,children:o}=e,a=r.useContext(V);return a&&a.static&&a.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=n.route.id),r.createElement(G.Provider,{value:t},o)}function ce(e,t,n,o){var a;if(void 0===t&&(t=[]),void 0===n&&(n=null),void 0===o&&(o=null),null==e){var i;if(!n)return null;if(n.errors)e=n.matches;else{if(!(null!=(i=o)&&i.v7_partialHydration&&0===t.length&&!n.initialized&&n.matches.length>0))return null;e=n.matches}}let s=e,l=null==(a=n)?void 0:a.errors;if(null!=l){let e=s.findIndex((e=>e.route.id&&void 0!==(null==l?void 0:l[e.route.id])));e>=0||u(!1),s=s.slice(0,Math.min(s.length,e+1))}let c=!1,d=-1;if(n&&o&&o.v7_partialHydration)for(let r=0;r<s.length;r++){let e=s[r];if((e.route.HydrateFallback||e.route.hydrateFallbackElement)&&(d=r),e.route.id){let{loaderData:t,errors:r}=n,o=e.route.loader&&void 0===t[e.route.id]&&(!r||void 0===r[e.route.id]);if(e.route.lazy||o){c=!0,s=d>=0?s.slice(0,d+1):[s[0]];break}}}return s.reduceRight(((e,o,a)=>{let i,u=!1,f=null,p=null;var h;n&&(i=l&&o.route.id?l[o.route.id]:void 0,f=o.route.errorElement||ie,c&&(d<0&&0===a?(h="route-fallback",!1||me[h]||(me[h]=!0),u=!0,p=null):d===a&&(u=!0,p=o.route.hydrateFallbackElement||null)));let m=t.concat(s.slice(0,a+1)),v=()=>{let t;return t=i?f:u?p:o.route.Component?r.createElement(o.route.Component,null):o.route.element?o.route.element:e,r.createElement(le,{match:o,routeContext:{outlet:e,matches:m,isDataRoute:null!=n},children:t})};return n&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?r.createElement(se,{location:n.location,revalidation:n.revalidation,component:f,error:i,children:v(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):v()}),null)}var ue=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(ue||{}),de=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(de||{});function fe(e){let t=r.useContext(V);return t||u(!1),t}function pe(e){let t=r.useContext(Q);return t||u(!1),t}function he(e){let t=function(){let e=r.useContext(G);return e||u(!1),e}(),n=t.matches[t.matches.length-1];return n.route.id||u(!1),n.route.id}const me={};function ve(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:e.v7_relativeSplatPath)&&(!t||t.v7_relativeSplatPath),t&&(t.v7_fetcherPersist,t.v7_normalizeFormMethod,t.v7_partialHydration,t.v7_skipActionErrorRevalidation)}o.startTransition;function ge(e){let{to:t,replace:n,state:o,relative:a}=e;J()||u(!1);let{future:i,static:s}=r.useContext(K),{matches:l}=r.useContext(G),{pathname:c}=Z(),d=te(),f=I(t,L(l,i.v7_relativeSplatPath),c,"path"===a),p=JSON.stringify(f);return r.useEffect((()=>d(JSON.parse(p),{replace:n,state:o,relative:a})),[d,p,a,n,o]),null}function ye(e){return function(e){let t=r.useContext(G).outlet;return t?r.createElement(ne.Provider,{value:e},t):t}(e.context)}function be(e){u(!1)}function we(e){let{basename:n="/",children:o=null,location:a,navigationType:i=t.Pop,navigator:s,static:l=!1,future:c}=e;J()&&u(!1);let d=n.replace(/^\/*/,"/"),f=r.useMemo((()=>({basename:d,navigator:s,static:l,future:q({v7_relativeSplatPath:!1},c)})),[d,c,s,l]);"string"===typeof a&&(a=m(a));let{pathname:p="/",search:h="",hash:v="",state:g=null,key:y="default"}=a,b=r.useMemo((()=>{let e=M(p,d);return null==e?null:{location:{pathname:e,search:h,hash:v,state:g,key:y},navigationType:i}}),[d,p,h,v,g,y,i]);return null==b?null:r.createElement(K.Provider,{value:f},r.createElement($.Provider,{children:o,value:b}))}function xe(e){let{children:t,location:n}=e;return oe(ke(t),n)}new Promise((()=>{}));r.Component;function ke(e,t){void 0===t&&(t=[]);let n=[];return r.Children.forEach(e,((e,o)=>{if(!r.isValidElement(e))return;let a=[...t,o];if(e.type===r.Fragment)return void n.push.apply(n,ke(e.props.children,a));e.type!==be&&u(!1),e.props.index&&e.props.children&&u(!1);let i={id:e.props.id||a.join("-"),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,loader:e.props.loader,action:e.props.action,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:null!=e.props.ErrorBoundary||null!=e.props.errorElement,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(i.children=ke(e.props.children,a)),n.push(i)})),n}new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(Dy){}new Map;const Se=o.startTransition;s.flushSync,o.useId;function Ee(e){let{basename:t,children:n,future:o,window:a}=e,i=r.useRef();var s;null==i.current&&(i.current=(void 0===(s={window:a,v5Compat:!0})&&(s={}),v((function(e,t){let{pathname:n,search:r,hash:o}=e.location;return p("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:h(t)}),null,s)));let l=i.current,[c,u]=r.useState({action:l.action,location:l.location}),{v7_startTransition:d}=o||{},f=r.useCallback((e=>{d&&Se?Se((()=>u(e))):u(e)}),[u,d]);return r.useLayoutEffect((()=>l.listen(f)),[l,f]),r.useEffect((()=>ve(o)),[o]),r.createElement(we,{basename:t,children:n,location:c.location,navigationType:c.action,navigator:l,future:o})}"undefined"!==typeof window&&"undefined"!==typeof window.document&&window.document.createElement;var Ce,Ne;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Ce||(Ce={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Ne||(Ne={}));function je(e){return je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},je(e)}function De(e){var t=function(e,t){if("object"!=je(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==je(t)?t:t+""}function Pe(e,t,n){return(t=De(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Te(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 _e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Te(Object(n),!0).forEach((function(t){Pe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Te(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t){return function(){return e.apply(t,arguments)}}const{toString:Me}=Object.prototype,{getPrototypeOf:Re}=Object,{iterator:Ae,toStringTag:Le}=Symbol,Ie=(Fe=Object.create(null),e=>{const t=Me.call(e);return Fe[t]||(Fe[t]=t.slice(8,-1).toLowerCase())});var Fe;const ze=e=>(e=e.toLowerCase(),t=>Ie(t)===e),Be=e=>t=>typeof t===e,{isArray:He}=Array,Ue=Be("undefined");const Ye=ze("ArrayBuffer");const We=Be("string"),qe=Be("function"),Ve=Be("number"),Qe=e=>null!==e&&"object"===typeof e,Ke=e=>{if("object"!==Ie(e))return!1;const t=Re(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Le in e)&&!(Ae in e)},$e=ze("Date"),Ge=ze("File"),Xe=ze("Blob"),Je=ze("FileList"),Ze=ze("URLSearchParams"),[et,tt,nt,rt]=["ReadableStream","Request","Response","Headers"].map(ze);function ot(e,t){let n,r,{allOwnKeys:o=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),He(e))for(n=0,r=e.length;n<r;n++)t.call(null,e[n],n,e);else{const r=o?Object.getOwnPropertyNames(e):Object.keys(e),a=r.length;let i;for(n=0;n<a;n++)i=r[n],t.call(null,e[i],i,e)}}function at(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const it="undefined"!==typeof globalThis?globalThis:"undefined"!==typeof self?self:"undefined"!==typeof window?window:global,st=e=>!Ue(e)&&e!==it;const lt=(ct="undefined"!==typeof Uint8Array&&Re(Uint8Array),e=>ct&&e instanceof ct);var ct;const ut=ze("HTMLFormElement"),dt=(e=>{let{hasOwnProperty:t}=e;return(e,n)=>t.call(e,n)})(Object.prototype),ft=ze("RegExp"),pt=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};ot(n,((n,o)=>{let a;!1!==(a=t(n,o,e))&&(r[o]=a||n)})),Object.defineProperties(e,r)};const ht=ze("AsyncFunction"),mt=(vt="function"===typeof setImmediate,gt=qe(it.postMessage),vt?setImmediate:gt?((e,t)=>(it.addEventListener("message",(n=>{let{source:r,data:o}=n;r===it&&o===e&&t.length&&t.shift()()}),!1),n=>{t.push(n),it.postMessage(e,"*")}))("axios@".concat(Math.random()),[]):e=>setTimeout(e));var vt,gt;const yt="undefined"!==typeof queueMicrotask?queueMicrotask.bind(it):"undefined"!==typeof process&&process.nextTick||mt,bt={isArray:He,isArrayBuffer:Ye,isBuffer:function(e){return null!==e&&!Ue(e)&&null!==e.constructor&&!Ue(e.constructor)&&qe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"===typeof FormData&&e instanceof FormData||qe(e.append)&&("formdata"===(t=Ie(e))||"object"===t&&qe(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&Ye(e.buffer),t},isString:We,isNumber:Ve,isBoolean:e=>!0===e||!1===e,isObject:Qe,isPlainObject:Ke,isReadableStream:et,isRequest:tt,isResponse:nt,isHeaders:rt,isUndefined:Ue,isDate:$e,isFile:Ge,isBlob:Xe,isRegExp:ft,isFunction:qe,isStream:e=>Qe(e)&&qe(e.pipe),isURLSearchParams:Ze,isTypedArray:lt,isFileList:Je,forEach:ot,merge:function e(){const{caseless:t}=st(this)&&this||{},n={},r=(r,o)=>{const a=t&&at(n,o)||o;Ke(n[a])&&Ke(r)?n[a]=e(n[a],r):Ke(r)?n[a]=e({},r):He(r)?n[a]=r.slice():n[a]=r};for(let o=0,a=arguments.length;o<a;o++)arguments[o]&&ot(arguments[o],r);return n},extend:function(e,t,n){let{allOwnKeys:r}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return ot(t,((t,r)=>{n&&qe(t)?e[r]=Oe(t,n):e[r]=t}),{allOwnKeys:r}),e},trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,a,i;const s={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),a=o.length;a-- >0;)i=o[a],r&&!r(i,e,t)||s[i]||(t[i]=e[i],s[i]=!0);e=!1!==n&&Re(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:Ie,kindOfTest:ze,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(He(e))return e;let t=e.length;if(!Ve(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Ae]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:ut,hasOwnProperty:dt,hasOwnProp:dt,reduceDescriptors:pt,freezeMethods:e=>{pt(e,((t,n)=>{if(qe(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];qe(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return He(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:at,global:it,isContextDefined:st,isSpecCompliantForm:function(e){return!!(e&&qe(e.append)&&"FormData"===e[Le]&&e[Ae])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(Qe(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=He(e)?[]:{};return ot(e,((e,t)=>{const a=n(e,r+1);!Ue(a)&&(o[t]=a)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:ht,isThenable:e=>e&&(Qe(e)||qe(e))&&qe(e.then)&&qe(e.catch),setImmediate:mt,asap:yt,isIterable:e=>null!=e&&qe(e[Ae])};function wt(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}bt.inherits(wt,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:bt.toJSONObject(this.config),code:this.code,status:this.status}}});const xt=wt.prototype,kt={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{kt[e]={value:e}})),Object.defineProperties(wt,kt),Object.defineProperty(xt,"isAxiosError",{value:!0}),wt.from=(e,t,n,r,o,a)=>{const i=Object.create(xt);return bt.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),wt.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};const St=wt;function Et(e){return bt.isPlainObject(e)||bt.isArray(e)}function Ct(e){return bt.endsWith(e,"[]")?e.slice(0,-2):e}function Nt(e,t,n){return e?e.concat(t).map((function(e,t){return e=Ct(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const jt=bt.toFlatObject(bt,{},null,(function(e){return/^is[A-Z]/.test(e)}));const Dt=function(e,t,n){if(!bt.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=bt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!bt.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,a=n.dots,i=n.indexes,s=(n.Blob||"undefined"!==typeof Blob&&Blob)&&bt.isSpecCompliantForm(t);if(!bt.isFunction(o))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(bt.isDate(e))return e.toISOString();if(!s&&bt.isBlob(e))throw new St("Blob is not supported. Use a Buffer instead.");return bt.isArrayBuffer(e)||bt.isTypedArray(e)?s&&"function"===typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let s=e;if(e&&!o&&"object"===typeof e)if(bt.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(bt.isArray(e)&&function(e){return bt.isArray(e)&&!e.some(Et)}(e)||(bt.isFileList(e)||bt.endsWith(n,"[]"))&&(s=bt.toArray(e)))return n=Ct(n),s.forEach((function(e,r){!bt.isUndefined(e)&&null!==e&&t.append(!0===i?Nt([n],r,a):null===i?n:n+"[]",l(e))})),!1;return!!Et(e)||(t.append(Nt(o,n,a),l(e)),!1)}const u=[],d=Object.assign(jt,{defaultVisitor:c,convertValue:l,isVisitable:Et});if(!bt.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!bt.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),bt.forEach(n,(function(n,a){!0===(!(bt.isUndefined(n)||null===n)&&o.call(t,n,bt.isString(a)?a.trim():a,r,d))&&e(n,r?r.concat(a):[a])})),u.pop()}}(e),t};function Pt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Tt(e,t){this._pairs=[],e&&Dt(e,this,t)}const _t=Tt.prototype;_t.append=function(e,t){this._pairs.push([e,t])},_t.toString=function(e){const t=e?function(t){return e.call(this,t,Pt)}:Pt;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Ot=Tt;function Mt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Rt(e,t,n){if(!t)return e;const r=n&&n.encode||Mt;bt.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let a;if(a=o?o(t,n):bt.isURLSearchParams(t)?t.toString():new Ot(t,n).toString(r),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}const At=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){bt.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Lt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},It={isBrowser:!0,classes:{URLSearchParams:"undefined"!==typeof URLSearchParams?URLSearchParams:Ot,FormData:"undefined"!==typeof FormData?FormData:null,Blob:"undefined"!==typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ft="undefined"!==typeof window&&"undefined"!==typeof document,zt="object"===typeof navigator&&navigator||void 0,Bt=Ft&&(!zt||["ReactNative","NativeScript","NS"].indexOf(zt.product)<0),Ht="undefined"!==typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"===typeof self.importScripts,Ut=Ft&&window.location.href||"http://localhost",Yt=_e(_e({},e),It);const Wt=function(e){function t(e,n,r,o){let a=e[o++];if("__proto__"===a)return!0;const i=Number.isFinite(+a),s=o>=e.length;if(a=!a&&bt.isArray(r)?r.length:a,s)return bt.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!i;r[a]&&bt.isObject(r[a])||(r[a]=[]);return t(e,n,r[a],o)&&bt.isArray(r[a])&&(r[a]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let a;for(r=0;r<o;r++)a=n[r],t[a]=e[a];return t}(r[a])),!i}if(bt.isFormData(e)&&bt.isFunction(e.entries)){const n={};return bt.forEachEntry(e,((e,r)=>{t(function(e){return bt.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null};const qt={transitional:Lt,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=bt.isObject(e);o&&bt.isHTMLForm(e)&&(e=new FormData(e));if(bt.isFormData(e))return r?JSON.stringify(Wt(e)):e;if(bt.isArrayBuffer(e)||bt.isBuffer(e)||bt.isStream(e)||bt.isFile(e)||bt.isBlob(e)||bt.isReadableStream(e))return e;if(bt.isArrayBufferView(e))return e.buffer;if(bt.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Dt(e,new Yt.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return Yt.isNode&&bt.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((a=bt.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Dt(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(bt.isString(e))try{return(t||JSON.parse)(e),bt.trim(e)}catch(Dy){if("SyntaxError"!==Dy.name)throw Dy}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||qt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(bt.isResponse(e)||bt.isReadableStream(e))return e;if(e&&bt.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(Dy){if(n){if("SyntaxError"===Dy.name)throw St.from(Dy,St.ERR_BAD_RESPONSE,this,null,this.response);throw Dy}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Yt.classes.FormData,Blob:Yt.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};bt.forEach(["delete","get","head","post","put","patch"],(e=>{qt.headers[e]={}}));const Vt=qt,Qt=bt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Kt=Symbol("internals");function $t(e){return e&&String(e).trim().toLowerCase()}function Gt(e){return!1===e||null==e?e:bt.isArray(e)?e.map(Gt):String(e)}function Xt(e,t,n,r,o){return bt.isFunction(r)?r.call(this,t,n):(o&&(t=n),bt.isString(t)?bt.isString(r)?-1!==t.indexOf(r):bt.isRegExp(r)?r.test(t):void 0:void 0)}class Jt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=$t(t);if(!o)throw new Error("header name must be a non-empty string");const a=bt.findKey(r,o);(!a||void 0===r[a]||!0===n||void 0===n&&!1!==r[a])&&(r[a||t]=Gt(e))}const a=(e,t)=>bt.forEach(e,((e,n)=>o(e,n,t)));if(bt.isPlainObject(e)||e instanceof this.constructor)a(e,t);else if(bt.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))a((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&Qt[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(bt.isObject(e)&&bt.isIterable(e)){let n,r,o={};for(const t of e){if(!bt.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?bt.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}a(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=$t(e)){const n=bt.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(bt.isFunction(t))return t.call(this,e,n);if(bt.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=$t(e)){const n=bt.findKey(this,e);return!(!n||void 0===this[n]||t&&!Xt(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=$t(e)){const o=bt.findKey(n,e);!o||t&&!Xt(0,n[o],o,t)||(delete n[o],r=!0)}}return bt.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Xt(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return bt.forEach(this,((r,o)=>{const a=bt.findKey(n,o);if(a)return t[a]=Gt(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();i!==o&&delete t[o],t[i]=Gt(r),n[i]=!0})),this}concat(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.constructor.concat(this,...t)}toJSON(e){const t=Object.create(null);return bt.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&bt.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((e=>{let[t,n]=e;return t+": "+n})).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e){const t=new this(e);for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach((e=>t.set(e))),t}static accessor(e){const t=(this[Kt]=this[Kt]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=$t(e);t[r]||(!function(e,t){const n=bt.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return bt.isArray(e)?e.forEach(r):r(e),this}}Jt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),bt.reduceDescriptors(Jt.prototype,((e,t)=>{let{value:n}=e,r=t[0].toUpperCase()+t.slice(1);return{get:()=>n,set(e){this[r]=e}}})),bt.freezeMethods(Jt);const Zt=Jt;function en(e,t){const n=this||Vt,r=t||n,o=Zt.from(r.headers);let a=r.data;return bt.forEach(e,(function(e){a=e.call(n,a,o.normalize(),t?t.status:void 0)})),o.normalize(),a}function tn(e){return!(!e||!e.__CANCEL__)}function nn(e,t,n){St.call(this,null==e?"canceled":e,St.ERR_CANCELED,t,n),this.name="CanceledError"}bt.inherits(nn,St,{__CANCEL__:!0});const rn=nn;function on(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new St("Request failed with status code "+n.status,[St.ERR_BAD_REQUEST,St.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}const an=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,a=0,i=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=r[i];o||(o=l),n[a]=s,r[a]=l;let u=i,d=0;for(;u!==a;)d+=n[u++],u%=e;if(a=(a+1)%e,a===i&&(i=(i+1)%e),l-o<t)return;const f=c&&l-c;return f?Math.round(1e3*d/f):void 0}};const sn=function(e,t){let n,r,o=0,a=1e3/t;const i=function(t){let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now();o=a,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[function(){const e=Date.now(),t=e-o;for(var s=arguments.length,l=new Array(s),c=0;c<s;c++)l[c]=arguments[c];t>=a?i(l,e):(n=l,r||(r=setTimeout((()=>{r=null,i(n)}),a-t)))},()=>n&&i(n)]},ln=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,r=0;const o=an(50,250);return sn((n=>{const a=n.loaded,i=n.lengthComputable?n.total:void 0,s=a-r,l=o(s);r=a;e({loaded:a,total:i,progress:i?a/i:void 0,bytes:s,rate:l||void 0,estimated:l&&i&&a<=i?(i-a)/l:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})}),n)},cn=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},un=e=>function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return bt.asap((()=>e(...n)))},dn=Yt.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Yt.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Yt.origin),Yt.navigator&&/(msie|trident)/i.test(Yt.navigator.userAgent)):()=>!0,fn=Yt.hasStandardBrowserEnv?{write(e,t,n,r,o,a){const i=[e+"="+encodeURIComponent(t)];bt.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),bt.isString(r)&&i.push("path="+r),bt.isString(o)&&i.push("domain="+o),!0===a&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function pn(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const hn=e=>e instanceof Zt?_e({},e):e;function mn(e,t){t=t||{};const n={};function r(e,t,n,r){return bt.isPlainObject(e)&&bt.isPlainObject(t)?bt.merge.call({caseless:r},e,t):bt.isPlainObject(t)?bt.merge({},t):bt.isArray(t)?t.slice():t}function o(e,t,n,o){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function a(e,t){if(!bt.isUndefined(t))return r(void 0,t)}function i(e,t){return bt.isUndefined(t)?bt.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,a){return a in t?r(n,o):a in e?r(void 0,n):void 0}const l={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:s,headers:(e,t,n)=>o(hn(e),hn(t),0,!0)};return bt.forEach(Object.keys(Object.assign({},e,t)),(function(r){const a=l[r]||o,i=a(e[r],t[r],r);bt.isUndefined(i)&&a!==s||(n[r]=i)})),n}const vn=e=>{const t=mn({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:a,xsrfCookieName:i,headers:s,auth:l}=t;if(t.headers=s=Zt.from(s),t.url=Rt(pn(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),bt.isFormData(r))if(Yt.hasStandardBrowserEnv||Yt.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(!1!==(n=s.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];s.setContentType([e||"multipart/form-data",...t].join("; "))}if(Yt.hasStandardBrowserEnv&&(o&&bt.isFunction(o)&&(o=o(t)),o||!1!==o&&dn(t.url))){const e=a&&i&&fn.read(i);e&&s.set(a,e)}return t},gn="undefined"!==typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=vn(e);let o=r.data;const a=Zt.from(r.headers).normalize();let i,s,l,c,u,{responseType:d,onUploadProgress:f,onDownloadProgress:p}=r;function h(){c&&c(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function v(){if(!m)return;const r=Zt.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());on((function(e){t(e),h()}),(function(e){n(e),h()}),{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=v:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(v)},m.onabort=function(){m&&(n(new St("Request aborted",St.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new St("Network Error",St.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||Lt;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new St(t,o.clarifyTimeoutError?St.ETIMEDOUT:St.ECONNABORTED,e,m)),m=null},void 0===o&&a.setContentType(null),"setRequestHeader"in m&&bt.forEach(a.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),bt.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),p&&([l,u]=ln(p,!0),m.addEventListener("progress",l)),f&&m.upload&&([s,c]=ln(f),m.upload.addEventListener("progress",s),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new rn(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const g=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);g&&-1===Yt.protocols.indexOf(g)?n(new St("Unsupported protocol "+g+":",St.ERR_BAD_REQUEST,e)):m.send(o||null)}))},yn=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof St?t:new rn(t instanceof Error?t.message:t))}};let a=t&&setTimeout((()=>{a=null,o(new St("timeout ".concat(t," of ms exceeded"),St.ETIMEDOUT))}),t);const i=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:s}=r;return s.unsubscribe=()=>bt.asap(i),s}};function bn(e,t){this.v=e,this.k=t}function wn(e){return function(){return new xn(e.apply(this,arguments))}}function xn(e){var t,n;function r(t,n){try{var a=e[t](n),i=a.value,s=i instanceof bn;Promise.resolve(s?i.v:i).then((function(n){if(s){var l="return"===t?"return":"next";if(!i.k||n.done)return r(l,n);n=e[l](n).value}o(a.done?"return":"normal",n)}),(function(e){r("throw",e)}))}catch(e){o("throw",e)}}function o(e,o){switch(e){case"return":t.resolve({value:o,done:!0});break;case"throw":t.reject(o);break;default:t.resolve({value:o,done:!1})}(t=t.next)?r(t.key,t.arg):n=null}this._invoke=function(e,o){return new Promise((function(a,i){var s={key:e,arg:o,resolve:a,reject:i,next:null};n?n=n.next=s:(t=n=s,r(e,o))}))},"function"!=typeof e.return&&(this.return=void 0)}function kn(e){return new bn(e,0)}function Sn(e){var t={},n=!1;function r(t,r){return n=!0,r=new Promise((function(n){n(e[t](r))})),{done:!1,value:new bn(r,1)}}return t["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},t.next=function(e){return n?(n=!1,e):r("next",e)},"function"==typeof e.throw&&(t.throw=function(e){if(n)throw n=!1,e;return r("throw",e)}),"function"==typeof e.return&&(t.return=function(e){return n?(n=!1,e):r("return",e)}),t}function En(e){var t,n,r,o=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);o--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new Cn(t.call(e));n="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function Cn(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return Cn=function(e){this.s=e,this.n=e.next},Cn.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new Cn(e)}xn.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},xn.prototype.next=function(e){return this._invoke("next",e)},xn.prototype.throw=function(e){return this._invoke("throw",e)},xn.prototype.return=function(e){return this._invoke("return",e)};const Nn=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},jn=function(){var e=wn((function*(e,t){var n,r=!1,o=!1;try{for(var a,i=En(Dn(e));r=!(a=yield kn(i.next())).done;r=!1){const e=a.value;yield*Sn(En(Nn(e,t)))}}catch(s){o=!0,n=s}finally{try{r&&null!=i.return&&(yield kn(i.return()))}finally{if(o)throw n}}}));return function(t,n){return e.apply(this,arguments)}}(),Dn=function(){var e=wn((function*(e){if(e[Symbol.asyncIterator])return void(yield*Sn(En(e)));const t=e.getReader();try{for(;;){const{done:e,value:n}=yield kn(t.read());if(e)break;yield n}}finally{yield kn(t.cancel())}}));return function(t){return e.apply(this,arguments)}}(),Pn=(e,t,n,r)=>{const o=jn(e,t);let a,i=0,s=e=>{a||(a=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return s(),void e.close();let a=r.byteLength;if(n){let e=i+=a;n(e)}e.enqueue(new Uint8Array(r))}catch(t){throw s(t),t}},cancel:e=>(s(e),o.return())},{highWaterMark:2})},Tn="function"===typeof fetch&&"function"===typeof Request&&"function"===typeof Response,_n=Tn&&"function"===typeof ReadableStream,On=Tn&&("function"===typeof TextEncoder?(Mn=new TextEncoder,e=>Mn.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Mn;const Rn=function(e){try{for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return!!e(...n)}catch(Dy){return!1}},An=_n&&Rn((()=>{let e=!1;const t=new Request(Yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ln=_n&&Rn((()=>bt.isReadableStream(new Response("").body))),In={stream:Ln&&(e=>e.body)};var Fn;Tn&&(Fn=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!In[e]&&(In[e]=bt.isFunction(Fn[e])?t=>t[e]():(t,n)=>{throw new St("Response type '".concat(e,"' is not supported"),St.ERR_NOT_SUPPORT,n)})})));const zn=async(e,t)=>{const n=bt.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(bt.isBlob(e))return e.size;if(bt.isSpecCompliantForm(e)){const t=new Request(Yt.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return bt.isArrayBufferView(e)||bt.isArrayBuffer(e)?e.byteLength:(bt.isURLSearchParams(e)&&(e+=""),bt.isString(e)?(await On(e)).byteLength:void 0)})(t):n},Bn=Tn&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:a,timeout:i,onDownloadProgress:s,onUploadProgress:l,responseType:c,headers:u,withCredentials:d="same-origin",fetchOptions:f}=vn(e);c=c?(c+"").toLowerCase():"text";let p,h=yn([o,a&&a.toAbortSignal()],i);const m=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let v;try{if(l&&An&&"get"!==n&&"head"!==n&&0!==(v=await zn(u,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(bt.isFormData(r)&&(e=n.headers.get("content-type"))&&u.setContentType(e),n.body){const[e,t]=cn(v,ln(un(l)));r=Pn(n.body,65536,e,t)}}bt.isString(d)||(d=d?"include":"omit");const o="credentials"in Request.prototype;p=new Request(t,_e(_e({},f),{},{signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:r,duplex:"half",credentials:o?d:void 0}));let a=await fetch(p);const i=Ln&&("stream"===c||"response"===c);if(Ln&&(s||i&&m)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=a[t]}));const t=bt.toFiniteNumber(a.headers.get("content-length")),[n,r]=s&&cn(t,ln(un(s),!0))||[];a=new Response(Pn(a.body,65536,n,(()=>{r&&r(),m&&m()})),e)}c=c||"text";let g=await In[bt.findKey(In,c)||"text"](a,e);return!i&&m&&m(),await new Promise(((t,n)=>{on(t,n,{data:g,headers:Zt.from(a.headers),status:a.status,statusText:a.statusText,config:e,request:p})}))}catch(g){if(m&&m(),g&&"TypeError"===g.name&&/Load failed|fetch/i.test(g.message))throw Object.assign(new St("Network Error",St.ERR_NETWORK,e,p),{cause:g.cause||g});throw St.from(g,g&&g.code,e,p)}}),Hn={http:null,xhr:gn,fetch:Bn};bt.forEach(Hn,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(Dy){}Object.defineProperty(e,"adapterName",{value:t})}}));const Un=e=>"- ".concat(e),Yn=e=>bt.isFunction(e)||null===e||!1===e,Wn=e=>{e=bt.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let a=0;a<t;a++){let t;if(n=e[a],r=n,!Yn(n)&&(r=Hn[(t=String(n)).toLowerCase()],void 0===r))throw new St("Unknown adapter '".concat(t,"'"));if(r)break;o[t||"#"+a]=r}if(!r){const e=Object.entries(o).map((e=>{let[t,n]=e;return"adapter ".concat(t," ")+(!1===n?"is not supported by the environment":"is not available in the build")}));let n=t?e.length>1?"since :\n"+e.map(Un).join("\n"):" "+Un(e[0]):"as no adapter specified";throw new St("There is no suitable adapter to dispatch the request "+n,"ERR_NOT_SUPPORT")}return r};function qn(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new rn(null,e)}function Vn(e){qn(e),e.headers=Zt.from(e.headers),e.data=en.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Wn(e.adapter||Vt.adapter)(e).then((function(t){return qn(e),t.data=en.call(e,e.transformResponse,t),t.headers=Zt.from(t.headers),t}),(function(t){return tn(t)||(qn(e),t&&t.response&&(t.response.data=en.call(e,e.transformResponse,t.response),t.response.headers=Zt.from(t.response.headers))),Promise.reject(t)}))}const Qn="1.9.0",Kn={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Kn[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const $n={};Kn.transitional=function(e,t,n){function r(e,t){return"[Axios v1.9.0] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,a)=>{if(!1===e)throw new St(r(o," has been removed"+(t?" in "+t:"")),St.ERR_DEPRECATED);return t&&!$n[o]&&($n[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,a)}},Kn.spelling=function(e){return(t,n)=>(console.warn("".concat(n," is likely a misspelling of ").concat(e)),!0)};const Gn={assertOptions:function(e,t,n){if("object"!==typeof e)throw new St("options must be an object",St.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const a=r[o],i=t[a];if(i){const t=e[a],n=void 0===t||i(t,a,e);if(!0!==n)throw new St("option "+a+" must be "+n,St.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new St("Unknown option "+a,St.ERR_BAD_OPTION)}},validators:Kn},Xn=Gn.validators;class Jn{constructor(e){this.defaults=e||{},this.interceptors={request:new At,response:new At}}async request(e,t){try{return await this._request(e,t)}catch(n){if(n instanceof Error){let e={};Error.captureStackTrace?Error.captureStackTrace(e):e=new Error;const t=e.stack?e.stack.replace(/^.+\n/,""):"";try{n.stack?t&&!String(n.stack).endsWith(t.replace(/^.+\n.+\n/,""))&&(n.stack+="\n"+t):n.stack=t}catch(Dy){}}throw n}}_request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=mn(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&Gn.assertOptions(n,{silentJSONParsing:Xn.transitional(Xn.boolean),forcedJSONParsing:Xn.transitional(Xn.boolean),clarifyTimeoutError:Xn.transitional(Xn.boolean)},!1),null!=r&&(bt.isFunction(r)?t.paramsSerializer={serialize:r}:Gn.assertOptions(r,{encode:Xn.function,serialize:Xn.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Gn.assertOptions(t,{baseUrl:Xn.spelling("baseURL"),withXsrfToken:Xn.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let a=o&&bt.merge(o.common,o[t.method]);o&&bt.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Zt.concat(a,o);const i=[];let s=!0;this.interceptors.request.forEach((function(e){"function"===typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let u,d=0;if(!s){const e=[Vn.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,l),u=e.length,c=Promise.resolve(t);d<u;)c=c.then(e[d++],e[d++]);return c}u=i.length;let f=t;for(d=0;d<u;){const e=i[d++],t=i[d++];try{f=e(f)}catch(p){t.call(this,p);break}}try{c=Vn.call(this,f)}catch(p){return Promise.reject(p)}for(d=0,u=l.length;d<u;)c=c.then(l[d++],l[d++]);return c}getUri(e){return Rt(pn((e=mn(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}bt.forEach(["delete","get","head","options"],(function(e){Jn.prototype[e]=function(t,n){return this.request(mn(n||{},{method:e,url:t,data:(n||{}).data}))}})),bt.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(mn(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Jn.prototype[e]=t(),Jn.prototype[e+"Form"]=t(!0)}));const Zn=Jn;class er{constructor(e){if("function"!==typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new rn(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new er((function(t){e=t})),cancel:e}}}const tr=er;const nr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(nr).forEach((e=>{let[t,n]=e;nr[n]=t}));const rr=nr;const or=function e(t){const n=new Zn(t),r=Oe(Zn.prototype.request,n);return bt.extend(r,Zn.prototype,n,{allOwnKeys:!0}),bt.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(mn(t,n))},r}(Vt);or.Axios=Zn,or.CanceledError=rn,or.CancelToken=tr,or.isCancel=tn,or.VERSION=Qn,or.toFormData=Dt,or.AxiosError=St,or.Cancel=or.CanceledError,or.all=function(e){return Promise.all(e)},or.spread=function(e){return function(t){return e.apply(null,t)}},or.isAxiosError=function(e){return bt.isObject(e)&&!0===e.isAxiosError},or.mergeConfig=mn,or.AxiosHeaders=Zt,or.formToJSON=e=>Wt(bt.isHTMLForm(e)?new FormData(e):e),or.getAdapter=Wn,or.HttpStatusCode=rr,or.default=or;const ar=or,ir=ar.create({baseURL:"http://localhost:8088",timeout:5e3});ir.interceptors.request.use((e=>{const t=localStorage.getItem("token");return t&&(e.headers.Authorization="Bearer ".concat(t)),e}));const sr=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code)return e.data.data;throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}};const lr=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/torrent/search",{params:{keyword:e,page:t,size:n}})},cr=e=>ir.get("/help/posts/".concat(e)),ur=e=>ir.get("/request/posts/".concat(e));function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function fr(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function pr(e,t){if(e){if("string"==typeof e)return dr(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dr(e,t):void 0}}function hr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||fr(e)||pr(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}const mr=r.createContext({}),vr="ant",gr="anticon",yr=r.createContext({getPrefixCls:(e,t)=>t||(e?"".concat(vr,"-").concat(e):vr),iconPrefixCls:gr}),{Consumer:br}=yr;function wr(e){if(Array.isArray(e))return e}function xr(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kr(e,t){return wr(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,i,s=[],l=!0,c=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,t)||pr(e,t)||xr()}const Sr=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)};function Er(){return!("undefined"===typeof window||!window.document||!window.document.createElement)}var Cr="data-rc-order",Nr="data-rc-priority",jr=new Map;function Dr(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).mark;return e?e.startsWith("data-")?e:"data-".concat(e):"rc-util-key"}function Pr(e){return e.attachTo?e.attachTo:document.querySelector("head")||document.body}function Tr(e){return Array.from((jr.get(e)||e).children).filter((function(e){return"STYLE"===e.tagName}))}function _r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Er())return null;var n=t.csp,r=t.prepend,o=t.priority,a=void 0===o?0:o,i=function(e){return"queue"===e?"prependQueue":e?"prepend":"append"}(r),s="prependQueue"===i,l=document.createElement("style");l.setAttribute(Cr,i),s&&a&&l.setAttribute(Nr,"".concat(a)),null!==n&&void 0!==n&&n.nonce&&(l.nonce=null===n||void 0===n?void 0:n.nonce),l.innerHTML=e;var c=Pr(t),u=c.firstChild;if(r){if(s){var d=(t.styles||Tr(c)).filter((function(e){if(!["prepend","prependQueue"].includes(e.getAttribute(Cr)))return!1;var t=Number(e.getAttribute(Nr)||0);return a>=t}));if(d.length)return c.insertBefore(l,d[d.length-1].nextSibling),l}c.insertBefore(l,u)}else c.appendChild(l);return l}function Or(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Pr(t);return(t.styles||Tr(n)).find((function(n){return n.getAttribute(Dr(t))===e}))}function Mr(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Or(e,t);n&&Pr(t).removeChild(n)}function Rr(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=Pr(n),o=Tr(r),a=_e(_e({},n),{},{styles:o});!function(e,t){var n=jr.get(e);if(!n||!function(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1}(document,n)){var r=_r("",t),o=r.parentNode;jr.set(e,o),e.removeChild(r)}}(r,a);var i=Or(t,a);if(i){var s,l,c;if(null!==(s=a.csp)&&void 0!==s&&s.nonce&&i.nonce!==(null===(l=a.csp)||void 0===l?void 0:l.nonce))i.nonce=null===(c=a.csp)||void 0===c?void 0:c.nonce;return i.innerHTML!==e&&(i.innerHTML=e),i}var u=_r(e,a);return u.setAttribute(Dr(a),t),u}function Ar(e,t,n){var o=r.useRef({});return"value"in o.current&&!n(o.current.condition,t)||(o.current.value=e(),o.current.condition=t),o.current.value}var Lr={},Ir=[];function Fr(e,t){}function zr(e,t){}function Br(e,t,n){t||Lr[n]||(e(!1,n),Lr[n]=!0)}function Hr(e,t){Br(Fr,e,t)}Hr.preMessage=function(e){Ir.push(e)},Hr.resetWarned=function(){Lr={}},Hr.noteOnce=function(e,t){Br(zr,e,t)};const Ur=Hr;const Yr=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=new Set;return function e(t,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i=r.has(t);if(Ur(!i,"Warning: There may be circular references"),i)return!1;if(t===o)return!0;if(n&&a>1)return!1;r.add(t);var s=a+1;if(Array.isArray(t)){if(!Array.isArray(o)||t.length!==o.length)return!1;for(var l=0;l<t.length;l++)if(!e(t[l],o[l],s))return!1;return!0}if(t&&o&&"object"===je(t)&&"object"===je(o)){var c=Object.keys(t);return c.length===Object.keys(o).length&&c.every((function(n){return e(t[n],o[n],s)}))}return!1}(e,t)};function Wr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qr(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,De(r.key),r)}}function Vr(e,t,n){return t&&qr(e.prototype,t),n&&qr(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Qr(e){return e.join("%")}var Kr=function(){function e(t){Wr(this,e),Pe(this,"instanceId",void 0),Pe(this,"cache",new Map),this.instanceId=t}return Vr(e,[{key:"get",value:function(e){return this.opGet(Qr(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(Qr(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}();const $r=Kr;var Gr="data-token-hash",Xr="data-css-hash",Jr="__cssinjs_instance__";function Zr(){var e=Math.random().toString(12).slice(2);if("undefined"!==typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(Xr,"]"))||[],n=document.head.firstChild;Array.from(t).forEach((function(t){t[Jr]=t[Jr]||e,t[Jr]===e&&document.head.insertBefore(t,n)}));var r={};Array.from(document.querySelectorAll("style[".concat(Xr,"]"))).forEach((function(t){var n,o=t.getAttribute(Xr);r[o]?t[Jr]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0}))}return new $r(e)}var eo=r.createContext({hashPriority:"low",cache:Zr(),defaultCache:!0});const to=eo;var no="CALC_UNIT";new RegExp(no,"g");var ro=function(){function e(){Wr(this,e),Pe(this,"cache",void 0),Pe(this,"keys",void 0),Pe(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return Vr(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach((function(e){var t;o?o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e):o=void 0})),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce((function(e,t){var n=kr(e,2)[1];return r.internalGet(t)[1]<n?[t,r.internalGet(t)[1]]:e}),[this.keys[0],this.cacheCallTimes]),a=kr(o,1)[0];this.delete(a)}this.keys.push(t)}var i=this.cache;t.forEach((function(e,o){if(o===t.length-1)i.set(e,{value:[n,r.cacheCallTimes++]});else{var a=i.get(e);a?a.map||(a.map=new Map):i.set(e,{map:new Map}),i=i.get(e).map}}))}},{key:"deleteByPath",value:function(e,t){var n,r=e.get(t[0]);if(1===t.length)return r.map?e.set(t[0],{map:r.map}):e.delete(t[0]),null===(n=r.value)||void 0===n?void 0:n[0];var o=this.deleteByPath(r.map,t.slice(1));return r.map&&0!==r.map.size||r.value||e.delete(t[0]),o}},{key:"delete",value:function(e){if(this.has(e))return this.keys=this.keys.filter((function(t){return!function(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}(t,e)})),this.deleteByPath(this.cache,e)}}]),e}();Pe(ro,"MAX_CACHE_SIZE",20),Pe(ro,"MAX_CACHE_OFFSET",5);var oo=0,ao=function(){function e(t){Wr(this,e),Pe(this,"derivatives",void 0),Pe(this,"id",void 0),this.derivatives=Array.isArray(t)?t:[t],this.id=oo,0===t.length&&t.length,oo+=1}return Vr(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce((function(t,n){return n(e,t)}),void 0)}}]),e}(),io=new ro;function so(e){var t=Array.isArray(e)?e:[e];return io.has(t)||io.set(t,new ao(t)),io.get(t)}var lo=new WeakMap,co={};var uo=new WeakMap;function fo(e){var t=uo.get(e)||"";return t||(Object.keys(e).forEach((function(n){var r=e[n];t+=n,r instanceof ao?t+=r.id:r&&"object"===je(r)?t+=fo(r):t+=r})),t=Sr(t),uo.set(e,t)),t}function po(e,t){return Sr("".concat(t,"_").concat(fo(e)))}"random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,"");var ho=Er();function mo(e){return"number"===typeof e?"".concat(e,"px"):e}function vo(e,t,n){var r;if(arguments.length>4&&void 0!==arguments[4]&&arguments[4])return e;var o=_e(_e({},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}),{},(Pe(r={},Gr,t),Pe(r,Xr,n),r)),a=Object.keys(o).map((function(e){var t=o[e];return t?"".concat(e,'="').concat(t,'"'):null})).filter((function(e){return e})).join(" ");return"<style ".concat(a,">").concat(e,"</style>")}var go=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},yo=function(e,t,n){return Object.keys(e).length?".".concat(t).concat(null!==n&&void 0!==n&&n.scope?".".concat(n.scope):"","{").concat(Object.entries(e).map((function(e){var t=kr(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")})).join(""),"}"):""},bo=function(e,t,n){var r={},o={};return Object.entries(e).forEach((function(e){var t,a,i=kr(e,2),s=i[0],l=i[1];if(null!==n&&void 0!==n&&null!==(t=n.preserve)&&void 0!==t&&t[s])o[s]=l;else if(("string"===typeof l||"number"===typeof l)&&(null===n||void 0===n||null===(a=n.ignore)||void 0===a||!a[s])){var c,u=go(s,null===n||void 0===n?void 0:n.prefix);r[u]="number"!==typeof l||null!==n&&void 0!==n&&null!==(c=n.unitless)&&void 0!==c&&c[s]?String(l):"".concat(l,"px"),o[s]="var(".concat(u,")")}})),[o,yo(r,t,{scope:null===n||void 0===n?void 0:n.scope})]},wo=Er()?r.useLayoutEffect:r.useEffect,xo=function(e,t){var n=r.useRef(!0);wo((function(){return e(n.current)}),t),wo((function(){return n.current=!1,function(){n.current=!0}}),[])};const ko=xo;var So=_e({},o).useInsertionEffect;const Eo=So?function(e,t,n){return So((function(){return e(),t()}),n)}:function(e,t,n){r.useMemo(e,n),ko((function(){return t(!0)}),n)};const Co="undefined"!==typeof _e({},o).useInsertionEffect?function(e){var t=[],n=!1;return r.useEffect((function(){return n=!1,function(){n=!0,t.length&&t.forEach((function(e){return e()}))}}),e),function(e){n||t.push(e)}}:function(){return function(e){e()}};const No=function(){return!1};function jo(e,t,n,o,a){var i=r.useContext(to).cache,s=Qr([e].concat(hr(t))),l=Co([s]),c=(No(),function(e){i.opUpdate(s,(function(t){var r=kr(t||[void 0,void 0],2),o=r[0];var a=[void 0===o?0:o,r[1]||n()];return e?e(a):a}))});r.useMemo((function(){c()}),[s]);var u=i.opGet(s)[1];return Eo((function(){null===a||void 0===a||a(u)}),(function(e){return c((function(t){var n=kr(t,2),r=n[0],o=n[1];return e&&0===r&&(null===a||void 0===a||a(u)),[r+1,o]})),function(){i.opUpdate(s,(function(t){var n=kr(t||[],2),r=n[0],a=void 0===r?0:r,c=n[1];return 0===a-1?(l((function(){!e&&i.opGet(s)||null===o||void 0===o||o(c,!1)})),null):[a-1,c]}))}}),[s]),u}var Do={},Po=new Map;function To(e,t){Po.set(e,(Po.get(e)||0)-1);var n=Array.from(Po.keys()),r=n.filter((function(e){return(Po.get(e)||0)<=0}));n.length-r.length>0&&r.forEach((function(e){!function(e,t){"undefined"!==typeof document&&document.querySelectorAll("style[".concat(Gr,'="').concat(e,'"]')).forEach((function(e){var n;e[Jr]===t&&(null===(n=e.parentNode)||void 0===n||n.removeChild(e))}))}(e,t),Po.delete(e)}))}var _o="token";function Oo(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=(0,r.useContext)(to),a=o.cache.instanceId,i=o.container,s=n.salt,l=void 0===s?"":s,c=n.override,u=void 0===c?Do:c,d=n.formatToken,f=n.getComputedToken,p=n.cssVar,h=function(e,t){for(var n=lo,r=0;r<t.length;r+=1){var o=t[r];n.has(o)||n.set(o,new WeakMap),n=n.get(o)}return n.has(co)||n.set(co,e()),n.get(co)}((function(){return Object.assign.apply(Object,[{}].concat(hr(t)))}),t),m=fo(h),v=fo(u),g=p?fo(p):"",y=jo(_o,[l,e.id,m,v,g],(function(){var t,n=f?f(h,u,e):function(e,t,n,r){var o=_e(_e({},n.getDerivativeToken(e)),t);return r&&(o=r(o)),o}(h,u,e,d),r=_e({},n),o="";if(p){var a=kr(bo(n,p.key,{prefix:p.prefix,ignore:p.ignore,unitless:p.unitless,preserve:p.preserve}),2);n=a[0],o=a[1]}var i=po(n,l);n._tokenKey=i,r._tokenKey=po(r,l);var s=null!==(t=null===p||void 0===p?void 0:p.key)&&void 0!==t?t:i;n._themeKey=s,function(e){Po.set(e,(Po.get(e)||0)+1)}(s);var c="".concat("css","-").concat(Sr(i));return n._hashId=c,[n,c,r,o,(null===p||void 0===p?void 0:p.key)||""]}),(function(e){To(e[0]._themeKey,a)}),(function(e){var t=kr(e,4),n=t[0],r=t[3];if(p&&r){var o=Rr(r,Sr("css-variables-".concat(n._themeKey)),{mark:Xr,prepend:"queue",attachTo:i,priority:-999});o[Jr]=a,o.setAttribute(Gr,n._themeKey)}}));return y}function Mo(){return Mo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mo.apply(null,arguments)}const Ro={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};var Ao="comm",Lo="rule",Io="decl",Fo=Math.abs,zo=String.fromCharCode;Object.assign;function Bo(e){return e.trim()}function Ho(e,t,n){return e.replace(t,n)}function Uo(e,t,n){return e.indexOf(t,n)}function Yo(e,t){return 0|e.charCodeAt(t)}function Wo(e,t,n){return e.slice(t,n)}function qo(e){return e.length}function Vo(e,t){return t.push(e),e}function Qo(e,t){for(var n="",r=0;r<e.length;r++)n+=t(e[r],r,e,t)||"";return n}function Ko(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case"@namespace":case Io:return e.return=e.return||e.value;case Ao:return"";case"@keyframes":return e.return=e.value+"{"+Qo(e.children,r)+"}";case Lo:if(!qo(e.value=e.props.join(",")))return""}return qo(n=Qo(e.children,r))?e.return=e.value+"{"+n+"}":""}var $o=1,Go=1,Xo=0,Jo=0,Zo=0,ea="";function ta(e,t,n,r,o,a,i,s){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:$o,column:Go,length:i,return:"",siblings:s}}function na(){return Zo=Jo>0?Yo(ea,--Jo):0,Go--,10===Zo&&(Go=1,$o--),Zo}function ra(){return Zo=Jo<Xo?Yo(ea,Jo++):0,Go++,10===Zo&&(Go=1,$o++),Zo}function oa(){return Yo(ea,Jo)}function aa(){return Jo}function ia(e,t){return Wo(ea,e,t)}function sa(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function la(e){return $o=Go=1,Xo=qo(ea=e),Jo=0,[]}function ca(e){return ea="",e}function ua(e){return Bo(ia(Jo-1,pa(91===e?e+2:40===e?e+1:e)))}function da(e){for(;(Zo=oa())&&Zo<33;)ra();return sa(e)>2||sa(Zo)>3?"":" "}function fa(e,t){for(;--t&&ra()&&!(Zo<48||Zo>102||Zo>57&&Zo<65||Zo>70&&Zo<97););return ia(e,aa()+(t<6&&32==oa()&&32==ra()))}function pa(e){for(;ra();)switch(Zo){case e:return Jo;case 34:case 39:34!==e&&39!==e&&pa(Zo);break;case 40:41===e&&pa(e);break;case 92:ra()}return Jo}function ha(e,t){for(;ra()&&e+Zo!==57&&(e+Zo!==84||47!==oa()););return"/*"+ia(t,Jo-1)+"*"+zo(47===e?e:ra())}function ma(e){for(;!sa(oa());)ra();return ia(e,Jo)}function va(e){return ca(ga("",null,null,null,[""],e=la(e),0,[0],e))}function ga(e,t,n,r,o,a,i,s,l){for(var c=0,u=0,d=i,f=0,p=0,h=0,m=1,v=1,g=1,y=0,b="",w=o,x=a,k=r,S=b;v;)switch(h=y,y=ra()){case 40:if(108!=h&&58==Yo(S,d-1)){-1!=Uo(S+=Ho(ua(y),"&","&\f"),"&\f",Fo(c?s[c-1]:0))&&(g=-1);break}case 34:case 39:case 91:S+=ua(y);break;case 9:case 10:case 13:case 32:S+=da(h);break;case 92:S+=fa(aa()-1,7);continue;case 47:switch(oa()){case 42:case 47:Vo(ba(ha(ra(),aa()),t,n,l),l),5!=sa(h||1)&&5!=sa(oa()||1)||!qo(S)||" "===Wo(S,-1,void 0)||(S+=" ");break;default:S+="/"}break;case 123*m:s[c++]=qo(S)*g;case 125*m:case 59:case 0:switch(y){case 0:case 125:v=0;case 59+u:-1==g&&(S=Ho(S,/\f/g,"")),p>0&&(qo(S)-d||0===m&&47===h)&&Vo(p>32?wa(S+";",r,n,d-1,l):wa(Ho(S," ","")+";",r,n,d-2,l),l);break;case 59:S+=";";default:if(Vo(k=ya(S,t,n,c,u,o,s,b,w=[],x=[],d,a),a),123===y)if(0===u)ga(S,t,k,k,w,a,d,s,x);else{switch(f){case 99:if(110===Yo(S,3))break;case 108:if(97===Yo(S,2))break;default:u=0;case 100:case 109:case 115:}u?ga(e,k,k,r&&Vo(ya(e,k,k,0,0,o,s,b,o,w=[],d,x),x),o,x,d,s,r?w:x):ga(S,k,k,k,[""],x,0,s,x)}}c=u=p=0,m=g=1,b=S="",d=i;break;case 58:d=1+qo(S),p=h;default:if(m<1)if(123==y)--m;else if(125==y&&0==m++&&125==na())continue;switch(S+=zo(y),y*m){case 38:g=u>0?1:(S+="\f",-1);break;case 44:s[c++]=(qo(S)-1)*g,g=1;break;case 64:45===oa()&&(S+=ua(ra())),f=oa(),u=d=qo(b=S+=ma(aa())),y++;break;case 45:45===h&&2==qo(S)&&(m=0)}}return a}function ya(e,t,n,r,o,a,i,s,l,c,u,d){for(var f=o-1,p=0===o?a:[""],h=function(e){return e.length}(p),m=0,v=0,g=0;m<r;++m)for(var y=0,b=Wo(e,f+1,f=Fo(v=i[m])),w=e;y<h;++y)(w=Bo(v>0?p[y]+" "+b:Ho(b,/&\f/g,p[y])))&&(l[g++]=w);return ta(e,t,n,0===o?Lo:s,l,c,u,d)}function ba(e,t,n,r){return ta(e,t,n,Ao,zo(Zo),Wo(e,2,-2),0,r)}function wa(e,t,n,r,o){return ta(e,t,n,Io,Wo(e,0,r),Wo(e,r+1,-1),r,o)}var xa,ka="data-ant-cssinjs-cache-path",Sa="_FILE_STYLE__";var Ea=!0;function Ca(e){return function(){if(!xa&&(xa={},Er())){var e=document.createElement("div");e.className=ka,e.style.position="fixed",e.style.visibility="hidden",e.style.top="-9999px",document.body.appendChild(e);var t=getComputedStyle(e).content||"";(t=t.replace(/^"/,"").replace(/"$/,"")).split(";").forEach((function(e){var t=kr(e.split(":"),2),n=t[0],r=t[1];xa[n]=r}));var n,r=document.querySelector("style[".concat(ka,"]"));r&&(Ea=!1,null===(n=r.parentNode)||void 0===n||n.removeChild(r)),document.body.removeChild(e)}}(),!!xa[e]}var Na="_multi_value_";function ja(e){return Qo(va(e),Ko).replace(/\{%%%\:[^;];}/g,";")}function Da(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map((function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat(hr(n.slice(1))).join(" ")})).join(",")}var Pa=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,i=r.parentSelectors,s=n.hashId,l=n.layer,c=(n.path,n.hashPriority),u=n.transformers,d=void 0===u?[]:u,f=(n.linters,""),p={};function h(t){var r=t.getName(s);if(!p[r]){var o=kr(e(t.style,n,{root:!1,parentSelectors:i}),1)[0];p[r]="@keyframes ".concat(t.getName(s)).concat(o)}}var m=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach((function(t){Array.isArray(t)?e(t,n):t&&n.push(t)})),n}(Array.isArray(t)?t:[t]);return m.forEach((function(t){var r="string"!==typeof t||o?t:{};if("string"===typeof r)f+="".concat(r,"\n");else if(r._keyframe)h(r);else{var l=d.reduce((function(e,t){var n;return(null===t||void 0===t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e}),r);Object.keys(l).forEach((function(t){var r=l[t];if("object"!==je(r)||!r||"animationName"===t&&r._keyframe||function(e){return"object"===je(e)&&e&&("_skip_check_"in e||Na in e)}(r)){var u;function x(e,t){var n=e.replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())})),r=t;Ro[e]||"number"!==typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!==t&&void 0!==t&&t._keyframe&&(h(t),r=t.getName(s)),f+="".concat(n,":").concat(r,";")}var d=null!==(u=null===r||void 0===r?void 0:r.value)&&void 0!==u?u:r;"object"===je(r)&&null!==r&&void 0!==r&&r[Na]&&Array.isArray(d)?d.forEach((function(e){x(t,e)})):x(t,d)}else{var m=!1,v=t.trim(),g=!1;(o||a)&&s?v.startsWith("@")?m=!0:v=Da("&"===v?"":t,s,c):!o||s||"&"!==v&&""!==v||(v="",g=!0);var y=kr(e(r,n,{root:g,injectHash:m,parentSelectors:[].concat(hr(i),[v])}),2),b=y[0],w=y[1];p=_e(_e({},p),w),f+="".concat(v).concat(b)}}))}})),o?l&&(f&&(f="@layer ".concat(l.name," {").concat(f,"}")),l.dependencies&&(p["@layer ".concat(l.name)]=l.dependencies.map((function(e){return"@layer ".concat(e,", ").concat(l.name,";")})).join("\n"))):f="{".concat(f,"}"),[f,p]};function Ta(e,t){return Sr("".concat(e.join("%")).concat(t))}function _a(){return null}var Oa="style";function Ma(e,t){var n=e.token,o=e.path,a=e.hashId,i=e.layer,s=e.nonce,l=e.clientOnly,c=e.order,u=void 0===c?0:c,d=r.useContext(to),f=d.autoClear,p=(d.mock,d.defaultCache),h=d.hashPriority,m=d.container,v=d.ssrInline,g=d.transformers,y=d.linters,b=d.cache,w=d.layer,x=n._tokenKey,k=[x];w&&k.push("layer"),k.push.apply(k,hr(o));var S=ho;var E=jo(Oa,k,(function(){var e=k.join("|");if(Ca(e)){var n=function(e){var t=xa[e],n=null;if(t&&Er())if(Ea)n=Sa;else{var r=document.querySelector("style[".concat(Xr,'="').concat(xa[e],'"]'));r?n=r.innerHTML:delete xa[e]}return[n,t]}(e),r=kr(n,2),s=r[0],c=r[1];if(s)return[s,x,c,{},l,u]}var d=t(),f=kr(Pa(d,{hashId:a,hashPriority:h,layer:w?i:void 0,path:o.join("-"),transformers:g,linters:y}),2),p=f[0],m=f[1],v=ja(p),b=Ta(k,v);return[v,x,b,m,l,u]}),(function(e,t){var n=kr(e,3)[2];(t||f)&&ho&&Mr(n,{mark:Xr})}),(function(e){var t=kr(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(S&&n!==Sa){var a={mark:Xr,prepend:!w&&"queue",attachTo:m,priority:u},i="function"===typeof s?s():s;i&&(a.csp={nonce:i});var l=[],c=[];Object.keys(o).forEach((function(e){e.startsWith("@layer")?l.push(e):c.push(e)})),l.forEach((function(e){Rr(ja(o[e]),"_layer-".concat(e),_e(_e({},a),{},{prepend:!0}))}));var d=Rr(n,r,a);d[Jr]=b.instanceId,d.setAttribute(Gr,x),c.forEach((function(e){Rr(ja(o[e]),"_effect-".concat(e),a)}))}})),C=kr(E,3),N=C[0],j=C[1],D=C[2];return function(e){var t,n;v&&!S&&p?t=r.createElement("style",Mo({},(Pe(n={},Gr,j),Pe(n,Xr,D),n),{dangerouslySetInnerHTML:{__html:N}})):t=r.createElement(_a,null);return r.createElement(r.Fragment,null,t,e)}}var Ra="cssVar";const Aa=function(e,t){var n=e.key,o=e.prefix,a=e.unitless,i=e.ignore,s=e.token,l=e.scope,c=void 0===l?"":l,u=(0,r.useContext)(to),d=u.cache.instanceId,f=u.container,p=s._tokenKey,h=[].concat(hr(e.path),[n,c,p]),m=jo(Ra,h,(function(){var e=t(),r=kr(bo(e,n,{prefix:o,unitless:a,ignore:i,scope:c}),2),s=r[0],l=r[1];return[s,l,Ta(h,l),n]}),(function(e){var t=kr(e,3)[2];ho&&Mr(t,{mark:Xr})}),(function(e){var t=kr(e,3),r=t[1],o=t[2];if(r){var a=Rr(r,o,{mark:Xr,prepend:"queue",attachTo:f,priority:-999});a[Jr]=d,a.setAttribute(Gr,n)}}));return m};var La;Pe(La={},Oa,(function(e,t,n){var r=kr(e,6),o=r[0],a=r[1],i=r[2],s=r[3],l=r[4],c=r[5],u=(n||{}).plain;if(l)return null;var d=o,f={"data-rc-order":"prependQueue","data-rc-priority":"".concat(c)};return d=vo(o,a,i,f,u),s&&Object.keys(s).forEach((function(e){if(!t[e]){t[e]=!0;var n=vo(ja(s[e]),a,"_effect-".concat(e),f,u);e.startsWith("@layer")?d=n+d:d+=n}})),[c,i,d]})),Pe(La,_o,(function(e,t,n){var r=kr(e,5),o=r[2],a=r[3],i=r[4],s=(n||{}).plain;if(!a)return null;var l=o._tokenKey;return[-999,l,vo(a,i,l,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]})),Pe(La,Ra,(function(e,t,n){var r=kr(e,4),o=r[1],a=r[2],i=r[3],s=(n||{}).plain;if(!o)return null;return[-999,a,vo(o,i,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},s)]}));var Ia=function(){function e(t,n){Wr(this,e),Pe(this,"name",void 0),Pe(this,"style",void 0),Pe(this,"_keyframe",!0),this.name=t,this.style=n}return Vr(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();const Fa=Ia;function za(e){return e.notSplit=!0,e}za(["borderTop","borderBottom"]),za(["borderTop"]),za(["borderBottom"]),za(["borderLeft","borderRight"]),za(["borderLeft"]),za(["borderRight"]);const Ba=(0,r.createContext)({});function Ha(e,t){for(var n=e,r=0;r<t.length;r+=1){if(null===n||void 0===n)return;n=n[t[r]]}return n}function Ua(e,t,n,r){if(!t.length)return n;var o,a=function(e){return wr(e)||fr(e)||pr(e)||xr()}(t),i=a[0],s=a.slice(1);return o=e||"number"!==typeof i?Array.isArray(e)?hr(e):_e({},e):[],r&&void 0===n&&1===s.length?delete o[i][s[0]]:o[i]=Ua(o[i],s,n,r),o}function Ya(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.length&&r&&void 0===n&&!Ha(e,t.slice(0,-1))?e:Ua(e,t,n,r)}function Wa(e){return Array.isArray(e)?[]:{}}var qa="undefined"===typeof Reflect?Object.keys:Reflect.ownKeys;function Va(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Wa(t[0]);return t.forEach((function(e){!function t(n,o){var a,i=new Set(o),s=Ha(e,n),l=Array.isArray(s);if(l||"object"===je(a=s)&&null!==a&&Object.getPrototypeOf(a)===Object.prototype){if(!i.has(s)){i.add(s);var c=Ha(r,n);l?r=Ya(r,n,[]):c&&"object"===je(c)||(r=Ya(r,n,Wa(s))),qa(s).forEach((function(e){t([].concat(hr(n),[e]),i)}))}}else r=Ya(r,n,s)}([])})),r}function Qa(){}const Ka=r.createContext({}),$a=()=>{const e=()=>{};return e.deprecated=Qa,e},Ga=(0,r.createContext)(void 0);const Xa={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"};const Ja=_e(_e({},{yearFormat:"YYYY",dayFormat:"D",cellMeridiemFormat:"A",monthBeforeYear:!0}),{},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",week:"Week",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",dateFormat:"M/D/YYYY",dateTimeFormat:"M/D/YYYY HH:mm:ss",previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"}),Za={placeholder:"Select time",rangePlaceholder:["Start time","End time"]},ei={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},Ja),timePickerLocale:Object.assign({},Za)},ti="${label} is not a valid ${type}",ni={locale:"en",Pagination:Xa,DatePicker:ei,TimePicker:Za,Calendar:ei,global:{placeholder:"Please select",close:"Close"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckAll:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",deselectAll:"Deselect all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand",collapse:"Collapse"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:ti,method:ti,array:ti,object:ti,number:ti,date:ti,boolean:ti,integer:ti,float:ti,regexp:ti,email:ti,url:ti,hex:ti},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty",transparent:"Transparent",singleColor:"Single",gradientColor:"Gradient"}};let ri=Object.assign({},ni.Modal),oi=[];const ai=()=>oi.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),ni.Modal);const ii=(0,r.createContext)(void 0);const si=e=>{const{locale:t={},children:n,_ANT_MARK__:o}=e;r.useEffect((()=>{const e=function(e){if(e){const t=Object.assign({},e);return oi.push(t),ri=ai(),()=>{oi=oi.filter((e=>e!==t)),ri=ai()}}ri=Object.assign({},ni.Modal)}(null===t||void 0===t?void 0:t.Modal);return e}),[t]);const a=r.useMemo((()=>Object.assign(Object.assign({},t),{exist:!0})),[t]);return r.createElement(ii.Provider,{value:a},n)},li=Math.round;function ci(e,t){const n=e.replace(/^[^(]*\((.*)/,"$1").replace(/\).*/,"").match(/\d*\.?\d+%?/g)||[],r=n.map((e=>parseFloat(e)));for(let o=0;o<3;o+=1)r[o]=t(r[o]||0,n[o]||"",o);return n[3]?r[3]=n[3].includes("%")?r[3]/100:r[3]:r[3]=1,r}const ui=(e,t,n)=>0===n?e:e/100;function di(e,t){const n=t||255;return e>n?n:e<0?0:e}class fi{constructor(e){function t(t){return t[0]in e&&t[1]in e&&t[2]in e}if(Pe(this,"isValid",!0),Pe(this,"r",0),Pe(this,"g",0),Pe(this,"b",0),Pe(this,"a",1),Pe(this,"_h",void 0),Pe(this,"_s",void 0),Pe(this,"_l",void 0),Pe(this,"_v",void 0),Pe(this,"_max",void 0),Pe(this,"_min",void 0),Pe(this,"_brightness",void 0),e)if("string"===typeof e){const n=e.trim();function r(e){return n.startsWith(e)}/^#?[A-F\d]{3,8}$/i.test(n)?this.fromHexString(n):r("rgb")?this.fromRgbString(n):r("hsl")?this.fromHslString(n):(r("hsv")||r("hsb"))&&this.fromHsvString(n)}else if(e instanceof fi)this.r=e.r,this.g=e.g,this.b=e.b,this.a=e.a,this._h=e._h,this._s=e._s,this._l=e._l,this._v=e._v;else if(t("rgb"))this.r=di(e.r),this.g=di(e.g),this.b=di(e.b),this.a="number"===typeof e.a?di(e.a,1):1;else if(t("hsl"))this.fromHsl(e);else{if(!t("hsv"))throw new Error("@ant-design/fast-color: unsupported input "+JSON.stringify(e));this.fromHsv(e)}else;}setR(e){return this._sc("r",e)}setG(e){return this._sc("g",e)}setB(e){return this._sc("b",e)}setA(e){return this._sc("a",e,1)}setHue(e){const t=this.toHsv();return t.h=e,this._c(t)}getLuminance(){function e(e){const t=e/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}return.2126*e(this.r)+.7152*e(this.g)+.0722*e(this.b)}getHue(){if("undefined"===typeof this._h){const e=this.getMax()-this.getMin();this._h=0===e?0:li(60*(this.r===this.getMax()?(this.g-this.b)/e+(this.g<this.b?6:0):this.g===this.getMax()?(this.b-this.r)/e+2:(this.r-this.g)/e+4))}return this._h}getSaturation(){if("undefined"===typeof this._s){const e=this.getMax()-this.getMin();this._s=0===e?0:e/this.getMax()}return this._s}getLightness(){return"undefined"===typeof this._l&&(this._l=(this.getMax()+this.getMin())/510),this._l}getValue(){return"undefined"===typeof this._v&&(this._v=this.getMax()/255),this._v}getBrightness(){return"undefined"===typeof this._brightness&&(this._brightness=(299*this.r+587*this.g+114*this.b)/1e3),this._brightness}darken(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()-e/100;return r<0&&(r=0),this._c({h:t,s:n,l:r,a:this.a})}lighten(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;const t=this.getHue(),n=this.getSaturation();let r=this.getLightness()+e/100;return r>1&&(r=1),this._c({h:t,s:n,l:r,a:this.a})}mix(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50;const n=this._c(e),r=t/100,o=e=>(n[e]-this[e])*r+this[e],a={r:li(o("r")),g:li(o("g")),b:li(o("b")),a:li(100*o("a"))/100};return this._c(a)}tint(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:255,g:255,b:255,a:1},e)}shade(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10;return this.mix({r:0,g:0,b:0,a:1},e)}onBackground(e){const t=this._c(e),n=this.a+t.a*(1-this.a),r=e=>li((this[e]*this.a+t[e]*t.a*(1-this.a))/n);return this._c({r:r("r"),g:r("g"),b:r("b"),a:n})}isDark(){return this.getBrightness()<128}isLight(){return this.getBrightness()>=128}equals(e){return this.r===e.r&&this.g===e.g&&this.b===e.b&&this.a===e.a}clone(){return this._c(this)}toHexString(){let e="#";const t=(this.r||0).toString(16);e+=2===t.length?t:"0"+t;const n=(this.g||0).toString(16);e+=2===n.length?n:"0"+n;const r=(this.b||0).toString(16);if(e+=2===r.length?r:"0"+r,"number"===typeof this.a&&this.a>=0&&this.a<1){const t=li(255*this.a).toString(16);e+=2===t.length?t:"0"+t}return e}toHsl(){return{h:this.getHue(),s:this.getSaturation(),l:this.getLightness(),a:this.a}}toHslString(){const e=this.getHue(),t=li(100*this.getSaturation()),n=li(100*this.getLightness());return 1!==this.a?"hsla(".concat(e,",").concat(t,"%,").concat(n,"%,").concat(this.a,")"):"hsl(".concat(e,",").concat(t,"%,").concat(n,"%)")}toHsv(){return{h:this.getHue(),s:this.getSaturation(),v:this.getValue(),a:this.a}}toRgb(){return{r:this.r,g:this.g,b:this.b,a:this.a}}toRgbString(){return 1!==this.a?"rgba(".concat(this.r,",").concat(this.g,",").concat(this.b,",").concat(this.a,")"):"rgb(".concat(this.r,",").concat(this.g,",").concat(this.b,")")}toString(){return this.toRgbString()}_sc(e,t,n){const r=this.clone();return r[e]=di(t,n),r}_c(e){return new this.constructor(e)}getMax(){return"undefined"===typeof this._max&&(this._max=Math.max(this.r,this.g,this.b)),this._max}getMin(){return"undefined"===typeof this._min&&(this._min=Math.min(this.r,this.g,this.b)),this._min}fromHexString(e){const t=e.replace("#","");function n(e,n){return parseInt(t[e]+t[n||e],16)}t.length<6?(this.r=n(0),this.g=n(1),this.b=n(2),this.a=t[3]?n(3)/255:1):(this.r=n(0,1),this.g=n(2,3),this.b=n(4,5),this.a=t[6]?n(6,7)/255:1)}fromHsl(e){let{h:t,s:n,l:r,a:o}=e;if(this._h=t%360,this._s=n,this._l=r,this.a="number"===typeof o?o:1,n<=0){const e=li(255*r);this.r=e,this.g=e,this.b=e}let a=0,i=0,s=0;const l=t/60,c=(1-Math.abs(2*r-1))*n,u=c*(1-Math.abs(l%2-1));l>=0&&l<1?(a=c,i=u):l>=1&&l<2?(a=u,i=c):l>=2&&l<3?(i=c,s=u):l>=3&&l<4?(i=u,s=c):l>=4&&l<5?(a=u,s=c):l>=5&&l<6&&(a=c,s=u);const d=r-c/2;this.r=li(255*(a+d)),this.g=li(255*(i+d)),this.b=li(255*(s+d))}fromHsv(e){let{h:t,s:n,v:r,a:o}=e;this._h=t%360,this._s=n,this._v=r,this.a="number"===typeof o?o:1;const a=li(255*r);if(this.r=a,this.g=a,this.b=a,n<=0)return;const i=t/60,s=Math.floor(i),l=i-s,c=li(r*(1-n)*255),u=li(r*(1-n*l)*255),d=li(r*(1-n*(1-l))*255);switch(s){case 0:this.g=d,this.b=c;break;case 1:this.r=u,this.b=c;break;case 2:this.r=c,this.b=d;break;case 3:this.r=c,this.g=u;break;case 4:this.r=d,this.g=c;break;default:this.g=c,this.b=u}}fromHsvString(e){const t=ci(e,ui);this.fromHsv({h:t[0],s:t[1],v:t[2],a:t[3]})}fromHslString(e){const t=ci(e,ui);this.fromHsl({h:t[0],s:t[1],l:t[2],a:t[3]})}fromRgbString(e){const t=ci(e,((e,t)=>t.includes("%")?li(e/100*255):e));this.r=t[0],this.g=t[1],this.b=t[2],this.a=t[3]}}var pi=[{index:7,amount:15},{index:6,amount:25},{index:5,amount:30},{index:5,amount:45},{index:5,amount:65},{index:5,amount:85},{index:4,amount:90},{index:3,amount:95},{index:2,amount:97},{index:1,amount:98}];function hi(e,t,n){var r;return(r=Math.round(e.h)>=60&&Math.round(e.h)<=240?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function mi(e,t,n){return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Math.round(100*r)/100);var r}function vi(e,t,n){var r;return r=n?e.v+.05*t:e.v-.15*t,r=Math.max(0,Math.min(1,r)),Math.round(100*r)/100}function gi(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=new fi(e),o=r.toHsv(),a=5;a>0;a-=1){var i=new fi({h:hi(o,a,!0),s:mi(o,a,!0),v:vi(o,a,!0)});n.push(i)}n.push(r);for(var s=1;s<=4;s+=1){var l=new fi({h:hi(o,s),s:mi(o,s),v:vi(o,s)});n.push(l)}return"dark"===t.theme?pi.map((function(e){var r=e.index,o=e.amount;return new fi(t.backgroundColor||"#141414").mix(n[r],o).toHexString()})):n.map((function(e){return e.toHexString()}))}var yi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},bi=["#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011"];bi.primary=bi[5];var wi=["#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00"];wi.primary=wi[5];var xi=["#fff7e6","#ffe7ba","#ffd591","#ffc069","#ffa940","#fa8c16","#d46b08","#ad4e00","#873800","#612500"];xi.primary=xi[5];var ki=["#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400"];ki.primary=ki[5];var Si=["#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700"];Si.primary=Si[5];var Ei=["#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000"];Ei.primary=Ei[5];var Ci=["#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00"];Ci.primary=Ci[5];var Ni=["#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329"];Ni.primary=Ni[5];var ji=["#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66"];ji.primary=ji[5];var Di=["#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852"];Di.primary=Di[5];var Pi=["#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338"];Pi.primary=Pi[5];var Ti=["#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339"];Ti.primary=Ti[5];var _i=["#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000"];_i.primary=_i[5];var Oi={red:bi,volcano:wi,orange:xi,gold:ki,yellow:Si,lime:Ei,green:Ci,cyan:Ni,blue:ji,geekblue:Di,purple:Pi,magenta:Ti,grey:_i},Mi=["#2a1215","#431418","#58181c","#791a1f","#a61d24","#d32029","#e84749","#f37370","#f89f9a","#fac8c3"];Mi.primary=Mi[5];var Ri=["#2b1611","#441d12","#592716","#7c3118","#aa3e19","#d84a1b","#e87040","#f3956a","#f8b692","#fad4bc"];Ri.primary=Ri[5];var Ai=["#2b1d11","#442a11","#593815","#7c4a15","#aa6215","#d87a16","#e89a3c","#f3b765","#f8cf8d","#fae3b7"];Ai.primary=Ai[5];var Li=["#2b2111","#443111","#594214","#7c5914","#aa7714","#d89614","#e8b339","#f3cc62","#f8df8b","#faedb5"];Li.primary=Li[5];var Ii=["#2b2611","#443b11","#595014","#7c6e14","#aa9514","#d8bd14","#e8d639","#f3ea62","#f8f48b","#fafab5"];Ii.primary=Ii[5];var Fi=["#1f2611","#2e3c10","#3e4f13","#536d13","#6f9412","#8bbb11","#a9d134","#c9e75d","#e4f88b","#f0fab5"];Fi.primary=Fi[5];var zi=["#162312","#1d3712","#274916","#306317","#3c8618","#49aa19","#6abe39","#8fd460","#b2e58b","#d5f2bb"];zi.primary=zi[5];var Bi=["#112123","#113536","#144848","#146262","#138585","#13a8a8","#33bcb7","#58d1c9","#84e2d8","#b2f1e8"];Bi.primary=Bi[5];var Hi=["#111a2c","#112545","#15325b","#15417e","#1554ad","#1668dc","#3c89e8","#65a9f3","#8dc5f8","#b7dcfa"];Hi.primary=Hi[5];var Ui=["#131629","#161d40","#1c2755","#203175","#263ea0","#2b4acb","#5273e0","#7f9ef3","#a8c1f8","#d2e0fa"];Ui.primary=Ui[5];var Yi=["#1a1325","#24163a","#301c4d","#3e2069","#51258f","#642ab5","#854eca","#ab7ae0","#cda8f0","#ebd7fa"];Yi.primary=Yi[5];var Wi=["#291321","#40162f","#551c3b","#75204f","#a02669","#cb2b83","#e0529c","#f37fb7","#f8a8cc","#fad2e3"];Wi.primary=Wi[5];var qi=["#151515","#1f1f1f","#2d2d2d","#393939","#494949","#5a5a5a","#6a6a6a","#7b7b7b","#888888","#969696"];qi.primary=qi[5];const Vi={blue:"#1677FF",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#EB2F96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},Qi=Object.assign(Object.assign({},Vi),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});const Ki=e=>{let t=e,n=e,r=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?n=4:e<8&&e>=7?n=5:e<14&&e>=8?n=6:e<16&&e>=14?n=7:e>=16&&(n=8),e<6&&e>=2?r=1:e>=6&&(r=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:r,borderRadiusSM:n,borderRadiusLG:t,borderRadiusOuter:o}};const $i=e=>{const{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}};const Gi=e=>{const t=function(e){const t=Array.from({length:10}).map(((t,n)=>{const r=n-1,o=e*Math.pow(Math.E,r/5),a=n>1?Math.floor(o):Math.ceil(o);return 2*Math.floor(a/2)}));return t[1]=e,t.map((e=>{return{size:e,lineHeight:(t=e,(t+8)/t)};var t}))}(e),n=t.map((e=>e.size)),r=t.map((e=>e.lineHeight)),o=n[1],a=n[0],i=n[2],s=r[1],l=r[0],c=r[2];return{fontSizeSM:a,fontSize:o,fontSizeLG:i,fontSizeXL:n[3],fontSizeHeading1:n[6],fontSizeHeading2:n[5],fontSizeHeading3:n[4],fontSizeHeading4:n[3],fontSizeHeading5:n[2],lineHeight:s,lineHeightLG:c,lineHeightSM:l,fontHeight:Math.round(s*o),fontHeightLG:Math.round(c*i),fontHeightSM:Math.round(l*a),lineHeightHeading1:r[6],lineHeightHeading2:r[5],lineHeightHeading3:r[4],lineHeightHeading4:r[3],lineHeightHeading5:r[2]}};const Xi=(e,t)=>new fi(e).setA(t).toRgbString(),Ji=(e,t)=>new fi(e).darken(t).toHexString(),Zi=e=>{const t=gi(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},es=(e,t)=>{const n=e||"#fff",r=t||"#000";return{colorBgBase:n,colorTextBase:r,colorText:Xi(r,.88),colorTextSecondary:Xi(r,.65),colorTextTertiary:Xi(r,.45),colorTextQuaternary:Xi(r,.25),colorFill:Xi(r,.15),colorFillSecondary:Xi(r,.06),colorFillTertiary:Xi(r,.04),colorFillQuaternary:Xi(r,.02),colorBgSolid:Xi(r,1),colorBgSolidHover:Xi(r,.75),colorBgSolidActive:Xi(r,.95),colorBgLayout:Ji(n,4),colorBgContainer:Ji(n,0),colorBgElevated:Ji(n,0),colorBgSpotlight:Xi(r,.85),colorBgBlur:"transparent",colorBorder:Ji(n,15),colorBorderSecondary:Ji(n,6)}};const ts=so((function(e){yi.pink=yi.magenta,Oi.pink=Oi.magenta;const t=Object.keys(Vi).map((t=>{const n=e[t]===yi[t]?Oi[t]:gi(e[t]);return Array.from({length:10},(()=>1)).reduce(((e,r,o)=>(e["".concat(t,"-").concat(o+1)]=n[o],e["".concat(t).concat(o+1)]=n[o],e)),{})})).reduce(((e,t)=>e=Object.assign(Object.assign({},e),t)),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:n,generateNeutralColorPalettes:r}=t;const{colorSuccess:o,colorWarning:a,colorError:i,colorInfo:s,colorPrimary:l,colorBgBase:c,colorTextBase:u}=e,d=n(l),f=n(o),p=n(a),h=n(i),m=n(s),v=r(c,u),g=n(e.colorLink||e.colorInfo),y=new fi(h[1]).mix(new fi(h[3]),50).toHexString();return Object.assign(Object.assign({},v),{colorPrimaryBg:d[1],colorPrimaryBgHover:d[2],colorPrimaryBorder:d[3],colorPrimaryBorderHover:d[4],colorPrimaryHover:d[5],colorPrimary:d[6],colorPrimaryActive:d[7],colorPrimaryTextHover:d[8],colorPrimaryText:d[9],colorPrimaryTextActive:d[10],colorSuccessBg:f[1],colorSuccessBgHover:f[2],colorSuccessBorder:f[3],colorSuccessBorderHover:f[4],colorSuccessHover:f[4],colorSuccess:f[6],colorSuccessActive:f[7],colorSuccessTextHover:f[8],colorSuccessText:f[9],colorSuccessTextActive:f[10],colorErrorBg:h[1],colorErrorBgHover:h[2],colorErrorBgFilledHover:y,colorErrorBgActive:h[3],colorErrorBorder:h[3],colorErrorBorderHover:h[4],colorErrorHover:h[5],colorError:h[6],colorErrorActive:h[7],colorErrorTextHover:h[8],colorErrorText:h[9],colorErrorTextActive:h[10],colorWarningBg:p[1],colorWarningBgHover:p[2],colorWarningBorder:p[3],colorWarningBorderHover:p[4],colorWarningHover:p[4],colorWarning:p[6],colorWarningActive:p[7],colorWarningTextHover:p[8],colorWarningText:p[9],colorWarningTextActive:p[10],colorInfoBg:m[1],colorInfoBgHover:m[2],colorInfoBorder:m[3],colorInfoBorderHover:m[4],colorInfoHover:m[4],colorInfo:m[6],colorInfoActive:m[7],colorInfoTextHover:m[8],colorInfoText:m[9],colorInfoTextActive:m[10],colorLinkHover:g[4],colorLink:g[6],colorLinkActive:g[7],colorBgMask:new fi("#000").setA(.45).toRgbString(),colorWhite:"#fff"})}(e,{generateColorPalettes:Zi,generateNeutralColorPalettes:es})),Gi(e.fontSize)),function(e){const{sizeUnit:t,sizeStep:n}=e;return{sizeXXL:t*(n+8),sizeXL:t*(n+4),sizeLG:t*(n+2),sizeMD:t*(n+1),sizeMS:t*n,size:t*n,sizeSM:t*(n-1),sizeXS:t*(n-2),sizeXXS:t*(n-3)}}(e)),$i(e)),function(e){const{motionUnit:t,motionBase:n,borderRadius:r,lineWidth:o}=e;return Object.assign({motionDurationFast:"".concat((n+t).toFixed(1),"s"),motionDurationMid:"".concat((n+2*t).toFixed(1),"s"),motionDurationSlow:"".concat((n+3*t).toFixed(1),"s"),lineWidthBold:o+1},Ki(r))}(e))})),ns=ts,rs={token:Qi,override:{override:Qi},hashed:!0},os=r.createContext(rs),as="-ant-".concat(Date.now(),"-").concat(Math.random());function is(e,t){const n=function(e,t){const n={},r=(e,t)=>{let n=e.clone();return n=(null===t||void 0===t?void 0:t(n))||n,n.toRgbString()},o=(e,t)=>{const o=new fi(e),a=gi(o.toRgbString());n["".concat(t,"-color")]=r(o),n["".concat(t,"-color-disabled")]=a[1],n["".concat(t,"-color-hover")]=a[4],n["".concat(t,"-color-active")]=a[6],n["".concat(t,"-color-outline")]=o.clone().setA(.2).toRgbString(),n["".concat(t,"-color-deprecated-bg")]=a[0],n["".concat(t,"-color-deprecated-border")]=a[2]};if(t.primaryColor){o(t.primaryColor,"primary");const e=new fi(t.primaryColor),a=gi(e.toRgbString());a.forEach(((e,t)=>{n["primary-".concat(t+1)]=e})),n["primary-color-deprecated-l-35"]=r(e,(e=>e.lighten(35))),n["primary-color-deprecated-l-20"]=r(e,(e=>e.lighten(20))),n["primary-color-deprecated-t-20"]=r(e,(e=>e.tint(20))),n["primary-color-deprecated-t-50"]=r(e,(e=>e.tint(50))),n["primary-color-deprecated-f-12"]=r(e,(e=>e.setA(.12*e.a)));const i=new fi(a[0]);n["primary-color-active-deprecated-f-30"]=r(i,(e=>e.setA(.3*e.a))),n["primary-color-active-deprecated-d-02"]=r(i,(e=>e.darken(2)))}t.successColor&&o(t.successColor,"success"),t.warningColor&&o(t.warningColor,"warning"),t.errorColor&&o(t.errorColor,"error"),t.infoColor&&o(t.infoColor,"info");const a=Object.keys(n).map((t=>"--".concat(e,"-").concat(t,": ").concat(n[t],";")));return"\n  :root {\n    ".concat(a.join("\n"),"\n  }\n  ").trim()}(e,t);Er()&&Rr(n,"".concat(as,"-dynamic-theme"))}const ss=r.createContext(!1),ls=e=>{let{children:t,disabled:n}=e;const o=r.useContext(ss);return r.createElement(ss.Provider,{value:null!==n&&void 0!==n?n:o},t)},cs=ss,us=r.createContext(void 0),ds=e=>{let{children:t,size:n}=e;const o=r.useContext(us);return r.createElement(us.Provider,{value:n||o},t)},fs=us;const ps=function(){return{componentDisabled:(0,r.useContext)(cs),componentSize:(0,r.useContext)(fs)}},hs=Object.assign({},o),{useId:ms}=hs,vs="undefined"===typeof ms?()=>"":ms;var gs=n(97),ys=n.n(gs);function bs(e){return e instanceof HTMLElement||e instanceof SVGElement}function ws(e){var t,n=function(e){return e&&"object"===je(e)&&bs(e.nativeElement)?e.nativeElement:bs(e)?e:null}(e);return n||(e instanceof r.Component?null===(t=i.findDOMNode)||void 0===t?void 0:t.call(i,e):null)}var xs=n(808),ks=Symbol.for("react.element"),Ss=Symbol.for("react.transitional.element"),Es=Symbol.for("react.fragment");var Cs=Number(r.version.split(".")[0]),Ns=function(e,t){"function"===typeof e?e(t):"object"===je(e)&&e&&"current"in e&&(e.current=t)},js=function(e){var t,n;if(!e)return!1;if(Ds(e)&&Cs>=19)return!0;var r=(0,xs.isMemo)(e)?e.type.type:e.type;return!!("function"!==typeof r||null!==(t=r.prototype)&&void 0!==t&&t.render||r.$$typeof===xs.ForwardRef)&&!!("function"!==typeof e||null!==(n=e.prototype)&&void 0!==n&&n.render||e.$$typeof===xs.ForwardRef)};function Ds(e){return(0,r.isValidElement)(e)&&!((t=e)&&"object"===je(t)&&(t.$$typeof===ks||t.$$typeof===Ss)&&t.type===Es);var t}function Ps(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ts=["children"],_s=r.createContext({});function Os(e){var t=e.children,n=Ps(e,Ts);return r.createElement(_s.Provider,{value:n},t)}function Ms(e,t){return Ms=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Ms(e,t)}function Rs(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ms(e,t)}function As(e){return As=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},As(e)}function Ls(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ls=function(){return!!e})()}function Is(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Fs(e){var t=Ls();return function(){var n,r=As(e);if(t){var o=As(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return function(e,t){if(t&&("object"==je(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return Is(e)}(this,n)}}const zs=function(e){Rs(n,e);var t=Fs(n);function n(){return Wr(this,n),t.apply(this,arguments)}return Vr(n,[{key:"render",value:function(){return this.props.children}}]),n}(r.Component);function Bs(e){var t=r.useRef();t.current=e;var n=r.useCallback((function(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return null===(e=t.current)||void 0===e?void 0:e.call.apply(e,[t].concat(r))}),[]);return n}function Hs(e){var t=r.useRef(!1),n=kr(r.useState(e),2),o=n[0],a=n[1];return r.useEffect((function(){return t.current=!1,function(){t.current=!0}}),[]),[o,function(e,n){n&&t.current||a(e)}]}var Us="none",Ys="appear",Ws="enter",qs="leave",Vs="none",Qs="prepare",Ks="start",$s="active",Gs="end",Xs="prepared";function Js(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var Zs=function(e,t){var n={animationend:Js("Animation","AnimationEnd"),transitionend:Js("Transition","TransitionEnd")};return e&&("AnimationEvent"in t||delete n.animationend.animation,"TransitionEvent"in t||delete n.transitionend.transition),n}(Er(),"undefined"!==typeof window?window:{}),el={};if(Er()){var tl=document.createElement("div");el=tl.style}var nl={};function rl(e){if(nl[e])return nl[e];var t=Zs[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o<r;o+=1){var a=n[o];if(Object.prototype.hasOwnProperty.call(t,a)&&a in el)return nl[e]=t[a],nl[e]}return""}var ol=rl("animationend"),al=rl("transitionend"),il=!(!ol||!al),sl=ol||"animationend",ll=al||"transitionend";function cl(e,t){if(!e)return null;if("object"===je(e)){var n=t.replace(/-\w/g,(function(e){return e[1].toUpperCase()}));return e[n]}return"".concat(e,"-").concat(t)}const ul=Er()?r.useLayoutEffect:r.useEffect;var dl=function(e){return+setTimeout(e,16)},fl=function(e){return clearTimeout(e)};"undefined"!==typeof window&&"requestAnimationFrame"in window&&(dl=function(e){return window.requestAnimationFrame(e)},fl=function(e){return window.cancelAnimationFrame(e)});var pl=0,hl=new Map;function ml(e){hl.delete(e)}var vl=function(e){var t=pl+=1;return function n(r){if(0===r)ml(t),e();else{var o=dl((function(){n(r-1)}));hl.set(t,o)}}(arguments.length>1&&void 0!==arguments[1]?arguments[1]:1),t};vl.cancel=function(e){var t=hl.get(e);return ml(e),fl(t)};const gl=vl;var yl=[Qs,Ks,$s,Gs],bl=[Qs,Xs],wl=!1;function xl(e){return e===$s||e===Gs}const kl=function(e,t,n){var o=kr(Hs(Vs),2),a=o[0],i=o[1],s=function(){var e=r.useRef(null);function t(){gl.cancel(e.current)}return r.useEffect((function(){return function(){t()}}),[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var a=gl((function(){o<=1?r({isCanceled:function(){return a!==e.current}}):n(r,o-1)}));e.current=a},t]}(),l=kr(s,2),c=l[0],u=l[1];var d=t?bl:yl;return ul((function(){if(a!==Vs&&a!==Gs){var e=d.indexOf(a),t=d[e+1],r=n(a);r===wl?i(t,!0):t&&c((function(e){function n(){e.isCanceled()||i(t,!0)}!0===r?n():Promise.resolve(r).then(n)}))}}),[e,a]),r.useEffect((function(){return function(){u()}}),[]),[function(){i(Qs,!0)},a]};function Sl(e,t,n,o){var a=o.motionEnter,i=void 0===a||a,s=o.motionAppear,l=void 0===s||s,c=o.motionLeave,u=void 0===c||c,d=o.motionDeadline,f=o.motionLeaveImmediately,p=o.onAppearPrepare,h=o.onEnterPrepare,m=o.onLeavePrepare,v=o.onAppearStart,g=o.onEnterStart,y=o.onLeaveStart,b=o.onAppearActive,w=o.onEnterActive,x=o.onLeaveActive,k=o.onAppearEnd,S=o.onEnterEnd,E=o.onLeaveEnd,C=o.onVisibleChanged,N=kr(Hs(),2),j=N[0],D=N[1],P=function(e){var t=kr(r.useReducer((function(e){return e+1}),0),2)[1],n=r.useRef(e);return[Bs((function(){return n.current})),Bs((function(e){n.current="function"===typeof e?e(n.current):e,t()}))]}(Us),T=kr(P,2),_=T[0],O=T[1],M=kr(Hs(null),2),R=M[0],A=M[1],L=_(),I=(0,r.useRef)(!1),F=(0,r.useRef)(null);function z(){return n()}var B=(0,r.useRef)(!1);function H(){O(Us),A(null,!0)}var U=Bs((function(e){var t=_();if(t!==Us){var n=z();if(!e||e.deadline||e.target===n){var r,o=B.current;t===Ys&&o?r=null===k||void 0===k?void 0:k(n,e):t===Ws&&o?r=null===S||void 0===S?void 0:S(n,e):t===qs&&o&&(r=null===E||void 0===E?void 0:E(n,e)),o&&!1!==r&&H()}}})),Y=function(e){var t=(0,r.useRef)();function n(t){t&&(t.removeEventListener(ll,e),t.removeEventListener(sl,e))}return r.useEffect((function(){return function(){n(t.current)}}),[]),[function(r){t.current&&t.current!==r&&n(t.current),r&&r!==t.current&&(r.addEventListener(ll,e),r.addEventListener(sl,e),t.current=r)},n]}(U),W=kr(Y,1)[0],q=function(e){switch(e){case Ys:return Pe(Pe(Pe({},Qs,p),Ks,v),$s,b);case Ws:return Pe(Pe(Pe({},Qs,h),Ks,g),$s,w);case qs:return Pe(Pe(Pe({},Qs,m),Ks,y),$s,x);default:return{}}},V=r.useMemo((function(){return q(L)}),[L]),Q=kr(kl(L,!e,(function(e){if(e===Qs){var t=V[Qs];return t?t(z()):wl}var n;$ in V&&A((null===(n=V[$])||void 0===n?void 0:n.call(V,z(),null))||null);return $===$s&&L!==Us&&(W(z()),d>0&&(clearTimeout(F.current),F.current=setTimeout((function(){U({deadline:!0})}),d))),$===Xs&&H(),true})),2),K=Q[0],$=Q[1],G=xl($);B.current=G;var X=(0,r.useRef)(null);ul((function(){if(!I.current||X.current!==t){D(t);var n,r=I.current;I.current=!0,!r&&t&&l&&(n=Ys),r&&t&&i&&(n=Ws),(r&&!t&&u||!r&&f&&!t&&u)&&(n=qs);var o=q(n);n&&(e||o[Qs])?(O(n),K()):O(Us),X.current=t}}),[t]),(0,r.useEffect)((function(){(L===Ys&&!l||L===Ws&&!i||L===qs&&!u)&&O(Us)}),[l,i,u]),(0,r.useEffect)((function(){return function(){I.current=!1,clearTimeout(F.current)}}),[]);var J=r.useRef(!1);(0,r.useEffect)((function(){j&&(J.current=!0),void 0!==j&&L===Us&&((J.current||j)&&(null===C||void 0===C||C(j)),J.current=!0)}),[j,L]);var Z=R;return V[Qs]&&$===Ks&&(Z=_e({transition:"none"},Z)),[L,$,Z,null!==j&&void 0!==j?j:t]}const El=function(e){var t=e;"object"===je(e)&&(t=e.transitionSupport);var n=r.forwardRef((function(e,n){var o=e.visible,a=void 0===o||o,i=e.removeOnLeave,s=void 0===i||i,l=e.forceRender,c=e.children,u=e.motionName,d=e.leavedClassName,f=e.eventProps,p=function(e,n){return!(!e.motionName||!t||!1===n)}(e,r.useContext(_s).motion),h=(0,r.useRef)(),m=(0,r.useRef)();var v=kr(Sl(p,a,(function(){try{return h.current instanceof HTMLElement?h.current:ws(m.current)}catch(Dy){return null}}),e),4),g=v[0],y=v[1],b=v[2],w=v[3],x=r.useRef(w);w&&(x.current=!0);var k,S=r.useCallback((function(e){h.current=e,Ns(n,e)}),[n]),E=_e(_e({},f),{},{visible:a});if(c)if(g===Us)k=w?c(_e({},E),S):!s&&x.current&&d?c(_e(_e({},E),{},{className:d}),S):l||!s&&!d?c(_e(_e({},E),{},{style:{display:"none"}}),S):null;else{var C;y===Qs?C="prepare":xl(y)?C="active":y===Ks&&(C="start");var N=cl(u,"".concat(g,"-").concat(C));k=c(_e(_e({},E),{},{className:ys()(cl(u,g),Pe(Pe({},N,N&&C),u,"string"===typeof u)),style:b}),S)}else k=null;if(r.isValidElement(k)&&js(k)){var j=function(e){if(e&&Ds(e)){var t=e;return t.props.propertyIsEnumerable("ref")?t.props.ref:t.ref}return null}(k);j||(k=r.cloneElement(k,{ref:S}))}return r.createElement(zs,{ref:m},k)}));return n.displayName="CSSMotion",n}(il);var Cl="add",Nl="keep",jl="remove",Dl="removed";function Pl(e){var t;return _e(_e({},t=e&&"object"===je(e)&&"key"in e?e:{key:e}),{},{key:String(t.key)})}function Tl(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(Pl)}var _l=["component","children","onVisibleChanged","onAllRemoved"],Ol=["status"],Ml=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];const Rl=function(){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:El,t=function(t){Rs(o,t);var n=Fs(o);function o(){var e;Wr(this,o);for(var t=arguments.length,r=new Array(t),a=0;a<t;a++)r[a]=arguments[a];return Pe(Is(e=n.call.apply(n,[this].concat(r))),"state",{keyEntities:[]}),Pe(Is(e),"removeKey",(function(t){e.setState((function(e){return{keyEntities:e.keyEntities.map((function(e){return e.key!==t?e:_e(_e({},e),{},{status:Dl})}))}}),(function(){0===e.state.keyEntities.filter((function(e){return e.status!==Dl})).length&&e.props.onAllRemoved&&e.props.onAllRemoved()}))})),e}return Vr(o,[{key:"render",value:function(){var t=this,n=this.state.keyEntities,o=this.props,a=o.component,i=o.children,s=o.onVisibleChanged,l=(o.onAllRemoved,Ps(o,_l)),c=a||r.Fragment,u={};return Ml.forEach((function(e){u[e]=l[e],delete l[e]})),delete l.keys,r.createElement(c,l,n.map((function(n,o){var a=n.status,l=Ps(n,Ol),c=a===Cl||a===Nl;return r.createElement(e,Mo({},u,{key:l.key,visible:c,eventProps:l,onVisibleChanged:function(e){null===s||void 0===s||s(e,{key:l.key}),e||t.removeKey(l.key)}}),(function(e,t){return i(_e(_e({},e),{},{index:o}),t)}))})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.keys,r=t.keyEntities,o=Tl(n),a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,a=Tl(e),i=Tl(t);a.forEach((function(e){for(var t=!1,a=r;a<o;a+=1){var s=i[a];if(s.key===e.key){r<a&&(n=n.concat(i.slice(r,a).map((function(e){return _e(_e({},e),{},{status:Cl})}))),r=a),n.push(_e(_e({},s),{},{status:Nl})),r+=1,t=!0;break}}t||n.push(_e(_e({},e),{},{status:jl}))})),r<o&&(n=n.concat(i.slice(r).map((function(e){return _e(_e({},e),{},{status:Cl})}))));var s={};return n.forEach((function(e){var t=e.key;s[t]=(s[t]||0)+1})),Object.keys(s).filter((function(e){return s[e]>1})).forEach((function(e){(n=n.filter((function(t){var n=t.key,r=t.status;return n!==e||r!==jl}))).forEach((function(t){t.key===e&&(t.status=Nl)}))})),n}(r,o);return{keyEntities:a.filter((function(e){var t=r.find((function(t){var n=t.key;return e.key===n}));return!t||t.status!==Dl||e.status!==jl}))}}}]),o}(r.Component);return Pe(t,"defaultProps",{component:"div"}),t}(il);function Al(e){return e>=0&&e<=255}const Ll=function(e,t){const{r:n,g:r,b:o,a:a}=new fi(e).toRgb();if(a<1)return e;const{r:i,g:s,b:l}=new fi(t).toRgb();for(let c=.01;c<=1;c+=.01){const e=Math.round((n-i*(1-c))/c),t=Math.round((r-s*(1-c))/c),a=Math.round((o-l*(1-c))/c);if(Al(e)&&Al(t)&&Al(a))return new fi({r:e,g:t,b:a,a:Math.round(100*c)/100}).toRgbString()}return new fi({r:n,g:r,b:o,a:1}).toRgbString()};var Il=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};function Fl(e){const{override:t}=e,n=Il(e,["override"]),r=Object.assign({},t);Object.keys(Qi).forEach((e=>{delete r[e]}));const o=Object.assign(Object.assign({},n),r),a=1200,i=1600;if(!1===o.motion){const e="0s";o.motionDurationFast=e,o.motionDurationMid=e,o.motionDurationSlow=e}return Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:Ll(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:Ll(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:Ll(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:3*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:Ll(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowSecondary:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTertiary:"\n      0 1px 2px 0 rgba(0, 0, 0, 0.03),\n      0 1px 6px -1px rgba(0, 0, 0, 0.02),\n      0 2px 4px 0 rgba(0, 0, 0, 0.02)\n    ",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:a,screenXLMin:a,screenXLMax:1599,screenXXL:i,screenXXLMin:i,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:"\n      0 1px 2px -2px ".concat(new fi("rgba(0, 0, 0, 0.16)").toRgbString(),",\n      0 3px 6px 0 ").concat(new fi("rgba(0, 0, 0, 0.12)").toRgbString(),",\n      0 5px 12px 4px ").concat(new fi("rgba(0, 0, 0, 0.09)").toRgbString(),"\n    "),boxShadowDrawerRight:"\n      -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerLeft:"\n      6px 0 16px 0 rgba(0, 0, 0, 0.08),\n      3px 0 6px -4px rgba(0, 0, 0, 0.12),\n      9px 0 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerUp:"\n      0 6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowDrawerDown:"\n      0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n      0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n      0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n    ",boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),r)}var zl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Bl={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0,opacityImage:!0},Hl={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},Ul={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},Yl=(e,t,n)=>{const r=n.getDerivativeToken(e),{override:o}=t,a=zl(t,["override"]);let i=Object.assign(Object.assign({},r),{override:o});return i=Fl(i),a&&Object.entries(a).forEach((e=>{let[t,n]=e;const{theme:r}=n,o=zl(n,["theme"]);let a=o;r&&(a=Yl(Object.assign(Object.assign({},i),o),{override:o},r)),i[t]=a})),i};function Wl(){const{token:e,hashed:t,theme:n,override:o,cssVar:a}=r.useContext(os),i="".concat("5.25.4","-").concat(t||""),s=n||ns,[l,c,u]=Oo(s,[Qi,e],{salt:i,override:o,getComputedToken:Yl,formatToken:Fl,cssVar:a&&{prefix:a.prefix,key:a.key,unitless:Bl,ignore:Hl,preserve:Ul}});return[s,u,t?c:"",l,a]}function ql(e){const{children:t}=e,[,n]=Wl(),{motion:o}=n,a=r.useRef(!1);return a.current=a.current||!1===o,a.current?r.createElement(Os,{motion:o},t):t}const Vl=()=>null,Ql=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}},Kl=e=>({[".".concat(e)]:Object.assign(Object.assign({},{display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),{[".".concat(e," .").concat(e,"-icon")]:{display:"block"}})}),$l=(e,t)=>{const[n,r]=Wl();return Ma({theme:n,token:r,hashId:"",path:["ant-design-icons",e],nonce:()=>null===t||void 0===t?void 0:t.nonce,layer:{name:"antd"}},(()=>[Kl(e)]))};var Gl=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Xl=["getTargetContainer","getPopupContainer","renderEmpty","input","pagination","form","select","button"];let Jl,Zl,ec,tc;function nc(){return Jl||vr}function rc(){return Zl||gr}const oc=()=>({getPrefixCls:(e,t)=>t||(e?"".concat(nc(),"-").concat(e):nc()),getIconPrefixCls:rc,getRootPrefixCls:()=>Jl||nc(),getTheme:()=>ec,holderRender:tc}),ac=e=>{const{children:t,csp:n,autoInsertSpaceInButton:o,alert:a,anchor:i,form:s,locale:l,componentSize:c,direction:u,space:d,splitter:f,virtual:p,dropdownMatchSelectWidth:h,popupMatchSelectWidth:m,popupOverflow:v,legacyLocale:g,parentContext:y,iconPrefixCls:b,theme:w,componentDisabled:x,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,input:Q,textArea:K,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne}=e,je=r.useCallback(((t,n)=>{const{prefixCls:r}=e;if(n)return n;const o=r||y.getPrefixCls("");return t?"".concat(o,"-").concat(t):o}),[y.getPrefixCls,e.prefixCls]),De=b||y.iconPrefixCls||gr,Pe=n||y.csp;$l(De,Pe);const Te=function(e,t,n){var r;$a("ConfigProvider");const o=e||{},a=!1!==o.inherit&&t?t:Object.assign(Object.assign({},rs),{hashed:null!==(r=null===t||void 0===t?void 0:t.hashed)&&void 0!==r?r:rs.hashed,cssVar:null===t||void 0===t?void 0:t.cssVar}),i=vs();return Ar((()=>{var r,s;if(!e)return t;const l=Object.assign({},a.components);Object.keys(e.components||{}).forEach((t=>{l[t]=Object.assign(Object.assign({},l[t]),e.components[t])}));const c="css-var-".concat(i.replace(/:/g,"")),u=(null!==(r=o.cssVar)&&void 0!==r?r:a.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:null===n||void 0===n?void 0:n.prefixCls},"object"===typeof a.cssVar?a.cssVar:{}),"object"===typeof o.cssVar?o.cssVar:{}),{key:"object"===typeof o.cssVar&&(null===(s=o.cssVar)||void 0===s?void 0:s.key)||c});return Object.assign(Object.assign(Object.assign({},a),o),{token:Object.assign(Object.assign({},a.token),o.token),components:l,cssVar:u})}),[o,a],((e,t)=>e.some(((e,n)=>{const r=t[n];return!Yr(e,r,!0)}))))}(w,y.theme,{prefixCls:je("")});const _e={csp:Pe,autoInsertSpaceInButton:o,alert:a,anchor:i,locale:l||g,direction:u,space:d,splitter:f,virtual:p,popupMatchSelectWidth:null!==m&&void 0!==m?m:h,popupOverflow:v,getPrefixCls:je,iconPrefixCls:De,theme:Te,segmented:k,statistic:S,spin:E,calendar:C,carousel:N,cascader:j,collapse:D,typography:P,checkbox:T,descriptions:_,divider:O,drawer:M,skeleton:R,steps:A,image:L,input:Q,textArea:K,layout:I,list:F,mentions:z,modal:B,progress:H,result:U,slider:Y,breadcrumb:W,menu:q,pagination:V,empty:$,badge:G,radio:X,rate:J,switch:Z,transfer:ee,avatar:te,message:ne,tag:re,table:oe,card:ae,tabs:ie,timeline:se,timePicker:le,upload:ce,notification:ue,tree:de,colorPicker:fe,datePicker:pe,rangePicker:he,flex:me,wave:ve,dropdown:ge,warning:ye,tour:be,tooltip:we,popover:xe,popconfirm:ke,floatButtonGroup:Se,variant:Ee,inputNumber:Ce,treeSelect:Ne};const Oe=Object.assign({},y);Object.keys(_e).forEach((e=>{void 0!==_e[e]&&(Oe[e]=_e[e])})),Xl.forEach((t=>{const n=e[t];n&&(Oe[t]=n)})),"undefined"!==typeof o&&(Oe.button=Object.assign({autoInsertSpace:o},Oe.button));const Me=Ar((()=>Oe),Oe,((e,t)=>{const n=Object.keys(e),r=Object.keys(t);return n.length!==r.length||n.some((n=>e[n]!==t[n]))})),{layer:Re}=r.useContext(to),Ae=r.useMemo((()=>({prefixCls:De,csp:Pe,layer:Re?"antd":void 0})),[De,Pe,Re]);let Le=r.createElement(r.Fragment,null,r.createElement(Vl,{dropdownMatchSelectWidth:h}),t);const Ie=r.useMemo((()=>{var e,t,n,r;return Va((null===(e=ni.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(n=null===(t=Me.locale)||void 0===t?void 0:t.Form)||void 0===n?void 0:n.defaultValidateMessages)||{},(null===(r=Me.form)||void 0===r?void 0:r.validateMessages)||{},(null===s||void 0===s?void 0:s.validateMessages)||{})}),[Me,null===s||void 0===s?void 0:s.validateMessages]);Object.keys(Ie).length>0&&(Le=r.createElement(Ga.Provider,{value:Ie},Le)),l&&(Le=r.createElement(si,{locale:l,_ANT_MARK__:"internalMark"},Le)),(De||Pe)&&(Le=r.createElement(Ba.Provider,{value:Ae},Le)),c&&(Le=r.createElement(ds,{size:c},Le)),Le=r.createElement(ql,null,Le);const Fe=r.useMemo((()=>{const e=Te||{},{algorithm:t,token:n,components:r,cssVar:o}=e,a=Gl(e,["algorithm","token","components","cssVar"]),i=t&&(!Array.isArray(t)||t.length>0)?so(t):ns,s={};Object.entries(r||{}).forEach((e=>{let[t,n]=e;const r=Object.assign({},n);"algorithm"in r&&(!0===r.algorithm?r.theme=i:(Array.isArray(r.algorithm)||"function"===typeof r.algorithm)&&(r.theme=so(r.algorithm)),delete r.algorithm),s[t]=r}));const l=Object.assign(Object.assign({},Qi),n);return Object.assign(Object.assign({},a),{theme:i,token:l,components:s,override:Object.assign({override:l},s),cssVar:o})}),[Te]);return w&&(Le=r.createElement(os.Provider,{value:Fe},Le)),Me.warning&&(Le=r.createElement(Ka.Provider,{value:Me.warning},Le)),void 0!==x&&(Le=r.createElement(ls,{disabled:x},Le)),r.createElement(yr.Provider,{value:Me},Le)},ic=e=>{const t=r.useContext(yr),n=r.useContext(ii);return r.createElement(ac,Object.assign({parentContext:t,legacyLocale:n},e))};ic.ConfigContext=yr,ic.SizeContext=fs,ic.config=e=>{const{prefixCls:t,iconPrefixCls:n,theme:r,holderRender:o}=e;void 0!==t&&(Jl=t),void 0!==n&&(Zl=n),"holderRender"in e&&(tc=o),r&&(!function(e){return Object.keys(e).some((e=>e.endsWith("Color")))}(r)?ec=r:is(nc(),r))},ic.useConfig=ps,Object.defineProperty(ic,"SizeContext",{get:()=>fs});const sc=ic;function lc(){lc=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,n,r){return Object.defineProperty(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r})}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function c(t,n,r,o){var a=n&&n.prototype instanceof f?n:f,i=Object.create(a.prototype);return l(i,"_invoke",function(t,n,r){var o=1;return function(a,i){if(3===o)throw Error("Generator is already running");if(4===o){if("throw"===a)throw i;return{value:e,done:!0}}for(r.method=a,r.arg=i;;){var s=r.delegate;if(s){var l=x(s,r);if(l){if(l===d)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(1===o)throw o=4,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o=3;var c=u(t,n,r);if("normal"===c.type){if(o=r.done?4:2,c.arg===d)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o=4,r.method="throw",r.arg=c.arg)}}}(t,r,new E(o||[])),!0),i}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var d={};function f(){}function p(){}function h(){}var m={};l(m,a,(function(){return this}));var v=Object.getPrototypeOf,g=v&&v(v(C([])));g&&g!==n&&r.call(g,a)&&(m=g);var y=h.prototype=f.prototype=Object.create(m);function b(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function n(o,a,i,s){var l=u(e[o],e,a);if("throw"!==l.type){var c=l.arg,d=c.value;return d&&"object"==je(d)&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,i,s)}),(function(e){n("throw",e,i,s)})):t.resolve(d).then((function(e){c.value=e,i(c)}),(function(e){return n("throw",e,i,s)}))}s(l.arg)}var o;l(this,"_invoke",(function(e,r){function a(){return new t((function(t,o){n(e,r,t,o)}))}return o=o?o.then(a,a):a()}),!0)}function x(t,n){var r=n.method,o=t.i[r];if(o===e)return n.delegate=null,"throw"===r&&t.i.return&&(n.method="return",n.arg=e,x(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),d;var a=u(o,t.i,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,d;var i=a.arg;return i?i.done?(n[t.r]=i.value,n.next=t.n,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,d):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,d)}function k(e){this.tryEntries.push(e)}function S(t){var n=t[4]||{};n.type="normal",n.arg=e,t[4]=n}function E(e){this.tryEntries=[[-1]],e.forEach(k,this),this.reset(!0)}function C(t){if(null!=t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,i=function n(){for(;++o<t.length;)if(r.call(t,o))return n.value=t[o],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(je(t)+" is not iterable")}return p.prototype=h,l(y,"constructor",h),l(h,"constructor",p),p.displayName=l(h,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,l(e,s,"GeneratorFunction")),e.prototype=Object.create(y),e},t.awrap=function(e){return{__await:e}},b(w.prototype),l(w.prototype,i,(function(){return this})),t.AsyncIterator=w,t.async=function(e,n,r,o,a){void 0===a&&(a=Promise);var i=new w(c(e,n,r,o),a);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},b(y),l(y,s,"Generator"),l(y,a,(function(){return this})),l(y,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.unshift(r);return function e(){for(;n.length;)if((r=n.pop())in t)return e.value=r,e.done=!1,e;return e.done=!0,e}},t.values=C,E.prototype={constructor:E,reset:function(t){if(this.prev=this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(S),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0][4];if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(e){i.type="throw",i.arg=t,n.next=e}for(var o=n.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],i=a[4],s=this.prev,l=a[1],c=a[2];if(-1===a[0])return r("end"),!1;if(!l&&!c)throw Error("try statement without catch or finally");if(null!=a[0]&&a[0]<=s){if(s<l)return this.method="next",this.arg=e,r(l),!0;if(s<c)return r(c),!1}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r[0]>-1&&r[0]<=this.prev&&this.prev<r[2]){var o=r;break}}o&&("break"===e||"continue"===e)&&o[0]<=t&&t<=o[2]&&(o=null);var a=o?o[4]:{};return a.type=e,a.arg=t,o?(this.method="next",this.next=o[2],d):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),d},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[2]===e)return this.complete(n[4],n[3]),S(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n[0]===e){var r=n[4];if("throw"===r.type){var o=r.arg;S(n)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={i:C(t),r:n,n:r},"next"===this.method&&(this.arg=e),d}},t}function cc(e,t,n,r,o,a,i){try{var s=e[a](i),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(r,o)}function uc(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){cc(a,r,o,i,s,"next",e)}function s(e){cc(a,r,o,i,s,"throw",e)}i(void 0)}))}}var dc,fc=_e({},s),pc=fc.version,hc=fc.render,mc=fc.unmountComponentAtNode;try{Number((pc||"").split(".")[0])>=18&&(dc=fc.createRoot)}catch(Dy){}function vc(e){var t=fc.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&"object"===je(t)&&(t.usingClientEntryPoint=e)}var gc="__rc_react_root__";function yc(e,t){dc?function(e,t){vc(!0);var n=t[gc]||dc(t);vc(!1),n.render(e),t[gc]=n}(e,t):function(e,t){null===hc||void 0===hc||hc(e,t)}(e,t)}function bc(e){return wc.apply(this,arguments)}function wc(){return(wc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.resolve().then((function(){var e;null===(e=t[gc])||void 0===e||e.unmount(),delete t[gc]})));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function xc(e){mc(e)}function kc(){return(kc=uc(lc().mark((function e(t){return lc().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===dc){e.next=2;break}return e.abrupt("return",bc(t));case 2:xc(t);case 3:case"end":return e.stop()}}),e)})))).apply(this,arguments)}let Sc=(e,t)=>(yc(e,t),()=>function(e){return kc.apply(this,arguments)}(t));const Ec={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};function Cc(e){var t;return null===e||void 0===e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function Nc(e){return function(e){return Cc(e)instanceof ShadowRoot}(e)?Cc(e):null}function jc(e){return"object"===je(e)&&"string"===typeof e.name&&"string"===typeof e.theme&&("object"===je(e.icon)||"function"===typeof e.icon)}function Dc(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce((function(t,n){var r,o=e[n];if("class"===n)t.className=o,delete t.class;else delete t[n],t[(r=n,r.replace(/-(.)/g,(function(e,t){return t.toUpperCase()})))]=o;return t}),{})}function Pc(e,t,n){return n?r.createElement(e.tag,_e(_e({key:t},Dc(e.attrs)),n),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))}))):r.createElement(e.tag,_e({key:t},Dc(e.attrs)),(e.children||[]).map((function(n,r){return Pc(n,"".concat(t,"-").concat(e.tag,"-").concat(r))})))}function Tc(e){return gi(e)[0]}function _c(e){return e?Array.isArray(e)?e:[e]:[]}var Oc=["icon","className","onClick","style","primaryColor","secondaryColor"],Mc={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};var Rc=function(e){var t=e.icon,n=e.className,o=e.onClick,a=e.style,i=e.primaryColor,s=e.secondaryColor,l=Ps(e,Oc),c=r.useRef(),u=Mc;if(i&&(u={primaryColor:i,secondaryColor:s||Tc(i)}),function(e){var t=(0,r.useContext)(Ba),n=t.csp,o=t.prefixCls,a=t.layer,i="\n.anticon {\n  display: inline-flex;\n  align-items: center;\n  color: inherit;\n  font-style: normal;\n  line-height: 0;\n  text-align: center;\n  text-transform: none;\n  vertical-align: -0.125em;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n  line-height: 1;\n}\n\n.anticon svg {\n  display: inline-block;\n}\n\n.anticon::before {\n  display: none;\n}\n\n.anticon .anticon-icon {\n  display: block;\n}\n\n.anticon[tabindex] {\n  cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n  display: inline-block;\n  -webkit-animation: loadingCircle 1s infinite linear;\n  animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loadingCircle {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n";o&&(i=i.replace(/anticon/g,o)),a&&(i="@layer ".concat(a," {\n").concat(i,"\n}")),(0,r.useEffect)((function(){var t=Nc(e.current);Rr(i,"@ant-design-icons",{prepend:!a,csp:n,attachTo:t})}),[])}(c),function(e,t){Ur(e,"[@ant-design/icons] ".concat(t))}(jc(t),"icon should be icon definiton, but got ".concat(t)),!jc(t))return null;var d=t;return d&&"function"===typeof d.icon&&(d=_e(_e({},d),{},{icon:d.icon(u.primaryColor,u.secondaryColor)})),Pc(d.icon,"svg-".concat(d.name),_e(_e({className:n,onClick:o,style:a,"data-icon":d.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},l),{},{ref:c}))};Rc.displayName="IconReact",Rc.getTwoToneColors=function(){return _e({},Mc)},Rc.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;Mc.primaryColor=t,Mc.secondaryColor=n||Tc(t),Mc.calculated=!!n};const Ac=Rc;function Lc(e){var t=kr(_c(e),2),n=t[0],r=t[1];return Ac.setTwoToneColors({primaryColor:n,secondaryColor:r})}var Ic=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];Lc(ji.primary);var Fc=r.forwardRef((function(e,t){var n=e.className,o=e.icon,a=e.spin,i=e.rotate,s=e.tabIndex,l=e.onClick,c=e.twoToneColor,u=Ps(e,Ic),d=r.useContext(Ba),f=d.prefixCls,p=void 0===f?"anticon":f,h=d.rootClassName,m=ys()(h,p,Pe(Pe({},"".concat(p,"-").concat(o.name),!!o.name),"".concat(p,"-spin"),!!a||"loading"===o.name),n),v=s;void 0===v&&l&&(v=-1);var g=i?{msTransform:"rotate(".concat(i,"deg)"),transform:"rotate(".concat(i,"deg)")}:void 0,y=kr(_c(c),2),b=y[0],w=y[1];return r.createElement("span",Mo({role:"img","aria-label":o.name},u,{ref:t,tabIndex:v,onClick:l,className:m}),r.createElement(Ac,{icon:o,primaryColor:b,secondaryColor:w,style:g}))}));Fc.displayName="AntdIcon",Fc.getTwoToneColor=function(){var e=Ac.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},Fc.setTwoToneColor=Lc;const zc=Fc;var Bc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Ec}))};const Hc=r.forwardRef(Bc);const Uc={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"};var Yc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Uc}))};const Wc=r.forwardRef(Yc);const qc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"};var Vc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:qc}))};const Qc=r.forwardRef(Vc);const Kc={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"};var $c=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Kc}))};const Gc=r.forwardRef($c);const Xc={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};var Jc=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:Xc}))};const Zc=r.forwardRef(Jc);var eu={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=eu.F1&&t<=eu.F12)return!1;switch(t){case eu.ALT:case eu.CAPS_LOCK:case eu.CONTEXT_MENU:case eu.CTRL:case eu.DOWN:case eu.END:case eu.ESC:case eu.HOME:case eu.INSERT:case eu.LEFT:case eu.MAC_FF_META:case eu.META:case eu.NUMLOCK:case eu.NUM_CENTER:case eu.PAGE_DOWN:case eu.PAGE_UP:case eu.PAUSE:case eu.PRINT_SCREEN:case eu.RIGHT:case eu.SHIFT:case eu.UP:case eu.WIN_KEY:case eu.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=eu.ZERO&&e<=eu.NINE)return!0;if(e>=eu.NUM_ZERO&&e<=eu.NUM_MULTIPLY)return!0;if(e>=eu.A&&e<=eu.Z)return!0;if(-1!==window.navigator.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case eu.SPACE:case eu.QUESTION_MARK:case eu.NUM_PLUS:case eu.NUM_MINUS:case eu.NUM_PERIOD:case eu.NUM_DIVISION:case eu.SEMICOLON:case eu.DASH:case eu.EQUALS:case eu.COMMA:case eu.PERIOD:case eu.SLASH:case eu.APOSTROPHE:case eu.SINGLE_QUOTE:case eu.OPEN_SQUARE_BRACKET:case eu.BACKSLASH:case eu.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const tu=eu;var nu="".concat("accept acceptCharset accessKey action allowFullScreen allowTransparency\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\n    charSet checked classID className colSpan cols content contentEditable contextMenu\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\n    mediaGroup method min minLength multiple muted name noValidate nonce open\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\n    summary tabIndex target title type useMap value width wmode wrap"," ").concat("onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError").split(/[\s\n]+/);function ru(e,t){return 0===e.indexOf(t)}var ou=r.forwardRef((function(e,t){var n=e.prefixCls,o=e.style,a=e.className,i=e.duration,s=void 0===i?4.5:i,l=e.showProgress,c=e.pauseOnHover,u=void 0===c||c,d=e.eventKey,f=e.content,p=e.closable,h=e.closeIcon,m=void 0===h?"x":h,v=e.props,g=e.onClick,y=e.onNoticeClose,b=e.times,w=e.hovering,x=kr(r.useState(!1),2),k=x[0],S=x[1],E=kr(r.useState(0),2),C=E[0],N=E[1],j=kr(r.useState(0),2),D=j[0],P=j[1],T=w||k,_=s>0&&l,O=function(){y(d)};r.useEffect((function(){if(!T&&s>0){var e=Date.now()-D,t=setTimeout((function(){O()}),1e3*s-D);return function(){u&&clearTimeout(t),P(Date.now()-e)}}}),[s,T,b]),r.useEffect((function(){if(!T&&_&&(u||0===D)){var e,t=performance.now();return function n(){cancelAnimationFrame(e),e=requestAnimationFrame((function(e){var r=e+D-t,o=Math.min(r/(1e3*s),1);N(100*o),o<1&&n()}))}(),function(){u&&cancelAnimationFrame(e)}}}),[s,D,T,_,b]);var M=r.useMemo((function(){return"object"===je(p)&&null!==p?p:p?{closeIcon:m}:{}}),[p,m]),R=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=!1===n?{aria:!0,data:!0,attr:!0}:!0===n?{aria:!0}:_e({},n);var r={};return Object.keys(e).forEach((function(n){(t.aria&&("role"===n||ru(n,"aria-"))||t.data&&ru(n,"data-")||t.attr&&nu.includes(n))&&(r[n]=e[n])})),r}(M,!0),A=100-(!C||C<0?0:C>100?100:C),L="".concat(n,"-notice");return r.createElement("div",Mo({},v,{ref:t,className:ys()(L,a,Pe({},"".concat(L,"-closable"),p)),style:o,onMouseEnter:function(e){var t;S(!0),null===v||void 0===v||null===(t=v.onMouseEnter)||void 0===t||t.call(v,e)},onMouseLeave:function(e){var t;S(!1),null===v||void 0===v||null===(t=v.onMouseLeave)||void 0===t||t.call(v,e)},onClick:g}),r.createElement("div",{className:"".concat(L,"-content")},f),p&&r.createElement("a",Mo({tabIndex:0,className:"".concat(L,"-close"),onKeyDown:function(e){"Enter"!==e.key&&"Enter"!==e.code&&e.keyCode!==tu.ENTER||O()},"aria-label":"Close"},R,{onClick:function(e){e.preventDefault(),e.stopPropagation(),O()}}),M.closeIcon),_&&r.createElement("progress",{className:"".concat(L,"-progress"),max:"100",value:A},A+"%"))}));const au=ou;var iu=r.createContext({});const su=function(e){var t=e.children,n=e.classNames;return r.createElement(iu.Provider,{value:{classNames:n}},t)};const lu=function(e){var t,n,r,o={offset:8,threshold:3,gap:16};e&&"object"===je(e)&&(o.offset=null!==(t=e.offset)&&void 0!==t?t:8,o.threshold=null!==(n=e.threshold)&&void 0!==n?n:3,o.gap=null!==(r=e.gap)&&void 0!==r?r:16);return[!!e,o]};var cu=["className","style","classNames","styles"];const uu=function(e){var t=e.configList,n=e.placement,o=e.prefixCls,a=e.className,i=e.style,s=e.motion,l=e.onAllNoticeRemoved,c=e.onNoticeClose,u=e.stack,d=(0,r.useContext)(iu).classNames,f=(0,r.useRef)({}),p=kr((0,r.useState)(null),2),h=p[0],m=p[1],v=kr((0,r.useState)([]),2),g=v[0],y=v[1],b=t.map((function(e){return{config:e,key:String(e.key)}})),w=kr(lu(u),2),x=w[0],k=w[1],S=k.offset,E=k.threshold,C=k.gap,N=x&&(g.length>0||b.length<=E),j="function"===typeof s?s(n):s;return(0,r.useEffect)((function(){x&&g.length>1&&y((function(e){return e.filter((function(e){return b.some((function(t){var n=t.key;return e===n}))}))}))}),[g,b,x]),(0,r.useEffect)((function(){var e,t;x&&f.current[null===(e=b[b.length-1])||void 0===e?void 0:e.key]&&m(f.current[null===(t=b[b.length-1])||void 0===t?void 0:t.key])}),[b,x]),r.createElement(Rl,Mo({key:n,className:ys()(o,"".concat(o,"-").concat(n),null===d||void 0===d?void 0:d.list,a,Pe(Pe({},"".concat(o,"-stack"),!!x),"".concat(o,"-stack-expanded"),N)),style:i,keys:b,motionAppear:!0},j,{onAllRemoved:function(){l(n)}}),(function(e,t){var a=e.config,i=e.className,s=e.style,l=e.index,u=a,p=u.key,m=u.times,v=String(p),w=a,k=w.className,E=w.style,j=w.classNames,D=w.styles,P=Ps(w,cu),T=b.findIndex((function(e){return e.key===v})),_={};if(x){var O=b.length-1-(T>-1?T:l-1),M="top"===n||"bottom"===n?"-50%":"0";if(O>0){var R,A,L;_.height=N?null===(R=f.current[v])||void 0===R?void 0:R.offsetHeight:null===h||void 0===h?void 0:h.offsetHeight;for(var I=0,F=0;F<O;F++){var z;I+=(null===(z=f.current[b[b.length-1-F].key])||void 0===z?void 0:z.offsetHeight)+C}var B=(N?I:O*S)*(n.startsWith("top")?1:-1),H=!N&&null!==h&&void 0!==h&&h.offsetWidth&&null!==(A=f.current[v])&&void 0!==A&&A.offsetWidth?((null===h||void 0===h?void 0:h.offsetWidth)-2*S*(O<3?O:3))/(null===(L=f.current[v])||void 0===L?void 0:L.offsetWidth):1;_.transform="translate3d(".concat(M,", ").concat(B,"px, 0) scaleX(").concat(H,")")}else _.transform="translate3d(".concat(M,", 0, 0)")}return r.createElement("div",{ref:t,className:ys()("".concat(o,"-notice-wrapper"),i,null===j||void 0===j?void 0:j.wrapper),style:_e(_e(_e({},s),_),null===D||void 0===D?void 0:D.wrapper),onMouseEnter:function(){return y((function(e){return e.includes(v)?e:[].concat(hr(e),[v])}))},onMouseLeave:function(){return y((function(e){return e.filter((function(e){return e!==v}))}))}},r.createElement(au,Mo({},P,{ref:function(e){T>-1?f.current[v]=e:delete f.current[v]},prefixCls:o,classNames:j,styles:D,className:ys()(k,null===d||void 0===d?void 0:d.notice),style:E,times:m,key:p,eventKey:p,onNoticeClose:c,hovering:x&&g.length>0})))}))};var du=r.forwardRef((function(e,t){var n=e.prefixCls,o=void 0===n?"rc-notification":n,a=e.container,s=e.motion,l=e.maxCount,c=e.className,u=e.style,d=e.onAllRemoved,f=e.stack,p=e.renderNotifications,h=kr(r.useState([]),2),m=h[0],v=h[1],g=function(e){var t,n=m.find((function(t){return t.key===e}));null===n||void 0===n||null===(t=n.onClose)||void 0===t||t.call(n),v((function(t){return t.filter((function(t){return t.key!==e}))}))};r.useImperativeHandle(t,(function(){return{open:function(e){v((function(t){var n,r=hr(t),o=r.findIndex((function(t){return t.key===e.key})),a=_e({},e);o>=0?(a.times=((null===(n=t[o])||void 0===n?void 0:n.times)||0)+1,r[o]=a):(a.times=0,r.push(a));return l>0&&r.length>l&&(r=r.slice(-l)),r}))},close:function(e){g(e)},destroy:function(){v([])}}}));var y=kr(r.useState({}),2),b=y[0],w=y[1];r.useEffect((function(){var e={};m.forEach((function(t){var n=t.placement,r=void 0===n?"topRight":n;r&&(e[r]=e[r]||[],e[r].push(t))})),Object.keys(b).forEach((function(t){e[t]=e[t]||[]})),w(e)}),[m]);var x=function(e){w((function(t){var n=_e({},t);return(n[e]||[]).length||delete n[e],n}))},k=r.useRef(!1);if(r.useEffect((function(){Object.keys(b).length>0?k.current=!0:k.current&&(null===d||void 0===d||d(),k.current=!1)}),[b]),!a)return null;var S=Object.keys(b);return(0,i.createPortal)(r.createElement(r.Fragment,null,S.map((function(e){var t=b[e],n=r.createElement(uu,{key:e,configList:t,placement:e,prefixCls:o,className:null===c||void 0===c?void 0:c(e),style:null===u||void 0===u?void 0:u(e),motion:s,onNoticeClose:g,onAllNoticeRemoved:x,stack:f});return p?p(n,{prefixCls:o,key:e}):n}))),a)}));const fu=du;var pu=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],hu=function(){return document.body},mu=0;function vu(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,n=void 0===t?hu:t,o=e.motion,a=e.prefixCls,i=e.maxCount,s=e.className,l=e.style,c=e.onAllRemoved,u=e.stack,d=e.renderNotifications,f=Ps(e,pu),p=kr(r.useState(),2),h=p[0],m=p[1],v=r.useRef(),g=r.createElement(fu,{container:h,ref:v,prefixCls:a,motion:o,maxCount:i,className:s,style:l,onAllRemoved:c,stack:u,renderNotifications:d}),y=kr(r.useState([]),2),b=y[0],w=y[1],x=Bs((function(e){var t=function(){for(var e={},t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return n.forEach((function(t){t&&Object.keys(t).forEach((function(n){var r=t[n];void 0!==r&&(e[n]=r)}))})),e}(f,e);null!==t.key&&void 0!==t.key||(t.key="rc-notification-".concat(mu),mu+=1),w((function(e){return[].concat(hr(e),[{type:"open",config:t}])}))})),k=r.useMemo((function(){return{open:x,close:function(e){w((function(t){return[].concat(hr(t),[{type:"close",key:e}])}))},destroy:function(){w((function(e){return[].concat(hr(e),[{type:"destroy"}])}))}}}),[]);return r.useEffect((function(){m(n())})),r.useEffect((function(){var e,t;v.current&&b.length&&(b.forEach((function(e){switch(e.type){case"open":v.current.open(e.config);break;case"close":v.current.close(e.key);break;case"destroy":v.current.destroy()}})),w((function(n){return e===n&&t||(e=n,t=n.filter((function(e){return!b.includes(e)}))),t})))}),[b]),[k,g]}const gu=e=>{const[,,,,t]=Wl();return t?"".concat(e,"-css-var"):""};const yu=Vr((function e(){Wr(this,e)}));var bu="CALC_UNIT",wu=new RegExp(bu,"g");function xu(e){return"number"===typeof e?"".concat(e).concat(bu):e}var ku=function(e){Rs(n,e);var t=Fs(n);function n(e,r){var o;Wr(this,n),Pe(Is(o=t.call(this)),"result",""),Pe(Is(o),"unitlessCssVar",void 0),Pe(Is(o),"lowPriority",void 0);var a=je(e);return o.unitlessCssVar=r,e instanceof n?o.result="(".concat(e.result,")"):"number"===a?o.result=xu(e):"string"===a&&(o.result=e),o}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result="".concat(this.result," + ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," + ").concat(xu(e))),this.lowPriority=!0,this}},{key:"sub",value:function(e){return e instanceof n?this.result="".concat(this.result," - ").concat(e.getResult()):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," - ").concat(xu(e))),this.lowPriority=!0,this}},{key:"mul",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," * ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," * ").concat(e)),this.lowPriority=!1,this}},{key:"div",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof n?this.result="".concat(this.result," / ").concat(e.getResult(!0)):"number"!==typeof e&&"string"!==typeof e||(this.result="".concat(this.result," / ").concat(e)),this.lowPriority=!1,this}},{key:"getResult",value:function(e){return this.lowPriority||e?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(e){var t=this,n=(e||{}).unit,r=!0;return"boolean"===typeof n?r=n:Array.from(this.unitlessCssVar).some((function(e){return t.result.includes(e)}))&&(r=!1),this.result=this.result.replace(wu,r?"px":""),"undefined"!==typeof this.lowPriority?"calc(".concat(this.result,")"):this.result}}]),n}(yu);const Su=function(e){Rs(n,e);var t=Fs(n);function n(e){var r;return Wr(this,n),Pe(Is(r=t.call(this)),"result",0),e instanceof n?r.result=e.result:"number"===typeof e&&(r.result=e),r}return Vr(n,[{key:"add",value:function(e){return e instanceof n?this.result+=e.result:"number"===typeof e&&(this.result+=e),this}},{key:"sub",value:function(e){return e instanceof n?this.result-=e.result:"number"===typeof e&&(this.result-=e),this}},{key:"mul",value:function(e){return e instanceof n?this.result*=e.result:"number"===typeof e&&(this.result*=e),this}},{key:"div",value:function(e){return e instanceof n?this.result/=e.result:"number"===typeof e&&(this.result/=e),this}},{key:"equal",value:function(){return this.result}}]),n}(yu);const Eu=function(e,t){var n="css"===e?ku:Su;return function(e){return new n(e,t)}};const Cu=function(e,t){return"".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"))};const Nu=function(e,t,n,r){var o=_e({},t[e]);null!==r&&void 0!==r&&r.deprecatedTokens&&r.deprecatedTokens.forEach((function(e){var t,n=kr(e,2),r=n[0],a=n[1];(null!==o&&void 0!==o&&o[r]||null!==o&&void 0!==o&&o[a])&&(null!==(t=o[a])&&void 0!==t||(o[a]=null===o||void 0===o?void 0:o[r]))}));var a=_e(_e({},n),o);return Object.keys(a).forEach((function(e){a[e]===t[e]&&delete a[e]})),a};var ju="undefined"!==typeof CSSINJS_STATISTIC,Du=!0;function Pu(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(!ju)return Object.assign.apply(Object,[{}].concat(t));Du=!1;var r={};return t.forEach((function(e){"object"===je(e)&&Object.keys(e).forEach((function(t){Object.defineProperty(r,t,{configurable:!0,enumerable:!0,get:function(){return e[t]}})}))})),Du=!0,r}var Tu={};function _u(){}const Ou=function(e){var t,n=e,r=_u;return ju&&"undefined"!==typeof Proxy&&(t=new Set,n=new Proxy(e,{get:function(e,n){var r;Du&&(null===(r=t)||void 0===r||r.add(n));return e[n]}}),r=function(e,n){var r;Tu[e]={global:Array.from(t),component:_e(_e({},null===(r=Tu[e])||void 0===r?void 0:r.component),n)}}),{token:n,keys:t,flush:r}};const Mu=function(e,t,n){var r;return"function"===typeof n?n(Pu(t,null!==(r=t[e])&&void 0!==r?r:{})):null!==n&&void 0!==n?n:{}};const Ru=function(e){return"js"===e?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"max(".concat(t.map((function(e){return mo(e)})).join(","),")")},min:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return"min(".concat(t.map((function(e){return mo(e)})).join(","),")")}}};var Au=function(){function e(){Wr(this,e),Pe(this,"map",new Map),Pe(this,"objectIDMap",new WeakMap),Pe(this,"nextID",0),Pe(this,"lastAccessBeat",new Map),Pe(this,"accessBeat",0)}return Vr(e,[{key:"set",value:function(e,t){this.clear();var n=this.getCompositeKey(e);this.map.set(n,t),this.lastAccessBeat.set(n,Date.now())}},{key:"get",value:function(e){var t=this.getCompositeKey(e),n=this.map.get(t);return this.lastAccessBeat.set(t,Date.now()),this.accessBeat+=1,n}},{key:"getCompositeKey",value:function(e){var t=this;return e.map((function(e){return e&&"object"===je(e)?"obj_".concat(t.getObjectID(e)):"".concat(je(e),"_").concat(e)})).join("|")}},{key:"getObjectID",value:function(e){if(this.objectIDMap.has(e))return this.objectIDMap.get(e);var t=this.nextID;return this.objectIDMap.set(e,t),this.nextID+=1,t}},{key:"clear",value:function(){var e=this;if(this.accessBeat>1e4){var t=Date.now();this.lastAccessBeat.forEach((function(n,r){t-n>6e5&&(e.map.delete(r),e.lastAccessBeat.delete(r))})),this.accessBeat=0}}}]),e}(),Lu=new Au;const Iu=function(e,t){return r.useMemo((function(){var n=Lu.get(t);if(n)return n;var r=e();return Lu.set(t,r),r}),t)};const Fu=function(){return{}};const zu=function(e){var t=e.useCSP,n=void 0===t?Fu:t,o=e.useToken,a=e.usePrefix,i=e.getResetStyles,s=e.getCommonStyle,l=e.getCompUnitless;function c(t,r,l){var c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},u=Array.isArray(t)?t:[t,t],d=kr(u,1)[0],f=u.join("-"),p=e.layer||{name:"antd"};return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,u=o(),h=u.theme,m=u.realToken,v=u.hashId,g=u.token,y=u.cssVar,b=a(),w=b.rootPrefixCls,x=b.iconPrefixCls,k=n(),S=y?"css":"js",E=Iu((function(){var e=new Set;return y&&Object.keys(c.unitless||{}).forEach((function(t){e.add(go(t,y.prefix)),e.add(go(t,Cu(d,y.prefix)))})),Eu(S,e)}),[S,d,null===y||void 0===y?void 0:y.prefix]),C=Ru(S),N=C.max,j=C.min,D={theme:h,token:g,hashId:v,nonce:function(){return k.nonce},clientOnly:c.clientOnly,layer:p,order:c.order||-999};return"function"===typeof i&&Ma(_e(_e({},D),{},{clientOnly:!1,path:["Shared",w]}),(function(){return i(g,{prefix:{rootPrefixCls:w,iconPrefixCls:x},csp:k})})),[Ma(_e(_e({},D),{},{path:[f,e,x]}),(function(){if(!1===c.injectStyle)return[];var n=Ou(g),o=n.token,a=n.flush,i=Mu(d,m,l),u=".".concat(e),f=Nu(d,m,i,{deprecatedTokens:c.deprecatedTokens});y&&i&&"object"===je(i)&&Object.keys(i).forEach((function(e){i[e]="var(".concat(go(e,Cu(d,y.prefix)),")")}));var p=Pu(o,{componentCls:u,prefixCls:e,iconCls:".".concat(x),antCls:".".concat(w),calc:E,max:N,min:j},y?i:f),h=r(p,{hashId:v,prefixCls:e,rootPrefixCls:w,iconPrefixCls:x});a(d,f);var b="function"===typeof s?s(p,e,t,c.resetFont):null;return[!1===c.resetStyle?null:b,h]})),v]}}return{genStyleHooks:function(e,t,n,a){var i=Array.isArray(e)?e[0]:e;function s(e){return"".concat(String(i)).concat(e.slice(0,1).toUpperCase()).concat(e.slice(1))}var u=(null===a||void 0===a?void 0:a.unitless)||{},d=_e(_e({},"function"===typeof l?l(e):{}),{},Pe({},s("zIndexPopup"),!0));Object.keys(u).forEach((function(e){d[s(e)]=u[e]}));var f=_e(_e({},a),{},{unitless:d,prefixToken:s}),p=c(e,t,n,f),h=function(e,t,n){var a=n.unitless,i=n.injectStyle,s=void 0===i||i,l=n.prefixToken,c=n.ignore,u=function(r){var i=r.rootCls,s=r.cssVar,u=void 0===s?{}:s,d=o().realToken;return Aa({path:[e],prefix:u.prefix,key:u.key,unitless:a,ignore:c,token:d,scope:i},(function(){var r=Mu(e,d,t),o=Nu(e,d,r,{deprecatedTokens:null===n||void 0===n?void 0:n.deprecatedTokens});return Object.keys(r).forEach((function(e){o[l(e)]=o[e],delete o[e]})),o})),null},d=function(t){var n=o().cssVar;return[function(o){return s&&n?r.createElement(r.Fragment,null,r.createElement(u,{rootCls:t,cssVar:n,component:e}),o):o},null===n||void 0===n?void 0:n.key]};return d}(i,n,f);return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=kr(p(e,t),2)[1],r=kr(h(t),2);return[r[0],n,r[1]]}},genSubStyleComponent:function(e,t,n){var r=c(e,t,n,_e({resetStyle:!1,order:-998},arguments.length>3&&void 0!==arguments[3]?arguments[3]:{}));return function(e){var t=e.prefixCls,n=e.rootCls;return r(t,void 0===n?t:n),null}},genComponentStyleHook:c}},{genStyleHooks:Bu,genComponentStyleHook:Hu,genSubStyleComponent:Uu}=zu({usePrefix:()=>{const{getPrefixCls:e,iconPrefixCls:t}=(0,r.useContext)(yr);return{rootPrefixCls:e(),iconPrefixCls:t}},useToken:()=>{const[e,t,n,r,o]=Wl();return{theme:e,realToken:t,hashId:n,token:r,cssVar:o}},useCSP:()=>{const{csp:e}=(0,r.useContext)(yr);return null!==e&&void 0!==e?e:{}},getResetStyles:(e,t)=>{var n;const r=(e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active, &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}))(e);return[r,{"&":r},Kl(null!==(n=null===t||void 0===t?void 0:t.prefix.iconPrefixCls)&&void 0!==n?n:gr)]},getCommonStyle:(e,t,n,r)=>{const o='[class^="'.concat(t,'"], [class*=" ').concat(t,'"]'),a=n?".".concat(n):o,i={boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}};let s={};return!1!==r&&(s={fontFamily:e.fontFamily,fontSize:e.fontSize}),{[a]:Object.assign(Object.assign(Object.assign({},s),i),{[o]:i})}},getCompUnitless:()=>Bl}),Yu=e=>{const{componentCls:t,iconCls:n,boxShadow:r,colorText:o,colorSuccess:a,colorError:i,colorWarning:s,colorInfo:l,fontSizeLG:c,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:p,borderRadiusLG:h,zIndexPopup:m,contentPadding:v,contentBg:g}=e,y="".concat(t,"-notice"),b=new Fa("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:p,transform:"translateY(0)",opacity:1}}),w=new Fa("MessageMoveOut",{"0%":{maxHeight:e.height,padding:p,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),x={padding:p,textAlign:"center",["".concat(t,"-custom-content")]:{display:"flex",alignItems:"center"},["".concat(t,"-custom-content > ").concat(n)]:{marginInlineEnd:f,fontSize:c},["".concat(y,"-content")]:{display:"inline-block",padding:v,background:g,borderRadius:h,boxShadow:r,pointerEvents:"all"},["".concat(t,"-success > ").concat(n)]:{color:a},["".concat(t,"-error > ").concat(n)]:{color:i},["".concat(t,"-warning > ").concat(n)]:{color:s},["".concat(t,"-info > ").concat(n,",\n      ").concat(t,"-loading > ").concat(n)]:{color:l}};return[{[t]:Object.assign(Object.assign({},Ql(e)),{color:o,position:"fixed",top:f,width:"100%",pointerEvents:"none",zIndex:m,["".concat(t,"-move-up")]:{animationFillMode:"forwards"},["\n        ".concat(t,"-move-up-appear,\n        ").concat(t,"-move-up-enter\n      ")]:{animationName:b,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["\n        ".concat(t,"-move-up-appear").concat(t,"-move-up-appear-active,\n        ").concat(t,"-move-up-enter").concat(t,"-move-up-enter-active\n      ")]:{animationPlayState:"running"},["".concat(t,"-move-up-leave")]:{animationName:w,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["".concat(t,"-move-up-leave").concat(t,"-move-up-leave-active")]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{["".concat(y,"-wrapper")]:Object.assign({},x)}},{["".concat(t,"-notice-pure-panel")]:Object.assign(Object.assign({},x),{padding:0,textAlign:"start"})}]},Wu=Bu("Message",(e=>{const t=Pu(e,{height:150});return[Yu(t)]}),(e=>({zIndexPopup:e.zIndexPopupBase+1e3+10,contentBg:e.colorBgElevated,contentPadding:"".concat((e.controlHeightLG-e.fontSize*e.lineHeight)/2,"px ").concat(e.paddingSM,"px")})));var qu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const Vu={info:r.createElement(Gc,null),success:r.createElement(Hc,null),error:r.createElement(Wc,null),warning:r.createElement(Qc,null),loading:r.createElement(Zc,null)},Qu=e=>{let{prefixCls:t,type:n,icon:o,children:a}=e;return r.createElement("div",{className:ys()("".concat(t,"-custom-content"),"".concat(t,"-").concat(n))},o||Vu[n],r.createElement("span",null,a))},Ku=e=>{const{prefixCls:t,className:n,type:o,icon:a,content:i}=e,s=qu(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:l}=r.useContext(yr),c=t||l("message"),u=gu(c),[d,f,p]=Wu(c,u);return d(r.createElement(au,Object.assign({},s,{prefixCls:c,className:ys()(n,f,"".concat(c,"-notice-pure-panel"),p,u),eventKey:"pure",duration:null,content:r.createElement(Qu,{prefixCls:c,type:o,icon:a},i)})))};const $u={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"};var Gu=function(e,t){return r.createElement(zc,Mo({},e,{ref:t,icon:$u}))};const Xu=r.forwardRef(Gu);function Ju(e){let t;const n=new Promise((n=>{t=e((()=>{n(!0)}))})),r=()=>{null===t||void 0===t||t()};return r.then=(e,t)=>n.then(e,t),r.promise=n,r}var Zu=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n};const ed=3,td=e=>{let{children:t,prefixCls:n}=e;const o=gu(n),[a,i,s]=Wu(n,o);return a(r.createElement(su,{classNames:{list:ys()(i,s,o)}},t))},nd=(e,t)=>{let{prefixCls:n,key:o}=t;return r.createElement(td,{prefixCls:n,key:o},e)},rd=r.forwardRef(((e,t)=>{const{top:n,prefixCls:o,getContainer:a,maxCount:i,duration:s=ed,rtl:l,transitionName:c,onAllRemoved:u}=e,{getPrefixCls:d,getPopupContainer:f,message:p,direction:h}=r.useContext(yr),m=o||d("message"),v=r.createElement("span",{className:"".concat(m,"-close-x")},r.createElement(Xu,{className:"".concat(m,"-close-icon")})),[g,y]=vu({prefixCls:m,style:()=>({left:"50%",transform:"translateX(-50%)",top:null!==n&&void 0!==n?n:8}),className:()=>ys()({["".concat(m,"-rtl")]:null!==l&&void 0!==l?l:"rtl"===h}),motion:()=>function(e,t){return{motionName:null!==t&&void 0!==t?t:"".concat(e,"-move-up")}}(m,c),closable:!1,closeIcon:v,duration:s,getContainer:()=>(null===a||void 0===a?void 0:a())||(null===f||void 0===f?void 0:f())||document.body,maxCount:i,onAllRemoved:u,renderNotifications:nd});return r.useImperativeHandle(t,(()=>Object.assign(Object.assign({},g),{prefixCls:m,message:p}))),y}));let od=0;function ad(e){const t=r.useRef(null),n=($a("Message"),r.useMemo((()=>{const e=e=>{var n;null===(n=t.current)||void 0===n||n.close(e)},n=n=>{if(!t.current){const e=()=>{};return e.then=()=>{},e}const{open:o,prefixCls:a,message:i}=t.current,s="".concat(a,"-notice"),{content:l,icon:c,type:u,key:d,className:f,style:p,onClose:h}=n,m=Zu(n,["content","icon","type","key","className","style","onClose"]);let v=d;return void 0!==v&&null!==v||(od+=1,v="antd-message-".concat(od)),Ju((t=>(o(Object.assign(Object.assign({},m),{key:v,content:r.createElement(Qu,{prefixCls:a,type:u,icon:c},l),placement:"top",className:ys()(u&&"".concat(s,"-").concat(u),f,null===i||void 0===i?void 0:i.className),style:Object.assign(Object.assign({},null===i||void 0===i?void 0:i.style),p),onClose:()=>{null===h||void 0===h||h(),t()}})),()=>{e(v)})))},o={open:n,destroy:n=>{var r;void 0!==n?e(n):null===(r=t.current)||void 0===r||r.destroy()}};return["info","success","warning","error","loading"].forEach((e=>{o[e]=(t,r,o)=>{let a,i,s;a=t&&"object"===typeof t&&"content"in t?t:{content:t},"function"===typeof r?s=r:(i=r,s=o);const l=Object.assign(Object.assign({onClose:s,duration:i},a),{type:e});return n(l)}})),o}),[]));return[n,r.createElement(rd,Object.assign({key:"message-holder"},e,{ref:t}))]}let id=null,sd=e=>e(),ld=[],cd={};function ud(){const{getContainer:e,duration:t,rtl:n,maxCount:r,top:o}=cd,a=(null===e||void 0===e?void 0:e())||document.body;return{getContainer:()=>a,duration:t,rtl:n,maxCount:r,top:o}}const dd=r.forwardRef(((e,t)=>{const{messageConfig:n,sync:o}=e,{getPrefixCls:a}=(0,r.useContext)(yr),i=cd.prefixCls||a("message"),s=(0,r.useContext)(mr),[l,c]=ad(Object.assign(Object.assign(Object.assign({},n),{prefixCls:i}),s.message));return r.useImperativeHandle(t,(()=>{const e=Object.assign({},l);return Object.keys(e).forEach((t=>{e[t]=function(){o();for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return l[t].apply(l,n)}})),{instance:e,sync:o}})),c})),fd=r.forwardRef(((e,t)=>{const[n,o]=r.useState(ud),a=()=>{o(ud)};r.useEffect(a,[]);const i=oc(),s=i.getRootPrefixCls(),l=i.getIconPrefixCls(),c=i.getTheme(),u=r.createElement(dd,{ref:t,sync:a,messageConfig:n});return r.createElement(sc,{prefixCls:s,iconPrefixCls:l,theme:c},i.holderRender?i.holderRender(u):u)}));function pd(){if(!id){const e=document.createDocumentFragment(),t={fragment:e};return id=t,void sd((()=>{const n=function(e){return e&&(Sc=e),Sc}();n(r.createElement(fd,{ref:e=>{const{instance:n,sync:r}=e||{};Promise.resolve().then((()=>{!t.instance&&n&&(t.instance=n,t.sync=r,pd())}))}}),e)}))}id.instance&&(ld.forEach((e=>{const{type:t,skipped:n}=e;if(!n)switch(t){case"open":sd((()=>{const t=id.instance.open(Object.assign(Object.assign({},cd),e.config));null===t||void 0===t||t.then(e.resolve),e.setCloseFn(t)}));break;case"destroy":sd((()=>{null===id||void 0===id||id.instance.destroy(e.key)}));break;default:sd((()=>{var n;const r=(n=id.instance)[t].apply(n,hr(e.args));null===r||void 0===r||r.then(e.resolve),e.setCloseFn(r)}))}})),ld=[])}const hd={open:function(e){const t=Ju((t=>{let n;const r={type:"open",config:e,resolve:t,setCloseFn:e=>{n=e}};return ld.push(r),()=>{n?sd((()=>{n()})):r.skipped=!0}}));return pd(),t},destroy:e=>{ld.push({type:"destroy",key:e}),pd()},config:function(e){cd=Object.assign(Object.assign({},cd),e),sd((()=>{var e;null===(e=null===id||void 0===id?void 0:id.sync)||void 0===e||e.call(id)}))},useMessage:function(e){return ad(e)},_InternalPanelDoNotUseOrYouWillBeFired:Ku},md=hd;["success","info","warning","error","loading"].forEach((e=>{md[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return function(e,t){oc();const n=Ju((n=>{let r;const o={type:e,args:t,resolve:n,setCloseFn:e=>{r=e}};return ld.push(o),()=>{r?sd((()=>{r()})):o.skipped=!0}}));return pd(),n}(e,n)}}));const vd=md,gd="http://localhost:8088",yd=async()=>{try{const n=await ar.get("".concat(gd,"/discount/all"),{headers:{Authorization:localStorage.getItem("token")}});var e,t;if(n.data&&200===n.data.code)return(null===(e=n.data.data)||void 0===e?void 0:e.data)||n.data.data||[];throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u6298\u6263\u4fe1\u606f\u5931\u8d25")}catch(n){throw console.error("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25:",n),n}};var bd=n(723);const wd=e=>{var t;let{onLogout:n}=e;const o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(""),[d,f]=(0,r.useState)(0),p=te(),{tab:h}=re(),[m,v]=(0,r.useState)(!1),[g,y]=(0,r.useState)(!1),[b,w]=(0,r.useState)({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),[x,k]=(0,r.useState)(!1),[S,E]=(0,r.useState)(""),[C,N]=(0,r.useState)(""),[j,D]=(0,r.useState)(null),[P,T]=(0,r.useState)([]),[_,O]=(0,r.useState)(!1),[M,R]=(0,r.useState)(null),[A,L]=(0,r.useState)(1),[I,F]=(0,r.useState)(1),[z,B]=(0,r.useState)({}),[H,U]=(0,r.useState)([]),[Y,W]=(0,r.useState)([]),[q,V]=(0,r.useState)(!1),[Q,K]=(0,r.useState)(null),[$,G]=(0,r.useState)([]),[X,J]=(0,r.useState)([]),[ee,ne]=(0,r.useState)(!1),[oe,ae]=(0,r.useState)(null),[ie,se]=(0,r.useState)(X),[le,ce]=(0,r.useState)(!1),[ue,de]=(0,r.useState)(!1),[fe,pe]=(0,r.useState)(null),[he,me]=(0,r.useState)(0),[ve,ge]=(0,r.useState)(!1),[ye,be]=(0,r.useState)("D:/studies/ptPlatform/torrent"),[we,xe]=(0,r.useState)(""),[ke,Se]=(0,r.useState)(""),[Ee,Ce]=(0,r.useState)(""),[Ne,je]=(0,r.useState)(""),De=h||"announcement",Pe=e=>{p("/dashboard/".concat(e),{state:{savedFilters:Xe,activeTab:e}})},Te=async()=>{try{const e=await ir.get("/announcement/latest");U(e.data.data.announcements||[])}catch(c){console.error("\u83b7\u53d6\u516c\u544a\u5931\u8d25:",c)}};(0,r.useEffect)((()=>{"announcement"===De&&(Te(),Oe())}),[De]);const Oe=async()=>{try{const e=await yd();console.log("\u8fd4\u56de\u7684\u6298\u6263\u6570\u636e\uff1a",e);const t=new Date,n=e.filter((e=>Date.parse(e.startTime)<=t.getTime()&&Date.parse(e.endTime)>=t.getTime())),r=e.filter((e=>Date.parse(e.startTime)>t.getTime())).sort(((e,t)=>Date.parse(e.startTime)-Date.parse(t.startTime))),o=[...n.slice(0,3)];for(;o.length<3&&r.length>0;)o.push(r.shift());W(o)}catch(Dy){console.error("\u83b7\u53d6\u6298\u6263\u5931\u8d25:",Dy)}},Me=e=>{xe(e.target.value)},Re=async()=>{try{ne(!0);const e=await lr(ke,1);if(200===e.data.code){J(e.data.data.records);const t=e.data.data.total;F(Math.ceil(t/5)),L(1)}else ae(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){ae(e.message||"\u641c\u7d22\u5931\u8d25")}finally{ne(!1)}},Ae=async()=>{Se(""),Je(Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),await Ve(1,!0)},Le=async()=>{try{V(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/request/posts/search",{params:{keyword:e,page:t,size:n}})}(Ee,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(t),F(Math.ceil(e.data.data.total/5))}else K(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){K(e.message||"\u641c\u7d22\u5931\u8d25")}finally{V(!1)}},Ie=async()=>{Ce(""),await Qe(1)},Fe=async()=>{try{O(!0);const e=await function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;return ir.get("/help/posts/search",{params:{keyword:e,page:t,size:n}})}(Ne,A);if(200===e.data.code){const t=await Promise.all(e.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(t),F(Math.ceil(e.data.data.total/5))}else R(e.data.message||"\u641c\u7d22\u5931\u8d25")}catch(e){R(e.message||"\u641c\u7d22\u5931\u8d25")}finally{O(!1)}},ze=async()=>{je(""),await $e(1)},Be=e=>{w(_e(_e({},b),{},{file:e.target.files[0]}))},He=async e=>{e.preventDefault();try{y(!0);const e={torrentName:b.name,description:b.description,category:b.type,region:b.region,resolution:b.resolution,subtitle:b.subtitle};await async function(e,t){const n=new FormData;n.append("file",e),n.append("body",new Blob([JSON.stringify(t)],{type:"application/json"}));try{return(await ir.post("/torrent",n,{headers:{}})).data}catch(c){throw console.error("\u4e0a\u4f20\u79cd\u5b50\u5931\u8d25:",c),c}}(b.file,e),v(!1),w({name:"",type:"",region:"",subtitle:"",resolution:"",file:null,description:""}),alert("\u79cd\u5b50\u521b\u5efa\u6210\u529f\uff01"),await Ve(A)}catch(c){var t,n;console.error("\u521b\u5efa\u5931\u8d25:",c),alert("\u521b\u5efa\u5931\u8d25: "+((null===(t=c.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||c.message))}finally{y(!1)}},Ue=async e=>{try{return!0}catch(Dy){return console.error("\u68c0\u67e5\u6587\u4ef6\u5b58\u5728\u6027\u5931\u8d25:",Dy),!1}},Ye=async(e,t)=>{t.stopPropagation();try{if(!window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))return;await(e=>ir.delete("/torrent/deleteTorrent/".concat(e)))(e),vd.success("\u79cd\u5b50\u5220\u9664\u6210\u529f"),await Ve(A)}catch(c){var n,r;console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),vd.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25: "+((null===(n=c.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||c.message))}},We=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/request/posts",o)})(S,C,e,j);200===t.data.code?(await Qe(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},qe=async e=>{e.preventDefault();try{const e=localStorage.getItem("username"),t=await((e,t,n,r)=>{const o=new FormData;return o.append("title",e),o.append("content",t),o.append("authorId",n),r&&o.append("image",r),ir.post("/help/posts",o)})(S,C,e,j);200===t.data.code?(await $e(A),k(!1),E(""),N(""),D(null)):R(t.data.message||"\u53d1\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u53d1\u5e16\u5931\u8d25")}},Ve=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];ne(!0);try{const n={page:e,size:5};!t&&Object.values(Xe).some((e=>"all"!==e))&&("all"!==Xe.type&&(n.category=Xe.type),"all"!==Xe.subtitle&&(n.subtitle=Xe.subtitle),"all"!==Xe.region&&(n.region=Xe.region),"all"!==Xe.resolution&&(n.resolution=Xe.resolution));const r=ke&&!t?await lr(ke,e):await ir.get("http://localhost:8088/torrent",{params:n});if(200===r.data.code){J(r.data.data.records);const t=r.data.data.total;F(Math.ceil(t/5)),L(e)}else ae(r.data.message)}catch(n){ae(n.message)}finally{ne(!1)}};(0,r.useEffect)((()=>{"share"===De&&Ve()}),[De]);const Qe=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;V(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/request/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await ur(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));G(n),F(Math.ceil(t.data.data.total/5)),L(e)}else K(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){K(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{V(!1)}},Ke=e=>{D(e.target.files[0])},$e=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;O(!0);try{const t=await function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return ir.get("/help/posts",{params:{page:e,size:t}})}(e);if(200===t.data.code){const n=await Promise.all(t.data.data.records.map((async e=>{try{const t=await cr(e.id);return 200===t.data.code?_e(_e({},e),{},{replyCount:t.data.data.post.replyCount||0,isLiked:!1}):e}catch(t){return console.error("\u83b7\u53d6\u5e16\u5b50".concat(e.id,"\u8be6\u60c5\u5931\u8d25:"),t),e}})));T(n),F(Math.ceil(t.data.data.total/5)),L(e)}else R(t.data.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}catch(t){R(t.message||"\u83b7\u53d6\u6c42\u52a9\u5e16\u5931\u8d25")}finally{O(!1)}};(0,r.useEffect)((()=>{"request"===De&&Qe(A)}),[De,A]);const Ge={type:{label:"\u7c7b\u578b",options:{all:"\u5168\u90e8","\u7535\u5f71":"\u7535\u5f71","\u7535\u89c6\u5267":"\u7535\u89c6\u5267","\u52a8\u6f2b":"\u52a8\u6f2b","\u7efc\u827a":"\u7efc\u827a","\u97f3\u4e50":"\u97f3\u4e50","\u5176\u4ed6":"\u5176\u4ed6"}},subtitle:{label:"\u5b57\u5e55",options:{all:"\u5168\u90e8","\u65e0\u9700\u5b57\u5e55":"\u65e0\u9700\u5b57\u5e55","\u6682\u65e0\u5b57\u5e55":"\u6682\u65e0\u5b57\u5e55","\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55":"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55","\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)":"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)","\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55":"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55","\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55":"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"}},region:{label:"\u5730\u533a",options:{all:"\u5168\u90e8","\u4e2d\u56fd":"\u4e2d\u56fd","\u82f1\u56fd":"\u82f1\u56fd","\u7f8e\u56fd":"\u7f8e\u56fd","\u65e5\u672c":"\u65e5\u672c","\u97e9\u56fd":"\u97e9\u56fd","\u5176\u4ed6":"\u5176\u4ed6"}},resolution:{label:"\u5206\u8fa8\u7387",options:{all:"\u5168\u90e8","4K":"4K","2K":"2K","1080P":"1080P","720P":"720P",SD:"SD","\u65e0\u635f\u97f3\u6e90":"\u65e0\u635f\u97f3\u6e90","\u675c\u6bd4\u5168\u666f\u58f0":"\u675c\u6bd4\u5168\u666f\u58f0","\u5176\u4ed6":"\u5176\u4ed6"}}},[Xe,Je]=(0,r.useState)((null===(t=o.state)||void 0===t?void 0:t.savedFilters)||Object.keys(Ge).reduce(((e,t)=>(e[t]="all",e)),{})),Ze=async()=>{try{ne(!0);const e={page:1,size:5};"all"!==Xe.type&&(e.category=Xe.type),"all"!==Xe.subtitle&&(e.subtitle=Xe.subtitle),"all"!==Xe.region&&(e.region=Xe.region),"all"!==Xe.resolution&&(e.resolution=Xe.resolution);const t=await ir.get("http://localhost:8088/torrent",{params:e});200===t.data.code?(J(t.data.data.records),F(Math.ceil(t.data.data.total/5)),L(1)):ae(t.data.message||"\u7b5b\u9009\u5931\u8d25")}catch(e){ae(e.message||"\u7b5b\u9009\u5931\u8d25")}finally{ne(!1)}};(0,r.useEffect)((()=>{var e;null!==(e=o.state)&&void 0!==e&&e.scrollPosition&&window.scrollTo(0,o.state.scrollPosition)}),[o.state]),(0,r.useEffect)((()=>{if(!localStorage.getItem("token"))return void p("/login");(async()=>{try{l(!0);const e=await sr();console.log("\u540e\u7aef\u8fd4\u56de\u7684\u7528\u6237\u6570\u636e:",e),i({name:e.username||"\u6f14\u793a\u7528\u6237",avatar:"https://via.placeholder.com/40",isAdmin:"ADMIN"===e.authority})}catch(c){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",c),u("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}finally{l(!1)}})()}),[p]),(0,r.useEffect)((()=>{if("announcement"===De){const e=setInterval((()=>{f((e=>(e+1)%(Y.length||1)))}),3e3);return()=>clearInterval(e)}}),[De]),(0,r.useEffect)((()=>{"help"===De&&$e()}),[De,A]);return s?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsx)("div",{className:"error",children:c}):(0,bd.jsxs)("div",{className:"dashboard-container","data-testid":"dashboard-container",children:[(0,bd.jsxs)("div",{className:"top-bar","data-testid":"top-bar",children:[(0,bd.jsx)("div",{className:"platform-name",children:(0,bd.jsx)("h2",{children:"PT\u8d44\u6e90\u7ad9"})}),(0,bd.jsxs)("div",{className:"user-actions",children:[(null===a||void 0===a?void 0:a.isAdmin)&&(0,bd.jsx)("button",{className:"admin-center-button",onClick:()=>p("/administer"),children:"\u7ba1\u7406\u5458\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"user-info","data-testid":"user-info",children:[(0,bd.jsx)("img",{src:(null===a||void 0===a?void 0:a.avatar)||"https://via.placeholder.com/40",alt:"\u7528\u6237\u5934\u50cf",className:"user-avatar",onClick:()=>p("/personal"),style:{cursor:"pointer"}}),(0,bd.jsx)("span",{className:"username",children:(null===a||void 0===a?void 0:a.name)||"\u7528\u6237"}),(0,bd.jsx)("button",{onClick:n,className:"logout-button",children:"\u9000\u51fa"})]})]})]}),(0,bd.jsxs)("div",{className:"nav-tabs",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("announcement"===De?"active":""),onClick:()=>Pe("announcement"),children:"\u516c\u544a\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("share"===De?"active":""),onClick:()=>Pe("share"),children:"\u5206\u4eab\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("request"===De?"active":""),onClick:()=>Pe("request"),children:"\u6c42\u79cd\u533a"}),(0,bd.jsx)("button",{className:"tab-button ".concat("help"===De?"active":""),onClick:()=>Pe("help"),children:"\u6c42\u52a9\u533a"})]}),(()=>{switch(De){case"announcement":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"announcement-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u516c\u544a...",value:we,onChange:e=>xe(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Me()}),(0,bd.jsx)("button",{className:"search-button",onClick:Me,children:"\u641c\u7d22"})]}),(0,bd.jsxs)("div",{className:"carousel-container",children:[0===Y.length?(0,bd.jsx)("div",{className:"carousel-slide active",children:(0,bd.jsx)("div",{className:"carousel-image gray-bg",children:"\u6682\u65e0\u6298\u6263\u6d3b\u52a8"})}):Y.map(((e,t)=>(0,bd.jsx)("div",{className:"carousel-slide ".concat(d===t?"active":""),children:(0,bd.jsxs)("div",{className:"carousel-image gray-bg",children:[(0,bd.jsx)("h3",{children:e.type}),(0,bd.jsx)("p",{children:e.name}),(0,bd.jsxs)("p",{children:[new Date(e.startTime).toLocaleDateString()," ~ ",new Date(e.endTime).toLocaleDateString()]})]})},t))),(0,bd.jsx)("div",{className:"carousel-dots",children:Y.map(((e,t)=>(0,bd.jsx)("span",{className:"dot ".concat(d===t?"active":"")},t)))})]}),(0,bd.jsx)("div",{className:"announcement-grid",children:H.map((e=>(0,bd.jsxs)("div",{className:"announcement-card",onClick:t=>((e,t)=>{t.target.closest(".exclude-click")||p("/announcement/".concat(e.id),{state:{announcement:e,returnPath:"/dashboard/".concat(De),scrollPosition:window.scrollY,activeTab:De}})})(e,t),children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsxs)("p",{children:[e.content.substring(0,100),"..."]}),(0,bd.jsx)("div",{className:"announcement-footer exclude-click",children:(0,bd.jsx)("span",{children:e.date})})]},e.id)))})]});case"share":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"share-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u8d44\u6e90...",value:ke,onChange:e=>Se(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Re()}),(0,bd.jsx)("button",{className:"search-button",onClick:Re,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ae,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"upload-header",children:(0,bd.jsx)("button",{className:"upload-btn",onClick:()=>v(!0),children:"\uff0b \u4e0a\u4f20\u79cd\u5b50"})}),(0,bd.jsxs)("div",{className:"filter-section",children:[Object.entries(Ge).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"filter-group",children:[(0,bd.jsxs)("h4",{children:[n.label,"\uff1a"]}),(0,bd.jsx)("div",{className:"filter-options",children:Object.entries(n.options).map((e=>{let[n,r]=e;return(0,bd.jsx)("button",{className:"filter-btn ".concat(Xe[t]===n?"active":""),onClick:()=>((e,t)=>{Je((n=>_e(_e({},n),{},{[e]:n[e]===t?"all":t})))})(t,n),children:r},n)}))})]},t)})),(0,bd.jsx)("button",{className:"confirm-btn",onClick:Ze,children:"\u786e\u8ba4\u7b5b\u9009"})]}),m&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"upload-modal",children:[(0,bd.jsx)("h3",{children:"\u4e0a\u4f20\u65b0\u79cd\u5b50"}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>v(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:He,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u540d\u79f0"}),(0,bd.jsx)("input",{type:"text",value:b.name,onChange:e=>w(_e(_e({},b),{},{name:e.target.value})),required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u8d44\u6e90\u7c7b\u578b"}),(0,bd.jsxs)("select",{value:b.type,onChange:e=>w(_e(_e({},b),{},{type:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u7535\u5f71",children:"\u7535\u5f71"}),(0,bd.jsx)("option",{value:"\u7535\u89c6\u5267",children:"\u7535\u89c6\u5267"}),(0,bd.jsx)("option",{value:"\u52a8\u6f2b",children:"\u52a8\u6f2b"}),(0,bd.jsx)("option",{value:"\u7efc\u827a",children:"\u7efc\u827a"}),(0,bd.jsx)("option",{value:"\u97f3\u4e50",children:"\u97f3\u4e50"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5730\u533a"}),(0,bd.jsxs)("select",{value:b.region||"",onChange:e=>w(_e(_e({},b),{},{region:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u4e2d\u56fd",children:"\u4e2d\u56fd"}),(0,bd.jsx)("option",{value:"\u82f1\u56fd",children:"\u82f1\u56fd"}),(0,bd.jsx)("option",{value:"\u7f8e\u56fd",children:"\u7f8e\u56fd"}),(0,bd.jsx)("option",{value:"\u65e5\u672c",children:"\u65e5\u672c"}),(0,bd.jsx)("option",{value:"\u97e9\u56fd",children:"\u97e9\u56fd"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5206\u8fa8\u7387"}),(0,bd.jsxs)("select",{value:b.resolution||"",onChange:e=>w(_e(_e({},b),{},{resolution:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"4K",children:"4K"}),(0,bd.jsx)("option",{value:"2K",children:"2K"}),(0,bd.jsx)("option",{value:"1080P",children:"1080P"}),(0,bd.jsx)("option",{value:"720P",children:"720P"}),(0,bd.jsx)("option",{value:"SD",children:"SD"}),(0,bd.jsx)("option",{value:"\u65e0\u635f\u97f3\u6e90",children:"\u65e0\u635f\u97f3\u6e90"}),(0,bd.jsx)("option",{value:"\u675c\u6bd4\u5168\u666f\u58f0",children:"\u675c\u6bd4\u5168\u666f\u58f0"}),(0,bd.jsx)("option",{value:"\u5176\u4ed6",children:"\u5176\u4ed6"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5b57\u5e55\u8bed\u8a00"}),(0,bd.jsxs)("select",{value:b.subtitle||"",onChange:e=>w(_e(_e({},b),{},{subtitle:e.target.value})),required:!0,children:[(0,bd.jsx)("option",{value:"",children:"\u8bf7\u9009\u62e9"}),(0,bd.jsx)("option",{value:"\u65e0\u9700\u5b57\u5e55",children:"\u65e0\u9700\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u6682\u65e0\u5b57\u5e55",children:"\u6682\u65e0\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55",children:"\u81ea\u5e26\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)",children:"\u81ea\u5e26\u53cc\u8bed\u5b57\u5e55(\u542b\u4e2d\u6587)"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55",children:"\u9644\u4ef6\u4e2d\u6587\u5b57\u5e55"}),(0,bd.jsx)("option",{value:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55",children:"\u9644\u4ef6\u53cc\u8bed\u5b57\u5e55"})]})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u79cd\u5b50\u6587\u4ef6"}),(0,bd.jsx)("input",{type:"file",accept:".torrent",onChange:Be})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7b80\u4ecb"}),(0,bd.jsx)("textarea",{value:b.description,onChange:e=>w(_e(_e({},b),{},{description:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>v(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"confirm-btn",disabled:g,children:g?"\u4e0a\u4f20\u4e2d...":"\u786e\u8ba4\u4e0a\u4f20"})]})]})]})}),(0,bd.jsx)("div",{className:"resource-list",children:X.map((e=>(0,bd.jsxs)("div",{className:"resource-item",onClick:()=>p("/torrent/".concat(e.id)),children:[(0,bd.jsx)("div",{className:"resource-poster",children:(0,bd.jsx)("div",{className:"poster-image gray-bg",children:e.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"resource-info",children:[(0,bd.jsx)("h3",{className:"resource-title",children:e.torrentName}),(0,bd.jsxs)("p",{className:"resource-meta",children:[e.resolution," | ",e.region," | ",e.category]}),(0,bd.jsxs)("p",{className:"resource-subtitle",children:["\u5b57\u5e55: ",e.subtitle]})]}),(0,bd.jsxs)("div",{className:"resource-stats",children:[(0,bd.jsx)("span",{className:"stat",children:e.size}),(0,bd.jsxs)("span",{className:"stat",children:["\u53d1\u5e03\u8005: ",e.username]})]}),(0,bd.jsx)("button",{className:"download-btn",onClick:t=>((e,t)=>{t.stopPropagation(),pe(e),de(!0)})(e,t),children:"\u7acb\u5373\u4e0b\u8f7d"}),((null===a||void 0===a?void 0:a.isAdmin)||(null===a||void 0===a?void 0:a.name)===e.username)&&(0,bd.jsx)("button",{className:"delete-btn",onClick:t=>Ye(e.id,t),children:"\u5220\u9664"})]},e.id)))}),I>1&&(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Ve(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Ve(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Ve(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]})]});case"request":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"request-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ee,onChange:e=>Ce(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Le()}),(0,bd.jsx)("button",{className:"search-button",onClick:Le,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:Ie,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),q&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),Q&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"request-list",children:$.map((e=>(0,bd.jsxs)("div",{className:"request-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/request/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>Qe(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>Qe(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>Qe(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u79cd\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:We,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});case"help":return(0,bd.jsxs)("div",{className:"content-area","data-testid":"help-section",children:[(0,bd.jsxs)("div",{className:"section-search-container",children:[(0,bd.jsx)("input",{type:"text",placeholder:"\u641c\u7d22\u6c42\u52a9...",value:Ne,onChange:e=>je(e.target.value),className:"section-search-input",onKeyPress:e=>"Enter"===e.key&&Fe()}),(0,bd.jsx)("button",{className:"search-button",onClick:Fe,children:"\u641c\u7d22"}),(0,bd.jsx)("button",{className:"reset-button",onClick:ze,style:{marginLeft:"10px"},children:"\u91cd\u7f6e"})]}),(0,bd.jsx)("div",{className:"post-header",children:(0,bd.jsx)("button",{className:"create-post-btn",onClick:()=>k(!0),children:"\uff0b \u53d1\u5e16\u6c42\u52a9"})}),_&&(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}),M&&(0,bd.jsx)("div",{className:"error",children:M}),(0,bd.jsx)("div",{className:"help-list",children:P.map((e=>(0,bd.jsxs)("div",{className:"help-post ".concat(e.isSolved?"solved":""),onClick:()=>p("/help/".concat(e.id)),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:e.authorAvatar||"https://via.placeholder.com/40",alt:e.authorId,className:"post-avatar"}),(0,bd.jsx)("div",{className:"post-author",children:e.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(e.createTime).toLocaleDateString()}),e.isSolved&&(0,bd.jsx)("span",{className:"solved-badge",children:"\u5df2\u89e3\u51b3"})]}),(0,bd.jsx)("h3",{className:"post-title",children:e.title}),(0,bd.jsx)("p",{className:"post-content",children:e.content}),(0,bd.jsxs)("div",{className:"post-stats",children:[(0,bd.jsxs)("span",{className:"post-likes",children:["\ud83d\udc4d ",e.likeCount||0]}),(0,bd.jsxs)("span",{className:"post-comments",children:["\ud83d\udcac ",e.replyCount||0]})]})]},e.id)))}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{onClick:()=>$e(A-1),disabled:1===A,children:"\u4e0a\u4e00\u9875"}),Array.from({length:I},((e,t)=>t+1)).map((e=>(0,bd.jsx)("button",{onClick:()=>$e(e),className:A===e?"active":"",children:e},e))),(0,bd.jsx)("button",{onClick:()=>$e(A+1),disabled:A===I,children:"\u4e0b\u4e00\u9875"})]}),x&&(0,bd.jsx)("div",{className:"post-modal-overlay",children:(0,bd.jsxs)("div",{className:"post-modal",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u6c42\u52a9\u5e16"}),(0,bd.jsx)("button",{className:"modal-close-btn",onClick:()=>k(!1),children:"\xd7"}),(0,bd.jsxs)("form",{onSubmit:qe,children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u6807\u9898"}),(0,bd.jsx)("input",{type:"text",value:S,onChange:e=>E(e.target.value),placeholder:"\u8bf7\u8f93\u5165\u6807\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5e16\u5b50\u5185\u5bb9"}),(0,bd.jsx)("textarea",{value:C,onChange:e=>N(e.target.value),placeholder:"\u8be6\u7ec6\u63cf\u8ff0\u4f60\u7684\u95ee\u9898",required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0a\u4f20\u56fe\u7247"}),(0,bd.jsxs)("div",{className:"upload-image-btn",children:[(0,bd.jsx)("input",{type:"file",id:"image-upload",accept:"image/*",onChange:Ke,style:{display:"none"}}),(0,bd.jsx)("label",{htmlFor:"image-upload",children:j?"\u5df2\u9009\u62e9\u56fe\u7247":"\u9009\u62e9\u56fe\u7247"}),j&&(0,bd.jsx)("span",{className:"image-name",children:j.name})]})]}),(0,bd.jsxs)("div",{className:"form-actions",children:[(0,bd.jsx)("button",{type:"button",className:"cancel-btn",onClick:()=>k(!1),children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u786e\u8ba4\u53d1\u5e16"})]})]})]})})]});default:return(0,bd.jsx)("div",{className:"content-area","data-testid":"default-section",children:"\u516c\u544a\u533a\u5185\u5bb9"})}})(),ue&&fe&&(0,bd.jsx)("div",{className:"modal-overlay",children:(0,bd.jsxs)("div",{className:"download-modal",children:[(0,bd.jsxs)("h3",{children:["\u4e0b\u8f7d ",fe.torrentName]}),(0,bd.jsx)("button",{className:"close-btn",onClick:()=>!ve&&de(!1),disabled:ve,children:"\xd7"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u4e0b\u8f7d\u8def\u5f84:"}),(0,bd.jsx)("input",{type:"text",value:ye,onChange:e=>{let t=e.target.value.replace(/\t/g,"").replace(/\\/g,"/").replace(/\s+/g," ");be(t)},disabled:ve,placeholder:"\u4f8b\u5982: D:/downloads/"})]}),ve&&(0,bd.jsx)("div",{className:"progress-container",children:(0,bd.jsxs)("div",{className:"progress-bar",style:{width:"".concat(he,"%")},children:[he,"%"]})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{onClick:()=>!ve&&de(!1),disabled:ve,children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{onClick:async()=>{if(fe&&ye){ge(!0),me(0);try{const e=ye.replace(/\\/g,"/").replace(/\/+/g,"/").trim(),t=e.endsWith("/")?e:e+"/";await async function(e,t){try{return(await ir.get("/torrent/downloadTorrent",{params:{id:e,downloadPath:t}})).data}catch(c){throw console.error("\u4e0b\u8f7d\u79cd\u5b50\u5931\u8d25:",c),c}}(fe.id,t);const n=setInterval((async()=>{try{const e=await async function(){try{return(await ir.get("/torrent/getProgress")).data}catch(c){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",c),c}}(),t=e.data.progresses;if(t){fe.filePath.replace(/\\/g,"/"),fe.hash;let e=null;for(const[n,r]of Object.entries(t)){const t=n.replace(/\\/g,"/");if(t.includes(fe.hash)||t.includes(fe.torrentName)){e=r;break}}if(null!==e){const t=Math.round(100*e);me(t),t>=100&&(clearInterval(n),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}else console.log("\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6:",t)}}catch(c){console.error("\u83b7\u53d6\u8fdb\u5ea6\u5931\u8d25:",c);const r="".concat(t).concat(fe.torrentName||"downloaded_file");try{await Ue(r)&&(clearInterval(n),me(100),ge(!1),vd.success("\u4e0b\u8f7d\u5b8c\u6210\uff01"),setTimeout((()=>de(!1)),2e3))}catch(Dy){console.error("\u6587\u4ef6\u68c0\u67e5\u5931\u8d25:",Dy)}}}),2e3);return()=>clearInterval(n)}catch(c){ge(!1),c.response&&409===c.response.status?vd.error("\u5206\u4eab\u7387\u4e0d\u8db3\uff0c\u65e0\u6cd5\u4e0b\u8f7d\u6b64\u8d44\u6e90"):vd.error("\u4e0b\u8f7d\u5931\u8d25: "+(c.message||"\u672a\u77e5\u9519\u8bef"))}}},disabled:ve||!ye,children:ve?"\u4e0b\u8f7d\u4e2d...":"\u5f00\u59cb\u4e0b\u8f7d"})]})]})})]})},xd=async()=>{try{const e=await ir.get("/user/userInfo");if(200===e.data.code){const t=e.data.data;return{username:t.username,level:t.level,registTime:Sd(t.registTime),magicPoints:t.magicPoints,upload:t.upload,download:t.download,shareRate:t.shareRate.toFixed(2)}}throw new Error(e.data.message||"\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e),e}},kd=async()=>{try{const e=await ir.get("/user/allowDownload");if(200===e.data.code){const t=e.data.data;return{total:t.total,used:t.used,remaining:t.remaining}}throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u989d\u5ea6\u5931\u8d25:",e),e}},Sd=e=>{const t=new Date(e),n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return"".concat(n,"-").concat(r,"-").concat(o)},Ed=async()=>{try{const e=await ir.get("/invitecode/userInviteCode");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25")}catch(e){throw console.error("\u83b7\u53d6\u9080\u8bf7\u7801\u5217\u8868\u5931\u8d25:",e),e}},Cd=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(null),[c,u]=(0,r.useState)({});(0,r.useEffect)((()=>{(async()=>{try{const[e,t]=await Promise.all([xd(),kd()]);o({username:e.username,avatar:"https://via.placeholder.com/150",joinDate:e.registTime,level:e.level,points:e.magicPoints,upload:e.upload,download:e.download,ratio:e.shareRate,downloadQuota:{total:t.total,used:t.used,remaining:t.remaining}})}catch(e){l(e.message)}finally{i(!1)}})()}),[]);const d=async()=>{try{const e=await(async()=>{try{const e=await ir.get("/torrent/getProgress");if(200===e.data.code)return e.data.data.progresses;throw new Error(e.data.message||"\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25")}catch(s){throw console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",s),s}})();u(e)}catch(e){console.error("\u83b7\u53d6\u4e0b\u8f7d\u8fdb\u5ea6\u5931\u8d25:",e)}};if((0,r.useEffect)((()=>{d();const e=setInterval(d,1e4);return()=>clearInterval(e)}),[]),a)return(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."});if(s)return(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",s]});if(!n)return(0,bd.jsx)("div",{className:"error",children:"\u672a\u83b7\u53d6\u5230\u7528\u6237\u6570\u636e"});const f=e=>{if(e<1024)return"".concat(e," B");const t=e/1024;if(t<1024)return"".concat(t.toFixed(2)," KB");const n=t/1024;if(n<1024)return"".concat(n.toFixed(2)," MB");return"".concat((n/1024).toFixed(2)," GB")};return(0,bd.jsxs)("div",{className:"personal-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var n;null!==(n=t.state)&&void 0!==n&&n.fromSubpage?e("/dashboard/".concat(t.state.dashboardTab||""),{replace:!0}):e(-1)},children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"profile-card",children:[(0,bd.jsxs)("div",{className:"profile-header",children:[(0,bd.jsx)("img",{src:n.avatar,alt:n.username,className:"profile-avatar"}),(0,bd.jsxs)("div",{className:"profile-info",children:[(0,bd.jsx)("h2",{className:"username",children:n.username}),(0,bd.jsxs)("div",{className:"user-meta",children:[(0,bd.jsxs)("span",{children:["\u52a0\u5165\u65f6\u95f4: ",n.joinDate]}),(0,bd.jsxs)("span",{children:["\u4f1a\u5458\u7b49\u7ea7: Lv.",n.level]})]})]})]}),(0,bd.jsxs)("div",{className:"stats-grid",children:[(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4fdd\u79cd\u79ef\u5206"}),(0,bd.jsx)("div",{className:"stat-value",children:n.points})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.upload)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("div",{className:"stat-value",children:f(n.download)})]}),(0,bd.jsxs)("div",{className:"stat-item",children:[(0,bd.jsx)("div",{className:"stat-label",children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("div",{className:"stat-value",children:n.ratio})]})]})]}),(0,bd.jsxs)("div",{className:"quota-card",children:[(0,bd.jsx)("h3",{children:"\u4e0b\u8f7d\u989d\u5ea6"}),(0,bd.jsxs)("div",{className:"quota-info",children:[(0,bd.jsxs)("span",{className:"quota-used",children:[f(n.downloadQuota.used)," \u5df2\u4f7f\u7528"]}),(0,bd.jsxs)("span",{className:"quota-remaining",children:[f(n.downloadQuota.remaining)," \u5269\u4f59"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(n.downloadQuota.used/n.downloadQuota.total*100,"%"),backgroundColor:(p=n.downloadQuota.used/n.downloadQuota.total,p<.3?"#4CAF50":p<.7?"#FFC107":"#F44336")}})}),(0,bd.jsxs)("div",{className:"quota-total",children:["\u603b\u989d\u5ea6: ",f(n.downloadQuota.total)]})]}),Object.keys(c).length>0&&(0,bd.jsxs)("div",{className:"progress-card",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u4e0b\u8f7d\u8fdb\u5ea6"}),Object.entries(c).map((e=>{let[t,n]=e;return(0,bd.jsxs)("div",{className:"download-task",children:[(0,bd.jsxs)("div",{className:"task-info",children:[(0,bd.jsxs)("span",{className:"task-id",children:["\u4efb\u52a1: ",t.substring(0,8),"..."]}),(0,bd.jsxs)("span",{className:"task-progress",children:[Math.round(100*n),"%"]})]}),(0,bd.jsx)("div",{className:"progress-bar",children:(0,bd.jsx)("div",{className:"progress-fill",style:{width:"".concat(100*n,"%")}})})]},t)}))]}),(0,bd.jsx)("div",{className:"action-cards",children:[{title:"\u5151\u6362\u533a",description:"\u4e0b\u8f7d\u91cf/\u9080\u8bf7\u7801",path:"/personal/Exchange"},{title:"\u4e0a\u4f20\u8bb0\u5f55",description:"\u7ba1\u7406\u4e0a\u4f20\u7684\u8d44\u6e90",path:"/personal/Upload"},{title:"\u6d88\u606f\u901a\u77e5",description:"\u67e5\u770b\u7cfb\u7edf\u6d88\u606f",path:"/personal/Notice"},{title:"\u8bbe\u7f6e",description:"\u4fee\u6539\u4e2a\u4eba\u8d44\u6599",path:"/personal/Setting"}].map((t=>(0,bd.jsxs)("div",{className:"action-card",onClick:()=>{return n=t.path,void e(n);var n},children:[(0,bd.jsx)("h3",{children:t.title}),(0,bd.jsx)("p",{children:t.description})]},t.path)))}),(0,bd.jsx)("div",{className:"subpage-container",children:(0,bd.jsx)(ye,{})})]});var p},Nd=e=>{let{onLoginSuccess:t}=e;const[n,o]=(0,r.useState)(!0),[a,i]=(0,r.useState)({username:"",password:"",code:""}),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),d=te(),f=e=>{const{name:t,value:n}=e.target;i((e=>_e(_e({},e),{},{[t]:n})))},p=async e=>{e.preventDefault();try{if(n){const e=await(async(e,t)=>{const n=await ir.post("/user/login",null,{params:{username:e,password:t}});return 200===n.data.code&&n.data.data.token&&localStorage.setItem("token",n.data.data.token),n})(a.username,a.password);200===e.data.code?(localStorage.setItem("token",e.data.data.token),localStorage.setItem("username",a.username),null===t||void 0===t||t(),d("/dashboard")):l(e.data.message||"\u767b\u5f55\u5931\u8d25")}else{const e=await(r=a.username,s=a.password,c=a.code,ir.post("/user/regist",null,{params:{username:r,password:s,code:c}}));200===e.data.code?(l(""),o(!0),i({username:"",password:"",code:""})):l(e.data.message||"\u6ce8\u518c\u5931\u8d25")}}catch(f){l(f.message||(n?"\u767b\u5f55\u5931\u8d25":"\u6ce8\u518c\u5931\u8d25"))}finally{u(!1)}var r,s,c};return(0,bd.jsxs)("div",{className:"auth-container",children:[(0,bd.jsx)("h1",{className:"auth-title",children:"PT\u5f71\u89c6\u8d44\u6e90\u7ad9"}),(0,bd.jsx)("div",{className:"auth-form-wrapper",children:n?(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u767b\u5f55"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u767b\u5f55\u4e2d...":"\u767b\u5f55"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u672a\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!1),className:"switch-button",children:"\u53bb\u6ce8\u518c"})]})]}):(0,bd.jsxs)("form",{className:"auth-form",onSubmit:p,children:[(0,bd.jsx)("h2",{children:"\u7528\u6237\u6ce8\u518c"}),s&&(0,bd.jsx)("div",{className:"error-message",children:s}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"username",placeholder:"\u8d26\u53f7",value:a.username,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"password",name:"password",placeholder:"\u5bc6\u7801",value:a.password,onChange:f,required:!0})}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("input",{type:"text",name:"code",placeholder:"\u9080\u8bf7\u7801",value:a.code,onChange:f,required:!0})}),(0,bd.jsx)("button",{type:"submit",className:"auth-button",disabled:c,children:c?"\u6ce8\u518c\u4e2d...":"\u6ce8\u518c"}),(0,bd.jsxs)("div",{className:"auth-switch",children:[(0,bd.jsx)("span",{children:"\u5df2\u6709\u8d26\u6237\uff1f"}),(0,bd.jsx)("button",{type:"button",onClick:()=>o(!0),className:"switch-button",children:"\u53bb\u767b\u5f55"})]})]})})]})},jd=()=>{const e=te(),{id:t}=re(),[n,o]=(0,r.useState)(null),[a,i]=(0,r.useState)(!0),[s,l]=(0,r.useState)(""),c=Z(),{state:u}=Z(),d=()=>{var t;const n=null===(t=c.state)||void 0===t?void 0:t.fromTab;e(n?"/dashboard/".concat(n):-1)};return(0,r.useEffect)((()=>{(async()=>{try{i(!0);const e=await(e=>ir.get("/announcement/".concat(e)))(t);200===e.data.code?o(e.data.data.announcement):l(e.data.message||"\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}catch(e){l("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25"),vd.error("\u83b7\u53d6\u516c\u544a\u8be6\u60c5\u5931\u8d25")}finally{i(!1)}})()}),[t]),s||!n?(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsx)("div",{className:"error-message",children:s||"\u516c\u544a\u4e0d\u5b58\u5728"})]}):(0,bd.jsxs)("div",{className:"announcement-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:d,children:"\u2190 \u8fd4\u56de"}),(0,bd.jsxs)("div",{className:"announcement-detail",children:[(0,bd.jsxs)("div",{className:"announcement-header",children:[(0,bd.jsx)("h1",{children:n.title}),(0,bd.jsx)("div",{className:"announcement-meta",children:(0,bd.jsxs)("span",{children:["\u53d1\u5e03\u65e5\u671f\uff1a",n.createTime]})})]}),(0,bd.jsx)("div",{className:"announcement-content",children:n.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t)))})]})]})},Dd=e=>{let{onLogout:t}=e;const{id:n}=re(),o=te(),a=Z(),[i,s]=(0,r.useState)(null),[l,c]=(0,r.useState)([]),[u,d]=(0,r.useState)(""),[f]=(0,r.useState)(null),[p,h]=(0,r.useState)(""),[m,v]=(0,r.useState)(!0),[g,y]=(0,r.useState)(""),[b,w]=(0,r.useState)(null),[x,k]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),S=(e,t)=>{k({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},E=()=>{k({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),h("")},C=e=>{let{comment:t,onLike:n,onReply:r,isReply:o=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(o?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"})]})]})]})})},N=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(C,{comment:e,onLike:D,onReply:S,isReply:t>0}),e.replies&&e.replies.map((e=>N(e,t+1)))]},e.id)},j=async()=>{try{v(!0);const e=await(r=n,ir.get("/torrent/".concat(r)).then((e=>e.data&&e.data.data?_e(_e({},e),{},{data:_e(_e({},e.data),{},{data:{torrent:e.data.data.torrent,comments:e.data.data.comments||[]}})}):e)));console.log("API Response:",JSON.parse(JSON.stringify(e.data.data.comments))),s(e.data.data.torrent),c(e.data.data.comments)}catch(o){var e,t;y((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||"\u83b7\u53d6\u79cd\u5b50\u8be6\u60c5\u5931\u8d25")}finally{v(!1)}var r};(0,r.useEffect)((()=>{j()}),[n]);const D=async e=>{try{await(e=>ir.post("/torrent/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));c((e=>t(e)))}catch(r){var t,n;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return m?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):g?(0,bd.jsx)("div",{className:"error",children:g}):i?(0,bd.jsxs)("div",{className:"torrent-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;const t=(null===(e=a.state)||void 0===e?void 0:e.fromTab)||"share";o("/dashboard/".concat(t))},children:"\u2190 \u8fd4\u56de\u8d44\u6e90\u533a"}),(0,bd.jsxs)("div",{className:"torrent-main",children:[(0,bd.jsx)("div",{className:"torrent-cover",children:(0,bd.jsx)("div",{className:"cover-placeholder",children:i.torrentName.charAt(0)})}),(0,bd.jsxs)("div",{className:"torrent-info",children:[(0,bd.jsx)("h1",{className:"torrent-title",children:i.torrentName}),(0,bd.jsxs)("div",{className:"uploader-info",children:[(0,bd.jsx)("div",{className:"uploader-avatar",children:i.username.charAt(0)}),(0,bd.jsxs)("div",{className:"uploader-details",children:[(0,bd.jsx)("span",{className:"uploader-name",children:i.username}),(0,bd.jsx)("span",{className:"upload-time",children:new Date(i.createTime).toLocaleString()})]})]}),(0,bd.jsxs)("div",{className:"torrent-meta",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",i.category]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5730\u533a:"})," ",i.region]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5206\u8fa8\u7387:"})," ",i.resolution]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5b57\u5e55:"})," ",i.subtitle]}),i.size&&(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u5927\u5c0f:"})," ",i.size]})]}),(0,bd.jsxs)("div",{className:"torrent-description",children:[(0,bd.jsx)("h3",{children:"\u8d44\u6e90\u63cf\u8ff0"}),(0,bd.jsx)("p",{children:i.description})]}),(0,bd.jsxs)("div",{className:"interaction-buttons",children:[(0,bd.jsx)("button",{className:"like-button",onClick:async()=>{try{await(r=n,ir.post("/torrent/".concat(r,"/like"))),s((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(o){var e,t;y("\u70b9\u8d5e\u5931\u8d25: "+((null===(e=o.response)||void 0===e||null===(t=e.data)||void 0===t?void 0:t.message)||o.message))}var r},children:(0,bd.jsxs)("span",{children:["\ud83d\udc4d \u70b9\u8d5e (",i.likeCount,")"]})}),(0,bd.jsx)("button",{className:"download-button",children:(0,bd.jsx)("span",{children:"\u2b07\ufe0f \u7acb\u5373\u4e0b\u8f7d"})})]})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",i.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,r;if(e.preventDefault(),u.trim())try{const e=localStorage.getItem("username"),o=await(t=n,r={content:u,authorId:e},ir.post("/torrent/".concat(t,"/comments"),r));o.data&&200===o.data.code?(await j(),d("")):y(o.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;y("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:u,onChange:e=>d(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"})]}),(0,bd.jsx)("div",{className:"comment-list",children:l.map((e=>N(e)))}),x.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",x.replyingToUsername]}),(0,bd.jsx)("button",{onClick:E,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{var t,n;if(e.preventDefault(),p.trim())try{const e=localStorage.getItem("username"),r=await(t=x.replyingTo,n={content:p,authorId:e},ir.post("/torrent/comments/".concat(t,"/replies"),n));console.log("\u56de\u590d\u54cd\u5e94:",r.data),r.data&&200===r.data.code&&(await j(),E())}catch(a){var r,o;console.error("\u56de\u590d\u9519\u8bef:",a),y("\u56de\u590d\u5931\u8d25: "+((null===(r=a.response)||void 0===r||null===(o=r.data)||void 0===o?void 0:o.message)||a.message))}},children:[(0,bd.jsx)("textarea",{value:p,onChange:e=>h(e.target.value),placeholder:"\u56de\u590d @".concat(x.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:E,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u79cd\u5b50\u4e0d\u5b58\u5728"})},Pd=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await ur(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/request/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/request")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/request/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/request/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"request-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/request")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"request-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/request/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/request/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/request/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},Td=()=>{const{id:e}=re(),t=te(),n=Z(),[o,a]=((0,r.useRef)(null),(0,r.useState)(null)),[i,s]=(0,r.useState)([]),[l,c]=(0,r.useState)(!0),[u,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(""),[h,m]=(0,r.useState)(""),[v,g]=(0,r.useState)([]),[y,b]=(0,r.useState)([]),[w,x]=(0,r.useState)({}),[k,S]=(0,r.useState)({}),[E]=(0,r.useState)(null),[C,N]=(0,r.useState)(null),[j,D]=(0,r.useState)({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),P=(e,t)=>{D({visible:!0,replyingTo:e,replyingToUsername:t,isReply:!1})},T=()=>{D({visible:!1,replyingTo:null,replyingToUsername:"",isReply:!1}),m("")},_=e=>{let{comment:t,onLike:n,onReply:r,onDelete:o,isReply:a=!1}=e;return(0,bd.jsx)("div",{className:"comment-container ".concat(a?"is-reply":""),children:(0,bd.jsxs)("div",{className:"comment-item",children:[(0,bd.jsxs)("div",{className:"comment-avatar",children:[(t.authorId||"?").charAt(0)," "]}),(0,bd.jsxs)("div",{className:"comment-content",children:[(0,bd.jsxs)("div",{className:"comment-header",children:[(0,bd.jsx)("span",{className:"comment-user",children:t.authorId||"\u533f\u540d\u7528\u6237"}),t.replyTo&&(0,bd.jsxs)("span",{className:"reply-to",children:["\u56de\u590d @",t.replyTo]}),(0,bd.jsx)("span",{className:"comment-time",children:new Date(t.createTime).toLocaleString()})]}),(0,bd.jsx)("p",{className:"comment-text",children:t.content}),t.imageUrl&&(0,bd.jsx)("div",{className:"comment-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(t.imageUrl),alt:"\u8bc4\u8bba\u56fe\u7247",className:"comment-image",onClick:()=>window.open(t.imageUrl,"_blank")})}),(0,bd.jsxs)("div",{className:"comment-actions",children:[(0,bd.jsxs)("button",{onClick:()=>n(t.id),children:["\ud83d\udc4d (",t.likeCount||0,")"]}),(0,bd.jsx)("button",{onClick:()=>r(t.id,t.authorId),children:"\u56de\u590d"}),t.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-comment-btn",onClick:()=>o(t.id),children:"\u5220\u9664"})]})]})]})})},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,bd.jsxs)("div",{style:{marginLeft:"".concat(30*t,"px")},children:[(0,bd.jsx)(_,{comment:e,onLike:A,onReply:P,isReply:t>0,onDelete:L}),e.replies&&e.replies.map((e=>O(e,t+1)))]},e.id)},M=async()=>{try{c(!0);const t=await cr(e);console.log("API Response:",JSON.parse(JSON.stringify(t.data.data.comments))),a(t.data.data.post),s(t.data.data.comments)}catch(r){var t,n;d((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5e16\u5b50\u8be6\u60c5\u5931\u8d25")}finally{c(!1)}};(0,r.useEffect)((()=>{M()}),[e]);const R=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u5e16\u5b50\u5417\uff1f\u6240\u6709\u8bc4\u8bba\u4e5f\u5c06\u88ab\u5220\u9664\uff01"))try{const n=localStorage.getItem("username");await((e,t)=>ir.delete("/help/posts/".concat(e),{params:{authorId:t}}))(e,n),t("/dashboard/help")}catch(o){var n,r;d("\u5220\u9664\u5931\u8d25: "+((null===(n=o.response)||void 0===n||null===(r=n.data)||void 0===r?void 0:r.message)||o.message))}},A=async e=>{try{await(e=>ir.post("/help/comments/".concat(e,"/like")))(e);const t=n=>n.map((n=>n.id===e?_e(_e({},n),{},{likeCount:n.likeCount+1}):n.replies&&n.replies.length>0?_e(_e({},n),{},{replies:t(n.replies)}):n));s((e=>t(e)))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},L=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u6761\u8bc4\u8bba\u5417\uff1f"))try{const t=localStorage.getItem("username");await((e,t)=>ir.delete("/help/comments/".concat(e),{params:{authorId:t}}))(e,t),await M()}catch(r){var t,n;d("\u5220\u9664\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}};return l?(0,bd.jsx)("div",{className:"loading",children:"\u52a0\u8f7d\u4e2d..."}):u?(0,bd.jsx)("div",{className:"error",children:u}):o?(0,bd.jsxs)("div",{className:"help-detail-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;null===(e=n.state)||void 0===e||e.fromTab;t("/dashboard/help")},children:"\u2190 \u8fd4\u56de\u6c42\u52a9\u533a"}),(0,bd.jsxs)("div",{className:"help-post ".concat(o.isSolved?"solved":""),children:[(0,bd.jsxs)("div",{className:"post-header",children:[(0,bd.jsx)("img",{src:o.authorAvatar||"https://via.placeholder.com/40",alt:o.authorId,className:"post-avatar"}),(0,bd.jsxs)("div",{className:"post-meta",children:[(0,bd.jsx)("div",{className:"post-author",children:o.authorId}),(0,bd.jsx)("div",{className:"post-date",children:new Date(o.createTime).toLocaleString()})]}),o.isSolved&&(0,bd.jsx)("span",{ClassName:"solved-badge",children:"\u5df2\u89e3\u51b3"}),(0,bd.jsx)("div",{classname:"delete-post",children:o.authorId===localStorage.getItem("username")&&(0,bd.jsx)("button",{className:"delete-button",onClick:()=>R(o.id),children:"\u5220\u9664\u5e16\u5b50"})})]}),(0,bd.jsx)("h1",{className:"post-title",children:o.title}),(0,bd.jsxs)("div",{className:"post-content",children:[o.content.split("\n").map(((e,t)=>(0,bd.jsx)("p",{children:e},t))),o.imageUrl&&(0,bd.jsx)("div",{className:"post-image-container",children:(0,bd.jsx)("img",{src:"http://localhost:8088".concat(o.imageUrl),alt:"\u5e16\u5b50\u56fe\u7247",className:"post-image"})})]}),(0,bd.jsxs)("div",{className:"post-actions",children:[(0,bd.jsxs)("button",{className:"like-button ".concat(o.isLiked?"liked":""),onClick:async()=>{try{await((e,t)=>ir.post("/help/posts/".concat(e,"/like"),null,{params:t}))(e),a((e=>_e(_e({},e),{},{likeCount:e.likeCount+1})))}catch(r){var t,n;d("\u70b9\u8d5e\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:["\ud83d\udc4d \u70b9\u8d5e (",o.likeCount,")"]}),(0,bd.jsx)("button",{className:"solve-button ".concat(o.isSolved?"solved":""),onClick:()=>{a((e=>_e(_e({},e),{},{isSolved:!e.isSolved})))},children:o.isSolved?"\u2713 \u5df2\u89e3\u51b3":"\u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3"})]})]}),(0,bd.jsxs)("div",{className:"comments-section",children:[(0,bd.jsxs)("h2",{children:["\u8bc4\u8bba (",o.replyCount,")"]}),(0,bd.jsxs)("form",{onSubmit:async t=>{var n,r;if(t.preventDefault(),f.trim())try{const t=localStorage.getItem("username"),o=new FormData;o.append("content",f),o.append("authorId",t),y&&o.append("image",y);const a=await(n=e,r=o,ir.post("/help/posts/".concat(n,"/comments"),r));a.data&&200===a.data.code?(await M(),p(""),b(null)):d(a.data.message||"\u8bc4\u8bba\u5931\u8d25")}catch(i){var o,a;d("\u8bc4\u8bba\u5931\u8d25: "+((null===(o=i.response)||void 0===o||null===(a=o.data)||void 0===a?void 0:a.message)||i.message))}},className:"comment-form",children:[(0,bd.jsx)("textarea",{value:f,onChange:e=>p(e.target.value),placeholder:"\u5199\u4e0b\u4f60\u7684\u8bc4\u8bba...",rows:"3",required:!0}),(0,bd.jsx)("button",{type:"submit",children:"\u53d1\u8868\u8bc4\u8bba"}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>b(e.target.files[0]),"data-testid":"comment-image-input"})})})]}),(0,bd.jsx)("div",{className:"comment-list",children:i.map((e=>O(e)))}),j.visible&&(0,bd.jsx)("div",{className:"reply-modal-overlay",children:(0,bd.jsxs)("div",{className:"reply-modal",children:[(0,bd.jsxs)("div",{className:"modal-header",children:[(0,bd.jsxs)("h3",{children:["\u56de\u590d @",j.replyingToUsername]}),(0,bd.jsx)("button",{onClick:T,className:"close-modal",children:"\xd7"})]}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),h.trim())try{const e=localStorage.getItem("username"),t=await((e,t)=>{const n=new FormData;return n.append("authorId",t.authorId),n.append("content",t.content),t.image&&n.append("image",t.image),ir.post("/help/comments/".concat(e,"/replies"),n)})(j.replyingTo,{authorId:e,content:h,image:v});console.log("\u56de\u590d\u54cd\u5e94:",t.data),t.data&&200===t.data.code&&(await M(),m(""),T())}catch(r){var t,n;console.error("\u56de\u590d\u9519\u8bef:",r),d("\u56de\u590d\u5931\u8d25: "+((null===(t=r.response)||void 0===t||null===(n=t.data)||void 0===n?void 0:n.message)||r.message))}},children:[(0,bd.jsx)("textarea",{value:h,onChange:e=>m(e.target.value),placeholder:"\u56de\u590d @".concat(j.replyingToUsername,"..."),rows:"5",autoFocus:!0,required:!0}),(0,bd.jsx)("div",{className:"form-group",children:(0,bd.jsx)("div",{className:"upload-image-btn",children:(0,bd.jsx)("input",{type:"file",accept:"image/*",onChange:e=>g(e.target.files[0])})})}),(0,bd.jsxs)("div",{className:"modal-actions",children:[(0,bd.jsx)("button",{type:"button",onClick:T,className:"cancel-btn",children:"\u53d6\u6d88"}),(0,bd.jsx)("button",{type:"submit",className:"submit-btn",children:"\u53d1\u9001\u56de\u590d"})]})]})]})})]})]}):(0,bd.jsx)("div",{className:"error",children:"\u5e16\u5b50\u4e0d\u5b58\u5728"})},_d=()=>{const e=te(),t=Z(),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)("0"),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null);(0,r.useEffect)((()=>{(async()=>{try{u(!0);const[e,t]=await Promise.all([xd(),Ed()]);i(e),o(t)}catch(e){f(e.message)}finally{u(!1)}})()}),[]);const p=()=>{var n;e("/personal",{state:{fromSubpage:!0,dashboardTab:null===(n=t.state)||void 0===n?void 0:n.dashboardTab},replace:!0})};return c?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):d?(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsxs)("div",{className:"error",children:["\u9519\u8bef: ",d]})]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:p,children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u5151\u6362\u533a"}),(0,bd.jsxs)("div",{className:"exchange-section",children:[(0,bd.jsxs)("h3",{children:["\u5f53\u524d\u9b54\u529b\u503c: ",(null===a||void 0===a?void 0:a.magicPoints)||0]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u9080\u8bf7\u7801"}),(0,bd.jsx)("p",{children:"\u6d88\u801710\u9b54\u529b\u503c\u5151\u6362\u4e00\u4e2a\u9080\u8bf7\u7801"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{try{u(!0);const e=await(async()=>{try{const e=await ir.post("/invitecode/generate");if(200===e.data.code)return e.data.data.inviteCode;throw new Error(e.data.message||"\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25")}catch(d){throw console.error("\u751f\u6210\u9080\u8bf7\u7801\u5931\u8d25:",d),d}})();o([...n,e]);const t=await xd();i(t)}catch(e){f(e.message)}finally{u(!1)}},disabled:!a||a.magicPoints<10,children:"\u5151\u6362\u9080\u8bf7\u7801"})]}),(0,bd.jsxs)("div",{className:"exchange-card",children:[(0,bd.jsx)("h4",{children:"\u5151\u6362\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("p",{children:"1\u9b54\u529b\u503c = 1GB\u4e0a\u4f20\u91cf"}),(0,bd.jsxs)("div",{className:"exchange-input-group",children:[(0,bd.jsx)("input",{type:"number",value:s,onChange:e=>{const t=e.target.value;""!==t&&isNaN(t)||l(t)},min:"1",max:(null===a||void 0===a?void 0:a.magicPoints)||0,placeholder:"\u8f93\u5165\u8981\u5151\u6362\u7684\u9b54\u529b\u503c"}),(0,bd.jsx)("button",{className:"exchange-btn",onClick:async()=>{const e=Number(s);if(!e||e<=0)f("\u8bf7\u8f93\u5165\u6709\u6548\u7684\u9b54\u529b\u503c");else try{u(!0),await(async e=>{try{const t=await ir.post("/user/exchangeUpload",{magicPoint:e});if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25")}catch(d){throw console.error("\u5151\u6362\u4e0a\u4f20\u91cf\u5931\u8d25:",d),d}})(e);const t=await xd();i(t),l("0"),f(null)}catch(t){f(t.message)}finally{u(!1)}},disabled:!s||Number(s)<=0||!a||Number(s)>a.magicPoints,children:"\u5151\u6362\u4e0a\u4f20\u91cf"})]})]}),n.length>0&&(0,bd.jsxs)("div",{className:"invite-code-list",children:[(0,bd.jsx)("h4",{children:"\u6211\u7684\u9080\u8bf7\u7801"}),(0,bd.jsx)("ul",{children:n.map(((e,t)=>(0,bd.jsxs)("li",{children:[(0,bd.jsx)("span",{className:"code",children:e.code}),(0,bd.jsx)("span",{className:"status ".concat(e.isUsed?"used":"available"),children:e.isUsed?"\u5df2\u4f7f\u7528":"\u53ef\u7528"})]},t)))})]})]})]})},Od=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)([]),[s,l]=(0,r.useState)(!0),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)({page:1,size:5,total:0}),p=async()=>{try{l(!0);const{records:e,total:t}=await async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;try{const n=await ir.get("/torrent/get/torrentMyself",{params:{page:e,size:t}});if(200===n.data.code)return{records:n.data.data.records.map((e=>_e(_e({},e.torrent),{},{downloadCount:e.downloadCount,formattedSize:e.formattedSize}))),total:n.data.data.total};throw new Error(n.data.message||"\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25")}catch(c){throw console.error("\u83b7\u53d6\u4e0a\u4f20\u8bb0\u5f55\u5931\u8d25:",c),c}}(d.page,d.size);i(e),f((e=>_e(_e({},e),{},{total:t})))}catch(e){u(e.message)}finally{l(!1)}},h=async e=>{if(window.confirm("\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e2a\u79cd\u5b50\u5417\uff1f\u6b64\u64cd\u4f5c\u4e0d\u53ef\u64a4\u9500\uff01"))try{await(async e=>{try{const t=await ir.delete("/torrent/deleteTorrent/".concat(e));if(200===t.data.code)return t.data;throw new Error(t.data.message||"\u5220\u9664\u79cd\u5b50\u5931\u8d25")}catch(c){throw console.error("\u5220\u9664\u79cd\u5b50\u5931\u8d25:",c),c}})(e),p()}catch(t){alert("\u5220\u9664\u5931\u8d25: "+t.message)}},m=Math.ceil(d.total/d.size),v=()=>{const e=[];let t=Math.max(1,d.page-Math.floor(2.5)),n=Math.min(m,t+5-1);n-t+1<5&&(t=Math.max(1,n-5+1));for(let r=t;r<=n;r++)e.push(r);return e},g=e=>{e>=1&&e<=m&&e!==d.page&&f((t=>_e(_e({},t),{},{page:e})))};(0,r.useEffect)((()=>{p()}),[d.page]);return s?(0,bd.jsx)("div",{className:"subpage-container",children:"\u52a0\u8f7d\u4e2d..."}):c?(0,bd.jsxs)("div",{className:"subpage-container",children:["\u9519\u8bef: ",c]}):(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e0a\u4f20\u8bb0\u5f55"}),(0,bd.jsxs)("table",{className:"uploads-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u8d44\u6e90\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5927\u5c0f"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u6b21\u6570"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:a.map((e=>{return(0,bd.jsxs)("tr",{className:"list-item",children:[(0,bd.jsx)("td",{children:e.torrentName}),(0,bd.jsx)("td",{children:e.formattedSize}),(0,bd.jsx)("td",{children:(t=e.createTime,new Date(t).toLocaleString())}),(0,bd.jsx)("td",{children:e.downloadCount||0}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{className:"action-btn delete-btn",onClick:()=>h(e.id),children:"\u5220\u9664"})})]},e.id);var t}))})]}),(0,bd.jsxs)("div",{className:"pagination",children:[(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(1),className:"page-nav",children:"\u9996\u9875"}),(0,bd.jsx)("button",{disabled:d.page<=1,onClick:()=>g(d.page-1),className:"page-nav",children:"\u4e0a\u4e00\u9875"}),v().map((e=>(0,bd.jsx)("button",{onClick:()=>g(e),className:"page-number ".concat(d.page===e?"active":""),children:e},e))),m>v()[v().length-1]&&(0,bd.jsx)("span",{className:"ellipsis",children:"..."}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(d.page+1),className:"page-nav",children:"\u4e0b\u4e00\u9875"}),(0,bd.jsx)("button",{disabled:d.page>=m,onClick:()=>g(m),className:"page-nav",children:"\u672b\u9875"}),(0,bd.jsxs)("div",{className:"page-info",children:[(0,bd.jsxs)("span",{children:["\u5171 ",m," \u9875"]}),(0,bd.jsx)("span",{children:"\u8df3\u81f3"}),(0,bd.jsx)("input",{type:"number",min:"1",max:m,onKeyDown:e=>{if("Enter"===e.key){const t=parseInt(e.target.value);isNaN(t)||(g(Math.max(1,Math.min(t,m))),e.target.value="")}}}),(0,bd.jsx)("span",{children:"\u9875"})]})]})]})},Md=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a]=r.useState([{id:1,title:"\u79ef\u5206\u5956\u52b1\u5230\u8d26",content:"\u60a8\u4e0a\u4f20\u7684\u8d44\u6e90\u300a\u76d7\u68a6\u7a7a\u95f4\u300b\u83b7\u5f97100\u79ef\u5206\u5956\u52b1",date:"2023-10-20",read:!1},{id:2,title:"\u7cfb\u7edf\u901a\u77e5",content:"\u670d\u52a1\u5668\u5c06\u4e8e\u4eca\u665a2:00-4:00\u8fdb\u884c\u7ef4\u62a4",date:"2023-10-18",read:!0}]);return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u6d88\u606f\u901a\u77e5"}),(0,bd.jsx)("div",{className:"notice-list",children:a.map((e=>(0,bd.jsxs)("div",{className:"list-item ".concat(e.read?"":"unread"),children:[(0,bd.jsxs)("div",{className:"notice-header",children:[(0,bd.jsx)("h3",{children:e.title}),(0,bd.jsx)("span",{className:"notice-date",children:e.date})]}),(0,bd.jsx)("p",{className:"notice-content",children:e.content})]},e.id)))})]})},Rd=e=>{let{onLogout:t}=e;const n=te(),o=Z(),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(!1),[c,u]=(0,r.useState)(null),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)({oldPassword:"",newPassword:"",confirmPassword:""});(0,r.useEffect)((()=>{(async()=>{try{const e=await xd();i(e)}catch(e){console.error("\u83b7\u53d6\u7528\u6237\u4fe1\u606f\u5931\u8d25:",e)}})()}),[]);const m=e=>{const{name:t,value:n}=e.target;h((e=>_e(_e({},e),{},{[t]:n})))};return(0,bd.jsxs)("div",{className:"subpage-container",children:[(0,bd.jsx)("button",{className:"back-button",onClick:()=>{var e;n("/personal",{state:{fromSubpage:!0,dashboardTab:null===(e=o.state)||void 0===e?void 0:e.dashboardTab},replace:!0})},children:"\u2190 \u8fd4\u56de\u4e2a\u4eba\u4e2d\u5fc3"}),(0,bd.jsx)("h2",{className:"page-title",children:"\u4e2a\u4eba\u8bbe\u7f6e"}),(0,bd.jsxs)("div",{className:"setting-section",children:[(0,bd.jsxs)("div",{className:"user-info-card",children:[(0,bd.jsx)("h3",{children:"\u8d26\u6237\u4fe1\u606f"}),(0,bd.jsxs)("div",{className:"info-item",children:[(0,bd.jsx)("label",{children:"\u7528\u6237\u540d:"}),(0,bd.jsx)("span",{children:(null===a||void 0===a?void 0:a.username)||"\u52a0\u8f7d\u4e2d..."})]}),(0,bd.jsx)("p",{className:"info-note",children:"\u7528\u6237\u540d\u4e0d\u53ef\u66f4\u6539"})]}),(0,bd.jsxs)("div",{className:"password-form-card",children:[(0,bd.jsx)("h3",{children:"\u4fee\u6539\u5bc6\u7801"}),(0,bd.jsxs)("form",{onSubmit:async e=>{if(e.preventDefault(),u(null),f(null),p.oldPassword&&p.newPassword&&p.confirmPassword)if(p.newPassword===p.confirmPassword)if(p.newPassword.length<6)u("\u65b0\u5bc6\u7801\u957f\u5ea6\u81f3\u5c11\u4e3a6\u4f4d");else try{l(!0),await(async(e,t)=>{try{const n=await ir.put("/user/password",{oldPassword:e,newPassword:t});if(200===n.data.code)return n.data;throw new Error(n.data.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}catch(c){throw console.error("\u4fee\u6539\u5bc6\u7801\u5931\u8d25:",c),c}})(p.oldPassword,p.newPassword),f("\u5bc6\u7801\u4fee\u6539\u6210\u529f"),h({oldPassword:"",newPassword:"",confirmPassword:""})}catch(t){u(t.message||"\u4fee\u6539\u5bc6\u7801\u5931\u8d25")}finally{l(!1)}else u("\u65b0\u5bc6\u7801\u4e0e\u786e\u8ba4\u5bc6\u7801\u4e0d\u4e00\u81f4");else u("\u8bf7\u586b\u5199\u6240\u6709\u5bc6\u7801\u5b57\u6bb5")},children:[(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"oldPassword",children:"\u539f\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"oldPassword",name:"oldPassword",value:p.oldPassword,onChange:m,required:!0})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"newPassword",children:"\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"newPassword",name:"newPassword",value:p.newPassword,onChange:m,required:!0,minLength:"6"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{htmlFor:"confirmPassword",children:"\u786e\u8ba4\u65b0\u5bc6\u7801:"}),(0,bd.jsx)("input",{type:"password",id:"confirmPassword",name:"confirmPassword",value:p.confirmPassword,onChange:m,required:!0,minLength:"6"})]}),c&&(0,bd.jsx)("div",{className:"error-message",children:c}),d&&(0,bd.jsx)("div",{className:"success-message",children:d}),(0,bd.jsx)("button",{type:"submit",className:"submit-button",disabled:s,children:s?"\u5904\u7406\u4e2d...":"\u4fee\u6539\u5bc6\u7801"})]})]})]})]})};function Ad(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=Ad(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function Ld(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=Ad(e))&&(r&&(r+=" "),r+=t);return r}Math.pow(10,8);const Id=6048e5,Fd=6e4,zd=36e5,Bd=Symbol.for("constructDateFrom");function Hd(e,t){return"function"===typeof e?e(t):e&&"object"===typeof e&&Bd in e?e[Bd](t):e instanceof Date?new e.constructor(t):new Date(t)}function Ud(e,t){return Hd(t||e,e)}function Yd(e,t){var n;const r=()=>Hd(null===t||void 0===t?void 0:t.in,NaN),o=null!==(n=null===t||void 0===t?void 0:t.additionalDigits)&&void 0!==n?n:2,a=function(e){const t={},n=e.split(Wd.dateTimeDelimiter);let r;if(n.length>2)return t;/:/.test(n[0])?r=n[0]:(t.date=n[0],r=n[1],Wd.timeZoneDelimiter.test(t.date)&&(t.date=e.split(Wd.timeZoneDelimiter)[0],r=e.substr(t.date.length,e.length)));if(r){const e=Wd.timezone.exec(r);e?(t.time=r.replace(e[1],""),t.timezone=e[1]):t.time=r}return t}(e);let i;if(a.date){const e=function(e,t){const n=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+t)+"})|(\\d{2}|[+-]\\d{"+(2+t)+"})$)"),r=e.match(n);if(!r)return{year:NaN,restDateString:""};const o=r[1]?parseInt(r[1]):null,a=r[2]?parseInt(r[2]):null;return{year:null===a?o:100*a,restDateString:e.slice((r[1]||r[2]).length)}}(a.date,o);i=function(e,t){if(null===t)return new Date(NaN);const n=e.match(qd);if(!n)return new Date(NaN);const r=!!n[4],o=Kd(n[1]),a=Kd(n[2])-1,i=Kd(n[3]),s=Kd(n[4]),l=Kd(n[5])-1;if(r)return function(e,t,n){return t>=1&&t<=53&&n>=0&&n<=6}(0,s,l)?function(e,t,n){const r=new Date(0);r.setUTCFullYear(e,0,4);const o=r.getUTCDay()||7,a=7*(t-1)+n+1-o;return r.setUTCDate(r.getUTCDate()+a),r}(t,s,l):new Date(NaN);{const e=new Date(0);return function(e,t,n){return t>=0&&t<=11&&n>=1&&n<=(Gd[t]||(Xd(e)?29:28))}(t,a,i)&&function(e,t){return t>=1&&t<=(Xd(e)?366:365)}(t,o)?(e.setUTCFullYear(t,a,Math.max(o,i)),e):new Date(NaN)}}(e.restDateString,e.year)}if(!i||isNaN(+i))return r();const s=+i;let l,c=0;if(a.time&&(c=function(e){const t=e.match(Vd);if(!t)return NaN;const n=$d(t[1]),r=$d(t[2]),o=$d(t[3]);if(!function(e,t,n){if(24===e)return 0===t&&0===n;return n>=0&&n<60&&t>=0&&t<60&&e>=0&&e<25}(n,r,o))return NaN;return n*zd+r*Fd+1e3*o}(a.time),isNaN(c)))return r();if(!a.timezone){const e=new Date(s+c),n=Ud(0,null===t||void 0===t?void 0:t.in);return n.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),n.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),n}return l=function(e){if("Z"===e)return 0;const t=e.match(Qd);if(!t)return 0;const n="+"===t[1]?-1:1,r=parseInt(t[2]),o=t[3]&&parseInt(t[3])||0;if(!function(e,t){return t>=0&&t<=59}(0,o))return NaN;return n*(r*zd+o*Fd)}(a.timezone),isNaN(l)?r():Ud(s+c+l,null===t||void 0===t?void 0:t.in)}const Wd={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},qd=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,Vd=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,Qd=/^([+-])(\d{2})(?::?(\d{2}))?$/;function Kd(e){return e?parseInt(e):1}function $d(e){return e&&parseFloat(e.replace(",","."))||0}const Gd=[31,null,31,30,31,30,31,31,30,31,30,31];function Xd(e){return e%400===0||e%4===0&&e%100!==0}const Jd={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function Zd(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const ef={date:Zd({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:Zd({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:Zd({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},tf={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function nf(e){return(t,n)=>{let r;if("formatting"===(null!==n&&void 0!==n&&n.context?String(n.context):"standalone")&&e.formattingValues){const t=e.defaultFormattingWidth||e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):t;r=e.formattingValues[o]||e.formattingValues[t]}else{const t=e.defaultWidth,o=null!==n&&void 0!==n&&n.width?String(n.width):e.defaultWidth;r=e.values[o]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}const rf={ordinalNumber:(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:nf({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:nf({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:nf({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:nf({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:nf({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})};function of(e){return function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=n.width,o=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],a=t.match(o);if(!a)return null;const i=a[0],s=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],l=Array.isArray(s)?function(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n;return}(s,(e=>e.test(i))):function(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n;return}(s,(e=>e.test(i)));let c;c=e.valueCallback?e.valueCallback(l):l,c=n.valueCallback?n.valueCallback(c):c;return{value:c,rest:t.slice(i.length)}}}const af={ordinalNumber:(sf={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e.match(sf.matchPattern);if(!n)return null;const r=n[0],o=e.match(sf.parsePattern);if(!o)return null;let a=sf.valueCallback?sf.valueCallback(o[0]):o[0];return a=t.valueCallback?t.valueCallback(a):a,{value:a,rest:e.slice(r.length)}}),era:of({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:of({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:of({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:of({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:of({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})};var sf;const lf={code:"en-US",formatDistance:(e,t,n)=>{let r;const o=Jd[e];return r="string"===typeof o?o:1===t?o.one:o.other.replace("{{count}}",t.toString()),null!==n&&void 0!==n&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r},formatLong:ef,formatRelative:(e,t,n,r)=>tf[e],localize:rf,match:af,options:{weekStartsOn:0,firstWeekContainsDate:1}},cf=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},uf=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},df={p:uf,P:(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],o=n[2];if(!o)return cf(e,t);let a;switch(r){case"P":a=t.dateTime({width:"short"});break;case"PP":a=t.dateTime({width:"medium"});break;case"PPP":a=t.dateTime({width:"long"});break;default:a=t.dateTime({width:"full"})}return a.replace("{{date}}",cf(r,t)).replace("{{time}}",uf(o,t))}},ff=/^D+$/,pf=/^Y+$/,hf=["D","DD","YY","YYYY"];function mf(e){return ff.test(e)}function vf(e){return pf.test(e)}function gf(e,t,n){const r=function(e,t,n){const r="Y"===e[0]?"years":"days of the month";return"Use `".concat(e.toLowerCase(),"` instead of `").concat(e,"` (in `").concat(t,"`) for formatting ").concat(r," to the input `").concat(n,"`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md")}(e,t,n);if(console.warn(r),hf.includes(e))throw new RangeError(r)}let yf={};function bf(){return yf}function wf(){return Object.assign({},bf())}function xf(e,t){const n=function(e){var t;return"function"===typeof e&&(null===(t=e.prototype)||void 0===t?void 0:t.constructor)===e}(t)?new t(0):Hd(t,0);return n.setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),n.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()),n}class kf{constructor(){Pe(this,"subPriority",0)}validate(e,t){return!0}}class Sf extends kf{constructor(e,t,n,r,o){super(),this.value=e,this.validateValue=t,this.setValue=n,this.priority=r,o&&(this.subPriority=o)}validate(e,t){return this.validateValue(e,this.value,t)}set(e,t,n){return this.setValue(e,t,this.value,n)}}class Ef extends kf{constructor(e,t){super(),Pe(this,"priority",10),Pe(this,"subPriority",-1),this.context=e||(e=>Hd(t,e))}set(e,t){return t.timestampIsSet?e:Hd(e,xf(e,this.context))}}class Cf{run(e,t,n,r){const o=this.parse(e,t,n,r);return o?{setter:new Sf(o.value,this.validate,this.set,this.priority,this.subPriority),rest:o.rest}:null}validate(e,t,n){return!0}}const Nf=/^(1[0-2]|0?\d)/,jf=/^(3[0-1]|[0-2]?\d)/,Df=/^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,Pf=/^(5[0-3]|[0-4]?\d)/,Tf=/^(2[0-3]|[0-1]?\d)/,_f=/^(2[0-4]|[0-1]?\d)/,Of=/^(1[0-1]|0?\d)/,Mf=/^(1[0-2]|0?\d)/,Rf=/^[0-5]?\d/,Af=/^[0-5]?\d/,Lf=/^\d/,If=/^\d{1,2}/,Ff=/^\d{1,3}/,zf=/^\d{1,4}/,Bf=/^-?\d+/,Hf=/^-?\d/,Uf=/^-?\d{1,2}/,Yf=/^-?\d{1,3}/,Wf=/^-?\d{1,4}/,qf=/^([+-])(\d{2})(\d{2})?|Z/,Vf=/^([+-])(\d{2})(\d{2})|Z/,Qf=/^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,Kf=/^([+-])(\d{2}):(\d{2})|Z/,$f=/^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/;function Gf(e,t){return e?{value:t(e.value),rest:e.rest}:e}function Xf(e,t){const n=t.match(e);return n?{value:parseInt(n[0],10),rest:t.slice(n[0].length)}:null}function Jf(e,t){const n=t.match(e);if(!n)return null;if("Z"===n[0])return{value:0,rest:t.slice(1)};const r="+"===n[1]?1:-1,o=n[2]?parseInt(n[2],10):0,a=n[3]?parseInt(n[3],10):0,i=n[5]?parseInt(n[5],10):0;return{value:r*(o*zd+a*Fd+1e3*i),rest:t.slice(n[0].length)}}function Zf(e){return Xf(Bf,e)}function ep(e,t){switch(e){case 1:return Xf(Lf,t);case 2:return Xf(If,t);case 3:return Xf(Ff,t);case 4:return Xf(zf,t);default:return Xf(new RegExp("^\\d{1,"+e+"}"),t)}}function tp(e,t){switch(e){case 1:return Xf(Hf,t);case 2:return Xf(Uf,t);case 3:return Xf(Yf,t);case 4:return Xf(Wf,t);default:return Xf(new RegExp("^-?\\d{1,"+e+"}"),t)}}function np(e){switch(e){case"morning":return 4;case"evening":return 17;case"pm":case"noon":case"afternoon":return 12;default:return 0}}function rp(e,t){const n=t>0,r=n?t:1-t;let o;if(r<=50)o=e||100;else{const t=r+50;o=e+100*Math.trunc(t/100)-(e>=t%100?100:0)}return n?o:1-o}function op(e){return e%400===0||e%4===0&&e%100!==0}function ap(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=(d<c?7:0)+d-c;return u.setDate(u.getDate()-f),u.setHours(0,0,0,0),u}function ip(e,t){var n,r,o,a,i,s;const l=Ud(e,null===t||void 0===t?void 0:t.in),c=l.getFullYear(),u=bf(),d=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:u.firstWeekContainsDate)&&void 0!==r?r:null===(s=u.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,f=Hd((null===t||void 0===t?void 0:t.in)||e,0);f.setFullYear(c+1,0,d),f.setHours(0,0,0,0);const p=ap(f,t),h=Hd((null===t||void 0===t?void 0:t.in)||e,0);h.setFullYear(c,0,d),h.setHours(0,0,0,0);const m=ap(h,t);return+l>=+p?c+1:+l>=+m?c:c-1}function sp(e,t){return ap(e,_e(_e({},t),{},{weekStartsOn:1}))}function lp(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.firstWeekContainsDate)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.firstWeekContainsDate)&&void 0!==o?o:l.firstWeekContainsDate)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.firstWeekContainsDate)&&void 0!==n?n:1,u=ip(e,t),d=Hd((null===t||void 0===t?void 0:t.in)||e,0);d.setFullYear(u,0,c),d.setHours(0,0,0,0);return ap(d,t)}function cp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+ap(n,t)-+lp(n,t);return Math.round(r/Id)+1}function up(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=cp(r,n)-t;return r.setDate(r.getDate()-7*o),Ud(r,null===n||void 0===n?void 0:n.in)}function dp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=Hd(n,0);o.setFullYear(r+1,0,4),o.setHours(0,0,0,0);const a=sp(o),i=Hd(n,0);i.setFullYear(r,0,4),i.setHours(0,0,0,0);const s=sp(i);return n.getTime()>=a.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function fp(e,t){const n=dp(e,t),r=Hd((null===t||void 0===t?void 0:t.in)||e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}function pp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=+sp(n)-+fp(n);return Math.round(r/Id)+1}function hp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=pp(r,n)-t;return r.setDate(r.getDate()-7*o),r}const mp=[31,28,31,30,31,30,31,31,30,31,30,31],vp=[31,29,31,30,31,30,31,31,30,31,30,31];function gp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(t)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):t?(r.setDate(r.getDate()+t),r):r}function yp(e,t,n){var r,o,a,i,s,l;const c=bf(),u=null!==(r=null!==(o=null!==(a=null!==(i=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==i?i:null===n||void 0===n||null===(s=n.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==a?a:c.weekStartsOn)&&void 0!==o?o:null===(l=c.locale)||void 0===l||null===(l=l.options)||void 0===l?void 0:l.weekStartsOn)&&void 0!==r?r:0,d=Ud(e,null===n||void 0===n?void 0:n.in),f=d.getDay(),p=7-u;return gp(d,t<0||t>6?t-(f+p)%7:((t%7+7)%7+p)%7-(f+p)%7,n)}function bp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in).getDay();return 0===n?7:n}function wp(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return gp(r,t-bp(r,n),n)}function xp(e){const t=Ud(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}const kp={G:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",140),Pe(this,"incompatibleTokens",["R","u","t","T"])}parse(e,t,n){switch(t){case"G":case"GG":case"GGG":return n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"});case"GGGGG":return n.era(e,{width:"narrow"});default:return n.era(e,{width:"wide"})||n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"})}}set(e,t,n){return t.era=n,e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["Y","R","u","w","I","i","e","c","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"yy"===t});switch(t){case"y":return Gf(ep(4,e),r);case"yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n){const r=e.getFullYear();if(n.isTwoDigitYear){const t=rp(n.year,r);return e.setFullYear(t,0,1),e.setHours(0,0,0,0),e}const o="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(o,0,1),e.setHours(0,0,0,0),e}},Y:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["y","R","u","Q","q","M","L","I","d","D","i","t","T"])}parse(e,t,n){const r=e=>({year:e,isTwoDigitYear:"YY"===t});switch(t){case"Y":return Gf(ep(4,e),r);case"Yo":return Gf(n.ordinalNumber(e,{unit:"year"}),r);default:return Gf(ep(t.length,e),r)}}validate(e,t){return t.isTwoDigitYear||t.year>0}set(e,t,n,r){const o=ip(e,r);if(n.isTwoDigitYear){const t=rp(n.year,o);return e.setFullYear(t,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}const a="era"in t&&1!==t.era?1-n.year:n.year;return e.setFullYear(a,0,r.firstWeekContainsDate),e.setHours(0,0,0,0),ap(e,r)}},R:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"])}parse(e,t){return tp("R"===t?4:t.length,e)}set(e,t,n){const r=Hd(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),sp(r)}},u:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",130),Pe(this,"incompatibleTokens",["G","y","Y","R","w","I","i","e","c","t","T"])}parse(e,t){return tp("u"===t?4:t.length,e)}set(e,t,n){return e.setFullYear(n,0,1),e.setHours(0,0,0,0),e}},Q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"Q":case"QQ":return ep(t.length,e);case"Qo":return n.ordinalNumber(e,{unit:"quarter"});case"QQQ":return n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"});case"QQQQQ":return n.quarter(e,{width:"narrow",context:"formatting"});default:return n.quarter(e,{width:"wide",context:"formatting"})||n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},q:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",120),Pe(this,"incompatibleTokens",["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"q":case"qq":return ep(t.length,e);case"qo":return n.ordinalNumber(e,{unit:"quarter"});case"qqq":return n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"});case"qqqqq":return n.quarter(e,{width:"narrow",context:"standalone"});default:return n.quarter(e,{width:"wide",context:"standalone"})||n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=1&&t<=4}set(e,t,n){return e.setMonth(3*(n-1),1),e.setHours(0,0,0,0),e}},M:new class extends Cf{constructor(){super(...arguments),Pe(this,"incompatibleTokens",["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]),Pe(this,"priority",110)}parse(e,t,n){const r=e=>e-1;switch(t){case"M":return Gf(Xf(Nf,e),r);case"MM":return Gf(ep(2,e),r);case"Mo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"MMM":return n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"});case"MMMMM":return n.month(e,{width:"narrow",context:"formatting"});default:return n.month(e,{width:"wide",context:"formatting"})||n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},L:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",110),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","w","I","D","i","e","c","t","T"])}parse(e,t,n){const r=e=>e-1;switch(t){case"L":return Gf(Xf(Nf,e),r);case"LL":return Gf(ep(2,e),r);case"Lo":return Gf(n.ordinalNumber(e,{unit:"month"}),r);case"LLL":return n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"});case"LLLLL":return n.month(e,{width:"narrow",context:"standalone"});default:return n.month(e,{width:"wide",context:"standalone"})||n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.setMonth(n,1),e.setHours(0,0,0,0),e}},w:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","i","t","T"])}parse(e,t,n){switch(t){case"w":return Xf(Pf,e);case"wo":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n,r){return ap(up(e,n,r),r)}},I:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",100),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"])}parse(e,t,n){switch(t){case"I":return Xf(Pf,e);case"Io":return n.ordinalNumber(e,{unit:"week"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=53}set(e,t,n){return sp(hp(e,n))}},d:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subPriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","w","I","D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"d":return Xf(jf,e);case"do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){const n=op(e.getFullYear()),r=e.getMonth();return n?t>=1&&t<=vp[r]:t>=1&&t<=mp[r]}set(e,t,n){return e.setDate(n),e.setHours(0,0,0,0),e}},D:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"subpriority",1),Pe(this,"incompatibleTokens",["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"])}parse(e,t,n){switch(t){case"D":case"DD":return Xf(Df,e);case"Do":return n.ordinalNumber(e,{unit:"date"});default:return ep(t.length,e)}}validate(e,t){return op(e.getFullYear())?t>=1&&t<=366:t>=1&&t<=365}set(e,t,n){return e.setMonth(0,n),e.setHours(0,0,0,0),e}},E:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["D","i","e","c","t","T"])}parse(e,t,n){switch(t){case"E":case"EE":case"EEE":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"EEEEE":return n.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},e:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"e":case"ee":return Gf(ep(t.length,e),o);case"eo":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"eee":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"eeeee":return n.day(e,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},c:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"])}parse(e,t,n,r){const o=e=>{const t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"c":case"cc":return Gf(ep(t.length,e),o);case"co":return Gf(n.ordinalNumber(e,{unit:"day"}),o);case"ccc":return n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});case"ccccc":return n.day(e,{width:"narrow",context:"standalone"});case"cccccc":return n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});default:return n.day(e,{width:"wide",context:"standalone"})||n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"})}}validate(e,t){return t>=0&&t<=6}set(e,t,n,r){return(e=yp(e,n,r)).setHours(0,0,0,0),e}},i:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",90),Pe(this,"incompatibleTokens",["y","Y","u","q","Q","M","L","w","d","D","E","e","c","t","T"])}parse(e,t,n){const r=e=>0===e?7:e;switch(t){case"i":case"ii":return ep(t.length,e);case"io":return n.ordinalNumber(e,{unit:"day"});case"iii":return Gf(n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiii":return Gf(n.day(e,{width:"narrow",context:"formatting"}),r);case"iiiiii":return Gf(n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r);default:return Gf(n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"}),r)}}validate(e,t){return t>=1&&t<=7}set(e,t,n){return(e=wp(e,n)).setHours(0,0,0,0),e}},a:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["b","B","H","k","t","T"])}parse(e,t,n){switch(t){case"a":case"aa":case"aaa":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"aaaaa":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},b:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","B","H","k","t","T"])}parse(e,t,n){switch(t){case"b":case"bb":case"bbb":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"bbbbb":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},B:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",80),Pe(this,"incompatibleTokens",["a","b","t","T"])}parse(e,t,n){switch(t){case"B":case"BB":case"BBB":return n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"});case"BBBBB":return n.dayPeriod(e,{width:"narrow",context:"formatting"});default:return n.dayPeriod(e,{width:"wide",context:"formatting"})||n.dayPeriod(e,{width:"abbreviated",context:"formatting"})||n.dayPeriod(e,{width:"narrow",context:"formatting"})}}set(e,t,n){return e.setHours(np(n),0,0,0),e}},h:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["H","K","k","t","T"])}parse(e,t,n){switch(t){case"h":return Xf(Mf,e);case"ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=12}set(e,t,n){const r=e.getHours()>=12;return r&&n<12?e.setHours(n+12,0,0,0):r||12!==n?e.setHours(n,0,0,0):e.setHours(0,0,0,0),e}},H:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","K","k","t","T"])}parse(e,t,n){switch(t){case"H":return Xf(Tf,e);case"Ho":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=23}set(e,t,n){return e.setHours(n,0,0,0),e}},K:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["h","H","k","t","T"])}parse(e,t,n){switch(t){case"K":return Xf(Of,e);case"Ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=11}set(e,t,n){return e.getHours()>=12&&n<12?e.setHours(n+12,0,0,0):e.setHours(n,0,0,0),e}},k:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",70),Pe(this,"incompatibleTokens",["a","b","h","H","K","t","T"])}parse(e,t,n){switch(t){case"k":return Xf(_f,e);case"ko":return n.ordinalNumber(e,{unit:"hour"});default:return ep(t.length,e)}}validate(e,t){return t>=1&&t<=24}set(e,t,n){const r=n<=24?n%24:n;return e.setHours(r,0,0,0),e}},m:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",60),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"m":return Xf(Rf,e);case"mo":return n.ordinalNumber(e,{unit:"minute"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setMinutes(n,0,0),e}},s:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",50),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t,n){switch(t){case"s":return Xf(Af,e);case"so":return n.ordinalNumber(e,{unit:"second"});default:return ep(t.length,e)}}validate(e,t){return t>=0&&t<=59}set(e,t,n){return e.setSeconds(n,0),e}},S:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",30),Pe(this,"incompatibleTokens",["t","T"])}parse(e,t){return Gf(ep(t.length,e),(e=>Math.trunc(e*Math.pow(10,3-t.length))))}set(e,t,n){return e.setMilliseconds(n),e}},X:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","x"])}parse(e,t){switch(t){case"X":return Jf(qf,e);case"XX":return Jf(Vf,e);case"XXXX":return Jf(Qf,e);case"XXXXX":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},x:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",10),Pe(this,"incompatibleTokens",["t","T","X"])}parse(e,t){switch(t){case"x":return Jf(qf,e);case"xx":return Jf(Vf,e);case"xxxx":return Jf(Qf,e);case"xxxxx":return Jf($f,e);default:return Jf(Kf,e)}}set(e,t,n){return t.timestampIsSet?e:Hd(e,e.getTime()-xp(e)-n)}},t:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",40),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,1e3*n),{timestampIsSet:!0}]}},T:new class extends Cf{constructor(){super(...arguments),Pe(this,"priority",20),Pe(this,"incompatibleTokens","*")}parse(e){return Zf(e)}set(e,t,n){return[Hd(e,n),{timestampIsSet:!0}]}}},Sp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Ep=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Cp=/^'([^]*?)'?$/,Np=/''/g,jp=/\S/,Dp=/[a-zA-Z]/;function Pp(e,t,n,r){var o,a,i,s,l,c,u,d,f,p,h,m,v,g;const y=()=>Hd((null===r||void 0===r?void 0:r.in)||n,NaN),b=wf(),w=null!==(o=null!==(a=null===r||void 0===r?void 0:r.locale)&&void 0!==a?a:b.locale)&&void 0!==o?o:lf,x=null!==(i=null!==(s=null!==(l=null!==(c=null===r||void 0===r?void 0:r.firstWeekContainsDate)&&void 0!==c?c:null===r||void 0===r||null===(u=r.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==l?l:b.firstWeekContainsDate)&&void 0!==s?s:null===(d=b.locale)||void 0===d||null===(d=d.options)||void 0===d?void 0:d.firstWeekContainsDate)&&void 0!==i?i:1,k=null!==(f=null!==(p=null!==(h=null!==(m=null===r||void 0===r?void 0:r.weekStartsOn)&&void 0!==m?m:null===r||void 0===r||null===(v=r.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==h?h:b.weekStartsOn)&&void 0!==p?p:null===(g=b.locale)||void 0===g||null===(g=g.options)||void 0===g?void 0:g.weekStartsOn)&&void 0!==f?f:0;if(!t)return e?y():Ud(n,null===r||void 0===r?void 0:r.in);const S={firstWeekContainsDate:x,weekStartsOn:k,locale:w},E=[new Ef(null===r||void 0===r?void 0:r.in,n)],C=t.match(Ep).map((e=>{const t=e[0];if(t in df){return(0,df[t])(e,w.formatLong)}return e})).join("").match(Sp),N=[];for(let T of C){null!==r&&void 0!==r&&r.useAdditionalWeekYearTokens||!vf(T)||gf(T,t,e),null!==r&&void 0!==r&&r.useAdditionalDayOfYearTokens||!mf(T)||gf(T,t,e);const n=T[0],o=kp[n];if(o){const{incompatibleTokens:t}=o;if(Array.isArray(t)){const e=N.find((e=>t.includes(e.token)||e.token===n));if(e)throw new RangeError("The format string mustn't contain `".concat(e.fullToken,"` and `").concat(T,"` at the same time"))}else if("*"===o.incompatibleTokens&&N.length>0)throw new RangeError("The format string mustn't contain `".concat(T,"` and any other token at the same time"));N.push({token:n,fullToken:T});const r=o.run(e,T,w.match,S);if(!r)return y();E.push(r.setter),e=r.rest}else{if(n.match(Dp))throw new RangeError("Format string contains an unescaped latin alphabet character `"+n+"`");if("''"===T?T="'":"'"===n&&(T=T.match(Cp)[1].replace(Np,"'")),0!==e.indexOf(T))return y();e=e.slice(T.length)}}if(e.length>0&&jp.test(e))return y();const j=E.map((e=>e.priority)).sort(((e,t)=>t-e)).filter(((e,t,n)=>n.indexOf(e)===t)).map((e=>E.filter((t=>t.priority===e)).sort(((e,t)=>t.subPriority-e.subPriority)))).map((e=>e[0]));let D=Ud(n,null===r||void 0===r?void 0:r.in);if(isNaN(+D))return y();const P={};for(const T of j){if(!T.validate(D,S))return y();const e=T.set(D,P,S);Array.isArray(e)?(D=e[0],Object.assign(P,e[1])):D=e}return D}function Tp(e){return e instanceof Date||"object"===typeof e&&"[object Date]"===Object.prototype.toString.call(e)}function _p(e){return!(!Tp(e)&&"number"!==typeof e||isNaN(+Ud(e)))}function Op(e,t){return+Ud(e)<+Ud(t)}function Mp(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=Hd.bind(null,e||n.find((e=>"object"===typeof e)));return n.map(o)}function Rp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(0,0,0,0),n}function Ap(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=Rp(r),i=Rp(o),s=+a-xp(a),l=+i-xp(i);return Math.round((s-l)/864e5)}function Lp(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}function Ip(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Ap(n,Lp(n))+1}function Fp(e,t){return(e<0?"-":"")+Math.abs(e).toString().padStart(t,"0")}const zp={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return Fp("yy"===t?r%100:r,t.length)},M(e,t){const n=e.getMonth();return"M"===t?String(n+1):Fp(n+1,2)},d:(e,t)=>Fp(e.getDate(),t.length),a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>Fp(e.getHours()%12||12,t.length),H:(e,t)=>Fp(e.getHours(),t.length),m:(e,t)=>Fp(e.getMinutes(),t.length),s:(e,t)=>Fp(e.getSeconds(),t.length),S(e,t){const n=t.length,r=e.getMilliseconds();return Fp(Math.trunc(r*Math.pow(10,n-3)),t.length)}},Bp="midnight",Hp="noon",Up="morning",Yp="afternoon",Wp="evening",qp="night",Vp={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){const t=e.getFullYear(),r=t>0?t:1-t;return n.ordinalNumber(r,{unit:"year"})}return zp.y(e,t)},Y:function(e,t,n,r){const o=ip(e,r),a=o>0?o:1-o;if("YY"===t){return Fp(a%100,2)}return"Yo"===t?n.ordinalNumber(a,{unit:"year"}):Fp(a,t.length)},R:function(e,t){return Fp(dp(e),t.length)},u:function(e,t){return Fp(e.getFullYear(),t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return Fp(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return Fp(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return zp.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return Fp(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const o=cp(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):Fp(o,t.length)},I:function(e,t,n){const r=pp(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):Fp(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):zp.d(e,t)},D:function(e,t,n){const r=Ip(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):Fp(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return Fp(a,2);case"eo":return n.ordinalNumber(a,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const o=e.getDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return Fp(a,t.length);case"co":return n.ordinalNumber(a,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return Fp(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let o;switch(o=12===r?Hp:0===r?Bp:r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let o;switch(o=r>=17?Wp:r>=12?Yp:r>=4?Up:qp,t){case"B":case"BB":case"BBB":return n.dayPeriod(o,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(o,{width:"narrow",context:"formatting"});default:return n.dayPeriod(o,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return zp.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):zp.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},k:function(e,t,n){let r=e.getHours();return 0===r&&(r=24),"ko"===t?n.ordinalNumber(r,{unit:"hour"}):Fp(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):zp.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):zp.s(e,t)},S:function(e,t){return zp.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return Kp(r);case"XXXX":case"XX":return $p(r);default:return $p(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return Kp(r);case"xxxx":case"xx":return $p(r);default:return $p(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Qp(r,":");default:return"GMT"+$p(r,":")}},t:function(e,t,n){return Fp(Math.trunc(+e/1e3),t.length)},T:function(e,t,n){return Fp(+e,t.length)}};function Qp(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e),o=Math.trunc(r/60),a=r%60;return 0===a?n+String(o):n+String(o)+t+Fp(a,2)}function Kp(e,t){if(e%60===0){return(e>0?"-":"+")+Fp(Math.abs(e)/60,2)}return $p(e,t)}function $p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e>0?"-":"+",r=Math.abs(e);return n+Fp(Math.trunc(r/60),2)+t+Fp(r%60,2)}const Gp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Xp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Jp=/^'([^]*?)'?$/,Zp=/''/g,eh=/[a-zA-Z]/;function th(e,t,n){var r,o,a,i,s,l,c,u,d,f,p,h,m,v;const g=bf(),y=null!==(r=null!==(o=null===n||void 0===n?void 0:n.locale)&&void 0!==o?o:g.locale)&&void 0!==r?r:lf,b=null!==(a=null!==(i=null!==(s=null!==(l=null===n||void 0===n?void 0:n.firstWeekContainsDate)&&void 0!==l?l:null===n||void 0===n||null===(c=n.locale)||void 0===c||null===(c=c.options)||void 0===c?void 0:c.firstWeekContainsDate)&&void 0!==s?s:g.firstWeekContainsDate)&&void 0!==i?i:null===(u=g.locale)||void 0===u||null===(u=u.options)||void 0===u?void 0:u.firstWeekContainsDate)&&void 0!==a?a:1,w=null!==(d=null!==(f=null!==(p=null!==(h=null===n||void 0===n?void 0:n.weekStartsOn)&&void 0!==h?h:null===n||void 0===n||null===(m=n.locale)||void 0===m||null===(m=m.options)||void 0===m?void 0:m.weekStartsOn)&&void 0!==p?p:g.weekStartsOn)&&void 0!==f?f:null===(v=g.locale)||void 0===v||null===(v=v.options)||void 0===v?void 0:v.weekStartsOn)&&void 0!==d?d:0,x=Ud(e,null===n||void 0===n?void 0:n.in);if(!_p(x))throw new RangeError("Invalid time value");let k=t.match(Xp).map((e=>{const t=e[0];if("p"===t||"P"===t){return(0,df[t])(e,y.formatLong)}return e})).join("").match(Gp).map((e=>{if("''"===e)return{isToken:!1,value:"'"};const t=e[0];if("'"===t)return{isToken:!1,value:nh(e)};if(Vp[t])return{isToken:!0,value:e};if(t.match(eh))throw new RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}}));y.localize.preprocessor&&(k=y.localize.preprocessor(x,k));const S={firstWeekContainsDate:b,weekStartsOn:w,locale:y};return k.map((r=>{if(!r.isToken)return r.value;const o=r.value;(null!==n&&void 0!==n&&n.useAdditionalWeekYearTokens||!vf(o))&&(null!==n&&void 0!==n&&n.useAdditionalDayOfYearTokens||!mf(o))||gf(o,t,String(e));return(0,Vp[o[0]])(x,o,y.localize,S)})).join("")}function nh(e){const t=e.match(Jp);return t?t[1].replace(Zp,"'"):e}function rh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setHours(t),r}function oh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setMinutes(t),r}function ah(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setSeconds(t),r}function ih(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setDate(1),n.setHours(0,0,0,0),n}function sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth(),o=r-r%3;return n.setMonth(o,1),n.setHours(0,0,0,0),n}function lh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return n.setHours(23,59,59,999),n}function ch(e,t){var n,r,o,a,i,s;const l=bf(),c=null!==(n=null!==(r=null!==(o=null!==(a=null===t||void 0===t?void 0:t.weekStartsOn)&&void 0!==a?a:null===t||void 0===t||null===(i=t.locale)||void 0===i||null===(i=i.options)||void 0===i?void 0:i.weekStartsOn)&&void 0!==o?o:l.weekStartsOn)&&void 0!==r?r:null===(s=l.locale)||void 0===s||null===(s=s.options)||void 0===s?void 0:s.weekStartsOn)&&void 0!==n?n:0,u=Ud(e,null===t||void 0===t?void 0:t.in),d=u.getDay(),f=6+(d<c?-7:0)-(d-c);return u.setDate(u.getDate()+f),u.setHours(23,59,59,999),u}function uh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getMonth();return n.setFullYear(n.getFullYear(),r+1,0),n.setHours(23,59,59,999),n}function dh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()}function fh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()===o.getFullYear()&&r.getMonth()===o.getMonth()}function ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+sh(r)===+sh(o)}function hh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return+Rp(r)===+Rp(o)}function mh(e,t){return+Ud(e)===+Ud(t)}function vh(e,t,n){const r=+Ud(e,null===n||void 0===n?void 0:n.in),[o,a]=[+Ud(t.start,null===n||void 0===n?void 0:n.in),+Ud(t.end,null===n||void 0===n?void 0:n.in)].sort(((e,t)=>e-t));return r>=o&&r<=a}function gh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear(),o=n.getMonth(),a=Hd(n,0);return a.setFullYear(r,o+1,0),a.setHours(0,0,0,0),a.getDate()}function yh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=r.getFullYear(),a=r.getDate(),i=Hd((null===n||void 0===n?void 0:n.in)||e,0);i.setFullYear(o,t,15),i.setHours(0,0,0,0);const s=gh(i);return r.setMonth(t,Math.min(a,s)),r}function bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in),o=t-(Math.trunc(r.getMonth()/3)+1);return yh(r,r.getMonth()+3*o)}function wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getFullYear()}function xh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMonth()}function kh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in),r=n.getFullYear();return n.setFullYear(r+1,0,0),n.setHours(23,59,59,999),n}function Sh(e,t){const n=Ud(e,null===t||void 0===t?void 0:t.in);return Math.trunc(n.getMonth()/3)+1}function Eh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getHours()}function Ch(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getMinutes()}function Nh(e){return Ud(e).getSeconds()}function jh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);if(isNaN(t))return Hd((null===n||void 0===n?void 0:n.in)||e,NaN);if(!t)return r;const o=r.getDate(),a=Hd((null===n||void 0===n?void 0:n.in)||e,r.getTime());a.setMonth(r.getMonth()+t+1,0);return o>=a.getDate()?a:(r.setFullYear(a.getFullYear(),a.getMonth(),o),r)}function Dh(e,t,n){return jh(e,-t,n)}function Ph(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 12*(r.getFullYear()-o.getFullYear())+(r.getMonth()-o.getMonth())}function Th(e,t,n){return jh(e,3*t,n)}function _h(e,t,n){return Th(e,-t,n)}function Oh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return 4*(r.getFullYear()-o.getFullYear())+(Sh(r)-Sh(o))}function Mh(e,t,n){return jh(e,12*t,n)}function Rh(e,t,n){return Mh(e,-t,n)}function Ah(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t);return r.getFullYear()-o.getFullYear()}function Lh(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n>t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Ih(e,t){let n,r=null===t||void 0===t?void 0:t.in;return e.forEach((e=>{r||"object"!==typeof e||(r=Hd.bind(null,e));const t=Ud(e,r);(!n||n<t||isNaN(+t))&&(n=t)})),Hd(r,n||NaN)}function Fh(e,t,n){return Hd((null===n||void 0===n?void 0:n.in)||e,+Ud(e)+t)}function zh(e,t,n){return Fh(e,t*zd,n)}function Bh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return r.setTime(r.getTime()+t*Fd),r}function Hh(e,t,n){return Fh(e,1e3*t,n)}function Uh(e,t){return+Ud(e)>+Ud(t)}function Yh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDay()}function Wh(e,t){return Ud(e,null===t||void 0===t?void 0:t.in).getDate()}function qh(e,t,n){return gp(e,7*t,n)}function Vh(e){return+Ud(e)}function Qh(e,t,n){const r=Ud(e,null===n||void 0===n?void 0:n.in);return isNaN(+r)?Hd((null===n||void 0===n?void 0:n.in)||e,NaN):(r.setFullYear(t),r)}function Kh(e,t,n){const[r,o]=Mp(null===n||void 0===n?void 0:n.in,e,t),a=$h(r,o),i=Math.abs(Ap(r,o));r.setDate(r.getDate()-a*i);const s=a*(i-Number($h(r,o)===-a));return 0===s?0:s}function $h(e,t){const n=e.getFullYear()-t.getFullYear()||e.getMonth()-t.getMonth()||e.getDate()-t.getDate()||e.getHours()-t.getHours()||e.getMinutes()-t.getMinutes()||e.getSeconds()-t.getSeconds()||e.getMilliseconds()-t.getMilliseconds();return n<0?-1:n>0?1:n}function Gh(e,t,n){return qh(e,-t,n)}function Xh(e,t,n){return gp(e,-t,n)}var Jh="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;const Zh=_e({},o).useInsertionEffect||(e=>e());function em(){return"undefined"!==typeof window}function tm(e){return om(e)?(e.nodeName||"").toLowerCase():"#document"}function nm(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function rm(e){var t;return null==(t=(om(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function om(e){return!!em()&&(e instanceof Node||e instanceof nm(e).Node)}function am(e){return!!em()&&(e instanceof Element||e instanceof nm(e).Element)}function im(e){return!!em()&&(e instanceof HTMLElement||e instanceof nm(e).HTMLElement)}function sm(e){return!(!em()||"undefined"===typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof nm(e).ShadowRoot)}function lm(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=hm(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function cm(e){return["table","td","th"].includes(tm(e))}function um(e){return[":popover-open",":modal"].some((t=>{try{return e.matches(t)}catch(Dy){return!1}}))}function dm(e){const t=fm(),n=am(e)?hm(e):e;return["transform","translate","scale","rotate","perspective"].some((e=>!!n[e]&&"none"!==n[e]))||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","translate","scale","rotate","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function fm(){return!("undefined"===typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function pm(e){return["html","body","#document"].includes(tm(e))}function hm(e){return nm(e).getComputedStyle(e)}function mm(e){return am(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function vm(e){if("html"===tm(e))return e;const t=e.assignedSlot||e.parentNode||sm(e)&&e.host||rm(e);return sm(t)?t.host:t}function gm(e){const t=vm(e);return pm(t)?e.ownerDocument?e.ownerDocument.body:e.body:im(t)&&lm(t)?t:gm(t)}function ym(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=gm(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=nm(o);if(a){const e=bm(i);return t.concat(i,i.visualViewport||[],lm(o)?o:[],e&&n?ym(e):[])}return t.concat(o,ym(o,[],n))}function bm(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}const wm=Math.min,xm=Math.max,km=Math.round,Sm=Math.floor,Em=e=>({x:e,y:e}),Cm={left:"right",right:"left",bottom:"top",top:"bottom"},Nm={start:"end",end:"start"};function jm(e,t){return"function"===typeof e?e(t):e}function Dm(e){return e.split("-")[0]}function Pm(e){return e.split("-")[1]}function Tm(e){return"y"===e?"height":"width"}function _m(e){return["top","bottom"].includes(Dm(e))?"y":"x"}function Om(e){return"x"===_m(e)?"y":"x"}function Mm(e){return e.replace(/start|end/g,(e=>Nm[e]))}function Rm(e){return e.replace(/left|right|bottom|top/g,(e=>Cm[e]))}function Am(e){return"number"!==typeof e?function(e){return _e({top:0,right:0,bottom:0,left:0},e)}(e):{top:e,right:e,bottom:e,left:e}}function Lm(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}const Im=["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"];function Fm(e,t,n){let{reference:r,floating:o}=e;const a=_m(t),i=Om(t),s=Tm(i),l=Dm(t),c="y"===a,u=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,f=r[s]/2-o[s]/2;let p;switch(l){case"top":p={x:u,y:r.y-o.height};break;case"bottom":p={x:u,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-o.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Pm(t)){case"start":p[i]-=f*(n&&c?-1:1);break;case"end":p[i]+=f*(n&&c?-1:1)}return p}async function zm(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:a,rects:i,elements:s,strategy:l}=e,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:f=!1,padding:p=0}=jm(t,e),h=Am(p),m=s[f?"floating"===d?"reference":"floating":d],v=Lm(await a.getClippingRect({element:null==(n=await(null==a.isElement?void 0:a.isElement(m)))||n?m:m.contextElement||await(null==a.getDocumentElement?void 0:a.getDocumentElement(s.floating)),boundary:c,rootBoundary:u,strategy:l})),g="floating"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,y=await(null==a.getOffsetParent?void 0:a.getOffsetParent(s.floating)),b=await(null==a.isElement?void 0:a.isElement(y))&&await(null==a.getScale?void 0:a.getScale(y))||{x:1,y:1},w=Lm(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:g,offsetParent:y,strategy:l}):g);return{top:(v.top-w.top+h.top)/b.y,bottom:(w.bottom-v.bottom+h.bottom)/b.y,left:(v.left-w.left+h.left)/b.x,right:(w.right-v.right+h.right)/b.x}}function Bm(e){const t=hm(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=im(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,s=km(n)!==a||km(r)!==i;return s&&(n=a,r=i),{width:n,height:r,$:s}}function Hm(e){return am(e)?e:e.contextElement}function Um(e){const t=Hm(e);if(!im(t))return Em(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:a}=Bm(t);let i=(a?km(n.width):n.width)/r,s=(a?km(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),s&&Number.isFinite(s)||(s=1),{x:i,y:s}}const Ym=Em(0);function Wm(e){const t=nm(e);return fm()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Ym}function qm(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),a=Hm(e);let i=Em(1);t&&(r?am(r)&&(i=Um(r)):i=Um(e));const s=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==nm(e))&&t}(a,n,r)?Wm(a):Em(0);let l=(o.left+s.x)/i.x,c=(o.top+s.y)/i.y,u=o.width/i.x,d=o.height/i.y;if(a){const e=nm(a),t=r&&am(r)?nm(r):r;let n=e,o=bm(n);for(;o&&r&&t!==n;){const e=Um(o),t=o.getBoundingClientRect(),r=hm(o),a=t.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=t.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;l*=e.x,c*=e.y,u*=e.x,d*=e.y,l+=a,c+=i,n=nm(o),o=bm(n)}}return Lm({width:u,height:d,x:l,y:c})}function Vm(e,t){const n=mm(e).scrollLeft;return t?t.left+n:qm(rm(e)).left+n}function Qm(e,t,n){void 0===n&&(n=!1);const r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-(n?0:Vm(e,r)),y:r.top+t.scrollTop}}function Km(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=nm(e),r=rm(e),o=n.visualViewport;let a=r.clientWidth,i=r.clientHeight,s=0,l=0;if(o){a=o.width,i=o.height;const e=fm();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,l=o.offsetTop)}return{width:a,height:i,x:s,y:l}}(e,n);else if("document"===t)r=function(e){const t=rm(e),n=mm(e),r=e.ownerDocument.body,o=xm(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=xm(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+Vm(e);const s=-n.scrollTop;return"rtl"===hm(r).direction&&(i+=xm(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:s}}(rm(e));else if(am(t))r=function(e,t){const n=qm(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=im(e)?Um(e):Em(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{const n=Wm(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return Lm(r)}function $m(e,t){const n=vm(e);return!(n===t||!am(n)||pm(n))&&("fixed"===hm(n).position||$m(n,t))}function Gm(e,t,n){const r=im(t),o=rm(t),a="fixed"===n,i=qm(e,!0,a,t);let s={scrollLeft:0,scrollTop:0};const l=Em(0);function c(){l.x=Vm(o)}if(r||!r&&!a)if(("body"!==tm(t)||lm(o))&&(s=mm(t)),r){const e=qm(t,!0,a,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else o&&c();a&&!r&&o&&c();const u=!o||r||a?Em(0):Qm(o,s);return{x:i.left+s.scrollLeft-l.x-u.x,y:i.top+s.scrollTop-l.y-u.y,width:i.width,height:i.height}}function Xm(e){return"static"===hm(e).position}function Jm(e,t){if(!im(e)||"fixed"===hm(e).position)return null;if(t)return t(e);let n=e.offsetParent;return rm(e)===n&&(n=n.ownerDocument.body),n}function Zm(e,t){const n=nm(e);if(um(e))return n;if(!im(e)){let t=vm(e);for(;t&&!pm(t);){if(am(t)&&!Xm(t))return t;t=vm(t)}return n}let r=Jm(e,t);for(;r&&cm(r)&&Xm(r);)r=Jm(r,t);return r&&pm(r)&&Xm(r)&&!dm(r)?n:r||function(e){let t=vm(e);for(;im(t)&&!pm(t);){if(dm(t))return t;if(um(t))return null;t=vm(t)}return null}(e)||n}const ev={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const a="fixed"===o,i=rm(r),s=!!t&&um(t.floating);if(r===i||s&&a)return n;let l={scrollLeft:0,scrollTop:0},c=Em(1);const u=Em(0),d=im(r);if((d||!d&&!a)&&(("body"!==tm(r)||lm(i))&&(l=mm(r)),im(r))){const e=qm(r);c=Um(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}const f=!i||d||a?Em(0):Qm(i,l,!0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+u.x+f.x,y:n.y*c.y-l.scrollTop*c.y+u.y+f.y}},getDocumentElement:rm,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const a="clippingAncestors"===n?um(t)?[]:function(e,t){const n=t.get(e);if(n)return n;let r=ym(e,[],!1).filter((e=>am(e)&&"body"!==tm(e))),o=null;const a="fixed"===hm(e).position;let i=a?vm(e):e;for(;am(i)&&!pm(i);){const t=hm(i),n=dm(i);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||lm(i)&&!n&&$m(e,i))?r=r.filter((e=>e!==i)):o=t,i=vm(i)}return t.set(e,r),r}(t,this._c):[].concat(n),i=[...a,r],s=i[0],l=i.reduce(((e,n)=>{const r=Km(t,n,o);return e.top=xm(r.top,e.top),e.right=wm(r.right,e.right),e.bottom=wm(r.bottom,e.bottom),e.left=xm(r.left,e.left),e}),Km(t,s,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:Zm,getElementRects:async function(e){const t=this.getOffsetParent||Zm,n=this.getDimensions,r=await n(e.floating);return{reference:Gm(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){const{width:t,height:n}=Bm(e);return{width:t,height:n}},getScale:Um,isElement:am,isRTL:function(e){return"rtl"===hm(e).direction}};function tv(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function nv(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i="function"===typeof ResizeObserver,layoutShift:s="function"===typeof IntersectionObserver,animationFrame:l=!1}=r,c=Hm(e),u=o||a?[...c?ym(c):[],...ym(t)]:[];u.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)}));const d=c&&s?function(e,t){let n,r=null;const o=rm(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return function i(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),a();const c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(s||t(),!f||!p)return;const h={rootMargin:-Sm(d)+"px "+-Sm(o.clientWidth-(u+f))+"px "+-Sm(o.clientHeight-(d+p))+"px "+-Sm(u)+"px",threshold:xm(0,wm(1,l))||1};let m=!0;function v(t){const r=t[0].intersectionRatio;if(r!==l){if(!m)return i();r?i(!1,r):n=setTimeout((()=>{i(!1,1e-7)}),1e3)}1!==r||tv(c,e.getBoundingClientRect())||i(),m=!1}try{r=new IntersectionObserver(v,_e(_e({},h),{},{root:o.ownerDocument}))}catch(g){r=new IntersectionObserver(v,h)}r.observe(e)}(!0),a}(c,n):null;let f,p=-1,h=null;i&&(h=new ResizeObserver((e=>{let[r]=e;r&&r.target===c&&h&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{var e;null==(e=h)||e.observe(t)}))),n()})),c&&!l&&h.observe(c),h.observe(t));let m=l?qm(e):null;return l&&function t(){const r=qm(e);m&&!tv(m,r)&&n();m=r,f=requestAnimationFrame(t)}(),n(),()=>{var e;u.forEach((e=>{o&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)})),null==d||d(),null==(e=h)||e.disconnect(),h=null,l&&cancelAnimationFrame(f)}}const rv=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:a,placement:i,middlewareData:s}=t,l=await async function(e,t){const{placement:n,platform:r,elements:o}=e,a=await(null==r.isRTL?void 0:r.isRTL(o.floating)),i=Dm(n),s=Pm(n),l="y"===_m(n),c=["left","top"].includes(i)?-1:1,u=a&&l?-1:1,d=jm(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:h}="number"===typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&"number"===typeof h&&(p="end"===s?-1*h:h),l?{x:p*u,y:f*c}:{x:f*c,y:p*u}}(t,e);return i===(null==(n=s.offset)?void 0:n.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:o+l.x,y:a+l.y,data:_e(_e({},l),{},{placement:i})}}}},ov=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:o,middlewareData:a,rects:i,initialPlacement:s,platform:l,elements:c}=t,u=jm(e,t),{mainAxis:d=!0,crossAxis:f=!0,fallbackPlacements:p,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:v=!0}=u,g=Ps(u,Im);if(null!=(n=a.arrow)&&n.alignmentOffset)return{};const y=Dm(o),b=_m(s),w=Dm(s)===s,x=await(null==l.isRTL?void 0:l.isRTL(c.floating)),k=p||(w||!v?[Rm(s)]:function(e){const t=Rm(e);return[Mm(e),t,Mm(t)]}(s)),S="none"!==m;!p&&S&&k.push(...function(e,t,n,r){const o=Pm(e);let a=function(e,t,n){const r=["left","right"],o=["right","left"],a=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?a:i;default:return[]}}(Dm(e),"start"===n,r);return o&&(a=a.map((e=>e+"-"+o)),t&&(a=a.concat(a.map(Mm)))),a}(s,v,m,x));const E=[s,...k],C=await zm(t,g),N=[];let j=(null==(r=a.flip)?void 0:r.overflows)||[];if(d&&N.push(C[y]),f){const e=function(e,t,n){void 0===n&&(n=!1);const r=Pm(e),o=Om(e),a=Tm(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Rm(i)),[i,Rm(i)]}(o,i,x);N.push(C[e[0]],C[e[1]])}if(j=[...j,{placement:o,overflows:N}],!N.every((e=>e<=0))){var D,P;const e=((null==(D=a.flip)?void 0:D.index)||0)+1,t=E[e];if(t){var T;const n="alignment"===f&&b!==_m(t),r=(null==(T=j[0])?void 0:T.overflows[0])>0;if(!n||r)return{data:{index:e,overflows:j},reset:{placement:t}}}let n=null==(P=j.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:P.placement;if(!n)switch(h){case"bestFit":{var _;const e=null==(_=j.filter((e=>{if(S){const t=_m(e.placement);return t===b||"y"===t}return!0})).map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:_[0];e&&(n=e);break}case"initialPlacement":n=s}if(o!==n)return{reset:{placement:n}}}return{}}}},av=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:a,platform:i,elements:s,middlewareData:l}=t,{element:c,padding:u=0}=jm(e,t)||{};if(null==c)return{};const d=Am(u),f={x:n,y:r},p=Om(o),h=Tm(p),m=await i.getDimensions(c),v="y"===p,g=v?"top":"left",y=v?"bottom":"right",b=v?"clientHeight":"clientWidth",w=a.reference[h]+a.reference[p]-f[p]-a.floating[h],x=f[p]-a.reference[p],k=await(null==i.getOffsetParent?void 0:i.getOffsetParent(c));let S=k?k[b]:0;S&&await(null==i.isElement?void 0:i.isElement(k))||(S=s.floating[b]||a.floating[h]);const E=w/2-x/2,C=S/2-m[h]/2-1,N=wm(d[g],C),j=wm(d[y],C),D=N,P=S-m[h]-j,T=S/2-m[h]/2+E,_=xm(D,wm(T,P));const O=!l.arrow&&null!=Pm(o)&&T!==_&&a.reference[h]/2-(T<D?N:j)-m[h]/2<0,M=O?T<D?T-D:T-P:0;return{[p]:f[p]+M,data:_e({[p]:_,centerOffset:T-_-M},O&&{alignmentOffset:M}),reset:O}}}),iv=(e,t,n)=>{const r=new Map,o=_e({platform:ev},n),a=_e(_e({},o.platform),{},{_c:r});return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,s=a.filter(Boolean),l=await(null==i.isRTL?void 0:i.isRTL(t));let c=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=Fm(c,r,l),f=r,p={},h=0;for(let m=0;m<s.length;m++){const{name:n,fn:a}=s[m],{x:v,y:g,data:y,reset:b}=await a({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:t}});u=null!=v?v:u,d=null!=g?g:d,p=_e(_e({},p),{},{[n]:_e(_e({},p[n]),y)}),b&&h<=50&&(h++,"object"===typeof b&&(b.placement&&(f=b.placement),b.rects&&(c=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:u,y:d}=Fm(c,f,l))),m=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}})(e,t,_e(_e({},o),{},{platform:a}))};var sv="undefined"!==typeof document?r.useLayoutEffect:r.useEffect;function lv(e,t){if(e===t)return!0;if(typeof e!==typeof t)return!1;if("function"===typeof e&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&"object"===typeof e){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;0!==r--;)if(!lv(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;0!==r--;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!==r--;){const n=o[r];if(("_owner"!==n||!e.$$typeof)&&!lv(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function cv(e){if("undefined"===typeof window)return 1;return(e.ownerDocument.defaultView||window).devicePixelRatio||1}function uv(e,t){const n=cv(e);return Math.round(t*n)/n}function dv(e){const t=r.useRef(e);return sv((()=>{t.current=e})),t}const fv=(e,t)=>_e(_e({},rv(e)),{},{options:[e,t]}),pv=(e,t)=>_e(_e({},(e=>({name:"arrow",options:e,fn(t){const{element:n,padding:r}="function"===typeof e?e(t):e;return n&&(o=n,{}.hasOwnProperty.call(o,"current"))?null!=n.current?av({element:n.current,padding:r}).fn(t):{}:n?av({element:n,padding:r}).fn(t):{};var o}}))(e)),{},{options:[e,t]}),hv=["transform"],mv=["context","width","height","tipRadius","strokeWidth","staticOffset","stroke","d","style"];const vv="ArrowLeft",gv="ArrowRight",yv="ArrowUp",bv="ArrowDown";const wv=[vv,gv],xv=[yv,bv],kv=_e({},o);let Sv=!1,Ev=0;const Cv=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+Ev++;const Nv=kv.useId||function(){const[e,t]=r.useState((()=>Sv?Cv():void 0));return Jh((()=>{null==e&&t(Cv())}),[]),r.useEffect((()=>{Sv=!0}),[]),e};const jv=r.forwardRef((function(e,t){const{context:{placement:n,elements:{floating:o},middlewareData:{arrow:a,shift:i}},width:s=14,height:l=7,tipRadius:c=0,strokeWidth:u=0,staticOffset:d,stroke:f,d:p,style:{transform:h}={}}=e,m=Ps(e.style,hv),v=Ps(e,mv);const g=Nv(),[y,b]=r.useState(!1);if(Jh((()=>{if(!o)return;"rtl"===hm(o).direction&&b(!0)}),[o]),!o)return null;const[w,x]=n.split("-"),k="top"===w||"bottom"===w;let S=d;(k&&null!=i&&i.x||!k&&null!=i&&i.y)&&(S=null);const E=2*u,C=E/2,N=s/2*(c/-8+1),j=l/2*c/4,D=!!p,P=S&&"end"===x?"bottom":"top";let T=S&&"end"===x?"right":"left";S&&y&&(T="end"===x?"left":"right");const _=null!=(null==a?void 0:a.x)?S||a.x:"",O=null!=(null==a?void 0:a.y)?S||a.y:"",M=p||"M0,0 H"+s+" L"+(s-N)+","+(l-j)+" Q"+s/2+","+l+" "+N+","+(l-j)+" Z",R={top:D?"rotate(180deg)":"",left:D?"rotate(90deg)":"rotate(-90deg)",bottom:D?"":"rotate(180deg)",right:D?"rotate(-90deg)":"rotate(90deg)"}[w];return(0,bd.jsxs)("svg",_e(_e({},v),{},{"aria-hidden":!0,ref:t,width:D?s:s+E,height:s,viewBox:"0 0 "+s+" "+(l>s?l:s),style:_e({position:"absolute",pointerEvents:"none",[T]:_,[P]:O,[w]:k||D?"100%":"calc(100% - "+E/2+"px)",transform:[R,h].filter((e=>!!e)).join(" ")},m),children:[E>0&&(0,bd.jsx)("path",{clipPath:"url(#"+g+")",fill:"none",stroke:f,strokeWidth:E+(p?0:1),d:M}),(0,bd.jsx)("path",{stroke:E&&!p?v.fill:"none",d:M}),(0,bd.jsx)("clipPath",{id:g,children:(0,bd.jsx)("rect",{x:-C,y:C*(D?-1:1),width:s+E,height:s})})]}))}));function Dv(){const e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach((e=>e(n)))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){var r;null==(r=e.get(t))||r.delete(n)}}}const Pv=r.createContext(null),Tv=r.createContext(null),_v=()=>{var e;return(null==(e=r.useContext(Pv))?void 0:e.id)||null},Ov=()=>r.useContext(Tv);function Mv(e){const{open:t=!1,onOpenChange:n,elements:o}=e,a=Nv(),i=r.useRef({}),[s]=r.useState((()=>Dv())),l=null!=_v();const[c,u]=r.useState(o.reference),d=function(e){const t=r.useRef((()=>{}));return Zh((()=>{t.current=e})),r.useCallback((function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)}),[])}(((e,t,r)=>{i.current.openEvent=e?t:void 0,s.emit("openchange",{open:e,event:t,reason:r,nested:l}),null==n||n(e,t,r)})),f=r.useMemo((()=>({setPositionReference:u})),[]),p=r.useMemo((()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference})),[c,o.reference,o.floating]);return r.useMemo((()=>({dataRef:i,open:t,onOpenChange:d,elements:p,events:s,floatingId:a,refs:f})),[t,d,p,s,a,f])}function Rv(e){void 0===e&&(e={});const{nodeId:t}=e,n=Mv(_e(_e({},e),{},{elements:_e({reference:null,floating:null},e.elements)})),o=e.rootContext||n,a=o.elements,[s,l]=r.useState(null),[c,u]=r.useState(null),d=(null==a?void 0:a.domReference)||s,f=r.useRef(null),p=Ov();Jh((()=>{d&&(f.current=d)}),[d]);const h=function(e){void 0===e&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:a,elements:{reference:s,floating:l}={},transform:c=!0,whileElementsMounted:u,open:d}=e,[f,p]=r.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[h,m]=r.useState(o);lv(h,o)||m(o);const[v,g]=r.useState(null),[y,b]=r.useState(null),w=r.useCallback((e=>{e!==E.current&&(E.current=e,g(e))}),[]),x=r.useCallback((e=>{e!==C.current&&(C.current=e,b(e))}),[]),k=s||v,S=l||y,E=r.useRef(null),C=r.useRef(null),N=r.useRef(f),j=null!=u,D=dv(u),P=dv(a),T=dv(d),_=r.useCallback((()=>{if(!E.current||!C.current)return;const e={placement:t,strategy:n,middleware:h};P.current&&(e.platform=P.current),iv(E.current,C.current,e).then((e=>{const t=_e(_e({},e),{},{isPositioned:!1!==T.current});O.current&&!lv(N.current,t)&&(N.current=t,i.flushSync((()=>{p(t)})))}))}),[h,t,n,P,T]);sv((()=>{!1===d&&N.current.isPositioned&&(N.current.isPositioned=!1,p((e=>_e(_e({},e),{},{isPositioned:!1}))))}),[d]);const O=r.useRef(!1);sv((()=>(O.current=!0,()=>{O.current=!1})),[]),sv((()=>{if(k&&(E.current=k),S&&(C.current=S),k&&S){if(D.current)return D.current(k,S,_);_()}}),[k,S,_,D,j]);const M=r.useMemo((()=>({reference:E,floating:C,setReference:w,setFloating:x})),[w,x]),R=r.useMemo((()=>({reference:k,floating:S})),[k,S]),A=r.useMemo((()=>{const e={position:n,left:0,top:0};if(!R.floating)return e;const t=uv(R.floating,f.x),r=uv(R.floating,f.y);return c?_e(_e({},e),{},{transform:"translate("+t+"px, "+r+"px)"},cv(R.floating)>=1.5&&{willChange:"transform"}):{position:n,left:t,top:r}}),[n,c,R.floating,f.x,f.y]);return r.useMemo((()=>_e(_e({},f),{},{update:_,refs:M,elements:R,floatingStyles:A})),[f,_,M,R,A])}(_e(_e({},e),{},{elements:_e(_e({},a),c&&{reference:c})})),m=r.useCallback((e=>{const t=am(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;u(t),h.refs.setReference(t)}),[h.refs]),v=r.useCallback((e=>{(am(e)||null===e)&&(f.current=e,l(e)),(am(h.refs.reference.current)||null===h.refs.reference.current||null!==e&&!am(e))&&h.refs.setReference(e)}),[h.refs]),g=r.useMemo((()=>_e(_e({},h.refs),{},{setReference:v,setPositionReference:m,domReference:f})),[h.refs,v,m]),y=r.useMemo((()=>_e(_e({},h.elements),{},{domReference:d})),[h.elements,d]),b=r.useMemo((()=>_e(_e(_e({},h),o),{},{refs:g,elements:y,nodeId:t})),[h,g,y,t,o]);return Jh((()=>{o.dataRef.current.floatingContext=b;const e=null==p?void 0:p.nodesRef.current.find((e=>e.id===t));e&&(e.context=b)})),r.useMemo((()=>_e(_e({},h),{},{context:b,refs:g,elements:y})),[h,g,y,b])}var Av=function(e,t){return Av=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Av(e,t)};function Lv(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}Av(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var Iv=function(){return Iv=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Iv.apply(this,arguments)};function Fv(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}"function"===typeof SuppressedError&&SuppressedError;var zv,Bv=function(e){var t=e.showTimeSelectOnly,n=void 0!==t&&t,o=e.showTime,a=void 0!==o&&o,i=e.className,s=e.children,l=n?"Choose Time":"Choose Date".concat(a?" and Time":"");return r.createElement("div",{className:i,role:"dialog","aria-label":l,"aria-modal":"true"},s)},Hv=function(e){var t=e.children,n=e.onClickOutside,o=e.className,a=e.containerRef,i=e.style,s=function(e,t){var n=(0,r.useRef)(null),o=(0,r.useRef)(e);o.current=e;var a=(0,r.useCallback)((function(e){var r,a=e.composed&&e.composedPath&&e.composedPath().find((function(e){return e instanceof Node}))||e.target;n.current&&!n.current.contains(a)&&(t&&a instanceof HTMLElement&&a.classList.contains(t)||null===(r=o.current)||void 0===r||r.call(o,e))}),[t]);return(0,r.useEffect)((function(){return document.addEventListener("mousedown",a),function(){document.removeEventListener("mousedown",a)}}),[a]),n}(n,e.ignoreClass);return r.createElement("div",{className:o,style:i,ref:function(e){s.current=e,a&&(a.current=e)}},t)};function Uv(){return"undefined"!==typeof window?window:globalThis}!function(e){e.ArrowUp="ArrowUp",e.ArrowDown="ArrowDown",e.ArrowLeft="ArrowLeft",e.ArrowRight="ArrowRight",e.PageUp="PageUp",e.PageDown="PageDown",e.Home="Home",e.End="End",e.Enter="Enter",e.Space=" ",e.Tab="Tab",e.Escape="Escape",e.Backspace="Backspace",e.X="x"}(zv||(zv={}));function Yv(e){if(null==e)return new Date;var t="string"===typeof e?Yd(e):Ud(e);return qv(t)?t:new Date}function Wv(e,t,n,r,o){void 0===o&&(o=Yv());for(var a=ug(n)||ug(cg()),i=0,s=Array.isArray(t)?t:[t];i<s.length;i++){var l=s[i],c=Pp(e,l,o,{locale:a,useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});if(qv(c)&&(!r||e===Vv(c,l,n)))return c}return null}function qv(e,t){return _p(e)&&!Op(e,new Date("1/1/1800"))}function Vv(e,t,n){if("en"===n)return th(e,t,{useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0});var r=n?ug(n):void 0;return n&&!r&&console.warn('A locale object was not found for the provided string ["'.concat(n,'"].')),th(e,t,{locale:r=r||ug(cg()),useAdditionalWeekYearTokens:!0,useAdditionalDayOfYearTokens:!0})}function Qv(e,t){var n=t.dateFormat,r=t.locale,o=Array.isArray(n)&&n.length>0?n[0]:n;return e&&Vv(e,o,r)||""}function Kv(e,t){var n=t.hour,r=void 0===n?0:n,o=t.minute,a=void 0===o?0:o,i=t.second;return rh(oh(ah(e,void 0===i?0:i),a),r)}function $v(e){return Rp(e)}function Gv(e,t,n){return ap(e,{locale:ug(t||cg()),weekStartsOn:n})}function Xv(e){return ih(e)}function Jv(e){return Lp(e)}function Zv(e){return sh(e)}function eg(){return Rp(Yv())}function tg(e){return lh(e)}function ng(e){return uh(e)}function rg(e,t){return e&&t?dh(e,t):!e&&!t}function og(e,t){return e&&t?fh(e,t):!e&&!t}function ag(e,t){return e&&t?ph(e,t):!e&&!t}function ig(e,t){return e&&t?hh(e,t):!e&&!t}function sg(e,t){return e&&t?mh(e,t):!e&&!t}function lg(e,t,n){var r,o=Rp(t),a=lh(n);try{r=vh(e,{start:o,end:a})}catch(i){r=!1}return r}function cg(){return Uv().__localeId__}function ug(e){if("string"===typeof e){var t=Uv();return t.__localeData__?t.__localeData__[e]:void 0}return e}function dg(e,t){return Vv(yh(Yv(),e),"LLLL",t)}function fg(e,t){return Vv(yh(Yv(),e),"LLL",t)}function pg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.excludeDateIntervals,s=n.includeDates,l=n.includeDateIntervals,c=n.filterDate;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return t instanceof Date?ig(e,t):ig(e,t.date)}))||i&&i.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||s&&!s.some((function(t){return ig(e,t)}))||l&&!l.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})}))||c&&!c(Yv(e))||!1}function hg(e,t){var n=void 0===t?{}:t,r=n.excludeDates,o=n.excludeDateIntervals;return o&&o.length>0?o.some((function(t){var n=t.start,r=t.end;return vh(e,{start:n,end:r})})):r&&r.some((function(t){var n;return t instanceof Date?ig(e,t):ig(e,null!==(n=t.date)&&void 0!==n?n:new Date)}))||!1}function mg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r?ih(r):void 0,maxDate:o?uh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(t){return og(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return og(e,t)}))||s&&!s(Yv(e))||!1}function vg(e,t,n,r){var o=wh(e),a=xh(e),i=wh(t),s=xh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function gg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates;return kg(e,{minDate:r,maxDate:o})||a&&a.some((function(t){return og(t instanceof Date?t:t.date,e)}))||i&&!i.some((function(t){return og(t,e)}))||!1}function yg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate;return kg(e,{minDate:r,maxDate:o})||(null===a||void 0===a?void 0:a.some((function(t){return ag(e,t instanceof Date?t:t.date)})))||i&&!i.some((function(t){return ag(e,t)}))||s&&!s(Yv(e))||!1}function bg(e,t,n){if(!t||!n)return!1;if(!_p(t)||!_p(n))return!1;var r=wh(t),o=wh(n);return r<=e&&o>=e}function wg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.maxDate,a=n.excludeDates,i=n.includeDates,s=n.filterDate,l=new Date(e,0,1);return kg(l,{minDate:r?Lp(r):void 0,maxDate:o?kh(o):void 0})||(null===a||void 0===a?void 0:a.some((function(e){return rg(l,e instanceof Date?e:e.date)})))||i&&!i.some((function(e){return rg(l,e)}))||s&&!s(Yv(l))||!1}function xg(e,t,n,r){var o=wh(e),a=Sh(e),i=wh(t),s=Sh(t),l=wh(r);return o===i&&o===l?a<=n&&n<=s:o<i&&(l===o&&a<=n||l===i&&s>=n||l<i&&l>o)}function kg(e,t){var n,r=void 0===t?{}:t,o=r.minDate,a=r.maxDate;return null!==(n=o&&Ap(e,o)<0||a&&Ap(e,a)>0)&&void 0!==n&&n}function Sg(e,t){return t.some((function(t){return Eh(t)===Eh(e)&&Ch(t)===Ch(e)&&Nh(t)===Nh(e)}))}function Eg(e,t){var n=void 0===t?{}:t,r=n.excludeTimes,o=n.includeTimes,a=n.filterTime;return r&&Sg(e,r)||o&&!Sg(e,o)||a&&!a(e)||!1}function Cg(e,t){var n=t.minTime,r=t.maxTime;if(!n||!r)throw new Error("Both minTime and maxTime props required");var o=Yv();o=ah(o=oh(o=rh(o,Eh(e)),Ch(e)),Nh(e));var a=Yv();a=ah(a=oh(a=rh(a,Eh(n)),Ch(n)),Nh(n));var i,s=Yv();s=ah(s=oh(s=rh(s,Eh(r)),Ch(r)),Nh(r));try{i=!vh(o,{start:a,end:s})}catch(l){i=!1}return i}function Ng(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Dh(e,1);return r&&Ph(r,a)>0||o&&o.every((function(e){return Ph(e,a)>0}))||!1}function jg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=jh(e,1);return r&&Ph(a,r)>0||o&&o.every((function(e){return Ph(a,e)>0}))||!1}function Dg(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=Rh(e,1);return r&&Ah(r,a)>0||o&&o.every((function(e){return Ah(e,a)>0}))||!1}function Pg(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Mh(e,1);return r&&Ah(a,r)>0||o&&o.every((function(e){return Ah(a,e)>0}))||!1}function Tg(e){var t=e.minDate,n=e.includeDates;return n&&t?Lh(n.filter((function(e){return Ap(e,t)>=0}))):n?Lh(n):t}function _g(e){var t=e.maxDate,n=e.includeDates;return n&&t?Ih(n.filter((function(e){return Ap(e,t)<=0}))):n?Ih(n):t}function Og(e,t){var n;void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--highlighted");for(var r=new Map,o=0,a=e.length;o<a;o++){var i=e[o];if(Tp(i)){var s=Vv(i,"MM.dd.yyyy");(p=r.get(s)||[]).includes(t)||(p.push(t),r.set(s,p))}else if("object"===typeof i){var l=null!==(n=Object.keys(i)[0])&&void 0!==n?n:"",c=i[l];if("string"===typeof l&&Array.isArray(c))for(var u=0,d=c.length;u<d;u++){var f=c[u];if(f){var p;s=Vv(f,"MM.dd.yyyy");(p=r.get(s)||[]).includes(l)||(p.push(l),r.set(s,p))}}}}return r}function Mg(e,t){void 0===e&&(e=[]),void 0===t&&(t="react-datepicker__day--holidays");var n=new Map;return e.forEach((function(e){var r=e.date,o=e.holidayName;if(Tp(r)){var a=Vv(r,"MM.dd.yyyy"),i=n.get(a)||{className:"",holidayNames:[]};if(!("className"in i)||i.className!==t||(s=i.holidayNames,l=[o],s.length!==l.length||!s.every((function(e,t){return e===l[t]})))){var s,l;i.className=t;var c=i.holidayNames;i.holidayNames=c?Fv(Fv([],c,!0),[o],!1):[o],n.set(a,i)}}})),n}function Rg(e,t,n,r,o){for(var a=o.length,i=[],s=0;s<a;s++){var l=e,c=o[s];c&&(l=Hh(l=Bh(l=zh(l,Eh(c)),Ch(c)),Nh(c)));var u=Bh(e,(n+1)*r);Uh(l,t)&&Op(l,u)&&void 0!=c&&i.push(c)}return i}function Ag(e){return e<10?"0".concat(e):"".concat(e)}function Lg(e,t){void 0===t&&(t=12);var n=Math.ceil(wh(e)/t)*t;return{startPeriod:n-(t-1),endPeriod:n}}function Ig(e){var t=e.getSeconds(),n=e.getMilliseconds();return Ud(e.getTime()-1e3*t-n)}function Fg(e){if(!Tp(e))throw new Error("Invalid date");var t=new Date(e);return t.setHours(0,0,0,0),t}function zg(e,t){if(!Tp(e)||!Tp(t))throw new Error("Invalid date received");return Op(Fg(e),Fg(t))}function Bg(e){return e.key===zv.Space}var Hg,Ug=function(e){function t(t){var n=e.call(this,t)||this;return n.inputRef=r.createRef(),n.onTimeChange=function(e){var t,r;n.setState({time:e});var o=n.props.date,a=o instanceof Date&&!isNaN(+o)?o:new Date;if(null===e||void 0===e?void 0:e.includes(":")){var i=e.split(":"),s=i[0],l=i[1];a.setHours(Number(s)),a.setMinutes(Number(l))}null===(r=(t=n.props).onChange)||void 0===r||r.call(t,a)},n.renderTimeInput=function(){var e=n.state.time,t=n.props,o=t.date,a=t.timeString,i=t.customTimeInput;return i?(0,r.cloneElement)(i,{date:o,value:e,onChange:n.onTimeChange}):r.createElement("input",{type:"time",className:"react-datepicker-time__input",placeholder:"Time",name:"time-input",ref:n.inputRef,onClick:function(){var e;null===(e=n.inputRef.current)||void 0===e||e.focus()},required:!0,value:e,onChange:function(e){n.onTimeChange(e.target.value||a)}})},n.state={time:n.props.timeString},n}return Lv(t,e),t.getDerivedStateFromProps=function(e,t){return e.timeString!==t.time?{time:e.timeString}:null},t.prototype.render=function(){return r.createElement("div",{className:"react-datepicker__input-time-container"},r.createElement("div",{className:"react-datepicker-time__caption"},this.props.timeInputLabel),r.createElement("div",{className:"react-datepicker-time__input-container"},r.createElement("div",{className:"react-datepicker-time__input"},this.renderTimeInput())))},t}(r.Component),Yg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.dayEl=(0,r.createRef)(),t.handleClick=function(e){!t.isDisabled()&&t.props.onClick&&t.props.onClick(e)},t.handleMouseEnter=function(e){!t.isDisabled()&&t.props.onMouseEnter&&t.props.onMouseEnter(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isSameDay=function(e){return ig(t.props.day,e)},t.isKeyboardSelected=function(){var e;if(t.props.disabledKeyboardNavigation)return!1;var n=t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected),r=t.props.preSelection&&t.isDisabled(t.props.preSelection);return!n&&t.isSameDayOrWeek(t.props.preSelection)&&!r},t.isDisabled=function(e){return void 0===e&&(e=t.props.day),pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(){return hg(t.props.day,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.isStartOfWeek=function(){return ig(t.props.day,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameWeek=function(e){return t.props.showWeekPicker&&ig(e,Gv(t.props.day,t.props.locale,t.props.calendarStartDay))},t.isSameDayOrWeek=function(e){return t.isSameDay(e)||t.isSameWeek(e)},t.getHighLightedClass=function(){var e=t.props,n=e.day,r=e.highlightDates;if(!r)return!1;var o=Vv(n,"MM.dd.yyyy");return r.get(o)},t.getHolidaysClass=function(){var e,n=t.props,r=n.day,o=n.holidays;if(!o)return[void 0];var a=Vv(r,"MM.dd.yyyy");return o.has(a)?[null===(e=o.get(a))||void 0===e?void 0:e.className]:[void 0]},t.isInRange=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&lg(n,r,o)},t.isInSelectingRange=function(){var e,n=t.props,r=n.day,o=n.selectsStart,a=n.selectsEnd,i=n.selectsRange,s=n.selectsDisabledDaysInRange,l=n.startDate,c=n.endDate,u=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return!(!(o||a||i)||!u||!s&&t.isDisabled())&&(o&&c&&(Op(u,c)||sg(u,c))?lg(r,u,c):(a&&l&&!c&&(Uh(u,l)||sg(u,l))||!(!i||!l||c||!Uh(u,l)&&!sg(u,l)))&&lg(r,l,u))},t.isSelectingRangeStart=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.startDate,a=n.selectsStart,i=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a?i:o)},t.isSelectingRangeEnd=function(){var e;if(!t.isInSelectingRange())return!1;var n=t.props,r=n.day,o=n.endDate,a=n.selectsEnd,i=n.selectsRange,s=null!==(e=t.props.selectingDate)&&void 0!==e?e:t.props.preSelection;return ig(r,a||i?s:o)},t.isRangeStart=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(r,n)},t.isRangeEnd=function(){var e=t.props,n=e.day,r=e.startDate,o=e.endDate;return!(!r||!o)&&ig(o,n)},t.isWeekend=function(){var e=Yh(t.props.day);return 0===e||6===e},t.isAfterMonth=function(){return void 0!==t.props.month&&(t.props.month+1)%12===xh(t.props.day)},t.isBeforeMonth=function(){return void 0!==t.props.month&&(xh(t.props.day)+1)%12===t.props.month},t.isCurrentDay=function(){return t.isSameDay(Yv())},t.isSelected=function(){var e;return t.props.selectsMultiple?null===(e=t.props.selectedDates)||void 0===e?void 0:e.some((function(e){return t.isSameDayOrWeek(e)})):t.isSameDayOrWeek(t.props.selected)},t.getClassNames=function(e){return Ld("react-datepicker__day",t.props.dayClassName?t.props.dayClassName(e):void 0,"react-datepicker__day--"+function(e,t){return Vv(e,"ddd",t)}(t.props.day),{"react-datepicker__day--disabled":t.isDisabled(),"react-datepicker__day--excluded":t.isExcluded(),"react-datepicker__day--selected":t.isSelected(),"react-datepicker__day--keyboard-selected":t.isKeyboardSelected(),"react-datepicker__day--range-start":t.isRangeStart(),"react-datepicker__day--range-end":t.isRangeEnd(),"react-datepicker__day--in-range":t.isInRange(),"react-datepicker__day--in-selecting-range":t.isInSelectingRange(),"react-datepicker__day--selecting-range-start":t.isSelectingRangeStart(),"react-datepicker__day--selecting-range-end":t.isSelectingRangeEnd(),"react-datepicker__day--today":t.isCurrentDay(),"react-datepicker__day--weekend":t.isWeekend(),"react-datepicker__day--outside-month":t.isAfterMonth()||t.isBeforeMonth()},t.getHighLightedClass(),t.getHolidaysClass())},t.getAriaLabel=function(){var e=t.props,n=e.day,r=e.ariaLabelPrefixWhenEnabled,o=void 0===r?"Choose":r,a=e.ariaLabelPrefixWhenDisabled,i=void 0===a?"Not available":a,s=t.isDisabled()||t.isExcluded()?i:o;return"".concat(s," ").concat(Vv(n,"PPPP",t.props.locale))},t.getTitle=function(){var e=t.props,n=e.day,r=e.holidays,o=void 0===r?new Map:r,a=e.excludeDates,i=Vv(n,"MM.dd.yyyy"),s=[];return o.has(i)&&s.push.apply(s,o.get(i).holidayNames),t.isExcluded()&&s.push(null===a||void 0===a?void 0:a.filter((function(e){return e instanceof Date?ig(e,n):ig(null===e||void 0===e?void 0:e.date,n)})).map((function(e){if(!(e instanceof Date))return null===e||void 0===e?void 0:e.message}))),s.join(", ")},t.getTabIndex=function(){var e=t.props.selected,n=t.props.preSelection;return(!t.props.showWeekPicker||!t.props.showWeekNumber&&t.isStartOfWeek())&&(t.isKeyboardSelected()||t.isSameDay(e)&&ig(n,e))?0:-1},t.handleFocusDay=function(){var e;t.shouldFocusDay()&&(null===(e=t.dayEl.current)||void 0===e||e.focus({preventScroll:!0}))},t.renderDayContents=function(){return t.props.monthShowsDuplicateDaysEnd&&t.isAfterMonth()||t.props.monthShowsDuplicateDaysStart&&t.isBeforeMonth()?null:t.props.renderDayContents?t.props.renderDayContents(Wh(t.props.day),t.props.day):Wh(t.props.day)},t.render=function(){return r.createElement("div",{ref:t.dayEl,className:t.getClassNames(t.props.day),onKeyDown:t.handleOnKeyDown,onClick:t.handleClick,onMouseEnter:t.props.usePointerEvent?void 0:t.handleMouseEnter,onPointerEnter:t.props.usePointerEvent?t.handleMouseEnter:void 0,tabIndex:t.getTabIndex(),"aria-label":t.getAriaLabel(),role:"option",title:t.getTitle(),"aria-disabled":t.isDisabled(),"aria-current":t.isCurrentDay()?"date":void 0,"aria-selected":t.isSelected()||t.isInRange()},t.renderDayContents(),""!==t.getTitle()&&r.createElement("span",{className:"overlay"},t.getTitle()))},t}return Lv(t,e),t.prototype.componentDidMount=function(){this.handleFocusDay()},t.prototype.componentDidUpdate=function(){this.handleFocusDay()},t.prototype.shouldFocusDay=function(){var e=!1;return 0===this.getTabIndex()&&this.isSameDay(this.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(e=!0),this.props.inline&&!this.props.shouldFocusDayInline&&(e=!1),this.isDayActiveElement()&&(e=!0),this.isDuplicateDay()&&(e=!1)),e},t.prototype.isDayActiveElement=function(){var e,t,n;return(null===(t=null===(e=this.props.containerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.contains(document.activeElement))&&(null===(n=document.activeElement)||void 0===n?void 0:n.classList.contains("react-datepicker__day"))},t.prototype.isDuplicateDay=function(){return this.props.monthShowsDuplicateDaysEnd&&this.isAfterMonth()||this.props.monthShowsDuplicateDaysStart&&this.isBeforeMonth()},t}(r.Component),Wg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.weekNumberEl=(0,r.createRef)(),t.handleClick=function(e){t.props.onClick&&t.props.onClick(e)},t.handleOnKeyDown=function(e){var n,r;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),null===(r=(n=t.props).handleOnKeyDown)||void 0===r||r.call(n,e)},t.isKeyboardSelected=function(){return!t.props.disabledKeyboardNavigation&&!ig(t.props.date,t.props.selected)&&ig(t.props.date,t.props.preSelection)},t.getTabIndex=function(){return t.props.showWeekPicker&&t.props.showWeekNumber&&(t.isKeyboardSelected()||ig(t.props.date,t.props.selected)&&ig(t.props.preSelection,t.props.selected))?0:-1},t.handleFocusWeekNumber=function(e){var n=!1;0===t.getTabIndex()&&!(null===e||void 0===e?void 0:e.isInputFocused)&&ig(t.props.date,t.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(n=!0),t.props.inline&&!t.props.shouldFocusDayInline&&(n=!1),t.props.containerRef&&t.props.containerRef.current&&t.props.containerRef.current.contains(document.activeElement)&&document.activeElement&&document.activeElement.classList.contains("react-datepicker__week-number")&&(n=!0)),n&&t.weekNumberEl.current&&t.weekNumberEl.current.focus({preventScroll:!0})},t}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{ariaLabelPrefix:"week "}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.handleFocusWeekNumber()},t.prototype.componentDidUpdate=function(e){this.handleFocusWeekNumber(e)},t.prototype.render=function(){var e=this.props,n=e.weekNumber,o=e.isWeekDisabled,a=e.ariaLabelPrefix,i=void 0===a?t.defaultProps.ariaLabelPrefix:a,s=e.onClick,l={"react-datepicker__week-number":!0,"react-datepicker__week-number--clickable":!!s&&!o,"react-datepicker__week-number--selected":!!s&&ig(this.props.date,this.props.selected)};return r.createElement("div",{ref:this.weekNumberEl,className:Ld(l),"aria-label":"".concat(i," ").concat(this.props.weekNumber),onClick:this.handleClick,onKeyDown:this.handleOnKeyDown,tabIndex:this.getTabIndex()},n)},t}(r.Component),qg=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,excludeDateIntervals:n.props.excludeDateIntervals,includeDateIntervals:n.props.includeDateIntervals,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.handleDayClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleDayMouseEnter=function(e){n.props.onDayMouseEnter&&n.props.onDayMouseEnter(e)},n.handleWeekClick=function(e,r,o){for(var a,i,s,l=new Date(e),c=0;c<7;c++){var u=new Date(e);if(u.setDate(u.getDate()+c),!n.isDisabled(u)){l=u;break}}"function"===typeof n.props.onWeekSelect&&n.props.onWeekSelect(l,r,o),n.props.showWeekPicker&&n.handleDayClick(l,o),(null!==(a=n.props.shouldCloseOnSelect)&&void 0!==a?a:t.defaultProps.shouldCloseOnSelect)&&(null===(s=(i=n.props).setOpen)||void 0===s||s.call(i,!1))},n.formatWeekNumber=function(e){return n.props.formatWeekNumber?n.props.formatWeekNumber(e):function(e){return pp(e)}(e)},n.isWeekDisabled=function(){for(var e=n.startOfWeek(),t=gp(e,6),r=new Date(e);r<=t;){if(!n.isDisabled(r))return!1;r=gp(r,1)}return!0},n.renderDays=function(){var e=n.startOfWeek(),o=[],a=n.formatWeekNumber(e);if(n.props.showWeekNumber){var i=n.props.onWeekSelect||n.props.showWeekPicker?n.handleWeekClick.bind(n,e,a):void 0;o.push(r.createElement(Wg,Iv({key:"W"},t.defaultProps,n.props,{weekNumber:a,isWeekDisabled:n.isWeekDisabled(),date:e,onClick:i})))}return o.concat([0,1,2,3,4,5,6].map((function(o){var a=gp(e,o);return r.createElement(Yg,Iv({},t.defaultProps,n.props,{ariaLabelPrefixWhenEnabled:n.props.chooseDayAriaLabelPrefix,ariaLabelPrefixWhenDisabled:n.props.disabledDayAriaLabelPrefix,key:a.valueOf(),day:a,onClick:n.handleDayClick.bind(n,a),onMouseEnter:n.handleDayMouseEnter.bind(n,a)}))})))},n.startOfWeek=function(){return Gv(n.props.day,n.props.locale,n.props.calendarStartDay)},n.isKeyboardSelected=function(){return!n.props.disabledKeyboardNavigation&&!ig(n.startOfWeek(),n.props.selected)&&ig(n.startOfWeek(),n.props.preSelection)},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{shouldCloseOnSelect:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e={"react-datepicker__week":!0,"react-datepicker__week--selected":ig(this.startOfWeek(),this.props.selected),"react-datepicker__week--keyboard-selected":this.isKeyboardSelected()};return r.createElement("div",{className:Ld(e)},this.renderDays())},t}(r.Component),Vg="two_columns",Qg="three_columns",Kg="four_columns",$g=((Hg={})[Vg]={grid:[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]],verticalNavigationOffset:2},Hg[Qg]={grid:[[0,1,2],[3,4,5],[6,7,8],[9,10,11]],verticalNavigationOffset:3},Hg[Kg]={grid:[[0,1,2,3],[4,5,6,7],[8,9,10,11]],verticalNavigationOffset:4},Hg);function Gg(e,t){return e?Kg:t?Vg:Qg}var Xg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.MONTH_REFS=Fv([],Array(12),!0).map((function(){return(0,r.createRef)()})),t.QUARTER_REFS=Fv([],Array(4),!0).map((function(){return(0,r.createRef)()})),t.isDisabled=function(e){return pg(e,{minDate:t.props.minDate,maxDate:t.props.maxDate,excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals,includeDateIntervals:t.props.includeDateIntervals,includeDates:t.props.includeDates,filterDate:t.props.filterDate})},t.isExcluded=function(e){return hg(e,{excludeDates:t.props.excludeDates,excludeDateIntervals:t.props.excludeDateIntervals})},t.handleDayClick=function(e,n){var r,o;null===(o=(r=t.props).onDayClick)||void 0===o||o.call(r,e,n,t.props.orderInDisplay)},t.handleDayMouseEnter=function(e){var n,r;null===(r=(n=t.props).onDayMouseEnter)||void 0===r||r.call(n,e)},t.handleMouseLeave=function(){var e,n;null===(n=(e=t.props).onMouseLeave)||void 0===n||n.call(e)},t.isRangeStartMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),o)},t.isRangeStartQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),o)},t.isRangeEndMonth=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&og(yh(r,e),a)},t.isRangeEndQuarter=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate;return!(!o||!a)&&ag(bh(r,e),a)},t.isInSelectingRangeMonth=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?vg(u,c,e,o):(i&&l||!(!s||!l||c))&&vg(l,u,e,o))},t.isSelectingMonthRangeStart=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.startDate,i=r.selectsStart,s=yh(o,e),l=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(s,i?l:a)},t.isSelectingMonthRangeEnd=function(e){var n;if(!t.isInSelectingRangeMonth(e))return!1;var r=t.props,o=r.day,a=r.endDate,i=r.selectsEnd,s=r.selectsRange,l=yh(o,e),c=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return og(l,i||s?c:a)},t.isInSelectingRangeQuarter=function(e){var n,r=t.props,o=r.day,a=r.selectsStart,i=r.selectsEnd,s=r.selectsRange,l=r.startDate,c=r.endDate,u=null!==(n=t.props.selectingDate)&&void 0!==n?n:t.props.preSelection;return!(!(a||i||s)||!u)&&(a&&c?xg(u,c,e,o):(i&&l||!(!s||!l||c))&&xg(l,u,e,o))},t.isWeekInMonth=function(e){var n=t.props.day,r=gp(e,6);return og(e,n)||og(r,n)},t.isCurrentMonth=function(e,t){return wh(e)===wh(Yv())&&t===xh(Yv())},t.isCurrentQuarter=function(e,t){return wh(e)===wh(Yv())&&t===Sh(Yv())},t.isSelectedMonth=function(e,t,n){return xh(n)===t&&wh(e)===wh(n)},t.isSelectMonthInList=function(e,n,r){return r.some((function(r){return t.isSelectedMonth(e,n,r)}))},t.isSelectedQuarter=function(e,t,n){return Sh(e)===t&&wh(e)===wh(n)},t.renderWeeks=function(){for(var e=[],n=t.props.fixedHeight,o=0,a=!1,i=Gv(Xv(t.props.day),t.props.locale,t.props.calendarStartDay),s=t.props.selected?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.selected}(t.props.selected):void 0,l=t.props.preSelection?function(e){return t.props.showWeekPicker?Gv(e,t.props.locale,t.props.calendarStartDay):t.props.preSelection}(t.props.preSelection):void 0;e.push(r.createElement(qg,Iv({},t.props,{ariaLabelPrefix:t.props.weekAriaLabelPrefix,key:o,day:i,month:xh(t.props.day),onDayClick:t.handleDayClick,onDayMouseEnter:t.handleDayMouseEnter,selected:s,preSelection:l,showWeekNumber:t.props.showWeekNumbers}))),!a;){o++,i=qh(i,1);var c=n&&o>=6,u=!n&&!t.isWeekInMonth(i);if(c||u){if(!t.props.peekNextMonth)break;a=!0}}return e},t.onMonthClick=function(e,n){var r=t.isMonthDisabledForLabelDate(n),o=r.isDisabled,a=r.labelDate;o||t.handleDayClick(Xv(a),e)},t.onMonthMouseEnter=function(e){var n=t.isMonthDisabledForLabelDate(e),r=n.isDisabled,o=n.labelDate;r||t.handleDayMouseEnter(Xv(o))},t.handleMonthNavigation=function(e,n){var r,o,a,i;null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.MONTH_REFS[e])||void 0===a?void 0:a.current)||void 0===i||i.focus()},t.handleKeyboardNavigation=function(e,n,r){var o,a=t.props,i=a.selected,s=a.preSelection,l=a.setPreSelection,c=a.minDate,u=a.maxDate,d=a.showFourColumnMonthYearPicker,f=a.showTwoColumnMonthYearPicker;if(s){var p=Gg(d,f),h=t.getVerticalOffset(p),m=null===(o=$g[p])||void 0===o?void 0:o.grid,v=function(e,t,n){var r,o,a=t,i=n;switch(e){case zv.ArrowRight:a=jh(t,1),i=11===n?0:n+1;break;case zv.ArrowLeft:a=Dh(t,1),i=0===n?11:n-1;break;case zv.ArrowUp:a=Dh(t,h),i=(null===(r=null===m||void 0===m?void 0:m[0])||void 0===r?void 0:r.includes(n))?n+12-h:n-h;break;case zv.ArrowDown:a=jh(t,h),i=(null===(o=null===m||void 0===m?void 0:m[m.length-1])||void 0===o?void 0:o.includes(n))?n-12+h:n+h}return{newCalculatedDate:a,newCalculatedMonth:i}};if(n!==zv.Enter){var g=function(e,n,r){for(var o=e,a=!1,i=0,s=v(o,n,r),l=s.newCalculatedDate,d=s.newCalculatedMonth;!a;){if(i>=40){l=n,d=r;break}var f;if(c&&l<c)o=zv.ArrowRight,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(u&&l>u)o=zv.ArrowLeft,l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;if(gg(l,t.props))l=(f=v(o,l,d)).newCalculatedDate,d=f.newCalculatedMonth;else a=!0;i++}return{newCalculatedDate:l,newCalculatedMonth:d}}(n,s,r),y=g.newCalculatedDate,b=g.newCalculatedMonth;switch(n){case zv.ArrowRight:case zv.ArrowLeft:case zv.ArrowUp:case zv.ArrowDown:t.handleMonthNavigation(b,y)}}else t.isMonthDisabled(r)||(t.onMonthClick(e,r),null===l||void 0===l||l(i))}},t.getVerticalOffset=function(e){var t,n;return null!==(n=null===(t=$g[e])||void 0===t?void 0:t.verticalNavigationOffset)&&void 0!==n?n:0},t.onMonthKeyDown=function(e,n){var r=t.props,o=r.disabledKeyboardNavigation,a=r.handleOnMonthKeyDown,i=e.key;i!==zv.Tab&&e.preventDefault(),o||t.handleKeyboardNavigation(e,i,n),a&&a(e)},t.onQuarterClick=function(e,n){var r=bh(t.props.day,n);yg(r,t.props)||t.handleDayClick(Zv(r),e)},t.onQuarterMouseEnter=function(e){var n=bh(t.props.day,e);yg(n,t.props)||t.handleDayMouseEnter(Zv(n))},t.handleQuarterNavigation=function(e,n){var r,o,a,i;t.isDisabled(n)||t.isExcluded(n)||(null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,n),null===(i=null===(a=t.QUARTER_REFS[e-1])||void 0===a?void 0:a.current)||void 0===i||i.focus())},t.onQuarterKeyDown=function(e,n){var r,o,a=e.key;if(!t.props.disabledKeyboardNavigation)switch(a){case zv.Enter:t.onQuarterClick(e,n),null===(o=(r=t.props).setPreSelection)||void 0===o||o.call(r,t.props.selected);break;case zv.ArrowRight:if(!t.props.preSelection)break;t.handleQuarterNavigation(4===n?1:n+1,Th(t.props.preSelection,1));break;case zv.ArrowLeft:if(!t.props.preSelection)break;t.handleQuarterNavigation(1===n?4:n-1,_h(t.props.preSelection,1))}},t.isMonthDisabledForLabelDate=function(e){var n,r=t.props,o=r.day,a=r.minDate,i=r.maxDate,s=r.excludeDates,l=r.includeDates,c=yh(o,e);return{isDisabled:null!==(n=(a||i||s||l)&&mg(c,t.props))&&void 0!==n&&n,labelDate:c}},t.isMonthDisabled=function(e){return t.isMonthDisabledForLabelDate(e).isDisabled},t.getMonthClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.preSelection,s=n.monthClassName,l=s?s(yh(r,e)):void 0,c=t.getSelection();return Ld("react-datepicker__month-text","react-datepicker__month-".concat(e),l,{"react-datepicker__month-text--disabled":t.isMonthDisabled(e),"react-datepicker__month-text--selected":c?t.isSelectMonthInList(r,e,c):void 0,"react-datepicker__month-text--keyboard-selected":!t.props.disabledKeyboardNavigation&&i&&t.isSelectedMonth(r,e,i)&&!t.isMonthDisabled(e),"react-datepicker__month-text--in-selecting-range":t.isInSelectingRangeMonth(e),"react-datepicker__month-text--in-range":o&&a?vg(o,a,e,r):void 0,"react-datepicker__month-text--range-start":t.isRangeStartMonth(e),"react-datepicker__month-text--range-end":t.isRangeEndMonth(e),"react-datepicker__month-text--selecting-range-start":t.isSelectingMonthRangeStart(e),"react-datepicker__month-text--selecting-range-end":t.isSelectingMonthRangeEnd(e),"react-datepicker__month-text--today":t.isCurrentMonth(r,e)})},t.getTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=xh(t.props.preSelection),r=t.isMonthDisabledForLabelDate(n).isDisabled;return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getQuarterTabIndex=function(e){if(null==t.props.preSelection)return"-1";var n=Sh(t.props.preSelection),r=yg(t.props.day,t.props);return e!==n||r||t.props.disabledKeyboardNavigation?"-1":"0"},t.getAriaLabel=function(e){var n=t.props,r=n.chooseDayAriaLabelPrefix,o=void 0===r?"Choose":r,a=n.disabledDayAriaLabelPrefix,i=void 0===a?"Not available":a,s=n.day,l=n.locale,c=yh(s,e),u=t.isDisabled(c)||t.isExcluded(c)?i:o;return"".concat(u," ").concat(Vv(c,"MMMM yyyy",l))},t.getQuarterClassNames=function(e){var n=t.props,r=n.day,o=n.startDate,a=n.endDate,i=n.selected,s=n.minDate,l=n.maxDate,c=n.excludeDates,u=n.includeDates,d=n.filterDate,f=n.preSelection,p=n.disabledKeyboardNavigation,h=(s||l||c||u||d)&&yg(bh(r,e),t.props);return Ld("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter-text--disabled":h,"react-datepicker__quarter-text--selected":i?t.isSelectedQuarter(r,e,i):void 0,"react-datepicker__quarter-text--keyboard-selected":!p&&f&&t.isSelectedQuarter(r,e,f)&&!h,"react-datepicker__quarter-text--in-selecting-range":t.isInSelectingRangeQuarter(e),"react-datepicker__quarter-text--in-range":o&&a?xg(o,a,e,r):void 0,"react-datepicker__quarter-text--range-start":t.isRangeStartQuarter(e),"react-datepicker__quarter-text--range-end":t.isRangeEndQuarter(e),"react-datepicker__quarter-text--today":t.isCurrentQuarter(r,e)})},t.getMonthContent=function(e){var n=t.props,r=n.showFullMonthYearPicker,o=n.renderMonthContent,a=n.locale,i=n.day,s=fg(e,a),l=dg(e,a);return o?o(e,s,l,i):r?l:s},t.getQuarterContent=function(e){var n,r=t.props,o=r.renderQuarterContent,a=function(e,t){return Vv(bh(Yv(),e),"QQQ",t)}(e,r.locale);return null!==(n=null===o||void 0===o?void 0:o(e,a))&&void 0!==n?n:a},t.renderMonths=function(){var e,n=t.props,o=n.showTwoColumnMonthYearPicker,a=n.showFourColumnMonthYearPicker,i=n.day,s=n.selected,l=null===(e=$g[Gg(a,o)])||void 0===e?void 0:e.grid;return null===l||void 0===l?void 0:l.map((function(e,n){return r.createElement("div",{className:"react-datepicker__month-wrapper",key:n},e.map((function(e,n){return r.createElement("div",{ref:t.MONTH_REFS[e],key:n,onClick:function(n){t.onMonthClick(n,e)},onKeyDown:function(n){Bg(n)&&(n.preventDefault(),n.key=zv.Enter),t.onMonthKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onMonthMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onMonthMouseEnter(e)}:void 0,tabIndex:Number(t.getTabIndex(e)),className:t.getMonthClassNames(e),"aria-disabled":t.isMonthDisabled(e),role:"option","aria-label":t.getAriaLabel(e),"aria-current":t.isCurrentMonth(i,e)?"date":void 0,"aria-selected":s?t.isSelectedMonth(i,e,s):void 0},t.getMonthContent(e))})))}))},t.renderQuarters=function(){var e=t.props,n=e.day,o=e.selected;return r.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(e,a){return r.createElement("div",{key:a,ref:t.QUARTER_REFS[a],role:"option",onClick:function(n){t.onQuarterClick(n,e)},onKeyDown:function(n){t.onQuarterKeyDown(n,e)},onMouseEnter:t.props.usePointerEvent?void 0:function(){return t.onQuarterMouseEnter(e)},onPointerEnter:t.props.usePointerEvent?function(){return t.onQuarterMouseEnter(e)}:void 0,className:t.getQuarterClassNames(e),"aria-selected":o?t.isSelectedQuarter(n,e,o):void 0,tabIndex:Number(t.getQuarterTabIndex(e)),"aria-current":t.isCurrentQuarter(n,e)?"date":void 0},t.getQuarterContent(e))})))},t.getClassNames=function(){var e=t.props,n=e.selectingDate,r=e.selectsStart,o=e.selectsEnd;return Ld("react-datepicker__month",{"react-datepicker__month--selecting-range":n&&(r||o)},{"react-datepicker__monthPicker":e.showMonthYearPicker},{"react-datepicker__quarterPicker":e.showQuarterYearPicker},{"react-datepicker__weekPicker":e.showWeekPicker})},t}return Lv(t,e),t.prototype.getSelection=function(){var e=this.props,t=e.selected,n=e.selectedDates;return e.selectsMultiple?n:t?[t]:void 0},t.prototype.render=function(){var e=this.props,t=e.showMonthYearPicker,n=e.showQuarterYearPicker,o=e.day,a=e.ariaLabelPrefix,i=void 0===a?"Month ":a,s=i?i.trim()+" ":"";return r.createElement("div",{className:this.getClassNames(),onMouseLeave:this.props.usePointerEvent?void 0:this.handleMouseLeave,onPointerLeave:this.props.usePointerEvent?this.handleMouseLeave:void 0,"aria-label":"".concat(s).concat(Vv(o,"MMMM, yyyy",this.props.locale)),role:"listbox"},t?this.renderMonths():n?this.renderQuarters():this.renderWeeks())},t}(r.Component),Jg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.isSelectedMonth=function(e){return t.props.month===e},t.renderOptions=function(){return t.props.monthNames.map((function(e,n){return r.createElement("div",{className:t.isSelectedMonth(n)?"react-datepicker__month-option react-datepicker__month-option--selected_month":"react-datepicker__month-option",key:e,onClick:t.onChange.bind(t,n),"aria-selected":t.isSelectedMonth(n)?"true":void 0},t.isSelectedMonth(n)?r.createElement("span",{className:"react-datepicker__month-option--selected"},"\u2713"):"",e)}))},t.onChange=function(e){return t.props.onChange(e)},t.handleClickOutside=function(){return t.props.onCancel()},t}return Lv(t,e),t.prototype.render=function(){return r.createElement(Hv,{className:"react-datepicker__month-dropdown",onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),Zg=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(e){return e.map((function(e,t){return r.createElement("option",{key:e,value:t},e)}))},t.renderSelectMode=function(e){return r.createElement("select",{value:t.props.month,className:"react-datepicker__month-select",onChange:function(e){return t.onChange(parseInt(e.target.value))}},t.renderSelectOptions(e))},t.renderReadView=function(e,n){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},n[t.props.month]))},t.renderDropdown=function(e){return r.createElement(Jg,Iv({key:"dropdown"},t.props,{monthNames:e,onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(e){var n=t.state.dropdownVisible,r=[t.renderReadView(!n,e)];return n&&r.unshift(t.renderDropdown(e)),r},t.onChange=function(e){t.toggleDropdown(),e!==t.props.month&&t.props.onChange(e)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e,t=this,n=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(e){return fg(e,t.props.locale)}:function(e){return dg(e,t.props.locale)});switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode(n);break;case"select":e=this.renderSelectMode(n)}return r.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component);function ey(e,t){for(var n=[],r=Xv(e),o=Xv(t);!Uh(r,o);)n.push(Yv(r)),r=jh(r,1);return n}var ty=function(e){function t(t){var n=e.call(this,t)||this;return n.renderOptions=function(){return n.state.monthYearsList.map((function(e){var t=Vh(e),o=rg(n.props.date,e)&&og(n.props.date,e);return r.createElement("div",{className:o?"react-datepicker__month-year-option--selected_month-year":"react-datepicker__month-year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":o?"true":void 0},o?r.createElement("span",{className:"react-datepicker__month-year-option--selected"},"\u2713"):"",Vv(e,n.props.dateFormat,n.props.locale))}))},n.onChange=function(e){return n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.state={monthYearsList:ey(n.props.minDate,n.props.maxDate)},n}return Lv(t,e),t.prototype.render=function(){var e=Ld({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return r.createElement(Hv,{className:e,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),ny=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=Xv(t.props.minDate),n=Xv(t.props.maxDate),o=[];!Uh(e,n);){var a=Vh(e);o.push(r.createElement("option",{key:a,value:a},Vv(e,t.props.dateFormat,t.props.locale))),e=jh(e,1)}return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:Vh(Xv(t.props.date)),className:"react-datepicker__month-year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){var n=Vv(t.props.date,t.props.dateFormat,t.props.locale);return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:t.toggleDropdown},r.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},n))},t.renderDropdown=function(){return r.createElement(ty,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown();var n=Yv(e);rg(t.props.date,n)&&og(t.props.date,n)||t.props.onChange(n)},t.toggleDropdown=function(){return t.setState({dropdownVisible:!t.state.dropdownVisible})},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ry=function(e){function t(){var n=null!==e&&e.apply(this,arguments)||this;return n.state={height:null},n.scrollToTheSelectedTime=function(){requestAnimationFrame((function(){var e,r,o;n.list&&(n.list.scrollTop=null!==(o=n.centerLi&&t.calcCenterPosition(n.props.monthRef?n.props.monthRef.clientHeight-(null!==(r=null===(e=n.header)||void 0===e?void 0:e.clientHeight)&&void 0!==r?r:0):n.list.clientHeight,n.centerLi))&&void 0!==o?o:0)}))},n.handleClick=function(e){var t,r;(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)||null===(r=(t=n.props).onChange)||void 0===r||r.call(t,e)},n.isSelectedTime=function(e){return n.props.selected&&(t=n.props.selected,r=e,Ig(t).getTime()===Ig(r).getTime());var t,r},n.isDisabledTime=function(e){return(n.props.minTime||n.props.maxTime)&&Cg(e,n.props)||(n.props.excludeTimes||n.props.includeTimes||n.props.filterTime)&&Eg(e,n.props)},n.liClasses=function(e){var r,o=["react-datepicker__time-list-item",n.props.timeClassName?n.props.timeClassName(e):void 0];return n.isSelectedTime(e)&&o.push("react-datepicker__time-list-item--selected"),n.isDisabledTime(e)&&o.push("react-datepicker__time-list-item--disabled"),n.props.injectTimes&&(3600*Eh(e)+60*Ch(e)+Nh(e))%(60*(null!==(r=n.props.intervals)&&void 0!==r?r:t.defaultProps.intervals))!==0&&o.push("react-datepicker__time-list-item--injected"),o.join(" ")},n.handleOnKeyDown=function(e,t){var r,o;e.key===zv.Space&&(e.preventDefault(),e.key=zv.Enter),(e.key===zv.ArrowUp||e.key===zv.ArrowLeft)&&e.target instanceof HTMLElement&&e.target.previousSibling&&(e.preventDefault(),e.target.previousSibling instanceof HTMLElement&&e.target.previousSibling.focus()),(e.key===zv.ArrowDown||e.key===zv.ArrowRight)&&e.target instanceof HTMLElement&&e.target.nextSibling&&(e.preventDefault(),e.target.nextSibling instanceof HTMLElement&&e.target.nextSibling.focus()),e.key===zv.Enter&&n.handleClick(t),null===(o=(r=n.props).handleOnKeyDown)||void 0===o||o.call(r,e)},n.renderTimes=function(){for(var e,o=[],a="string"===typeof n.props.format?n.props.format:"p",i=null!==(e=n.props.intervals)&&void 0!==e?e:t.defaultProps.intervals,s=n.props.selected||n.props.openToDate||Yv(),l=$v(s),c=n.props.injectTimes&&n.props.injectTimes.sort((function(e,t){return e.getTime()-t.getTime()})),u=60*function(e){var t=new Date(e.getFullYear(),e.getMonth(),e.getDate()),n=new Date(e.getFullYear(),e.getMonth(),e.getDate(),24);return Math.round((+n-+t)/36e5)}(s),d=u/i,f=0;f<d;f++){var p=Bh(l,f*i);if(o.push(p),c){var h=Rg(l,p,f,i,c);o=o.concat(h)}}var m=o.reduce((function(e,t){return t.getTime()<=s.getTime()?t:e}),o[0]);return o.map((function(e){return r.createElement("li",{key:e.valueOf(),onClick:n.handleClick.bind(n,e),className:n.liClasses(e),ref:function(t){e===m&&(n.centerLi=t)},onKeyDown:function(t){n.handleOnKeyDown(t,e)},tabIndex:e===m?0:-1,role:"option","aria-selected":n.isSelectedTime(e)?"true":void 0,"aria-disabled":n.isDisabledTime(e)?"true":void 0},Vv(e,a,n.props.locale))}))},n.renderTimeCaption=function(){return!1===n.props.showTimeCaption?r.createElement(r.Fragment,null):r.createElement("div",{className:"react-datepicker__header react-datepicker__header--time ".concat(n.props.showTimeSelectOnly?"react-datepicker__header--time--only":""),ref:function(e){n.header=e}},r.createElement("div",{className:"react-datepicker-time__header"},n.props.timeCaption))},n}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{intervals:30,todayButton:null,timeCaption:"Time",showTimeCaption:!0}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){this.scrollToTheSelectedTime(),this.observeDatePickerHeightChanges()},t.prototype.componentWillUnmount=function(){var e;null===(e=this.resizeObserver)||void 0===e||e.disconnect()},t.prototype.observeDatePickerHeightChanges=function(){var e=this,t=this.props.monthRef;this.updateContainerHeight(),t&&(this.resizeObserver=new ResizeObserver((function(){e.updateContainerHeight()})),this.resizeObserver.observe(t))},t.prototype.updateContainerHeight=function(){this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight})},t.prototype.render=function(){var e,n=this,o=this.state.height;return r.createElement("div",{className:"react-datepicker__time-container ".concat((null!==(e=this.props.todayButton)&&void 0!==e?e:t.defaultProps.todayButton)?"react-datepicker__time-container--with-today-button":"")},this.renderTimeCaption(),r.createElement("div",{className:"react-datepicker__time"},r.createElement("div",{className:"react-datepicker__time-box"},r.createElement("ul",{className:"react-datepicker__time-list",ref:function(e){n.list=e},style:o?{height:o}:{},role:"listbox","aria-label":this.props.timeCaption},this.renderTimes()))))},t.calcCenterPosition=function(e,t){return t.offsetTop-(e/2-t.clientHeight/2)},t}(r.Component),oy=function(e){function t(t){var n=e.call(this,t)||this;return n.YEAR_REFS=Fv([],Array(n.props.yearItemNumber),!0).map((function(){return(0,r.createRef)()})),n.isDisabled=function(e){return pg(e,{minDate:n.props.minDate,maxDate:n.props.maxDate,excludeDates:n.props.excludeDates,includeDates:n.props.includeDates,filterDate:n.props.filterDate})},n.isExcluded=function(e){return hg(e,{excludeDates:n.props.excludeDates})},n.selectingDate=function(){var e;return null!==(e=n.props.selectingDate)&&void 0!==e?e:n.props.preSelection},n.updateFocusOnPaginate=function(e){window.requestAnimationFrame((function(){var t,r;null===(r=null===(t=n.YEAR_REFS[e])||void 0===t?void 0:t.current)||void 0===r||r.focus()}))},n.handleYearClick=function(e,t){n.props.onDayClick&&n.props.onDayClick(e,t)},n.handleYearNavigation=function(e,t){var r,o,a,i,s=n.props,l=s.date,c=s.yearItemNumber;if(void 0!==l&&void 0!==c){var u=Lg(l,c).startPeriod;n.isDisabled(t)||n.isExcluded(t)||(null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,t),e-u<0?n.updateFocusOnPaginate(c-(u-e)):e-u>=c?n.updateFocusOnPaginate(Math.abs(c-(e-u))):null===(i=null===(a=n.YEAR_REFS[e-u])||void 0===a?void 0:a.current)||void 0===i||i.focus())}},n.isSameDay=function(e,t){return ig(e,t)},n.isCurrentYear=function(e){return e===wh(Yv())},n.isRangeStart=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.startDate)},n.isRangeEnd=function(e){return n.props.startDate&&n.props.endDate&&rg(Qh(Yv(),e),n.props.endDate)},n.isInRange=function(e){return bg(e,n.props.startDate,n.props.endDate)},n.isInSelectingRange=function(e){var t=n.props,r=t.selectsStart,o=t.selectsEnd,a=t.selectsRange,i=t.startDate,s=t.endDate;return!(!(r||o||a)||!n.selectingDate())&&(r&&s?bg(e,n.selectingDate(),s):(o&&i||!(!a||!i||s))&&bg(e,i,n.selectingDate()))},n.isSelectingRangeStart=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.startDate,a=r.selectsStart,i=Qh(Yv(),e);return rg(i,a?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isSelectingRangeEnd=function(e){var t;if(!n.isInSelectingRange(e))return!1;var r=n.props,o=r.endDate,a=r.selectsEnd,i=r.selectsRange,s=Qh(Yv(),e);return rg(s,a||i?null!==(t=n.selectingDate())&&void 0!==t?t:null:null!==o&&void 0!==o?o:null)},n.isKeyboardSelected=function(e){if(void 0!==n.props.date&&null!=n.props.selected&&null!=n.props.preSelection){var t=n.props,r=t.minDate,o=t.maxDate,a=t.excludeDates,i=t.includeDates,s=t.filterDate,l=Jv(Qh(n.props.date,e)),c=(r||o||a||i||s)&&wg(e,n.props);return!n.props.disabledKeyboardNavigation&&!n.props.inline&&!ig(l,Jv(n.props.selected))&&ig(l,Jv(n.props.preSelection))&&!c}},n.isSelectedYear=function(e){var t=n.props,r=t.selectsMultiple,o=t.selected,a=t.selectedDates;return r?null===a||void 0===a?void 0:a.some((function(t){return e===wh(t)})):!o||e===wh(o)},n.onYearClick=function(e,t){var r=n.props.date;void 0!==r&&n.handleYearClick(Jv(Qh(r,t)),e)},n.onYearKeyDown=function(e,t){var r,o,a=e.key,i=n.props,s=i.date,l=i.yearItemNumber,c=i.handleOnKeyDown;if(a!==zv.Tab&&e.preventDefault(),!n.props.disabledKeyboardNavigation)switch(a){case zv.Enter:if(null==n.props.selected)break;n.onYearClick(e,t),null===(o=(r=n.props).setPreSelection)||void 0===o||o.call(r,n.props.selected);break;case zv.ArrowRight:if(null==n.props.preSelection)break;n.handleYearNavigation(t+1,Mh(n.props.preSelection,1));break;case zv.ArrowLeft:if(null==n.props.preSelection)break;n.handleYearNavigation(t-1,Rh(n.props.preSelection,1));break;case zv.ArrowUp:if(void 0===s||void 0===l||null==n.props.preSelection)break;var u=Lg(s,l).startPeriod;if((p=t-(f=3))<u){var d=l%f;t>=u&&t<u+d?f=d:f+=d,p=t-f}n.handleYearNavigation(p,Rh(n.props.preSelection,f));break;case zv.ArrowDown:if(void 0===s||void 0===l||null==n.props.preSelection)break;var f,p,h=Lg(s,l).endPeriod;if((p=t+(f=3))>h){d=l%f;t<=h&&t>h-d?f=d:f+=d,p=t+f}n.handleYearNavigation(p,Mh(n.props.preSelection,f))}c&&c(e)},n.getYearClassNames=function(e){var t=n.props,r=t.date,o=t.minDate,a=t.maxDate,i=t.excludeDates,s=t.includeDates,l=t.filterDate,c=t.yearClassName;return Ld("react-datepicker__year-text","react-datepicker__year-".concat(e),r?null===c||void 0===c?void 0:c(Qh(r,e)):void 0,{"react-datepicker__year-text--selected":n.isSelectedYear(e),"react-datepicker__year-text--disabled":(o||a||i||s||l)&&wg(e,n.props),"react-datepicker__year-text--keyboard-selected":n.isKeyboardSelected(e),"react-datepicker__year-text--range-start":n.isRangeStart(e),"react-datepicker__year-text--range-end":n.isRangeEnd(e),"react-datepicker__year-text--in-range":n.isInRange(e),"react-datepicker__year-text--in-selecting-range":n.isInSelectingRange(e),"react-datepicker__year-text--selecting-range-start":n.isSelectingRangeStart(e),"react-datepicker__year-text--selecting-range-end":n.isSelectingRangeEnd(e),"react-datepicker__year-text--today":n.isCurrentYear(e)})},n.getYearTabIndex=function(e){if(n.props.disabledKeyboardNavigation||null==n.props.preSelection)return"-1";var t=wh(n.props.preSelection),r=wg(e,n.props);return e!==t||r?"-1":"0"},n.getYearContent=function(e){return n.props.renderYearContent?n.props.renderYearContent(e):e},n}return Lv(t,e),t.prototype.render=function(){var e=this,t=[],n=this.props,o=n.date,a=n.yearItemNumber,i=n.onYearMouseEnter,s=n.onYearMouseLeave;if(void 0===o)return null;for(var l=Lg(o,a),c=l.startPeriod,u=l.endPeriod,d=function(n){t.push(r.createElement("div",{ref:f.YEAR_REFS[n-c],onClick:function(t){e.onYearClick(t,n)},onKeyDown:function(t){Bg(t)&&(t.preventDefault(),t.key=zv.Enter),e.onYearKeyDown(t,n)},tabIndex:Number(f.getYearTabIndex(n)),className:f.getYearClassNames(n),onMouseEnter:f.props.usePointerEvent?void 0:function(e){return i(e,n)},onPointerEnter:f.props.usePointerEvent?function(e){return i(e,n)}:void 0,onMouseLeave:f.props.usePointerEvent?void 0:function(e){return s(e,n)},onPointerLeave:f.props.usePointerEvent?function(e){return s(e,n)}:void 0,key:n,"aria-current":f.isCurrentYear(n)?"date":void 0},f.getYearContent(n)))},f=this,p=c;p<=u;p++)d(p);return r.createElement("div",{className:"react-datepicker__year"},r.createElement("div",{className:"react-datepicker__year-wrapper",onMouseLeave:this.props.usePointerEvent?void 0:this.props.clearSelectingDate,onPointerLeave:this.props.usePointerEvent?this.props.clearSelectingDate:void 0},t))},t}(r.Component);function ay(e,t,n,r){for(var o=[],a=0;a<2*t+1;a++){var i=e+t-a,s=!0;n&&(s=wh(n)<=i),r&&s&&(s=wh(r)>=i),s&&o.push(i)}return o}var iy=function(e){function t(t){var n=e.call(this,t)||this;n.renderOptions=function(){var e=n.props.year,t=n.state.yearsList.map((function(t){return r.createElement("div",{className:e===t?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:t,onClick:n.onChange.bind(n,t),"aria-selected":e===t?"true":void 0},e===t?r.createElement("span",{className:"react-datepicker__year-option--selected"},"\u2713"):"",t)})),o=n.props.minDate?wh(n.props.minDate):null,a=n.props.maxDate?wh(n.props.maxDate):null;return a&&n.state.yearsList.find((function(e){return e===a}))||t.unshift(r.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:n.incrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),o&&n.state.yearsList.find((function(e){return e===o}))||t.push(r.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:n.decrementYears},r.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),t},n.onChange=function(e){n.props.onChange(e)},n.handleClickOutside=function(){n.props.onCancel()},n.shiftYears=function(e){var t=n.state.yearsList.map((function(t){return t+e}));n.setState({yearsList:t})},n.incrementYears=function(){return n.shiftYears(1)},n.decrementYears=function(){return n.shiftYears(-1)};var o=t.yearDropdownItemNumber,a=t.scrollableYearDropdown,i=o||(a?10:5);return n.state={yearsList:ay(n.props.year,i,n.props.minDate,n.props.maxDate)},n.dropdownRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.componentDidMount=function(){var e=this.dropdownRef.current;if(e){var t=e.children?Array.from(e.children):null,n=t?t.find((function(e){return e.ariaSelected})):null;e.scrollTop=n&&n instanceof HTMLElement?n.offsetTop+(n.clientHeight-e.clientHeight)/2:(e.scrollHeight-e.clientHeight)/2}},t.prototype.render=function(){var e=Ld({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return r.createElement(Hv,{className:e,containerRef:this.dropdownRef,onClickOutside:this.handleClickOutside},this.renderOptions())},t}(r.Component),sy=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={dropdownVisible:!1},t.renderSelectOptions=function(){for(var e=t.props.minDate?wh(t.props.minDate):1900,n=t.props.maxDate?wh(t.props.maxDate):2100,o=[],a=e;a<=n;a++)o.push(r.createElement("option",{key:a,value:a},a));return o},t.onSelectChange=function(e){t.onChange(parseInt(e.target.value))},t.renderSelectMode=function(){return r.createElement("select",{value:t.props.year,className:"react-datepicker__year-select",onChange:t.onSelectChange},t.renderSelectOptions())},t.renderReadView=function(e){return r.createElement("div",{key:"read",style:{visibility:e?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function(e){return t.toggleDropdown(e)}},r.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),r.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},t.props.year))},t.renderDropdown=function(){return r.createElement(iy,Iv({key:"dropdown"},t.props,{onChange:t.onChange,onCancel:t.toggleDropdown}))},t.renderScrollMode=function(){var e=t.state.dropdownVisible,n=[t.renderReadView(!e)];return e&&n.unshift(t.renderDropdown()),n},t.onChange=function(e){t.toggleDropdown(),e!==t.props.year&&t.props.onChange(e)},t.toggleDropdown=function(e){t.setState({dropdownVisible:!t.state.dropdownVisible},(function(){t.props.adjustDateOnChange&&t.handleYearChange(t.props.date,e)}))},t.handleYearChange=function(e,n){var r;null===(r=t.onSelect)||void 0===r||r.call(t,e,n),t.setOpen()},t.onSelect=function(e,n){var r,o;null===(o=(r=t.props).onSelect)||void 0===o||o.call(r,e,n)},t.setOpen=function(){var e,n;null===(n=(e=t.props).setOpen)||void 0===n||n.call(e,!0)},t}return Lv(t,e),t.prototype.render=function(){var e;switch(this.props.dropdownMode){case"scroll":e=this.renderScrollMode();break;case"select":e=this.renderSelectMode()}return r.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--".concat(this.props.dropdownMode)},e)},t}(r.Component),ly=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],cy=function(e){function t(n){var o=e.call(this,n)||this;return o.monthContainer=void 0,o.handleClickOutside=function(e){o.props.onClickOutside(e)},o.setClickOutsideRef=function(){return o.containerRef.current},o.handleDropdownFocus=function(e){var t,n;(function(e){var t=(e.className||"").split(/\s+/);return ly.some((function(e){return t.indexOf(e)>=0}))})(e.target)&&(null===(n=(t=o.props).onDropdownFocus)||void 0===n||n.call(t,e))},o.getDateInView=function(){var e=o.props,t=e.preSelection,n=e.selected,r=e.openToDate,a=Tg(o.props),i=_g(o.props),s=Yv(),l=r||n||t;return l||(a&&Op(s,a)?a:i&&Uh(s,i)?i:s)},o.increaseMonth=function(){o.setState((function(e){return{date:jh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.decreaseMonth=function(){o.setState((function(e){return{date:Dh(e.date,1)}}),(function(){return o.handleMonthChange(o.state.date)}))},o.handleDayClick=function(e,t,n){o.props.onSelect(e,t,n),o.props.setPreSelection&&o.props.setPreSelection(e)},o.handleDayMouseEnter=function(e){o.setState({selectingDate:e}),o.props.onDayMouseEnter&&o.props.onDayMouseEnter(e)},o.handleMonthMouseLeave=function(){o.setState({selectingDate:void 0}),o.props.onMonthMouseLeave&&o.props.onMonthMouseLeave()},o.handleYearMouseEnter=function(e,t){o.setState({selectingDate:Qh(Yv(),t)}),o.props.onYearMouseEnter&&o.props.onYearMouseEnter(e,t)},o.handleYearMouseLeave=function(e,t){o.props.onYearMouseLeave&&o.props.onYearMouseLeave(e,t)},o.handleYearChange=function(e){var t,n,r,a;null===(n=(t=o.props).onYearChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0}),o.props.adjustDateOnChange&&(o.props.onSelect(e),null===(a=(r=o.props).setOpen)||void 0===a||a.call(r,!0)),o.props.setPreSelection&&o.props.setPreSelection(e)},o.getEnabledPreSelectionDateForMonth=function(e){if(!pg(e,o.props))return e;for(var t=Xv(e),n=Kh(ng(e),t),r=null,a=0;a<=n;a++){var i=gp(t,a);if(!pg(i,o.props)){r=i;break}}return r},o.handleMonthChange=function(e){var t,n,r,a=null!==(t=o.getEnabledPreSelectionDateForMonth(e))&&void 0!==t?t:e;o.handleCustomMonthChange(a),o.props.adjustDateOnChange&&(o.props.onSelect(a),null===(r=(n=o.props).setOpen)||void 0===r||r.call(n,!0)),o.props.setPreSelection&&o.props.setPreSelection(a)},o.handleCustomMonthChange=function(e){var t,n;null===(n=(t=o.props).onMonthChange)||void 0===n||n.call(t,e),o.setState({isRenderAriaLiveMessage:!0})},o.handleMonthYearChange=function(e){o.handleYearChange(e),o.handleMonthChange(e)},o.changeYear=function(e){o.setState((function(t){return{date:Qh(t.date,Number(e))}}),(function(){return o.handleYearChange(o.state.date)}))},o.changeMonth=function(e){o.setState((function(t){return{date:yh(t.date,Number(e))}}),(function(){return o.handleMonthChange(o.state.date)}))},o.changeMonthYear=function(e){o.setState((function(t){return{date:Qh(yh(t.date,xh(e)),wh(e))}}),(function(){return o.handleMonthYearChange(o.state.date)}))},o.header=function(e){void 0===e&&(e=o.state.date);var t=Gv(e,o.props.locale,o.props.calendarStartDay),n=[];return o.props.showWeekNumbers&&n.push(r.createElement("div",{key:"W",className:"react-datepicker__day-name"},o.props.weekLabel||"#")),n.concat([0,1,2,3,4,5,6].map((function(e){var n=gp(t,e),a=o.formatWeekday(n,o.props.locale),i=o.props.weekDayClassName?o.props.weekDayClassName(n):void 0;return r.createElement("div",{key:e,"aria-label":Vv(n,"EEEE",o.props.locale),className:Ld("react-datepicker__day-name",i)},a)})))},o.formatWeekday=function(e,t){return o.props.formatWeekDay?function(e,t,n){return t(Vv(e,"EEEE",n))}(e,o.props.formatWeekDay,t):o.props.useWeekdaysShort?function(e,t){return Vv(e,"EEE",t)}(e,t):function(e,t){return Vv(e,"EEEEEE",t)}(e,t)},o.decreaseYear=function(){o.setState((function(e){var n;return{date:Rh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.clearSelectingDate=function(){o.setState({selectingDate:void 0})},o.renderPreviousButton=function(){var e,n,a;if(!o.props.renderCustomHeader){var i,s=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,l=o.props.showPreviousMonths?s-1:0,c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:l,u=Dh(o.state.date,c);switch(!0){case o.props.showMonthYearPicker:i=Dg(o.state.date,o.props);break;case o.props.showYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Jv(Rh(e,a)),a).endPeriod,s=r&&wh(r);return s&&s>i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:i=function(e,t){var n=void 0===t?{}:t,r=n.minDate,o=n.includeDates,a=_h(Lp(e),1);return r&&Oh(r,a)>0||o&&o.every((function(e){return Oh(e,a)>0}))||!1}(o.state.date,o.props);break;default:i=Ng(u,o.props)}if(((null!==(a=o.props.forceShowMonthNavigation)&&void 0!==a?a:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!i)&&!o.props.showTimeSelectOnly){var d=["react-datepicker__navigation","react-datepicker__navigation--previous"],f=o.decreaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(f=o.decreaseYear),i&&o.props.showDisabledMonthNavigation&&(d.push("react-datepicker__navigation--previous--disabled"),f=void 0);var p=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,h=o.props,m=h.previousMonthButtonLabel,v=void 0===m?t.defaultProps.previousMonthButtonLabel:m,g=h.previousYearButtonLabel,y=void 0===g?t.defaultProps.previousYearButtonLabel:g,b=o.props,w=b.previousMonthAriaLabel,x=void 0===w?"string"===typeof v?v:"Previous Month":w,k=b.previousYearAriaLabel,S=void 0===k?"string"===typeof y?y:"Previous Year":k;return r.createElement("button",{type:"button",className:d.join(" "),onClick:f,onKeyDown:o.props.handleOnKeyDown,"aria-label":p?S:x},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--previous"].join(" ")},p?y:v))}}},o.increaseYear=function(){o.setState((function(e){var n;return{date:Mh(e.date,o.props.showYearPicker?null!==(n=o.props.yearItemNumber)&&void 0!==n?n:t.defaultProps.yearItemNumber:1)}}),(function(){return o.handleYearChange(o.state.date)}))},o.renderNextButton=function(){var e;if(!o.props.renderCustomHeader){var n;switch(!0){case o.props.showMonthYearPicker:n=Pg(o.state.date,o.props);break;case o.props.showYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.yearItemNumber,a=void 0===o?12:o,i=Lg(Mh(e,a),a).startPeriod,s=r&&wh(r);return s&&s<i||!1}(o.state.date,o.props);break;case o.props.showQuarterYearPicker:n=function(e,t){var n=void 0===t?{}:t,r=n.maxDate,o=n.includeDates,a=Th(kh(e),1);return r&&Oh(a,r)>0||o&&o.every((function(e){return Oh(a,e)>0}))||!1}(o.state.date,o.props);break;default:n=jg(o.state.date,o.props)}if(((null!==(e=o.props.forceShowMonthNavigation)&&void 0!==e?e:t.defaultProps.forceShowMonthNavigation)||o.props.showDisabledMonthNavigation||!n)&&!o.props.showTimeSelectOnly){var a=["react-datepicker__navigation","react-datepicker__navigation--next"];o.props.showTimeSelect&&a.push("react-datepicker__navigation--next--with-time"),o.props.todayButton&&a.push("react-datepicker__navigation--next--with-today-button");var i=o.increaseMonth;(o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker)&&(i=o.increaseYear),n&&o.props.showDisabledMonthNavigation&&(a.push("react-datepicker__navigation--next--disabled"),i=void 0);var s=o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker,l=o.props,c=l.nextMonthButtonLabel,u=void 0===c?t.defaultProps.nextMonthButtonLabel:c,d=l.nextYearButtonLabel,f=void 0===d?t.defaultProps.nextYearButtonLabel:d,p=o.props,h=p.nextMonthAriaLabel,m=void 0===h?"string"===typeof u?u:"Next Month":h,v=p.nextYearAriaLabel,g=void 0===v?"string"===typeof f?f:"Next Year":v;return r.createElement("button",{type:"button",className:a.join(" "),onClick:i,onKeyDown:o.props.handleOnKeyDown,"aria-label":s?g:m},r.createElement("span",{className:["react-datepicker__navigation-icon","react-datepicker__navigation-icon--next"].join(" ")},s?f:u))}}},o.renderCurrentMonth=function(e){void 0===e&&(e=o.state.date);var t=["react-datepicker__current-month"];return o.props.showYearDropdown&&t.push("react-datepicker__current-month--hasYearDropdown"),o.props.showMonthDropdown&&t.push("react-datepicker__current-month--hasMonthDropdown"),o.props.showMonthYearDropdown&&t.push("react-datepicker__current-month--hasMonthYearDropdown"),r.createElement("h2",{className:t.join(" ")},Vv(e,o.props.dateFormat,o.props.locale))},o.renderYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showYearDropdown&&!e)return r.createElement(sy,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeYear,year:wh(o.state.date)}))},o.renderMonthDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthDropdown&&!e)return r.createElement(Zg,Iv({},t.defaultProps,o.props,{month:xh(o.state.date),onChange:o.changeMonth}))},o.renderMonthYearDropdown=function(e){if(void 0===e&&(e=!1),o.props.showMonthYearDropdown&&!e)return r.createElement(ny,Iv({},t.defaultProps,o.props,{date:o.state.date,onChange:o.changeMonthYear}))},o.handleTodayButtonClick=function(e){o.props.onSelect(eg(),e),o.props.setPreSelection&&o.props.setPreSelection(eg())},o.renderTodayButton=function(){if(o.props.todayButton&&!o.props.showTimeSelectOnly)return r.createElement("div",{className:"react-datepicker__today-button",onClick:o.handleTodayButtonClick},o.props.todayButton)},o.renderDefaultHeader=function(e){var t=e.monthDate,n=e.i;return r.createElement("div",{className:"react-datepicker__header ".concat(o.props.showTimeSelect?"react-datepicker__header--has-time-select":"")},o.renderCurrentMonth(t),r.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(o.props.dropdownMode),onFocus:o.handleDropdownFocus},o.renderMonthDropdown(0!==n),o.renderMonthYearDropdown(0!==n),o.renderYearDropdown(0!==n)),r.createElement("div",{className:"react-datepicker__day-names"},o.header(t)))},o.renderCustomHeader=function(e){var t,n,a=e.monthDate,i=e.i;if(o.props.showTimeSelect&&!o.state.monthContainer||o.props.showTimeSelectOnly)return null;var s=Ng(o.state.date,o.props),l=jg(o.state.date,o.props),c=Dg(o.state.date,o.props),u=Pg(o.state.date,o.props),d=!o.props.showMonthYearPicker&&!o.props.showQuarterYearPicker&&!o.props.showYearPicker;return r.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:o.props.onDropdownFocus},null===(n=(t=o.props).renderCustomHeader)||void 0===n?void 0:n.call(t,Iv(Iv({},o.state),{customHeaderCount:i,monthDate:a,changeMonth:o.changeMonth,changeYear:o.changeYear,decreaseMonth:o.decreaseMonth,increaseMonth:o.increaseMonth,decreaseYear:o.decreaseYear,increaseYear:o.increaseYear,prevMonthButtonDisabled:s,nextMonthButtonDisabled:l,prevYearButtonDisabled:c,nextYearButtonDisabled:u})),d&&r.createElement("div",{className:"react-datepicker__day-names"},o.header(a)))},o.renderYearHeader=function(e){var n=e.monthDate,a=o.props,i=a.showYearPicker,s=a.yearItemNumber,l=Lg(n,void 0===s?t.defaultProps.yearItemNumber:s),c=l.startPeriod,u=l.endPeriod;return r.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},i?"".concat(c," - ").concat(u):wh(n))},o.renderHeader=function(e){var t=e.monthDate,n=e.i,r={monthDate:t,i:void 0===n?0:n};switch(!0){case void 0!==o.props.renderCustomHeader:return o.renderCustomHeader(r);case o.props.showMonthYearPicker||o.props.showQuarterYearPicker||o.props.showYearPicker:return o.renderYearHeader(r);default:return o.renderDefaultHeader(r)}},o.renderMonths=function(){var e,n;if(!o.props.showTimeSelectOnly&&!o.props.showYearPicker){for(var a=[],i=null!==(e=o.props.monthsShown)&&void 0!==e?e:t.defaultProps.monthsShown,s=o.props.showPreviousMonths?i-1:0,l=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(o.state.date,s):Dh(o.state.date,s),c=null!==(n=o.props.monthSelectedIn)&&void 0!==n?n:s,u=0;u<i;++u){var d=u-c+s,f=o.props.showMonthYearPicker||o.props.showQuarterYearPicker?Mh(l,d):jh(l,d),p="month-".concat(u),h=u<i-1,m=u>0;a.push(r.createElement("div",{key:p,ref:function(e){o.monthContainer=null!==e&&void 0!==e?e:void 0},className:"react-datepicker__month-container"},o.renderHeader({monthDate:f,i:u}),r.createElement(Xg,Iv({},t.defaultProps,o.props,{containerRef:o.containerRef,ariaLabelPrefix:o.props.monthAriaLabelPrefix,day:f,onDayClick:o.handleDayClick,handleOnKeyDown:o.props.handleOnDayKeyDown,handleOnMonthKeyDown:o.props.handleOnKeyDown,onDayMouseEnter:o.handleDayMouseEnter,onMouseLeave:o.handleMonthMouseLeave,orderInDisplay:u,selectingDate:o.state.selectingDate,monthShowsDuplicateDaysEnd:h,monthShowsDuplicateDaysStart:m}))))}return a}},o.renderYears=function(){if(!o.props.showTimeSelectOnly)return o.props.showYearPicker?r.createElement("div",{className:"react-datepicker__year--container"},o.renderHeader({monthDate:o.state.date}),r.createElement(oy,Iv({},t.defaultProps,o.props,{selectingDate:o.state.selectingDate,date:o.state.date,onDayClick:o.handleDayClick,clearSelectingDate:o.clearSelectingDate,onYearMouseEnter:o.handleYearMouseEnter,onYearMouseLeave:o.handleYearMouseLeave}))):void 0},o.renderTimeSection=function(){if(o.props.showTimeSelect&&(o.state.monthContainer||o.props.showTimeSelectOnly))return r.createElement(ry,Iv({},t.defaultProps,o.props,{onChange:o.props.onTimeChange,format:o.props.timeFormat,intervals:o.props.timeIntervals,monthRef:o.state.monthContainer}))},o.renderInputTimeSection=function(){var e=o.props.selected?new Date(o.props.selected):void 0,n=e&&qv(e)&&Boolean(o.props.selected)?"".concat(Ag(e.getHours()),":").concat(Ag(e.getMinutes())):"";if(o.props.showTimeInput)return r.createElement(Ug,Iv({},t.defaultProps,o.props,{date:e,timeString:n,onChange:o.props.onTimeChange}))},o.renderAriaLiveRegion=function(){var e,n,a=Lg(o.state.date,null!==(e=o.props.yearItemNumber)&&void 0!==e?e:t.defaultProps.yearItemNumber),i=a.startPeriod,s=a.endPeriod;return n=o.props.showYearPicker?"".concat(i," - ").concat(s):o.props.showMonthYearPicker||o.props.showQuarterYearPicker?wh(o.state.date):"".concat(dg(xh(o.state.date),o.props.locale)," ").concat(wh(o.state.date)),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},o.state.isRenderAriaLiveMessage&&n)},o.renderChildren=function(){if(o.props.children)return r.createElement("div",{className:"react-datepicker__children-container"},o.props.children)},o.containerRef=(0,r.createRef)(),o.state={date:o.getDateInView(),selectingDate:void 0,monthContainer:void 0,isRenderAriaLiveMessage:!1},o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousYearButtonLabel:"Previous Year",nextYearButtonLabel:"Next Year",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next Month",yearItemNumber:12}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){var e=this;this.props.showTimeSelect&&(this.assignMonthContainer=void e.setState({monthContainer:e.monthContainer}))},t.prototype.componentDidUpdate=function(e){var t=this;if(!this.props.preSelection||ig(this.props.preSelection,e.preSelection)&&this.props.monthSelectedIn===e.monthSelectedIn)this.props.openToDate&&!ig(this.props.openToDate,e.openToDate)&&this.setState({date:this.props.openToDate});else{var n=!og(this.state.date,this.props.preSelection);this.setState({date:this.props.preSelection},(function(){return n&&t.handleCustomMonthChange(t.state.date)}))}},t.prototype.render=function(){var e=this.props.container||Bv;return r.createElement(Hv,{onClickOutside:this.handleClickOutside,style:{display:"contents"},ignoreClass:this.props.outsideClickIgnoreClass},r.createElement("div",{style:{display:"contents"},ref:this.containerRef},r.createElement(e,{className:Ld("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly}),showTime:this.props.showTimeSelect||this.props.showTimeInput,showTimeSelectOnly:this.props.showTimeSelectOnly},this.renderAriaLiveRegion(),this.renderPreviousButton(),this.renderNextButton(),this.renderMonths(),this.renderYears(),this.renderTodayButton(),this.renderTimeSection(),this.renderInputTimeSection(),this.renderChildren())))},t}(r.Component),uy=function(e){var t=e.icon,n=e.className,o=void 0===n?"":n,a=e.onClick,i="react-datepicker__calendar-icon";if("string"===typeof t)return r.createElement("i",{className:"".concat(i," ").concat(t," ").concat(o),"aria-hidden":"true",onClick:a});if(r.isValidElement(t)){var s=t;return r.cloneElement(s,{className:"".concat(s.props.className||""," ").concat(i," ").concat(o),onClick:function(e){"function"===typeof s.props.onClick&&s.props.onClick(e),"function"===typeof a&&a(e)}})}return r.createElement("svg",{className:"".concat(i," ").concat(o),xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",onClick:a},r.createElement("path",{d:"M96 32V64H48C21.5 64 0 85.5 0 112v48H448V112c0-26.5-21.5-48-48-48H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32V64H160V32c0-17.7-14.3-32-32-32S96 14.3 96 32zM448 192H0V464c0 26.5 21.5 48 48 48H400c26.5 0 48-21.5 48-48V192z"}))},dy=function(e){function t(t){var n=e.call(this,t)||this;return n.portalRoot=null,n.el=document.createElement("div"),n}return Lv(t,e),t.prototype.componentDidMount=function(){this.portalRoot=(this.props.portalHost||document).getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),(this.props.portalHost||document.body).appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)},t.prototype.componentWillUnmount=function(){this.portalRoot&&this.portalRoot.removeChild(this.el)},t.prototype.render=function(){return i.createPortal(this.props.children,this.el)},t}(r.Component),fy=function(e){return(e instanceof HTMLAnchorElement||!e.disabled)&&-1!==e.tabIndex},py=function(e){function t(t){var n=e.call(this,t)||this;return n.getTabChildren=function(){var e;return Array.prototype.slice.call(null===(e=n.tabLoopRef.current)||void 0===e?void 0:e.querySelectorAll("[tabindex], a, button, input, select, textarea"),1,-1).filter(fy)},n.handleFocusStart=function(){var e=n.getTabChildren();e&&e.length>1&&e[e.length-1].focus()},n.handleFocusEnd=function(){var e=n.getTabChildren();e&&e.length>1&&e[0].focus()},n.tabLoopRef=(0,r.createRef)(),n}return Lv(t,e),t.prototype.render=function(){var e;return(null!==(e=this.props.enableTabLoop)&&void 0!==e?e:t.defaultProps.enableTabLoop)?r.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},r.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:0,onFocus:this.handleFocusStart}),this.props.children,r.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:0,onFocus:this.handleFocusEnd})):this.props.children},t.defaultProps={enableTabLoop:!0},t}(r.Component);var hy,my=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{hidePopper:!0}},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e=this.props,n=e.className,o=e.wrapperClassName,a=e.hidePopper,i=void 0===a?t.defaultProps.hidePopper:a,s=e.popperComponent,l=e.targetComponent,c=e.enableTabLoop,u=e.popperOnKeyDown,d=e.portalId,f=e.portalHost,p=e.popperProps,h=e.showArrow,m=void 0;if(!i){var v=Ld("react-datepicker-popper",n);m=r.createElement(py,{enableTabLoop:c},r.createElement("div",{ref:p.refs.setFloating,style:p.floatingStyles,className:v,"data-placement":p.placement,onKeyDown:u},s,h&&r.createElement(jv,{ref:p.arrowRef,context:p.context,fill:"currentColor",strokeWidth:1,height:8,width:16,style:{transform:"translateY(-1px)"},className:"react-datepicker__triangle"})))}this.props.popperContainer&&(m=(0,r.createElement)(this.props.popperContainer,{},m)),d&&!i&&(m=r.createElement(dy,{portalId:d,portalHost:f},m));var g=Ld("react-datepicker-wrapper",o);return r.createElement(r.Fragment,null,r.createElement("div",{ref:p.refs.setReference,className:g},l),m)},t}(r.Component),vy=(hy=my,function(e){var t,n,o,a="boolean"!==typeof e.hidePopper||e.hidePopper,i=(0,r.useRef)(null),s=Rv(Iv({open:!a,whileElementsMounted:nv,placement:e.popperPlacement,middleware:Fv([(n={padding:15},_e(_e({},ov(n)),{},{options:[n,o]})),fv(10),pv({element:i})],null!==(t=e.popperModifiers)&&void 0!==t?t:[],!0)},e.popperProps)),l=Iv(Iv({},e),{hidePopper:a,popperProps:Iv(Iv({},s),{arrowRef:i})});return r.createElement(hy,Iv({},l))}),gy="react-datepicker-ignore-onclickoutside";var yy="Date input not valid.",by=function(e){function t(n){var o=e.call(this,n)||this;return o.calendar=null,o.input=null,o.getPreSelection=function(){return o.props.openToDate?o.props.openToDate:o.props.selectsEnd&&o.props.startDate?o.props.startDate:o.props.selectsStart&&o.props.endDate?o.props.endDate:Yv()},o.modifyHolidays=function(){var e;return null===(e=o.props.holidays)||void 0===e?void 0:e.reduce((function(e,t){var n=new Date(t.date);return qv(n)?Fv(Fv([],e,!0),[Iv(Iv({},t),{date:n})],!1):e}),[])},o.calcInitialState=function(){var e,t=o.getPreSelection(),n=Tg(o.props),r=_g(o.props),a=n&&Op(t,$v(n))?n:r&&Uh(t,tg(r))?r:t;return{open:o.props.startOpen||!1,preventFocus:!1,inputValue:null,preSelection:null!==(e=o.props.selectsRange?o.props.startDate:o.props.selected)&&void 0!==e?e:a,highlightDates:Og(o.props.highlightDates),focused:!1,shouldFocusDayInline:!1,isRenderAriaLiveMessage:!1,wasHidden:!1}},o.resetHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!1}))},o.setHiddenStatus=function(){o.setState(Iv(Iv({},o.state),{wasHidden:!0}))},o.setHiddenStateOnVisibilityHidden=function(){"hidden"===document.visibilityState&&o.setHiddenStatus()},o.clearPreventFocusTimeout=function(){o.preventFocusTimeout&&clearTimeout(o.preventFocusTimeout)},o.setFocus=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.focus)||void 0===t||t.call(e,{preventScroll:!0})},o.setBlur=function(){var e,t;null===(t=null===(e=o.input)||void 0===e?void 0:e.blur)||void 0===t||t.call(e),o.cancelFocusInput()},o.deferBlur=function(){requestAnimationFrame((function(){o.setBlur()}))},o.setOpen=function(e,t){void 0===t&&(t=!1),o.setState({open:e,preSelection:e&&o.state.open?o.state.preSelection:o.calcInitialState().preSelection,lastPreSelectChange:xy},(function(){e||o.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&o.deferBlur(),o.setState({inputValue:null})}))}))},o.inputOk=function(){return Tp(o.state.preSelection)},o.isCalendarOpen=function(){return void 0===o.props.open?o.state.open&&!o.props.disabled&&!o.props.readOnly:o.props.open},o.handleFocus=function(e){var t,n,r=o.state.wasHidden,a=!r||o.state.open;r&&o.resetHiddenStatus(),o.state.preventFocus||(null===(n=(t=o.props).onFocus)||void 0===n||n.call(t,e),!a||o.props.preventOpenOnFocus||o.props.readOnly||o.setOpen(!0)),o.setState({focused:!0})},o.sendFocusBackToInput=function(){o.preventFocusTimeout&&o.clearPreventFocusTimeout(),o.setState({preventFocus:!0},(function(){o.preventFocusTimeout=setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))}))},o.cancelFocusInput=function(){clearTimeout(o.inputFocusTimeout),o.inputFocusTimeout=void 0},o.deferFocusInput=function(){o.cancelFocusInput(),o.inputFocusTimeout=setTimeout((function(){return o.setFocus()}),1)},o.handleDropdownFocus=function(){o.cancelFocusInput()},o.handleBlur=function(e){var t,n;(!o.state.open||o.props.withPortal||o.props.showTimeInput)&&(null===(n=(t=o.props).onBlur)||void 0===n||n.call(t,e)),o.state.open&&!1===o.props.open&&o.setOpen(!1),o.setState({focused:!1})},o.handleCalendarClickOutside=function(e){var t,n;o.props.inline||o.setOpen(!1),null===(n=(t=o.props).onClickOutside)||void 0===n||n.call(t,e),o.props.withPortal&&e.preventDefault()},o.handleChange=function(){for(var e,n,r,a,i,s=[],l=0;l<arguments.length;l++)s[l]=arguments[l];var c=s[0];if(!o.props.onChangeRaw||(o.props.onChangeRaw.apply(o,s),c&&"function"===typeof c.isDefaultPrevented&&!c.isDefaultPrevented())){o.setState({inputValue:(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:null,lastPreSelectChange:wy});var u=o.props,d=u.selectsRange,f=u.startDate,p=u.endDate,h=null!==(e=o.props.dateFormat)&&void 0!==e?e:t.defaultProps.dateFormat,m=null!==(n=o.props.strictParsing)&&void 0!==n?n:t.defaultProps.strictParsing,v=(null===c||void 0===c?void 0:c.target)instanceof HTMLInputElement?c.target.value:"";if(d){var g=v.split("-",2).map((function(e){return e.trim()})),y=g[0],b=g[1],w=Wv(null!==y&&void 0!==y?y:"",h,o.props.locale,m),x=Wv(null!==b&&void 0!==b?b:"",h,o.props.locale,m),k=(null===f||void 0===f?void 0:f.getTime())!==(null===w||void 0===w?void 0:w.getTime()),S=(null===p||void 0===p?void 0:p.getTime())!==(null===x||void 0===x?void 0:x.getTime());if(!k&&!S)return;if(w&&pg(w,o.props))return;if(x&&pg(x,o.props))return;null===(a=(r=o.props).onChange)||void 0===a||a.call(r,[w,x],c)}else{var E=Wv(v,h,o.props.locale,m,null!==(i=o.props.selected)&&void 0!==i?i:void 0);!E&&v||o.setSelected(E,c,!0)}}},o.handleSelect=function(e,t,n){if(o.props.shouldCloseOnSelect&&!o.props.showTimeSelect&&o.sendFocusBackToInput(),o.props.onChangeRaw&&o.props.onChangeRaw(t),o.setSelected(e,t,!1,n),o.props.showDateSelect&&o.setState({isRenderAriaLiveMessage:!0}),!o.props.shouldCloseOnSelect||o.props.showTimeSelect)o.setPreSelection(e);else if(!o.props.inline){o.props.selectsRange||o.setOpen(!1);var r=o.props,a=r.startDate,i=r.endDate;!a||i||!o.props.swapRange&&zg(e,a)||o.setOpen(!1)}},o.setSelected=function(e,t,n,r){var a,i,s=e;if(o.props.showYearPicker){if(null!==s&&wg(wh(s),o.props))return}else if(o.props.showMonthYearPicker){if(null!==s&&mg(s,o.props))return}else if(null!==s&&pg(s,o.props))return;var l=o.props,c=l.onChange,u=l.selectsRange,d=l.startDate,f=l.endDate,p=l.selectsMultiple,h=l.selectedDates,m=l.minTime,v=l.swapRange;if(!sg(o.props.selected,s)||o.props.allowSameDay||u||p)if(null!==s&&(!o.props.selected||n&&(o.props.showTimeSelect||o.props.showTimeSelectOnly||o.props.showTimeInput)||(s=Kv(s,{hour:Eh(o.props.selected),minute:Ch(o.props.selected),second:Nh(o.props.selected)})),n||!o.props.showTimeSelect&&!o.props.showTimeSelectOnly||m&&(s=Kv(s,{hour:m.getHours(),minute:m.getMinutes(),second:m.getSeconds()})),o.props.inline||o.setState({preSelection:s}),o.props.focusSelectedMonth||o.setState({monthSelectedIn:r})),u){var g=d&&!f,y=d&&f;!d&&!f?null===c||void 0===c||c([s,null],t):g&&(null===s?null===c||void 0===c||c([null,null],t):zg(s,d)?v?null===c||void 0===c||c([s,d],t):null===c||void 0===c||c([s,null],t):null===c||void 0===c||c([d,s],t)),y&&(null===c||void 0===c||c([s,null],t))}else if(p){if(null!==s)if(null===h||void 0===h?void 0:h.length)if(h.some((function(e){return ig(e,s)}))){var b=h.filter((function(e){return!ig(e,s)}));null===c||void 0===c||c(b,t)}else null===c||void 0===c||c(Fv(Fv([],h,!0),[s],!1),t);else null===c||void 0===c||c([s],t)}else null===c||void 0===c||c(s,t);n||(null===(i=(a=o.props).onSelect)||void 0===i||i.call(a,s,t),o.setState({inputValue:null}))},o.setPreSelection=function(e){var t=Tp(o.props.minDate),n=Tp(o.props.maxDate),r=!0;if(e){var a=$v(e);if(t&&n)r=lg(e,o.props.minDate,o.props.maxDate);else if(t){var i=$v(o.props.minDate);r=Uh(e,i)||sg(a,i)}else if(n){var s=tg(o.props.maxDate);r=Op(e,s)||sg(a,s)}}r&&o.setState({preSelection:e})},o.toggleCalendar=function(){o.setOpen(!o.state.open)},o.handleTimeChange=function(e){var t,n;if(!o.props.selectsRange&&!o.props.selectsMultiple){var r=o.props.selected?o.props.selected:o.getPreSelection(),a=o.props.selected?e:Kv(r,{hour:Eh(e),minute:Ch(e)});o.setState({preSelection:a}),null===(n=(t=o.props).onChange)||void 0===n||n.call(t,a),o.props.shouldCloseOnSelect&&!o.props.showTimeInput&&(o.sendFocusBackToInput(),o.setOpen(!1)),o.props.showTimeInput&&o.setOpen(!0),(o.props.showTimeSelectOnly||o.props.showTimeSelect)&&o.setState({isRenderAriaLiveMessage:!0}),o.setState({inputValue:null})}},o.onInputClick=function(){var e,t;o.props.disabled||o.props.readOnly||o.setOpen(!0),null===(t=(e=o.props).onInputClick)||void 0===t||t.call(e)},o.onInputKeyDown=function(e){var t,n,r,a,i,s;null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e);var l=e.key;if(o.state.open||o.props.inline||o.props.preventOpenOnFocus){if(o.state.open){if(l===zv.ArrowDown||l===zv.ArrowUp){e.preventDefault();var c=o.props.showTimeSelectOnly?".react-datepicker__time-list-item[tabindex='0']":o.props.showWeekPicker&&o.props.showWeekNumbers?'.react-datepicker__week-number[tabindex="0"]':o.props.showFullMonthYearPicker||o.props.showMonthYearPicker?'.react-datepicker__month-text[tabindex="0"]':'.react-datepicker__day[tabindex="0"]',u=(null===(a=o.calendar)||void 0===a?void 0:a.containerRef.current)instanceof Element&&o.calendar.containerRef.current.querySelector(c);return void(u instanceof HTMLElement&&u.focus({preventScroll:!0}))}var d=Yv(o.state.preSelection);l===zv.Enter?(e.preventDefault(),e.target.blur(),o.inputOk()&&o.state.lastPreSelectChange===xy?(o.handleSelect(d,e),!o.props.shouldCloseOnSelect&&o.setPreSelection(d)):o.setOpen(!1)):l===zv.Escape?(e.preventDefault(),e.target.blur(),o.sendFocusBackToInput(),o.setOpen(!1)):l===zv.Tab&&o.setOpen(!1),o.inputOk()||null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}}else l!==zv.ArrowDown&&l!==zv.ArrowUp&&l!==zv.Enter||null===(r=o.onInputClick)||void 0===r||r.call(o)},o.onPortalKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.setState({preventFocus:!0},(function(){o.setOpen(!1),setTimeout((function(){o.setFocus(),o.setState({preventFocus:!1})}))})))},o.onDayKeyDown=function(e){var t,n,r,a,i,s,l=o.props,c=l.minDate,u=l.maxDate,d=l.disabledKeyboardNavigation,f=l.showWeekPicker,p=l.shouldCloseOnSelect,h=l.locale,m=l.calendarStartDay,v=l.adjustDateOnChange,g=l.inline;if(null===(n=(t=o.props).onKeyDown)||void 0===n||n.call(t,e),!d){var y=e.key,b=e.shiftKey,w=Yv(o.state.preSelection),x=function(e,t){var n=t;switch(e){case zv.ArrowRight:n=f?qh(t,1):gp(t,1);break;case zv.ArrowLeft:n=f?Gh(t,1):Xh(t,1);break;case zv.ArrowUp:n=Gh(t,1);break;case zv.ArrowDown:n=qh(t,1);break;case zv.PageUp:n=b?Rh(t,1):Dh(t,1);break;case zv.PageDown:n=b?Mh(t,1):jh(t,1);break;case zv.Home:n=Gv(t,h,m);break;case zv.End:n=function(e){return ch(e)}(t)}return n};if(y===zv.Enter)return e.preventDefault(),o.handleSelect(w,e),void(!p&&o.setPreSelection(w));if(y===zv.Escape)return e.preventDefault(),o.setOpen(!1),void(o.inputOk()||null===(a=(r=o.props).onInputError)||void 0===a||a.call(r,{code:1,msg:yy}));var k=null;switch(y){case zv.ArrowLeft:case zv.ArrowRight:case zv.ArrowUp:case zv.ArrowDown:case zv.PageUp:case zv.PageDown:case zv.Home:case zv.End:k=function(e,t){for(var n=e,r=!1,a=0,i=x(e,t);!r;){if(a>=40){i=t;break}c&&i<c&&(n=zv.ArrowRight,i=pg(c,o.props)?x(n,i):c),u&&i>u&&(n=zv.ArrowLeft,i=pg(u,o.props)?x(n,i):u),pg(i,o.props)?(n!==zv.PageUp&&n!==zv.Home||(n=zv.ArrowRight),n!==zv.PageDown&&n!==zv.End||(n=zv.ArrowLeft),i=x(n,i)):r=!0,a++}return i}(y,w)}if(k){if(e.preventDefault(),o.setState({lastPreSelectChange:xy}),v&&o.setSelected(k),o.setPreSelection(k),g){var S=xh(w),E=xh(k),C=wh(w),N=wh(k);S!==E||C!==N?o.setState({shouldFocusDayInline:!0}):o.setState({shouldFocusDayInline:!1})}}else null===(s=(i=o.props).onInputError)||void 0===s||s.call(i,{code:1,msg:yy})}},o.onPopperKeyDown=function(e){e.key===zv.Escape&&(e.preventDefault(),o.sendFocusBackToInput())},o.onClearClick=function(e){e&&e.preventDefault&&e.preventDefault(),o.sendFocusBackToInput();var t=o.props,n=t.selectsRange,r=t.onChange;n?null===r||void 0===r||r([null,null],e):null===r||void 0===r||r(null,e),o.setState({inputValue:null})},o.clear=function(){o.onClearClick()},o.onScroll=function(e){"boolean"===typeof o.props.closeOnScroll&&o.props.closeOnScroll?e.target!==document&&e.target!==document.documentElement&&e.target!==document.body||o.setOpen(!1):"function"===typeof o.props.closeOnScroll&&o.props.closeOnScroll(e)&&o.setOpen(!1)},o.renderCalendar=function(){var e,n;return o.props.inline||o.isCalendarOpen()?r.createElement(cy,Iv({showMonthYearDropdown:void 0,ref:function(e){o.calendar=e}},o.props,o.state,{setOpen:o.setOpen,dateFormat:null!==(e=o.props.dateFormatCalendar)&&void 0!==e?e:t.defaultProps.dateFormatCalendar,onSelect:o.handleSelect,onClickOutside:o.handleCalendarClickOutside,holidays:Mg(o.modifyHolidays()),outsideClickIgnoreClass:gy,onDropdownFocus:o.handleDropdownFocus,onTimeChange:o.handleTimeChange,className:o.props.calendarClassName,container:o.props.calendarContainer,handleOnKeyDown:o.props.onKeyDown,handleOnDayKeyDown:o.onDayKeyDown,setPreSelection:o.setPreSelection,dropdownMode:null!==(n=o.props.dropdownMode)&&void 0!==n?n:t.defaultProps.dropdownMode}),o.props.children):null},o.renderAriaLiveRegion=function(){var e,n=o.props,a=n.dateFormat,i=void 0===a?t.defaultProps.dateFormat:a,s=n.locale,l=o.props.showTimeInput||o.props.showTimeSelect?"PPPPp":"PPPP";return e=o.props.selectsRange?"Selected start date: ".concat(Qv(o.props.startDate,{dateFormat:l,locale:s}),". ").concat(o.props.endDate?"End date: "+Qv(o.props.endDate,{dateFormat:l,locale:s}):""):o.props.showTimeSelectOnly?"Selected time: ".concat(Qv(o.props.selected,{dateFormat:i,locale:s})):o.props.showYearPicker?"Selected year: ".concat(Qv(o.props.selected,{dateFormat:"yyyy",locale:s})):o.props.showMonthYearPicker?"Selected month: ".concat(Qv(o.props.selected,{dateFormat:"MMMM yyyy",locale:s})):o.props.showQuarterYearPicker?"Selected quarter: ".concat(Qv(o.props.selected,{dateFormat:"yyyy, QQQ",locale:s})):"Selected date: ".concat(Qv(o.props.selected,{dateFormat:l,locale:s})),r.createElement("span",{role:"alert","aria-live":"polite",className:"react-datepicker__aria-live"},e)},o.renderDateInput=function(){var e,n,a,i=Ld(o.props.className,((e={})[gy]=o.state.open,e)),s=o.props.customInput||r.createElement("input",{type:"text"}),l=o.props.customInputRef||"ref",c=o.props,u=c.dateFormat,d=void 0===u?t.defaultProps.dateFormat:u,f=c.locale,p="string"===typeof o.props.value?o.props.value:"string"===typeof o.state.inputValue?o.state.inputValue:o.props.selectsRange?function(e,t,n){if(!e)return"";var r=Qv(e,n),o=t?Qv(t,n):"";return"".concat(r," - ").concat(o)}(o.props.startDate,o.props.endDate,{dateFormat:d,locale:f}):o.props.selectsMultiple?function(e,t){if(!(null===e||void 0===e?void 0:e.length))return"";var n=e[0]?Qv(e[0],t):"";if(1===e.length)return n;if(2===e.length&&e[1]){var r=Qv(e[1],t);return"".concat(n,", ").concat(r)}var o=e.length-1;return"".concat(n," (+").concat(o,")")}(null!==(a=o.props.selectedDates)&&void 0!==a?a:[],{dateFormat:d,locale:f}):Qv(o.props.selected,{dateFormat:d,locale:f});return(0,r.cloneElement)(s,((n={})[l]=function(e){o.input=e},n.value=p,n.onBlur=o.handleBlur,n.onChange=o.handleChange,n.onClick=o.onInputClick,n.onFocus=o.handleFocus,n.onKeyDown=o.onInputKeyDown,n.id=o.props.id,n.name=o.props.name,n.form=o.props.form,n.autoFocus=o.props.autoFocus,n.placeholder=o.props.placeholderText,n.disabled=o.props.disabled,n.autoComplete=o.props.autoComplete,n.className=Ld(s.props.className,i),n.title=o.props.title,n.readOnly=o.props.readOnly,n.required=o.props.required,n.tabIndex=o.props.tabIndex,n["aria-describedby"]=o.props.ariaDescribedBy,n["aria-invalid"]=o.props.ariaInvalid,n["aria-labelledby"]=o.props.ariaLabelledBy,n["aria-required"]=o.props.ariaRequired,n))},o.renderClearButton=function(){var e=o.props,t=e.isClearable,n=e.disabled,a=e.selected,i=e.startDate,s=e.endDate,l=e.clearButtonTitle,c=e.clearButtonClassName,u=void 0===c?"":c,d=e.ariaLabelClose,f=void 0===d?"Close":d,p=e.selectedDates;return t&&(null!=a||null!=i||null!=s||(null===p||void 0===p?void 0:p.length))?r.createElement("button",{type:"button",className:Ld("react-datepicker__close-icon",u,{"react-datepicker__close-icon--disabled":n}),disabled:n,"aria-label":f,onClick:o.onClearClick,title:l,tabIndex:-1}):null},o.state=o.calcInitialState(),o.preventFocusTimeout=void 0,o}return Lv(t,e),Object.defineProperty(t,"defaultProps",{get:function(){return{allowSameDay:!1,dateFormat:"MM/dd/yyyy",dateFormatCalendar:"LLLL yyyy",disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",preventOpenOnFocus:!1,monthsShown:1,readOnly:!1,withPortal:!1,selectsDisabledDaysInRange:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,showTimeInput:!1,showPreviousMonths:!1,showMonthYearPicker:!1,showFullMonthYearPicker:!1,showTwoColumnMonthYearPicker:!1,showFourColumnMonthYearPicker:!1,showYearPicker:!1,showQuarterYearPicker:!1,showWeekPicker:!1,strictParsing:!1,swapRange:!1,timeIntervals:30,timeCaption:"Time",previousMonthAriaLabel:"Previous Month",previousMonthButtonLabel:"Previous Month",nextMonthAriaLabel:"Next Month",nextMonthButtonLabel:"Next Month",previousYearAriaLabel:"Previous Year",previousYearButtonLabel:"Previous Year",nextYearAriaLabel:"Next Year",nextYearButtonLabel:"Next Year",timeInputLabel:"Time",enableTabLoop:!0,yearItemNumber:12,focusSelectedMonth:!1,showPopperArrow:!0,excludeScrollbar:!0,customTimeInput:null,calendarStartDay:void 0,toggleCalendarOnIconClick:!1,usePointerEvent:!1}},enumerable:!1,configurable:!0}),t.prototype.componentDidMount=function(){window.addEventListener("scroll",this.onScroll,!0),document.addEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.componentDidUpdate=function(e,t){var n,r,o,a,i,s;e.inline&&(i=e.selected,s=this.props.selected,i&&s?xh(i)!==xh(s)||wh(i)!==wh(s):i!==s)&&this.setPreSelection(this.props.selected),void 0!==this.state.monthSelectedIn&&e.monthsShown!==this.props.monthsShown&&this.setState({monthSelectedIn:0}),e.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:Og(this.props.highlightDates)}),t.focused||sg(e.selected,this.props.selected)||this.setState({inputValue:null}),t.open!==this.state.open&&(!1===t.open&&!0===this.state.open&&(null===(r=(n=this.props).onCalendarOpen)||void 0===r||r.call(n)),!0===t.open&&!1===this.state.open&&(null===(a=(o=this.props).onCalendarClose)||void 0===a||a.call(o)))},t.prototype.componentWillUnmount=function(){this.clearPreventFocusTimeout(),window.removeEventListener("scroll",this.onScroll,!0),document.removeEventListener("visibilitychange",this.setHiddenStateOnVisibilityHidden)},t.prototype.renderInputContainer=function(){var e=this.props,t=e.showIcon,n=e.icon,o=e.calendarIconClassname,a=e.calendarIconClassName,i=e.toggleCalendarOnIconClick,s=this.state.open;return o&&console.warn("calendarIconClassname props is deprecated. should use calendarIconClassName props."),r.createElement("div",{className:"react-datepicker__input-container".concat(t?" react-datepicker__view-calendar-icon":"")},t&&r.createElement(uy,Iv({icon:n,className:Ld(a,!a&&o,s&&"react-datepicker-ignore-onclickoutside")},i?{onClick:this.toggleCalendar}:null)),this.state.isRenderAriaLiveMessage&&this.renderAriaLiveRegion(),this.renderDateInput(),this.renderClearButton())},t.prototype.render=function(){var e=this.renderCalendar();if(this.props.inline)return e;if(this.props.withPortal){var t=this.state.open?r.createElement(py,{enableTabLoop:this.props.enableTabLoop},r.createElement("div",{className:"react-datepicker__portal",tabIndex:-1,onKeyDown:this.onPortalKeyDown},e)):null;return this.state.open&&this.props.portalId&&(t=r.createElement(dy,Iv({portalId:this.props.portalId},this.props),t)),r.createElement("div",null,this.renderInputContainer(),t)}return r.createElement(vy,Iv({},this.props,{className:this.props.popperClassName,hidePopper:!this.isCalendarOpen(),targetComponent:this.renderInputContainer(),popperComponent:e,popperOnKeyDown:this.onPopperKeyDown,showArrow:this.props.showPopperArrow}))},t}(r.Component),wy="input",xy="navigate";const ky=()=>{te();const[e,t]=(0,r.useState)([]),[n,o]=(0,r.useState)([]),[a,i]=(0,r.useState)(null),[s,l]=(0,r.useState)(""),[c,u]=(0,r.useState)(!1),[d,f]=(0,r.useState)(null),[p,h]=(0,r.useState)([]),[m,v]=(0,r.useState)({title:"",content:""}),[g,y]=(0,r.useState)({name:"",discountType:"FREE"}),[b,w]=(0,r.useState)(new Date),[x,k]=(0,r.useState)(new Date),[S,E]=(0,r.useState)("users"),C=async()=>{u(!0),f(null);try{const e=await(async()=>{try{const t=await ar.get("".concat(gd,"/user/allUser"),{headers:{Authorization:localStorage.getItem("token")}});if(console.log("API Response:",t.data),t.data&&200===t.data.code){const e=t.data.data.data;return Array.isArray(e)?e:[e]}var e;throw new Error((null===(e=t.data)||void 0===e?void 0:e.message)||"\u672a\u77e5\u9519\u8bef")}catch(d){throw console.error("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25:",d),d}})();console.log("API Data:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));console.log("Formatted Users:",n),t(n)}catch(e){console.error("Error details:",e),f("\u83b7\u53d6\u7528\u6237\u5217\u8868\u5931\u8d25: ".concat(e.message))}finally{u(!1)}},N=async(n,r)=>{try{await(async(e,t)=>{try{return(await ar.put("".concat(gd,"/user/changeAuthority"),{changeUsername:e,authority:t},{headers:{Authorization:localStorage.getItem("token")}})).data}catch(d){throw console.error("\u4fee\u6539\u7528\u6237\u6743\u9650\u5931\u8d25:",d),d}})(n,r),t(e.map((e=>e.username===n?_e(_e({},e),{},{authority:r}):e)))}catch(o){f("\u4fee\u6539\u6743\u9650\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(o)}},j=async()=>{u(!0),f(null);try{const e=await yd();o(e)}catch(e){f("\u83b7\u53d6\u6298\u6263\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}},D=async()=>{try{const e=await(async()=>{try{var e;const r=await ar.get("".concat(gd,"/discount/current"),{headers:{Authorization:localStorage.getItem("token")}});var t,n;if(r.data&&200===r.data.code)return(null===(t=r.data.data)||void 0===t?void 0:t.data)||r.data.data||null;if("\u76ee\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"===(null===(e=r.data)||void 0===e?void 0:e.message))return null;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",d),d}})();i(e)}catch(e){console.error("\u83b7\u53d6\u5f53\u524d\u6298\u6263\u5931\u8d25:",e)}},P=async()=>{if(g.name&&b&&x)try{if(b>=x)return void f("\u7ed3\u675f\u65f6\u95f4\u5fc5\u987b\u665a\u4e8e\u5f00\u59cb\u65f6\u95f4");const e={name:g.name,startTime:T(b),endTime:T(x,!0),discountType:g.discountType};console.log("\u63d0\u4ea4\u6570\u636e:",e),await(async e=>{try{const n=await ar.post("".concat(gd,"/discount/add"),e,{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return n.data.data.data||n.data.data;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u6dfb\u52a0\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u6dfb\u52a0\u6298\u6263\u5931\u8d25:",d),d}})(e),y({name:"",discountType:"FREE"}),w(new Date),k(new Date),j(),f(null)}catch(e){f("\u6dfb\u52a0\u6298\u6263\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u6240\u6709\u5fc5\u586b\u5b57\u6bb5")},T=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return"";const n=e=>e.toString().padStart(2,"0"),r=e.getFullYear(),o=n(e.getMonth()+1),a=n(e.getDate()),i=n(e.getHours()),s=n(e.getMinutes());return t?"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":59"):"".concat(r,"-").concat(o,"-").concat(a,"T").concat(i,":").concat(s,":00")},_=async e=>{try{await(async e=>{try{const n=await ar.delete("".concat(gd,"/discount/delete/").concat(e),{headers:{Authorization:localStorage.getItem("token")}});if(n.data&&200===n.data.code)return!0;var t;throw new Error((null===(t=n.data)||void 0===t?void 0:t.message)||"\u5220\u9664\u6298\u6263\u5931\u8d25")}catch(d){throw console.error("\u5220\u9664\u6298\u6263\u5931\u8d25:",d),d}})(e),j()}catch(t){f("\u5220\u9664\u6298\u6263\u5931\u8d25: "+t.message),console.error(t)}},O=e=>e?new Date(e).toLocaleDateString():"-",M=e=>e?new Date(e).toLocaleString():"-",R=e=>{switch(e){case"FREE":return"\u5168\u90e8\u514d\u8d39";case"HALF":return"\u534a\u4ef7\u4e0b\u8f7d";case"DOUBLE":return"\u53cc\u500d\u4e0a\u4f20";default:return e}},A=async()=>{u(!0),f(null);try{const e=await ir.get("/announcement/list");h(Array.isArray(e)?e:[])}catch(e){f("\u83b7\u53d6\u516c\u544a\u5217\u8868\u5931\u8d25: "+e.message),console.error(e)}finally{u(!1)}};return(0,r.useEffect)((()=>{"users"===S?C():"discounts"===S?(j(),D()):"announcements"===S&&A()}),[S]),(0,bd.jsxs)("div",{className:"administer-container",children:[(0,bd.jsx)("h1",{children:"\u7cfb\u7edf\u7ba1\u7406"}),(0,bd.jsxs)("div",{className:"tab-container",children:[(0,bd.jsx)("button",{className:"tab-button ".concat("users"===S?"active":""),onClick:()=>E("users"),children:"\u7528\u6237\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("discounts"===S?"active":""),onClick:()=>E("discounts"),children:"\u6298\u6263\u7ba1\u7406"}),(0,bd.jsx)("button",{className:"tab-button ".concat("announcements"===S?"active":""),onClick:()=>E("announcements"),children:"\u516c\u544a\u7ba1\u7406"})]}),"users"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"search-container",children:[(0,bd.jsx)("input",{type:"text",value:s,onChange:e=>l(e.target.value),placeholder:"\u8f93\u5165\u7528\u6237\u540d\u641c\u7d22",className:"search-input"}),(0,bd.jsx)("button",{onClick:async()=>{if(s.trim()){u(!0),f(null);try{const e=await(async e=>{try{var t;const r=await ar.get("".concat(gd,"/user/searchUser"),{params:{key:e},headers:{Authorization:localStorage.getItem("token")}});if(200===(null===(t=r.data)||void 0===t?void 0:t.code)){const e=r.data.data.data;return Array.isArray(e)?e:[e]}var n;throw new Error((null===(n=r.data)||void 0===n?void 0:n.message)||"\u641c\u7d22\u5931\u8d25")}catch(d){throw console.error("\u641c\u7d22\u7528\u6237\u5931\u8d25:",d),d}})(s);console.log("Search Results:",e);const n=e.map((e=>({username:e.username||"\u672a\u77e5\u7528\u6237",authority:e.authority||"USER",registTime:e.registTime||null,lastLogin:e.lastLogin||null,upload:Number(e.upload)||0,download:Number(e.download)||0,magicPoints:Number(e.magicPoints)||0,shareRate:Number(e.shareRate)||0})));t(n)}catch(e){f("\u641c\u7d22\u7528\u6237\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5"),console.error(e)}finally{u(!1)}}else C()},className:"search-button",children:"\u641c\u7d22"}),(0,bd.jsx)("button",{onClick:()=>{l(""),C()},className:"reset-button",children:"\u91cd\u7f6e"})]}),d&&(0,bd.jsx)("div",{className:"error-message",children:d}),c&&(0,bd.jsx)("div",{className:"loading-message",children:"\u52a0\u8f7d\u4e2d..."}),(0,bd.jsx)("div",{className:"user-list-container",children:(0,bd.jsxs)("table",{className:"user-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u7528\u6237\u540d"}),(0,bd.jsx)("th",{children:"\u6ce8\u518c\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u6700\u540e\u767b\u5f55"}),(0,bd.jsx)("th",{children:"\u4e0a\u4f20\u91cf"}),(0,bd.jsx)("th",{children:"\u4e0b\u8f7d\u91cf"}),(0,bd.jsx)("th",{children:"\u5206\u4eab\u7387"}),(0,bd.jsx)("th",{children:"\u9b54\u529b\u503c"}),(0,bd.jsx)("th",{children:"\u6743\u9650"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:Array.isArray(e)&&e.map((e=>{return(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.username}),(0,bd.jsx)("td",{children:O(e.registTime)}),(0,bd.jsx)("td",{children:O(e.lastLogin)}),(0,bd.jsx)("td",{children:e.upload}),(0,bd.jsx)("td",{children:e.download}),(0,bd.jsx)("td",{children:(t=e.shareRate,(100*t).toFixed(2)+"%")}),(0,bd.jsx)("td",{children:e.magicPoints}),(0,bd.jsx)("td",{children:e.authority}),(0,bd.jsx)("td",{children:(0,bd.jsxs)("select",{value:e.authority,onChange:t=>N(e.username,t.target.value),className:"authority-select",children:[(0,bd.jsx)("option",{value:"USER",children:"\u666e\u901a\u7528\u6237"}),(0,bd.jsx)("option",{value:"ADMIN",children:"\u7ba1\u7406\u5458"}),(0,bd.jsx)("option",{value:"LIMIT",children:"\u53d7\u9650\u7528\u6237"}),(0,bd.jsx)("option",{value:"BAN",children:"\u5c01\u7981\u7528\u6237"})]})})]},e.username);var t}))})]})})]}):"discounts"===S?(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"current-discount-section",children:[(0,bd.jsx)("h3",{children:"\u5f53\u524d\u6d3b\u52a8\u6298\u6263"}),a?(0,bd.jsxs)("div",{className:"current-discount-card",children:[(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u540d\u79f0:"})," ",a.name]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u7c7b\u578b:"})," ",R(a.discountType)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u65f6\u95f4:"})," ",M(a.startTime)," \u81f3 ",M(a.endTime)]}),(0,bd.jsxs)("p",{children:[(0,bd.jsx)("strong",{children:"\u72b6\u6001:"})," ",a.status]})]}):(0,bd.jsx)("p",{children:"\u5f53\u524d\u6ca1\u6709\u8fdb\u884c\u4e2d\u7684\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"add-discount-form",children:[(0,bd.jsx)("h3",{children:"\u6dfb\u52a0\u65b0\u6298\u6263"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u540d\u79f0:"}),(0,bd.jsx)("input",{type:"text",value:g.name,onChange:e=>y(_e(_e({},g),{},{name:e.target.value}))})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u5f00\u59cb\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:b,onChange:e=>w(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:new Date,placeholderText:"\u9009\u62e9\u5f00\u59cb\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u7ed3\u675f\u65f6\u95f4:"}),(0,bd.jsx)(by,{selected:x,onChange:e=>k(e),showTimeSelect:!0,timeFormat:"HH:mm",timeIntervals:1,dateFormat:"yyyy-MM-dd HH:mm",minDate:b,placeholderText:"\u9009\u62e9\u7ed3\u675f\u65e5\u671f\u548c\u65f6\u95f4"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u6298\u6263\u7c7b\u578b:"}),(0,bd.jsxs)("select",{value:g.discountType,onChange:e=>y(_e(_e({},g),{},{discountType:e.target.value})),children:[(0,bd.jsx)("option",{value:"FREE",children:"\u5168\u90e8\u514d\u8d39"}),(0,bd.jsx)("option",{value:"HALF",children:"\u534a\u4ef7\u4e0b\u8f7d"}),(0,bd.jsx)("option",{value:"DOUBLE",children:"\u53cc\u500d\u4e0a\u4f20"})]})]}),(0,bd.jsx)("button",{onClick:e=>{e.preventDefault(),P()},children:"\u6dfb\u52a0\u6298\u6263"})]}),(0,bd.jsxs)("div",{className:"discount-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u6298\u6263\u8ba1\u5212"}),(0,bd.jsxs)("table",{className:"discount-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"ID"}),(0,bd.jsx)("th",{children:"\u540d\u79f0"}),(0,bd.jsx)("th",{children:"\u5f00\u59cb\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7ed3\u675f\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u7c7b\u578b"}),(0,bd.jsx)("th",{children:"\u521b\u5efa\u65f6\u95f4"}),(0,bd.jsx)("th",{children:"\u72b6\u6001"}),(0,bd.jsx)("th",{children:"\u64cd\u4f5c"})]})}),(0,bd.jsx)("tbody",{children:n.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.id}),(0,bd.jsx)("td",{children:e.name}),(0,bd.jsx)("td",{children:M(e.startTime)}),(0,bd.jsx)("td",{children:M(e.endTime)}),(0,bd.jsx)("td",{children:R(e.discountType)}),(0,bd.jsx)("td",{children:M(e.createTime)}),(0,bd.jsx)("td",{children:e.status||"\u672a\u77e5"}),(0,bd.jsx)("td",{children:(0,bd.jsx)("button",{onClick:()=>_(e.id),className:"delete-button",children:"\u5220\u9664"})})]},e.id)))})]})]})]}):(0,bd.jsxs)(bd.Fragment,{children:[(0,bd.jsxs)("div",{className:"announcement-form",children:[(0,bd.jsx)("h3",{children:"\u53d1\u5e03\u65b0\u516c\u544a"}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u6807\u9898:"}),(0,bd.jsx)("input",{type:"text",value:m.title,onChange:e=>v(_e(_e({},m),{},{title:e.target.value})),placeholder:"\u8f93\u5165\u516c\u544a\u6807\u9898"})]}),(0,bd.jsxs)("div",{className:"form-group",children:[(0,bd.jsx)("label",{children:"\u516c\u544a\u5185\u5bb9:"}),(0,bd.jsx)("textarea",{value:m.content,onChange:e=>v(_e(_e({},m),{},{content:e.target.value})),rows:"5",placeholder:"\u8f93\u5165\u516c\u544a\u5185\u5bb9"})]}),(0,bd.jsx)("button",{onClick:async()=>{if(m.title&&m.content)try{await(e=>{const t=new FormData;return t.append("title",e.title),t.append("content",e.content),ir.post("/announcement/create",t)})(m),v({title:"",content:""}),A(),f(null)}catch(e){f("\u53d1\u5e03\u516c\u544a\u5931\u8d25: "+e.message),console.error(e)}else f("\u8bf7\u586b\u5199\u516c\u544a\u6807\u9898\u548c\u5185\u5bb9")},children:"\u53d1\u5e03\u516c\u544a"})]}),(0,bd.jsxs)("div",{className:"announcement-list-container",children:[(0,bd.jsx)("h3",{children:"\u6240\u6709\u516c\u544a"}),(0,bd.jsxs)("table",{className:"announcement-table",children:[(0,bd.jsx)("thead",{children:(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("th",{children:"\u6807\u9898"}),(0,bd.jsx)("th",{children:"\u5185\u5bb9"}),(0,bd.jsx)("th",{children:"\u53d1\u5e03\u65f6\u95f4"})]})}),(0,bd.jsx)("tbody",{children:p.map((e=>(0,bd.jsxs)("tr",{children:[(0,bd.jsx)("td",{children:e.title}),(0,bd.jsx)("td",{children:e.content}),(0,bd.jsx)("td",{children:M(e.createTime)})]},e.id)))})]})]})]})]})};const Sy=function(){r.useEffect((()=>{localStorage.removeItem("token"),console.log("Token cleared on app startup"),localStorage.removeItem("username")}),[]);const[e,t]=r.useState(!1),n=()=>{localStorage.removeItem("token"),t(!1)};return(0,bd.jsx)(Ee,{children:(0,bd.jsxs)(xe,{children:[(0,bd.jsx)(be,{path:"/",element:(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/login",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(Nd,{onLoginSuccess:e=>{t(!0)}})}),(0,bd.jsx)(be,{path:"/dashboard/:tab?",element:e?(0,bd.jsx)(wd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/announcement/:id",element:e?(0,bd.jsx)(jd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal",element:e?(0,bd.jsx)(Cd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/exchange",element:e?(0,bd.jsx)(_d,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/upload",element:e?(0,bd.jsx)(Od,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/notice",element:e?(0,bd.jsx)(Md,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/personal/setting",element:e?(0,bd.jsx)(Rd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"*",element:e?(0,bd.jsx)(ge,{to:"/dashboard",replace:!0}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/administer",element:e?(0,bd.jsx)(ky,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/request/:id",element:e?(0,bd.jsx)(Pd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/help/:id",element:e?(0,bd.jsx)(Td,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})}),(0,bd.jsx)(be,{path:"/torrent/:id",element:e?(0,bd.jsx)(Dd,{onLogout:n}):(0,bd.jsx)(ge,{to:"/login",replace:!0})})]})})},Ey=e=>{e&&e instanceof Function&&n.e(845).then(n.bind(n,845)).then((t=>{let{getCLS:n,getFID:r,getFCP:o,getLCP:a,getTTFB:i}=t;n(e),r(e),o(e),a(e),i(e)}))};var Cy=n(365),Ny=n.n(Cy),jy=n(478);"undefined"===typeof window.process&&(window.process=Ny()),"undefined"===typeof window.Buffer&&(window.Buffer=jy.hp);a.createRoot(document.getElementById("root")).render((0,bd.jsx)(r.StrictMode,{children:(0,bd.jsx)(Sy,{})})),Ey()})()})();
+//# sourceMappingURL=main.dd76cdc0.js.map
\ No newline at end of file
