,_W=(e,t,r)=>{var n=new Ce(1),i=new Ce(e);if(!i.isint()&&r){var a=Math.abs(e);a<1?(n=new Ce(10).pow(tj(e)-1),i=new Ce(Math.floor(i.div(n).toNumber())).mul(n)):a>1&&(i=new Ce(Math.floor(e)))}else e===0?i=new Ce(Math.floor((t-1)/2)):r||(i=new Ce(Math.floor(e)));for(var s=Math.floor((t-1)/2),u=[],c=0;c<t;c++)u.push(i.add(new Ce(c-s).mul(n)).toNumber());return u},aj=function(t,r,n,i){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:t0;if(!Number.isFinite((r-t)/(n-1)))return{step:new Ce(0),tickMin:new Ce(0),tickMax:new Ce(0)};var u=s(new Ce(r).sub(t).div(n-1),i,a),c;t<=0&&r>=0?c=new Ce(0):(c=new Ce(t).add(r).div(2),c=c.sub(new Ce(c).mod(u)));var d=Math.ceil(c.sub(t).div(u).toNumber()),h=Math.ceil(new Ce(r).sub(c).div(u).toNumber()),p=d+h+1;return p>n?aj(t,r,n,i,a+1,s):(p<n&&(h=r>0?h+(n-p):h,d=r>0?d:d+(n-p)),{step:u,tickMin:c.sub(new Ce(d).mul(u)),tickMax:c.add(new Ce(h).mul(u))})},$k=function(t){var[r,n]=t,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",u=Math.max(i,2),[c,d]=nj([r,n]);if(c===-1/0||d===1/0){var h=d===1/0?[c,...Array(i-1).fill(1/0)]:[...Array(i-1).fill(-1/0),d];return r>n?h.reverse():h}if(c===d)return _W(c,i,a);var p=s==="snap125"?ij:t0,{step:m,tickMin:g,tickMax:b}=aj(c,d,u,a,0,p),w=rj(g,b.add(new Ce(.1).mul(m)),m);return r>n?w.reverse():w},Lk=function(t,r){var[n,i]=t,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",[u,c]=nj([n,i]);if(u===-1/0||c===1/0)return[n,i];if(u===c)return[u];var d=s==="snap125"?ij:t0,h=Math.max(r,2),p=d(new Ce(c).sub(u).div(h-1),a,0),m=[...rj(new Ce(u),new Ce(c),p),c];return a===!1&&(m=m.map(g=>Math.round(g))),n>i?m.reverse():m},oj=e=>e.rootProps.maxBarSize,SW=e=>e.rootProps.barGap,sj=e=>e.rootProps.barCategoryGap,kW=e=>e.rootProps.barSize,Qf=e=>e.rootProps.stackOffset,lj=e=>e.rootProps.reverseStackOrder,r0=e=>e.options.chartName,n0=e=>e.rootProps.syncId,uj=e=>e.rootProps.syncMethod,i0=e=>e.options.eventEmitter,jt={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},ma={allowDecimals:!1,allowDataOverflow:!1,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"auto"},xn={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!0,includeHidden:!1,radiusAxisId:0,reversed:!1,scale:"auto",tick:!0,tickCount:5,type:"auto"},Zf=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function eh(e,t,r){if(r!=="auto")return r;if(e!=null)return ui(e,t)?"category":"number"}function zk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Vd(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?zk(Object(r),!0).forEach(function(n){PW(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):zk(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function PW(e,t,r){return(t=EW(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function EW(e){var t=OW(e,"string");return typeof t=="symbol"?t:t+""}function OW(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Uk={allowDataOverflow:ma.allowDataOverflow,allowDecimals:ma.allowDecimals,allowDuplicatedCategory:!1,dataKey:void 0,domain:void 0,id:ma.angleAxisId,includeHidden:!1,name:void 0,reversed:ma.reversed,scale:ma.scale,tick:ma.tick,tickCount:void 0,ticks:void 0,type:ma.type,unit:void 0,niceTicks:"auto"},Bk={allowDataOverflow:xn.allowDataOverflow,allowDecimals:xn.allowDecimals,allowDuplicatedCategory:xn.allowDuplicatedCategory,dataKey:void 0,domain:void 0,id:xn.radiusAxisId,includeHidden:xn.includeHidden,name:void 0,reversed:xn.reversed,scale:xn.scale,tick:xn.tick,tickCount:xn.tickCount,ticks:void 0,type:xn.type,unit:void 0,niceTicks:"auto"},AW=(e,t)=>{if(t!=null)return e.polarAxis.angleAxis[t]},a0=L([AW,CC],(e,t)=>{var r;if(e!=null)return e;var n=(r=eh(t,"angleAxis",Uk.type))!==null&&r!==void 0?r:"category";return Vd(Vd({},Uk),{},{type:n})}),CW=(e,t)=>e.polarAxis.radiusAxis[t],o0=L([CW,CC],(e,t)=>{var r;if(e!=null)return e;var n=(r=eh(t,"radiusAxis",Bk.type))!==null&&r!==void 0?r:"category";return Vd(Vd({},Bk),{},{type:n})}),th=e=>e.polarOptions,s0=L([ci,di,Tt],eW),cj=L([th,s0],(e,t)=>{if(e!=null)return cn(e.innerRadius,t,0)}),dj=L([th,s0],(e,t)=>{if(e!=null)return cn(e.outerRadius,t,t*.8)}),jW=e=>{if(e==null)return[0,0];var{startAngle:t,endAngle:r}=e;return[t,r]},fj=L([th],jW);L([a0,fj],Zf);var hj=L([s0,cj,dj],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});L([o0,hj],Zf);var pj=L([Le,th,cj,dj,ci,di],(e,t,r,n,i,a)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var{cx:s,cy:u,startAngle:c,endAngle:d}=t;return{cx:cn(s,i,i/2),cy:cn(u,a,a/2),innerRadius:r,outerRadius:n,startAngle:c,endAngle:d,clockWise:!1}}}),Nt=(e,t)=>t,rh=(e,t,r)=>r;function l0(e){return e==null?void 0:e.id}function vj(e,t,r){var{chartData:n=[]}=t,{allowDuplicatedCategory:i,dataKey:a}=r,s=new Map;return e.forEach(u=>{var c,d=(c=u.data)!==null&&c!==void 0?c:n;if(!(d==null||d.length===0)){var h=l0(u);d.forEach((p,m)=>{var g=a==null||i?m:String(ht(p,a,null)),b=ht(p,u.dataKey,0),w;s.has(g)?w=s.get(g):w={},Object.assign(w,{[h]:b}),s.set(g,w)})}}),Array.from(s.values())}function nh(e){return"stackId"in e&&e.stackId!=null&&e.dataKey!=null}var ih=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function ah(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function TW(e,t){if(e.length===t.length){for(var r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}return!1}var It=e=>{var t=Le(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},vs=e=>e.tooltip.settings.axisId;function u0(e){if(e!=null){var t=e.ticks,r=e.bandwidth,n=e.range(),i=[Math.min(...n),Math.max(...n)];return{domain:()=>e.domain(),range:function(a){function s(){return a.apply(this,arguments)}return s.toString=function(){return a.toString()},s}(()=>i),rangeMin:()=>i[0],rangeMax:()=>i[1],isInRange(a){var s=i[0],u=i[1];return s<=u?a>=s&&a<=u:a>=u&&a<=s},bandwidth:r?()=>r.call(e):void 0,ticks:t?a=>t.call(e,a):void 0,map:(a,s)=>{var u=e(a);if(u!=null){if(e.bandwidth&&s!==null&&s!==void 0&&s.position){var c=e.bandwidth();switch(s.position){case"middle":u+=c/2;break;case"end":u+=c;break}}return u}}}}}var NW=(e,t)=>{if(t!=null)switch(e){case"linear":{if(!jn(t)){for(var r,n,i=0;i<t.length;i++){var a=t[i];je(a)&&((r===void 0||a<r)&&(r=a),(n===void 0||a>n)&&(n=a))}return r!==void 0&&n!==void 0?[r,n]:void 0}return t}default:return t}};function Ki(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function IW(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function c0(e){let t,r,n;e.length!==2?(t=Ki,r=(u,c)=>Ki(e(u),c),n=(u,c)=>e(u)-c):(t=e===Ki||e===IW?e:RW,r=e,n=e);function i(u,c,d=0,h=u.length){if(d<h){if(t(c,c)!==0)return h;do{const p=d+h>>>1;r(u[p],c)<0?d=p+1:h=p}while(d<h)}return d}function a(u,c,d=0,h=u.length){if(d<h){if(t(c,c)!==0)return h;do{const p=d+h>>>1;r(u[p],c)<=0?d=p+1:h=p}while(d<h)}return d}function s(u,c,d=0,h=u.length){const p=i(u,c,d,h-1);return p>d&&n(u[p-1],c)>-n(u[p],c)?p-1:p}return{left:i,center:s,right:a}}function RW(){return 0}function mj(e){return e===null?NaN:+e}function*DW(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const MW=c0(Ki),mu=MW.right;c0(mj).center;class Fk extends Map{constructor(t,r=zW){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(Wk(this,t))}has(t){return super.has(Wk(this,t))}set(t,r){return super.set($W(this,t),r)}delete(t){return super.delete(LW(this,t))}}function Wk({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function $W({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function LW({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function zW(e){return e!==null&&typeof e=="object"?e.valueOf():e}function UW(e=Ki){if(e===Ki)return gj;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function gj(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const BW=Math.sqrt(50),FW=Math.sqrt(10),WW=Math.sqrt(2);function Gd(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=BW?10:a>=FW?5:a>=WW?2:1;let u,c,d;return i<0?(d=Math.pow(10,-i)/s,u=Math.round(e*d),c=Math.round(t*d),u/d<e&&++u,c/d>t&&--c,d=-d):(d=Math.pow(10,i)*s,u=Math.round(e/d),c=Math.round(t/d),u*d<e&&++u,c*d>t&&--c),c<u&&.5<=r&&r<2?Gd(e,t,r*2):[u,c,d]}function Zg(e,t,r){if(t=+t,e=+e,r=+r,!(r>0))return[];if(e===t)return[e];const n=t<e,[i,a,s]=n?Gd(t,e,r):Gd(e,t,r);if(!(a>=i))return[];const u=a-i+1,c=new Array(u);if(n)if(s<0)for(let d=0;d<u;++d)c[d]=(a-d)/-s;else for(let d=0;d<u;++d)c[d]=(a-d)*s;else if(s<0)for(let d=0;d<u;++d)c[d]=(i+d)/-s;else for(let d=0;d<u;++d)c[d]=(i+d)*s;return c}function ey(e,t,r){return t=+t,e=+e,r=+r,Gd(e,t,r)[2]}function ty(e,t,r){t=+t,e=+e,r=+r;const n=t<e,i=n?ey(t,e,r):ey(e,t,r);return(n?-1:1)*(i<0?1/-i:i)}function qk(e,t){let r;for(const n of e)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);return r}function Hk(e,t){let r;for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);return r}function yj(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?gj:UW(i);n>r;){if(n-r>600){const c=n-r+1,d=t-r+1,h=Math.log(c),p=.5*Math.exp(2*h/3),m=.5*Math.sqrt(h*p*(c-p)/c)*(d-c/2<0?-1:1),g=Math.max(r,Math.floor(t-d*p/c+m)),b=Math.min(n,Math.floor(t+(c-d)*p/c+m));yj(e,t,g,b,i)}const a=e[t];let s=r,u=n;for(vl(e,r,t),i(e[n],a)>0&&vl(e,r,n);s<u;){for(vl(e,s,u),++s,--u;i(e[s],a)<0;)++s;for(;i(e[u],a)>0;)--u}i(e[r],a)===0?vl(e,r,u):(++u,vl(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function vl(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function qW(e,t,r){if(e=Float64Array.from(DW(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return Hk(e);if(t>=1)return qk(e);var n,i=(n-1)*t,a=Math.floor(i),s=qk(yj(e,a).subarray(0,a+1)),u=Hk(e.subarray(a+1));return s+(u-s)*(i-a)}}function HW(e,t,r=mj){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,a=Math.floor(i),s=+r(e[a],a,e),u=+r(e[a+1],a+1,e);return s+(u-s)*(i-a)}}function KW(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,a=new Array(i);++n<i;)a[n]=e+n*r;return a}function qr(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function fi(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const ry=Symbol("implicit");function d0(){var e=new Fk,t=[],r=[],n=ry;function i(a){let s=e.get(a);if(s===void 0){if(n!==ry)return n;e.set(a,s=t.push(a)-1)}return r[s%r.length]}return i.domain=function(a){if(!arguments.length)return t.slice();t=[],e=new Fk;for(const s of a)e.has(s)||e.set(s,t.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return d0(t,r).unknown(n)},qr.apply(i,arguments),i}function f0(){var e=d0().unknown(void 0),t=e.domain,r=e.range,n=0,i=1,a,s,u=!1,c=0,d=0,h=.5;delete e.unknown;function p(){var m=t().length,g=i<n,b=g?i:n,w=g?n:i;a=(w-b)/Math.max(1,m-c+d*2),u&&(a=Math.floor(a)),b+=(w-b-a*(m-c))*h,s=a*(1-c),u&&(b=Math.round(b),s=Math.round(s));var S=KW(m).map(function(k){return b+a*k});return r(g?S.reverse():S)}return e.domain=function(m){return arguments.length?(t(m),p()):t()},e.range=function(m){return arguments.length?([n,i]=m,n=+n,i=+i,p()):[n,i]},e.rangeRound=function(m){return[n,i]=m,n=+n,i=+i,u=!0,p()},e.bandwidth=function(){return s},e.step=function(){return a},e.round=function(m){return arguments.length?(u=!!m,p()):u},e.padding=function(m){return arguments.length?(c=Math.min(1,d=+m),p()):c},e.paddingInner=function(m){return arguments.length?(c=Math.min(1,m),p()):c},e.paddingOuter=function(m){return arguments.length?(d=+m,p()):d},e.align=function(m){return arguments.length?(h=Math.max(0,Math.min(1,m)),p()):h},e.copy=function(){return f0(t(),[n,i]).round(u).paddingInner(c).paddingOuter(d).align(h)},qr.apply(p(),arguments)}function wj(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return wj(t())},e}function VW(){return wj(f0.apply(null,arguments).paddingInner(1))}function h0(e,t,r){e.prototype=t.prototype=r,r.constructor=e}function bj(e,t){var r=Object.create(e.prototype);for(var n in t)r[n]=t[n];return r}function gu(){}var Ql=.7,Yd=1/Ql,Xo="\\s*([+-]?\\d+)\\s*",Zl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Tn="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",GW=/^#([0-9a-f]{3,8})$/,YW=new RegExp(`^rgb\\(${Xo},${Xo},${Xo}\\)$`),XW=new RegExp(`^rgb\\(${Tn},${Tn},${Tn}\\)$`),JW=new RegExp(`^rgba\\(${Xo},${Xo},${Xo},${Zl}\\)$`),QW=new RegExp(`^rgba\\(${Tn},${Tn},${Tn},${Zl}\\)$`),ZW=new RegExp(`^hsl\\(${Zl},${Tn},${Tn}\\)$`),e6=new RegExp(`^hsla\\(${Zl},${Tn},${Tn},${Zl}\\)$`),Kk={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};h0(gu,eu,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:Vk,formatHex:Vk,formatHex8:t6,formatHsl:r6,formatRgb:Gk,toString:Gk});function Vk(){return this.rgb().formatHex()}function t6(){return this.rgb().formatHex8()}function r6(){return xj(this).formatHsl()}function Gk(){return this.rgb().formatRgb()}function eu(e){var t,r;return e=(e+"").trim().toLowerCase(),(t=GW.exec(e))?(r=t[1].length,t=parseInt(t[1],16),r===6?Yk(t):r===3?new gr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?Qc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?Qc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=YW.exec(e))?new gr(t[1],t[2],t[3],1):(t=XW.exec(e))?new gr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=JW.exec(e))?Qc(t[1],t[2],t[3],t[4]):(t=QW.exec(e))?Qc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=ZW.exec(e))?Qk(t[1],t[2]/100,t[3]/100,1):(t=e6.exec(e))?Qk(t[1],t[2]/100,t[3]/100,t[4]):Kk.hasOwnProperty(e)?Yk(Kk[e]):e==="transparent"?new gr(NaN,NaN,NaN,0):null}function Yk(e){return new gr(e>>16&255,e>>8&255,e&255,1)}function Qc(e,t,r,n){return n<=0&&(e=t=r=NaN),new gr(e,t,r,n)}function n6(e){return e instanceof gu||(e=eu(e)),e?(e=e.rgb(),new gr(e.r,e.g,e.b,e.opacity)):new gr}function ny(e,t,r,n){return arguments.length===1?n6(e):new gr(e,t,r,n??1)}function gr(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}h0(gr,ny,bj(gu,{brighter(e){return e=e==null?Yd:Math.pow(Yd,e),new gr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Ql:Math.pow(Ql,e),new gr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new gr(Ia(this.r),Ia(this.g),Ia(this.b),Xd(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Xk,formatHex:Xk,formatHex8:i6,formatRgb:Jk,toString:Jk}));function Xk(){return`#${Oa(this.r)}${Oa(this.g)}${Oa(this.b)}`}function i6(){return`#${Oa(this.r)}${Oa(this.g)}${Oa(this.b)}${Oa((isNaN(this.opacity)?1:this.opacity)*255)}`}function Jk(){const e=Xd(this.opacity);return`${e===1?"rgb(":"rgba("}${Ia(this.r)}, ${Ia(this.g)}, ${Ia(this.b)}${e===1?")":`, ${e})`}`}function Xd(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Ia(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Oa(e){return e=Ia(e),(e<16?"0":"")+e.toString(16)}function Qk(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new ln(e,t,r,n)}function xj(e){if(e instanceof ln)return new ln(e.h,e.s,e.l,e.opacity);if(e instanceof gu||(e=eu(e)),!e)return new ln;if(e instanceof ln)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),a=Math.max(t,r,n),s=NaN,u=a-i,c=(a+i)/2;return u?(t===a?s=(r-n)/u+(r<n)*6:r===a?s=(n-t)/u+2:s=(t-r)/u+4,u/=c<.5?a+i:2-a-i,s*=60):u=c>0&&c<1?0:s,new ln(s,u,c,e.opacity)}function a6(e,t,r,n){return arguments.length===1?xj(e):new ln(e,t,r,n??1)}function ln(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}h0(ln,a6,bj(gu,{brighter(e){return e=e==null?Yd:Math.pow(Yd,e),new ln(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Ql:Math.pow(Ql,e),new ln(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new gr(Mm(e>=240?e-240:e+120,i,n),Mm(e,i,n),Mm(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new ln(Zk(this.h),Zc(this.s),Zc(this.l),Xd(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Xd(this.opacity);return`${e===1?"hsl(":"hsla("}${Zk(this.h)}, ${Zc(this.s)*100}%, ${Zc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Zk(e){return e=(e||0)%360,e<0?e+360:e}function Zc(e){return Math.max(0,Math.min(1,e||0))}function Mm(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const p0=e=>()=>e;function o6(e,t){return function(r){return e+r*t}}function s6(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function l6(e){return(e=+e)==1?_j:function(t,r){return r-t?s6(t,r,e):p0(isNaN(t)?r:t)}}function _j(e,t){var r=t-e;return r?o6(e,r):p0(isNaN(e)?t:e)}const eP=function e(t){var r=l6(t);function n(i,a){var s=r((i=ny(i)).r,(a=ny(a)).r),u=r(i.g,a.g),c=r(i.b,a.b),d=_j(i.opacity,a.opacity);return function(h){return i.r=s(h),i.g=u(h),i.b=c(h),i.opacity=d(h),i+""}}return n.gamma=e,n}(1);function u6(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=e[i]*(1-a)+t[i]*a;return n}}function c6(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function d6(e,t){var r=t?t.length:0,n=e?Math.min(r,e.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=ms(e[s],t[s]);for(;s<r;++s)a[s]=t[s];return function(u){for(s=0;s<n;++s)a[s]=i[s](u);return a}}function f6(e,t){var r=new Date;return e=+e,t=+t,function(n){return r.setTime(e*(1-n)+t*n),r}}function Jd(e,t){return e=+e,t=+t,function(r){return e*(1-r)+t*r}}function h6(e,t){var r={},n={},i;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(i in t)i in e?r[i]=ms(e[i],t[i]):n[i]=t[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var iy=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,$m=new RegExp(iy.source,"g");function p6(e){return function(){return e}}function v6(e){return function(t){return e(t)+""}}function m6(e,t){var r=iy.lastIndex=$m.lastIndex=0,n,i,a,s=-1,u=[],c=[];for(e=e+"",t=t+"";(n=iy.exec(e))&&(i=$m.exec(t));)(a=i.index)>r&&(a=t.slice(r,a),u[s]?u[s]+=a:u[++s]=a),(n=n[0])===(i=i[0])?u[s]?u[s]+=i:u[++s]=i:(u[++s]=null,c.push({i:s,x:Jd(n,i)})),r=$m.lastIndex;return r<t.length&&(a=t.slice(r),u[s]?u[s]+=a:u[++s]=a),u.length<2?c[0]?v6(c[0].x):p6(t):(t=c.length,function(d){for(var h=0,