(self.webpackChunkdocs_v_2=self.webpackChunkdocs_v_2||[]).push([[9169],{79175:(e,t,r)=>{"use strict";r.d(t,{Z:()=>H});var n=r(91189),i=r(67294);const a=function(e){var t={};return function(r){return void 0===t[r]&&(t[r]=e(r)),t[r]}};var o=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;const s=a((function(e){return o.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));var c=function(){function e(e){this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.before=null}var t=e.prototype;return t.insert=function(e){if(this.ctr%(this.isSpeedy?65e3:1)==0){var t,r=function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t}(this);t=0===this.tags.length?this.before:this.tags[this.tags.length-1].nextSibling,this.container.insertBefore(r,t),this.tags.push(r)}var n=this.tags[this.tags.length-1];if(this.isSpeedy){var i=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(n);try{var a=105===e.charCodeAt(1)&&64===e.charCodeAt(0);i.insertRule(e,a?0:i.cssRules.length)}catch(o){0}}else n.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}();const l=function(e){function t(e,n,c,l,d){for(var h,p,v,m,w,_=0,x=0,A=0,C=0,O=0,P=0,z=v=h=0,L=0,N=0,F=0,I=0,$=c.length,W=$-1,H="",q="",G="",B="";L<$;){if(p=c.charCodeAt(L),L===W&&0!==x+C+A+_&&(0!==x&&(p=47===x?10:47),C=A=_=0,$++,W++),0===x+C+A+_){if(L===W&&(0<N&&(H=H.replace(f,"")),0<H.trim().length)){switch(p){case 32:case 9:case 59:case 13:case 10:break;default:H+=c.charAt(L)}p=59}switch(p){case 123:for(h=(H=H.trim()).charCodeAt(0),v=1,I=++L;L<$;){switch(p=c.charCodeAt(L)){case 123:v++;break;case 125:v--;break;case 47:switch(p=c.charCodeAt(L+1)){case 42:case 47:e:{for(z=L+1;z<W;++z)switch(c.charCodeAt(z)){case 47:if(42===p&&42===c.charCodeAt(z-1)&&L+2!==z){L=z+1;break e}break;case 10:if(47===p){L=z+1;break e}}L=z}}break;case 91:p++;case 40:p++;case 34:case 39:for(;L++<W&&c.charCodeAt(L)!==p;);}if(0===v)break;L++}if(v=c.substring(I,L),0===h&&(h=(H=H.replace(u,"").trim()).charCodeAt(0)),64===h){switch(0<N&&(H=H.replace(f,"")),p=H.charCodeAt(1)){case 100:case 109:case 115:case 45:N=n;break;default:N=M}if(I=(v=t(n,N,v,p,d+1)).length,0<R&&(w=s(3,v,N=r(M,H,F),n,S,E,I,p,d,l),H=N.join(""),void 0!==w&&0===(I=(v=w.trim()).length)&&(p=0,v="")),0<I)switch(p){case 115:H=H.replace(k,o);case 100:case 109:case 45:v=H+"{"+v+"}";break;case 107:v=(H=H.replace(b,"$1 $2"))+"{"+v+"}",v=1===j||2===j&&a("@"+v,3)?"@-webkit-"+v+"@"+v:"@"+v;break;default:v=H+v,112===l&&(q+=v,v="")}else v=""}else v=t(n,r(n,H,F),v,l,d+1);G+=v,v=F=N=z=h=0,H="",p=c.charCodeAt(++L);break;case 125:case 59:if(1<(I=(H=(0<N?H.replace(f,""):H).trim()).length))switch(0===z&&(h=H.charCodeAt(0),45===h||96<h&&123>h)&&(I=(H=H.replace(" ",":")).length),0<R&&void 0!==(w=s(1,H,n,e,S,E,q.length,l,d,l))&&0===(I=(H=w.trim()).length)&&(H="\0\0"),h=H.charCodeAt(0),p=H.charCodeAt(1),h){case 0:break;case 64:if(105===p||99===p){B+=H+c.charAt(L);break}default:58!==H.charCodeAt(I-1)&&(q+=i(H,h,p,H.charCodeAt(2)))}F=N=z=h=0,H="",p=c.charCodeAt(++L)}}switch(p){case 13:case 10:47===x?x=0:0===1+h&&107!==l&&0<H.length&&(N=1,H+="\0"),0<R*D&&s(0,H,n,e,S,E,q.length,l,d,l),E=1,S++;break;case 59:case 125:if(0===x+C+A+_){E++;break}default:switch(E++,m=c.charAt(L),p){case 9:case 32:if(0===C+_+x)switch(O){case 44:case 58:case 9:case 32:m="";break;default:32!==p&&(m=" ")}break;case 0:m="\\0";break;case 12:m="\\f";break;case 11:m="\\v";break;case 38:0===C+x+_&&(N=F=1,m="\f"+m);break;case 108:if(0===C+x+_+T&&0<z)switch(L-z){case 2:112===O&&58===c.charCodeAt(L-3)&&(T=O);case 8:111===P&&(T=P)}break;case 58:0===C+x+_&&(z=L);break;case 44:0===x+A+C+_&&(N=1,m+="\r");break;case 34:case 39:0===x&&(C=C===p?0:0===C?p:C);break;case 91:0===C+x+A&&_++;break;case 93:0===C+x+A&&_--;break;case 41:0===C+x+_&&A--;break;case 40:if(0===C+x+_){if(0===h)if(2*O+3*P==533);else h=1;A++}break;case 64:0===x+A+C+_+z+v&&(v=1);break;case 42:case 47:if(!(0<C+_+A))switch(x){case 0:switch(2*p+3*c.charCodeAt(L+1)){case 235:x=47;break;case 220:I=L,x=42}break;case 42:47===p&&42===O&&I+2!==L&&(33===c.charCodeAt(I+2)&&(q+=c.substring(I,L+1)),m="",x=0)}}0===x&&(H+=m)}P=O,O=p,L++}if(0<(I=q.length)){if(N=n,0<R&&(void 0!==(w=s(2,q,N,e,S,E,I,l,d,l))&&0===(q=w).length))return B+q+G;if(q=N.join(",")+"{"+q+"}",0!=j*T){switch(2!==j||a(q,2)||(T=0),T){case 111:q=q.replace(y,":-moz-$1")+q;break;case 112:q=q.replace(g,"::-webkit-input-$1")+q.replace(g,"::-moz-$1")+q.replace(g,":-ms-input-$1")+q}T=0}}return B+q+G}function r(e,t,r){var i=t.trim().split(v);t=i;var a=i.length,o=e.length;switch(o){case 0:case 1:var s=0;for(e=0===o?"":e[0]+" ";s<a;++s)t[s]=n(e,t[s],r).trim();break;default:var c=s=0;for(t=[];s<a;++s)for(var l=0;l<o;++l)t[c++]=n(e[l]+" ",i[s],r).trim()}return t}function n(e,t,r){var n=t.charCodeAt(0);switch(33>n&&(n=(t=t.trim()).charCodeAt(0)),n){case 38:return t.replace(m,"$1"+e.trim());case 58:return e.trim()+t.replace(m,"$1"+e.trim());default:if(0<1*r&&0<t.indexOf("\f"))return t.replace(m,(58===e.charCodeAt(0)?"":"$1")+e.trim())}return e+t}function i(e,t,r,n){var o=e+";",s=2*t+3*r+4*n;if(944===s){e=o.indexOf(":",9)+1;var c=o.substring(e,o.length-1).trim();return c=o.substring(0,e).trim()+c+";",1===j||2===j&&a(c,1)?"-webkit-"+c+c:c}if(0===j||2===j&&!a(o,1))return o;switch(s){case 1015:return 97===o.charCodeAt(10)?"-webkit-"+o+o:o;case 951:return 116===o.charCodeAt(3)?"-webkit-"+o+o:o;case 963:return 110===o.charCodeAt(5)?"-webkit-"+o+o:o;case 1009:if(100!==o.charCodeAt(4))break;case 969:case 942:return"-webkit-"+o+o;case 978:return"-webkit-"+o+"-moz-"+o+o;case 1019:case 983:return"-webkit-"+o+"-moz-"+o+"-ms-"+o+o;case 883:if(45===o.charCodeAt(8))return"-webkit-"+o+o;if(0<o.indexOf("image-set(",11))return o.replace(O,"$1-webkit-$2")+o;break;case 932:if(45===o.charCodeAt(4))switch(o.charCodeAt(5)){case 103:return"-webkit-box-"+o.replace("-grow","")+"-webkit-"+o+"-ms-"+o.replace("grow","positive")+o;case 115:return"-webkit-"+o+"-ms-"+o.replace("shrink","negative")+o;case 98:return"-webkit-"+o+"-ms-"+o.replace("basis","preferred-size")+o}return"-webkit-"+o+"-ms-"+o+o;case 964:return"-webkit-"+o+"-ms-flex-"+o+o;case 1023:if(99!==o.charCodeAt(8))break;return"-webkit-box-pack"+(c=o.substring(o.indexOf(":",15)).replace("flex-","").replace("space-between","justify"))+"-webkit-"+o+"-ms-flex-pack"+c+o;case 1005:return h.test(o)?o.replace(d,":-webkit-")+o.replace(d,":-moz-")+o:o;case 1e3:switch(t=(c=o.substring(13).trim()).indexOf("-")+1,c.charCodeAt(0)+c.charCodeAt(t)){case 226:c=o.replace(w,"tb");break;case 232:c=o.replace(w,"tb-rl");break;case 220:c=o.replace(w,"lr");break;default:return o}return"-webkit-"+o+"-ms-"+c+o;case 1017:if(-1===o.indexOf("sticky",9))break;case 975:switch(t=(o=e).length-10,s=(c=(33===o.charCodeAt(t)?o.substring(0,t):o).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|c.charCodeAt(7))){case 203:if(111>c.charCodeAt(8))break;case 115:o=o.replace(c,"-webkit-"+c)+";"+o;break;case 207:case 102:o=o.replace(c,"-webkit-"+(102<s?"inline-":"")+"box")+";"+o.replace(c,"-webkit-"+c)+";"+o.replace(c,"-ms-"+c+"box")+";"+o}return o+";";case 938:if(45===o.charCodeAt(5))switch(o.charCodeAt(6)){case 105:return c=o.replace("-items",""),"-webkit-"+o+"-webkit-box-"+c+"-ms-flex-"+c+o;case 115:return"-webkit-"+o+"-ms-flex-item-"+o.replace(x,"")+o;default:return"-webkit-"+o+"-ms-flex-line-pack"+o.replace("align-content","").replace(x,"")+o}break;case 973:case 989:if(45!==o.charCodeAt(3)||122===o.charCodeAt(4))break;case 931:case 953:if(!0===C.test(e))return 115===(c=e.substring(e.indexOf(":")+1)).charCodeAt(0)?i(e.replace("stretch","fill-available"),t,r,n).replace(":fill-available",":stretch"):o.replace(c,"-webkit-"+c)+o.replace(c,"-moz-"+c.replace("fill-",""))+o;break;case 962:if(o="-webkit-"+o+(102===o.charCodeAt(5)?"-ms-"+o:"")+o,211===r+n&&105===o.charCodeAt(13)&&0<o.indexOf("transform",10))return o.substring(0,o.indexOf(";",27)+1).replace(p,"$1-webkit-$2")+o}return o}function a(e,t){var r=e.indexOf(1===t?":":"{"),n=e.substring(0,3!==t?r:10);return r=e.substring(r+1,e.length-1),z(2!==t?n:n.replace(A,"$1"),r,t)}function o(e,t){var r=i(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return r!==t+";"?r.replace(_," or ($1)").substring(4):"("+t+")"}function s(e,t,r,n,i,a,o,s,c,u){for(var f,d=0,h=t;d<R;++d)switch(f=P[d].call(l,e,h,r,n,i,a,o,s,c,u)){case void 0:case!1:case!0:case null:break;default:h=f}if(h!==t)return h}function c(e){return void 0!==(e=e.prefix)&&(z=null,e?"function"!=typeof e?j=1:(j=2,z=e):j=0),c}function l(e,r){var n=e;if(33>n.charCodeAt(0)&&(n=n.trim()),n=[n],0<R){var i=s(-1,r,n,n,S,E,0,0,0,0);void 0!==i&&"string"==typeof i&&(r=i)}var a=t(M,n,r,0,0);return 0<R&&(void 0!==(i=s(-2,a,n,n,S,E,a.length,0,0,0))&&(a=i)),"",T=0,E=S=1,a}var u=/^\0+/g,f=/[\0\r\f]/g,d=/: */g,h=/zoo|gra/,p=/([,: ])(transform)/g,v=/,\r+?/g,m=/([\t\r\n ])*\f?&/g,b=/@(k\w+)\s*(\S*)\s*/,g=/::(place)/g,y=/:(read-only)/g,w=/[svh]\w+-[tblr]{2}/,k=/\(\s*(.*)\s*\)/g,_=/([\s\S]*?);/g,x=/-self|flex-/g,A=/[^]*?(:[rp][el]a[\w-]+)[^]*/,C=/stretch|:\s*\w+\-(?:conte|avail)/,O=/([^-])(image-set\()/,E=1,S=1,T=0,j=1,M=[],P=[],R=0,z=null,D=0;return l.use=function e(t){switch(t){case void 0:case null:R=P.length=0;break;default:if("function"==typeof t)P[R++]=t;else if("object"==typeof t)for(var r=0,n=t.length;r<n;++r)e(t[r]);else D=0|!!t}return e},l.set=c,void 0!==e&&c(e),l};var u="/*|*/",f=u+"}";function d(e){e&&h.current.insert(e+"}")}var h={current:null},p=function(e,t,r,n,i,a,o,s,c,l){switch(e){case 1:switch(t.charCodeAt(0)){case 64:return h.current.insert(t+";"),"";case 108:if(98===t.charCodeAt(2))return""}break;case 2:if(0===s)return t+u;break;case 3:switch(s){case 102:case 112:return h.current.insert(r[0]+t),"";default:return t+(0===l?u:"")}case-2:t.split(f).forEach(d)}};const v=function(e){void 0===e&&(e={});var t,r=e.key||"css";void 0!==e.prefix&&(t={prefix:e.prefix});var n=new l(t);var i,a={};i=e.container||document.head;var o,s=document.querySelectorAll("style[data-emotion-"+r+"]");Array.prototype.forEach.call(s,(function(e){e.getAttribute("data-emotion-"+r).split(" ").forEach((function(e){a[e]=!0})),e.parentNode!==i&&i.appendChild(e)})),n.use(e.stylisPlugins)(p),o=function(e,t,r,i){var a=t.name;h.current=r,n(e,t.styles),i&&(u.inserted[a]=!0)};var u={key:r,sheet:new c({key:r,container:i,nonce:e.nonce,speedy:e.speedy}),nonce:e.nonce,inserted:a,registered:{},insert:o};return u};const m=function(e){for(var t,r=0,n=0,i=e.length;i>=4;++n,i-=4)t=1540483477*(65535&(t=255&e.charCodeAt(n)|(255&e.charCodeAt(++n))<<8|(255&e.charCodeAt(++n))<<16|(255&e.charCodeAt(++n))<<24))+(59797*(t>>>16)<<16),r=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&r)+(59797*(r>>>16)<<16);switch(i){case 3:r^=(255&e.charCodeAt(n+2))<<16;case 2:r^=(255&e.charCodeAt(n+1))<<8;case 1:r=1540483477*(65535&(r^=255&e.charCodeAt(n)))+(59797*(r>>>16)<<16)}return(((r=1540483477*(65535&(r^=r>>>13))+(59797*(r>>>16)<<16))^r>>>15)>>>0).toString(36)};const b={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 g=/[A-Z]|^ms/g,y=/_EMO_([^_]+?)_([^]*?)_EMO_/g,w=function(e){return 45===e.charCodeAt(1)},k=function(e){return null!=e&&"boolean"!=typeof e},_=a((function(e){return w(e)?e:e.replace(g,"-$&").toLowerCase()})),x=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(y,(function(e,t,r){return C={name:t,styles:r,next:C},t}))}return 1===b[e]||w(e)||"number"!=typeof t||0===t?t:t+"px"};function A(e,t,r,n){if(null==r)return"";if(void 0!==r.__emotion_styles)return r;switch(typeof r){case"boolean":return"";case"object":if(1===r.anim)return C={name:r.name,styles:r.styles,next:C},r.name;if(void 0!==r.styles){var i=r.next;if(void 0!==i)for(;void 0!==i;)C={name:i.name,styles:i.styles,next:C},i=i.next;return r.styles+";"}return function(e,t,r){var n="";if(Array.isArray(r))for(var i=0;i<r.length;i++)n+=A(e,t,r[i],!1);else for(var a in r){var o=r[a];if("object"!=typeof o)null!=t&&void 0!==t[o]?n+=a+"{"+t[o]+"}":k(o)&&(n+=_(a)+":"+x(a,o)+";");else if(!Array.isArray(o)||"string"!=typeof o[0]||null!=t&&void 0!==t[o[0]]){var s=A(e,t,o,!1);switch(a){case"animation":case"animationName":n+=_(a)+":"+s+";";break;default:n+=a+"{"+s+"}"}}else for(var c=0;c<o.length;c++)k(o[c])&&(n+=_(a)+":"+x(a,o[c])+";")}return n}(e,t,r);case"function":if(void 0!==e){var a=C,o=r(e);return C=a,A(e,t,o,n)}}if(null==t)return r;var s=t[r];return void 0===s||n?r:s}var C,O=/label:\s*([^\s;\n{]+)\s*;/g;var E=function(e,t,r){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var n=!0,i="";C=void 0;var a=e[0];null==a||void 0===a.raw?(n=!1,i+=A(r,t,a,!1)):i+=a[0];for(var o=1;o<e.length;o++)i+=A(r,t,e[o],46===i.charCodeAt(i.length-1)),n&&(i+=a[o]);O.lastIndex=0;for(var s,c="";null!==(s=O.exec(i));)c+="-"+s[1];return{name:m(i)+c,styles:i,next:C}},S=(Object.prototype.hasOwnProperty,(0,i.createContext)("undefined"!=typeof HTMLElement?v():null)),T=(0,i.createContext)({}),j=(S.Provider,function(e){var t=function(t,r){return(0,i.createElement)(S.Consumer,null,(function(n){return e(t,n,r)}))};return(0,i.forwardRef)(t)});function M(e,t,r){var n="";return r.split(" ").forEach((function(r){void 0!==e[r]?t.push(e[r]):n+=r+" "})),n}var P=function(e,t,r){var n=e.key+"-"+t.name;if(!1===r&&void 0===e.registered[n]&&(e.registered[n]=t.styles),void 0===e.inserted[t.name]){var i=t;do{e.insert("."+n,i,e.sheet,!0);i=i.next}while(void 0!==i)}};var R=function e(t){for(var r=t.length,n=0,i="";n<r;n++){var a=t[n];if(null!=a){var o=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))o=e(a);else for(var s in o="",a)a[s]&&s&&(o&&(o+=" "),o+=s);break;default:o=a}o&&(i&&(i+=" "),i+=o)}}return i};var z=function(){return null},D=(j((function(e,t){return(0,i.createElement)(T.Consumer,null,(function(r){var n=function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var i=E(r,t.registered);return P(t,i,!1),t.key+"-"+i.name},a={css:n,cx:function(){for(var e=arguments.length,r=new Array(e),i=0;i<e;i++)r[i]=arguments[i];return function(e,t,r){var n=[],i=M(e,n,r);return n.length<2?r:i+t(n)}(t.registered,n,R(r))},theme:r},o=e.children(a);var s=(0,i.createElement)(z,null);return(0,i.createElement)(i.Fragment,null,s,o)}))})),s),L=function(e){return"theme"!==e&&"innerRef"!==e},N=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?D:L};function F(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}var I=function(){return null};const $=function e(t,r){var a,o,s;void 0!==r&&(a=r.label,s=r.target,o=t.__emotion_forwardProp&&r.shouldForwardProp?function(e){return t.__emotion_forwardProp(e)&&r.shouldForwardProp(e)}:r.shouldForwardProp);var c=t.__emotion_real===t,l=c&&t.__emotion_base||t;"function"!=typeof o&&c&&(o=t.__emotion_forwardProp);var u=o||N(l),f=!u("as");return function(){var d=arguments,h=c&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==a&&h.push("label:"+a+";"),null==d[0]||void 0===d[0].raw)h.push.apply(h,d);else{0,h.push(d[0][0]);for(var p=d.length,v=1;v<p;v++)h.push(d[v],d[0][v])}var m=j((function(e,t,r){return(0,i.createElement)(T.Consumer,null,(function(n){var a=f&&e.as||l,c="",d=[],p=e;if(null==e.theme){for(var v in p={},e)p[v]=e[v];p.theme=n}"string"==typeof e.className?c=M(t.registered,d,e.className):null!=e.className&&(c=e.className+" ");var m=E(h.concat(d),t.registered,p);P(t,m,"string"==typeof a);c+=t.key+"-"+m.name,void 0!==s&&(c+=" "+s);var b=f&&void 0===o?N(a):u,g={};for(var y in e)f&&"as"===y||b(y)&&(g[y]=e[y]);g.className=c,g.ref=r||e.innerRef;var w=(0,i.createElement)(a,g),k=(0,i.createElement)(I,null);return(0,i.createElement)(i.Fragment,null,k,w)}))}));return m.displayName=void 0!==a?a:"Styled("+("string"==typeof l?l:l.displayName||l.name||"Component")+")",m.defaultProps=t.defaultProps,m.__emotion_real=m,m.__emotion_base=l,m.__emotion_styles=h,m.__emotion_forwardProp=o,Object.defineProperty(m,"toString",{value:function(){return"."+s}}),m.withComponent=function(t,i){return e(t,void 0!==i?function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?F(Object(r),!0).forEach((function(t){(0,n.Z)(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):F(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},r||{},{},i):r).apply(void 0,h)},m}};var W=$.bind();["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){W[e]=W(e)}));const H=W},62705:(e,t,r)=>{var n=r(55639).Symbol;e.exports=n},44239:(e,t,r)=>{var n=r(62705),i=r(89607),a=r(2333),o=n?n.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":o&&o in Object(e)?i(e):a(e)}},27561:(e,t,r)=>{var n=r(67990),i=/^\s+/;e.exports=function(e){return e?e.slice(0,n(e)+1).replace(i,""):e}},31957:(e,t,r)=>{var n="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;e.exports=n},89607:(e,t,r)=>{var n=r(62705),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=n?n.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),r=e[s];try{e[s]=void 0;var n=!0}catch(c){}var i=o.call(e);return n&&(t?e[s]=r:delete e[s]),i}},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},55639:(e,t,r)=>{var n=r(31957),i="object"==typeof self&&self&&self.Object===Object&&self,a=n||i||Function("return this")();e.exports=a},67990:e=>{var t=/\s/;e.exports=function(e){for(var r=e.length;r--&&t.test(e.charAt(r)););return r}},23279:(e,t,r)=>{var n=r(13218),i=r(7771),a=r(14841),o=Math.max,s=Math.min;e.exports=function(e,t,r){var c,l,u,f,d,h,p=0,v=!1,m=!1,b=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function g(t){var r=c,n=l;return c=l=void 0,p=t,f=e.apply(n,r)}function y(e){var r=e-h;return void 0===h||r>=t||r<0||m&&e-p>=u}function w(){var e=i();if(y(e))return k(e);d=setTimeout(w,function(e){var r=t-(e-h);return m?s(r,u-(e-p)):r}(e))}function k(e){return d=void 0,b&&c?g(e):(c=l=void 0,f)}function _(){var e=i(),r=y(e);if(c=arguments,l=this,h=e,r){if(void 0===d)return function(e){return p=e,d=setTimeout(w,t),v?g(e):f}(h);if(m)return clearTimeout(d),d=setTimeout(w,t),g(h)}return void 0===d&&(d=setTimeout(w,t)),f}return t=a(t)||0,n(r)&&(v=!!r.leading,u=(m="maxWait"in r)?o(a(r.maxWait)||0,t):u,b="trailing"in r?!!r.trailing:b),_.cancel=function(){void 0!==d&&clearTimeout(d),p=0,c=h=l=d=void 0},_.flush=function(){return void 0===d?f:k(i())},_}},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},33448:(e,t,r)=>{var n=r(44239),i=r(37005);e.exports=function(e){return"symbol"==typeof e||i(e)&&"[object Symbol]"==n(e)}},7771:(e,t,r)=>{var n=r(55639);e.exports=function(){return n.Date.now()}},14841:(e,t,r)=>{var n=r(27561),i=r(13218),a=r(33448),o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return NaN;if(i(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=n(e);var r=s.test(e);return r||c.test(e)?l(e.slice(2),r?2:8):o.test(e)?NaN:+e}},91033:(e,t,r)=>{"use strict";r.d(t,{Z:()=>A});var n=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var r=-1;return e.some((function(e,n){return e[0]===t&&(r=n,!0)})),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var r=e(this.__entries__,t),n=this.__entries__[r];return n&&n[1]},t.prototype.set=function(t,r){var n=e(this.__entries__,t);~n?this.__entries__[n][1]=r:this.__entries__.push([t,r])},t.prototype.delete=function(t){var r=this.__entries__,n=e(r,t);~n&&r.splice(n,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var r=0,n=this.__entries__;r<n.length;r++){var i=n[r];e.call(t,i[1],i[0])}},t}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,a=void 0!==r.g&&r.g.Math===Math?r.g:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),o="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(a):function(e){return setTimeout((function(){return e(Date.now())}),1e3/60)};var s=["top","right","bottom","left","width","height","size","weight"],c="undefined"!=typeof MutationObserver,l=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var r=!1,n=!1,i=0;function a(){r&&(r=!1,e()),n&&c()}function s(){o(a)}function c(){var e=Date.now();if(r){if(e-i<2)return;n=!0}else r=!0,n=!1,setTimeout(s,t);i=e}return c}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,r=t.indexOf(e);~r&&t.splice(r,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter((function(e){return e.gatherActive(),e.hasActive()}));return e.forEach((function(e){return e.broadcastActive()})),e.length>0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,r=void 0===t?"":t;s.some((function(e){return!!~r.indexOf(e)}))&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),u=function(e,t){for(var r=0,n=Object.keys(t);r<n.length;r++){var i=n[r];Object.defineProperty(e,i,{value:t[i],enumerable:!1,writable:!1,configurable:!0})}return e},f=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||a},d=g(0,0,0,0);function h(e){return parseFloat(e)||0}function p(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return t.reduce((function(t,r){return t+h(e["border-"+r+"-width"])}),0)}function v(e){var t=e.clientWidth,r=e.clientHeight;if(!t&&!r)return d;var n=f(e).getComputedStyle(e),i=function(e){for(var t={},r=0,n=["top","right","bottom","left"];r<n.length;r++){var i=n[r],a=e["padding-"+i];t[i]=h(a)}return t}(n),a=i.left+i.right,o=i.top+i.bottom,s=h(n.width),c=h(n.height);if("border-box"===n.boxSizing&&(Math.round(s+a)!==t&&(s-=p(n,"left","right")+a),Math.round(c+o)!==r&&(c-=p(n,"top","bottom")+o)),!function(e){return e===f(e).document.documentElement}(e)){var l=Math.round(s+a)-t,u=Math.round(c+o)-r;1!==Math.abs(l)&&(s-=l),1!==Math.abs(u)&&(c-=u)}return g(i.left,i.top,s,c)}var m="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof f(e).SVGGraphicsElement}:function(e){return e instanceof f(e).SVGElement&&"function"==typeof e.getBBox};function b(e){return i?m(e)?function(e){var t=e.getBBox();return g(0,0,t.width,t.height)}(e):v(e):d}function g(e,t,r,n){return{x:e,y:t,width:r,height:n}}var y=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=g(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=b(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),w=function(e,t){var r,n,i,a,o,s,c,l=(n=(r=t).x,i=r.y,a=r.width,o=r.height,s="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,c=Object.create(s.prototype),u(c,{x:n,y:i,width:a,height:o,top:i,right:n+a,bottom:o+i,left:n}),c);u(this,{target:e,contentRect:l})},k=function(){function e(e,t,r){if(this.activeObservations_=[],this.observations_=new n,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=r}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof f(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new y(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof f(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach((function(t){t.isActive()&&e.activeObservations_.push(t)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map((function(e){return new w(e.target,e.broadcastRect())}));this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),_="undefined"!=typeof WeakMap?new WeakMap:new n,x=function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=l.getInstance(),n=new k(t,r,this);_.set(this,n)};["observe","unobserve","disconnect"].forEach((function(e){x.prototype[e]=function(){var t;return(t=_.get(this))[e].apply(t,arguments)}}));const A=void 0!==a.ResizeObserver?a.ResizeObserver:x}}]);