return re.toString=function(){return ee},re},utcParse:function(ee){var re=M(ee+="",!0);return re.toString=function(){return ee},re}}}var vP={"-":"",_:" ",0:"0"},Rt=/^\s*\d+/,tq=/^%/,rq=/[\\^$*+?|[\]().{}]/g;function Re(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(t)+i:i)}function nq(e){return e.replace(rq,"\\$&")}function gl(e){return new RegExp("^(?:"+e.map(nq).join("|")+")","i")}function yl(e){return new Map(e.map((t,r)=>[t.toLowerCase(),r]))}function iq(e,t,r){var n=Rt.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function aq(e,t,r){var n=Rt.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function oq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function sq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function lq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function mP(e,t,r){var n=Rt.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function gP(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function uq(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function cq(e,t,r){var n=Rt.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function dq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function yP(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function fq(e,t,r){var n=Rt.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function wP(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function hq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function pq(e,t,r){var n=Rt.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function vq(e,t,r){var n=Rt.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function mq(e,t,r){var n=Rt.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function gq(e,t,r){var n=tq.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function yq(e,t,r){var n=Rt.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function wq(e,t,r){var n=Rt.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function bP(e,t){return Re(e.getDate(),t,2)}function bq(e,t){return Re(e.getHours(),t,2)}function xq(e,t){return Re(e.getHours()%12||12,t,2)}function _q(e,t){return Re(1+wu.count(ni(e),e),t,3)}function Mj(e,t){return Re(e.getMilliseconds(),t,3)}function Sq(e,t){return Mj(e,t)+"000"}function kq(e,t){return Re(e.getMonth()+1,t,2)}function Pq(e,t){return Re(e.getMinutes(),t,2)}function Eq(e,t){return Re(e.getSeconds(),t,2)}function Oq(e){var t=e.getDay();return t===0?7:t}function Aq(e,t){return Re(lh.count(ni(e)-1,e),t,2)}function $j(e){var t=e.getDay();return t>=4||t===0?os(e):os.ceil(e)}function Cq(e,t){return e=$j(e),Re(os.count(ni(e),e)+(ni(e).getDay()===4),t,2)}function jq(e){return e.getDay()}function Tq(e,t){return Re(rf.count(ni(e)-1,e),t,2)}function Nq(e,t){return Re(e.getFullYear()%100,t,2)}function Iq(e,t){return e=$j(e),Re(e.getFullYear()%100,t,2)}function Rq(e,t){return Re(e.getFullYear()%1e4,t,4)}function Dq(e,t){var r=e.getDay();return e=r>=4||r===0?os(e):os.ceil(e),Re(e.getFullYear()%1e4,t,4)}function Mq(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Re(t/60|0,"0",2)+Re(t%60,"0",2)}function xP(e,t){return Re(e.getUTCDate(),t,2)}function $q(e,t){return Re(e.getUTCHours(),t,2)}function Lq(e,t){return Re(e.getUTCHours()%12||12,t,2)}function zq(e,t){return Re(1+sh.count(ii(e),e),t,3)}function Lj(e,t){return Re(e.getUTCMilliseconds(),t,3)}function Uq(e,t){return Lj(e,t)+"000"}function Bq(e,t){return Re(e.getUTCMonth()+1,t,2)}function Fq(e,t){return Re(e.getUTCMinutes(),t,2)}function Wq(e,t){return Re(e.getUTCSeconds(),t,2)}function qq(e){var t=e.getUTCDay();return t===0?7:t}function Hq(e,t){return Re(uh.count(ii(e)-1,e),t,2)}function zj(e){var t=e.getUTCDay();return t>=4||t===0?ss(e):ss.ceil(e)}function Kq(e,t){return e=zj(e),Re(ss.count(ii(e),e)+(ii(e).getUTCDay()===4),t,2)}function Vq(e){return e.getUTCDay()}function Gq(e,t){return Re(nf.count(ii(e)-1,e),t,2)}function Yq(e,t){return Re(e.getUTCFullYear()%100,t,2)}function Xq(e,t){return e=zj(e),Re(e.getUTCFullYear()%100,t,2)}function Jq(e,t){return Re(e.getUTCFullYear()%1e4,t,4)}function Qq(e,t){var r=e.getUTCDay();return e=r>=4||r===0?ss(e):ss.ceil(e),Re(e.getUTCFullYear()%1e4,t,4)}function Zq(){return"+0000"}function _P(){return"%"}function SP(e){return+e}function kP(e){return Math.floor(+e/1e3)}var No,Uj,Bj;e8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function e8(e){return No=eq(e),Uj=No.format,No.parse,Bj=No.utcFormat,No.utcParse,No}function t8(e){return new Date(e)}function r8(e){return e instanceof Date?+e:+new Date(+e)}function j0(e,t,r,n,i,a,s,u,c,d){var h=m0(),p=h.invert,m=h.domain,g=d(".%L"),b=d(":%S"),w=d("%I:%M"),S=d("%I %p"),k=d("%a %d"),A=d("%b %d"),P=d("%B"),C=d("%Y");function N(j){return(c(j)<j?g:u(j)<j?b:s(j)<j?w:a(j)<j?S:n(j)<j?i(j)<j?k:A:r(j)<j?P:C)(j)}return h.invert=function(j){return new Date(p(j))},h.domain=function(j){return arguments.length?m(Array.from(j,r8)):m().map(t8)},h.ticks=function(j){var M=m();return e(M[0],M[M.length-1],j??10)},h.tickFormat=function(j,M){return M==null?N:d(M)},h.nice=function(j){var M=m();return(!j||typeof j.range!="function")&&(j=t(M[0],M[M.length-1],j??10)),j?m(Oj(M,j)):h},h.copy=function(){return yu(h,j0(e,t,r,n,i,a,s,u,c,d))},h}function n8(){return qr.apply(j0(Q6,Z6,ni,A0,lh,wu,E0,k0,Aa,Uj).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function i8(){return qr.apply(j0(X6,J6,ii,C0,uh,sh,O0,P0,Aa,Bj).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function ch(){var e=0,t=1,r,n,i,a,s=rr,u=!1,c;function d(p){return p==null||isNaN(p=+p)?c:s(i===0?.5:(p=(a(p)-r)*i,u?Math.max(0,Math.min(1,p)):p))}d.domain=function(p){return arguments.length?([e,t]=p,r=a(e=+e),n=a(t=+t),i=r===n?0:1/(n-r),d):[e,t]},d.clamp=function(p){return arguments.length?(u=!!p,d):u},d.interpolator=function(p){return arguments.length?(s=p,d):s};function h(p){return function(m){var g,b;return arguments.length?([g,b]=m,s=p(g,b),d):[s(0),s(1)]}}return d.range=h(ms),d.rangeRound=h(v0),d.unknown=function(p){return arguments.length?(c=p,d):c},function(p){return a=p,r=p(e),n=p(t),i=r===n?0:1/(n-r),d}}function ea(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function Fj(){var e=Zi(ch()(rr));return e.copy=function(){return ea(e,Fj())},fi.apply(e,arguments)}function Wj(){var e=w0(ch()).domain([1,10]);return e.copy=function(){return ea(e,Wj()).base(e.base())},fi.apply(e,arguments)}function qj(){var e=b0(ch());return e.copy=function(){return ea(e,qj()).constant(e.constant())},fi.apply(e,arguments)}function T0(){var e=x0(ch());return e.copy=function(){return ea(e,T0()).exponent(e.exponent())},fi.apply(e,arguments)}function a8(){return T0.apply(null,arguments).exponent(.5)}function Hj(){var e=[],t=rr;function r(n){if(n!=null&&!isNaN(n=+n))return t((mu(e,n,1)-1)/(e.length-1))}return r.domain=function(n){if(!arguments.length)return e.slice();e=[];for(let i of n)i!=null&&!isNaN(i=+i)&&e.push(i);return e.sort(Ki),r},r.interpolator=function(n){return arguments.length?(t=n,r):t},r.range=function(){return e.map((n,i)=>t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>qW(e,a/n))},r.copy=function(){return Hj(t).domain(e)},fi.apply(r,arguments)}function dh(){var e=0,t=.5,r=1,n=1,i,a,s,u,c,d=rr,h,p=!1,m;function g(w){return isNaN(w=+w)?m:(w=.5+((w=+h(w))-a)*(n*w<n*a?u:c),d(p?Math.max(0,Math.min(1,w)):w))}g.domain=function(w){return arguments.length?([e,t,r]=w,i=h(e=+e),a=h(t=+t),s=h(r=+r),u=i===a?0:.5/(a-i),c=a===s?0:.5/(s-a),n=a<i?-1:1,g):[e,t,r]},g.clamp=function(w){return arguments.length?(p=!!w,g):p},g.interpolator=function(w){return arguments.length?(d=w,g):d};function b(w){return function(S){var k,A,P;return arguments.length?([k,A,P]=S,d=g6(w,[k,A,P]),g):[d(0),d(.5),d(1)]}}return g.range=b(ms),g.rangeRound=b(v0),g.unknown=function(w){return arguments.length?(m=w,g):m},function(w){return h=w,i=w(e),a=w(t),s=w(r),u=i===a?0:.5/(a-i),c=a===s?0:.5/(s-a),n=a<i?-1:1,g}}function Kj(){var e=Zi(dh()(rr));return e.copy=function(){return ea(e,Kj())},fi.apply(e,arguments)}function Vj(){var e=w0(dh()).domain([.1,1,10]);return e.copy=function(){return ea(e,Vj()).base(e.base())},fi.apply(e,arguments)}function Gj(){var e=b0(dh());return e.copy=function(){return ea(e,Gj()).constant(e.constant())},fi.apply(e,arguments)}function N0(){var e=x0(dh());return e.copy=function(){return ea(e,N0()).exponent(e.exponent())},fi.apply(e,arguments)}function o8(){return N0.apply(null,arguments).exponent(.5)}const Yj=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:f0,scaleDiverging:Kj,scaleDivergingLog:Vj,scaleDivergingPow:N0,scaleDivergingSqrt:o8,scaleDivergingSymlog:Gj,scaleIdentity:Ej,scaleImplicit:ry,scaleLinear:Pj,scaleLog:Aj,scaleOrdinal:d0,scalePoint:VW,scalePow:_0,scaleQuantile:Tj,scaleQuantize:Nj,scaleRadial:jj,scaleSequential:Fj,scaleSequentialLog:Wj,scaleSequentialPow:T0,scaleSequentialQuantile:Hj,scaleSequentialSqrt:a8,scaleSequentialSymlog:qj,scaleSqrt:U6,scaleSymlog:Cj,scaleThreshold:Ij,scaleTime:n8,scaleUtc:i8,tickFormat:kj},Symbol.toStringTag,{value:"Module"}));function s8(e){var t=Yj;if(e in t&&typeof t[e]=="function")return t[e]();var r="scale".concat(su(e));if(r in t&&typeof t[r]=="function")return t[r]()}function PP(e,t,r){if(typeof e=="function")return e.copy().domain(t).range(r);if(e!=null){var n=s8(e);if(n!=null)return n.domain(t).range(r),n}}function I0(e,t,r,n){if(!(r==null||n==null))return typeof e.scale=="function"?PP(e.scale,r,n):PP(t,r,n)}function l8(e){return"scale".concat(su(e))}function u8(e){return l8(e)in Yj}var Xj=(e,t,r)=>{if(e!=null){var{scale:n,type:i}=e;if(n==="auto")return i==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!t)?"point":i==="category"?"band":"linear";if(typeof n=="string")return u8(n)?n:"point"}};function c8(e,t){for(var r=0,n=e.length,i=e[0]<e[e.length-1];r<n;){var a=Math.floor((r+n)/2);(i?e[a]<t:e[a]>t)?r=a+1:n=a}return r}function Jj(e,t){if(e){var r=t??e.domain(),n=r.map(a=>{var s;return(s=e(a))!==null&&s!==void 0?s:0}),i=e.range();if(!(r.length===0||i.length<2))return a=>{var s,u,c=c8(n,a);if(c<=0)return r[0];if(c>=r.length)return r[r.length-1];var d=(s=n[c-1])!==null&&s!==void 0?s:0,h=(u=n[c])!==null&&u!==void 0?u:0;return Math.abs(a-d)<=Math.abs(a-h)?r[c-1]:r[c]}}}function d8(e){if(e!=null)return"invert"in e&&typeof e.invert=="function"?e.invert.bind(e):Jj(e,void 0)}function EP(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 af(e){for(var t=1;t<arguments.length;t++){var r=arguments[t]!=null?arguments[t]:{};t%2?EP(Object(r),!0).forEach(function(n){f8(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):EP(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function f8(e,t,r){return(t=h8(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function h8(e){var t=p8(e,"string");return typeof t=="symbol"?t:t+""}function p8(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 oy=[0,"auto"],bt={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:void 0,height:30,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"bottom",padding:{left:0,right:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"category",unit:void 0,niceTicks:"auto"},Qj=(e,t)=>e.cartesianAxis.xAxis[t],hi=(e,t)=>{var r=Qj(e,t);return r??bt},xt={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:oy,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,niceTicks:"auto",width:cu},Zj=(e,t)=>e.cartesianAxis.yAxis[t],pi=(e,t)=>{var r=Zj(e,t);return r??xt},v8={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},R0=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??v8},sr=(e,t,r)=>{switch(t){case"xAxis":return hi(e,r);case"yAxis":return pi(e,r);case"zAxis":return R0(e,r);case"angleAxis":return a0(e,r);case"radiusAxis":return o0(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},m8=(e,t,r)=>{switch(t){case"xAxis":return hi(e,r);case"yAxis":return pi(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},bu=(e,t,r)=>{switch(t){case"xAxis":return hi(e,r);case"yAxis":return pi(e,r);case"angleAxis":return a0(e,r);case"radiusAxis":return o0(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},eT=e=>e.graphicalItems.cartesianItems.some(t=>t.type==="bar")||e.graphicalItems.polarItems.some(t=>t.type==="radialBar");function tT(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var fh=e=>e.graphicalItems.cartesianItems,g8=L([Nt,rh],tT),rT=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),gs=L([fh,sr,g8],rT,{memoizeOptions:{resultEqualityCheck:ah}}),nT=L([gs],e=>e.filter(t=>t.type==="area"||t.type==="bar").filter(nh)),iT=e=>e.filter(t=>!("stackId"in t)||t.stackId===void 0),y8=L([gs],iT),aT=e=>e.map(t=>t.data).filter(Boolean).flat(1),w8=L([gs],e=>e.some(t=>!t.data)),oT=L([gs],aT,{memoizeOptions:{resultEqualityCheck:ah}}),sT=(e,t)=>{var{chartData:r=[],dataStartIndex:n,dataEndIndex:i}=t;return e.length>0?e:r.slice(n,i+1)},D0=L([oT,vu],sT),b8=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:ht(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:ht(i,n)}))):e.map(n=>({value:n})),lT=(e,t,r,n,i,a)=>{var{chartData:s=[],dataStartIndex:u,dataEndIndex:c}=n,d=b8(e,t,r);if(i&&(t==null?void 0:t.dataKey)!=null&&a.length>0){var h=s.slice(u,c+1),p=h.map(m=>({value:ht(m,t.dataKey)})).filter(m=>m.value!=null);return[...p,...d]}return d},xu=L([D0,sr,gs,vu,w8,oT],lT);function Jo(e){if(In(e)||e instanceof Date){var t=Number(e);if(je(t))return t}}function OP(e){if(Array.isArray(e)){var t=[Jo(e[0]),Jo(e[1])];return jn(t)?t:void 0}var r=Jo(e);if(r!=null)return[r,r]}function Mn(e){return e.map(Jo).filter(mr)}function x8(e,t){var r=Jo(e),n=Jo(t);return r==null&&n==null?0:r==null?-1:n==null?1:r-n}var _8=L([xu],e=>e==null?void 0:e.map(t=>t.value).sort(x8));function uT(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function S8(e,t,r){if(!r)return[];if(!r.length)return[];var n;if(typeof t=="number"&&!Nn(t))n=t;else if(Array.isArray(t)){var i=Mn(t);i.length>0&&(n=Math.max(...i))}return n==null?[]:Mn(r.flatMap(a=>{var s=ht(e,a.dataKey),u,c;if(Array.isArray(s)?[u,c]=s:u=c=s,!(!je(u)||!je(c)))return[n-u,n+c]}))}var kt=e=>{var t=It(e),r=vs(e);return bu(e,t,r)},ls=L([kt],e=>e==null?void 0:e.dataKey),k8=L([nT,vu,kt],vj),cT=(e,t,r,n)=>{var i={},a=t.reduce((s,u)=>{if(u.stackId==null)return s;var c=s[u.stackId];return c==null&&(c=[]),c.push(u),s[u.stackId]=c,s},i);return Object.fromEntries(Object.entries(a).map(s=>{var[u,c]=s,d=n?[...c].reverse():c,h=d.map(l0);return[u,{stackedData:SB(e,h,r),graphicalItems:d}]}))},sy=L([k8,nT,Qf,lj],cT),dT=(e,t,r,n)=>{var{dataStartIndex:i,dataEndIndex:a}=t;if(n==null&&r!=="zAxis"){var s=AB(e,i,a);if(!(s!=null&&s[0]===0&&s[1]===0))return s}},P8=L([sr],e=>e.allowDataOverflow),M0=e=>{var t;if(e==null||!("domain"in e))return oy;if(e.domain!=null)return e.domain;if("ticks"in e&&e.ticks!=null){if(e.type==="number"){var r=Mn(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:oy},fT=L([sr],M0),hT=L([fT,P8],YC),E8=L([sy,hn,Nt,hT],dT,{memoizeOptions:{resultEqualityCheck:ih}}),$0=e=>e.errorBars,O8=(e,t,r)=>e.flatMap(n=>t[n.id]).filter(Boolean).filter(n=>uT(r,n)),of=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];var i=r.filter(Boolean);if(i.length!==0){var a=i.flat(),s=Math.min(...a),u=Math.max(...a);return[s,u]}},pT=function(t,r,n,i,a){var s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:[],u,c;if(n.length>0&&n.forEach(d=>{var h,p=d.data!=null?[...d.data]:s,m=(h=i[d.id])===null||h===void 0?void 0:h.filter(g=>uT(a,g));p.forEach(g=>{var b,w=ht(g,(b=r.dataKey)!==null&&b!==void 0?b:d.dataKey),S=S8(g,w,m);if(S.length>=2){var k=Math.min(...S),A=Math.max(...S);(u==null||k<u)&&(u=k),(c==null||A>c)&&(c=A)}var P=OP(w);P!=null&&(u=u==null?P[0]:Math.min(u,P[0]),c=c==null?P[1]:Math.max(c,P[1]))})}),(r==null?void 0:r.dataKey)!=null&&n.length===0&&t.forEach(d=>{var h=OP(ht(d,r.dataKey));h!=null&&(u=u==null?h[0]:Math.min(u,h[0]),c=c==null?h[1]:Math.max(c,h[1]))}),je(u)&&je(c))return[u,c]},A8=L([D0,sr,y8,$0,Nt,mW],pT,{memoizeOptions:{resultEqualityCheck:ih}});function C8(e){var{value:t}=e;if(In(t)||t instanceof Date)return t}var j8=(e,t,r)=>{var n=e.map(C8).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&kA(n))?GC(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},vT=e=>e.referenceElements.dots,ys=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),T8=L([vT,Nt,rh],ys),mT=e=>e.referenceElements.areas,N8=L([mT,Nt,rh],ys),gT=e=>e.referenceElements.lines,I8=L([gT,Nt,rh],ys),yT=(e,t)=>{if(e!=null){var r=Mn(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},R8=L(T8,Nt,yT),wT=(e,t)=>{if(e!=null){var r=Mn(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},D8=L([N8,Nt],wT);function M8(e){var t;if(e.x!=null)return Mn([e.x]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.x);return r==null||r.length===0?[]:Mn(r)}function $8(e){var t;if(e.y!=null)return Mn([e.y]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.y);return r==null||r.length===0?[]:Mn(r)}var bT=(e,t)=>{if(e!=null){var r=e.flatMap(n=>t==="xAxis"?M8(n):$8(n));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},L8=L([I8,Nt],bT),z8=L(R8,L8,D8,(e,t,r)=>of(e,r,t)),xT=(e,t,r,n,i,a,s,u)=>{if(r!=null)return r;var c=s==="vertical"&&u==="xAxis"||s==="horizontal"&&u==="yAxis",d=c?of(n,a,i):of(a,i);return yW(t,d,e.allowDataOverflow)},U8=L([sr,fT,hT,E8,A8,z8,Le,Nt],xT,{memoizeOptions:{resultEqualityCheck:ih}}),B8=[0,1],_T=(e,t,r,n,i,a,s)=>{if(!((e==null||r==null||r.length===0)&&s===void 0)){var{dataKey:u,type:c}=e,d=ui(t,a);if(d&&u==null){var h;return GC(0,(h=r==null?void 0:r.length)!==null&&h!==void 0?h:0)}return c==="category"?j8(n,e,d):i==="expand"&&!d?B8:s}},L0=L([sr,Le,D0,xu,Qf,Nt,U8],_T),ws=L([sr,eT,r0],Xj),ST=(e,t,r)=>{var{niceTicks:n}=t;if(n!=="none"){var i=M0(t),a=Array.isArray(i)&&(i[0]==="auto"||i[1]==="auto");if((n==="snap125"||n==="adaptive")&&t!=null&&t.tickCount&&jn(e)){if(a)return $k(e,t.tickCount,t.allowDecimals,n);if(t.type==="number")return Lk(e,t.tickCount,t.allowDecimals,n)}if(n==="auto"&&r==="linear"&&t!=null&&t.tickCount){if(a&&jn(e))return $k(e,t.tickCount,t.allowDecimals,"adaptive");if(t.type==="number"&&jn(e))return Lk(e,t.tickCount,t.allowDecimals,"adaptive")}}},z0=L([L0,bu,ws],ST),kT=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&jn(t)&&Array.isArray(r)&&r.length>0){var i,a,s=t[0],u=(i=r[0])!==null&&i!==void 0?i:0,c=t[1],d=(a=r[r.length-1])!==null&&a!==void 0?a:0;return[Math.min(s,u),Math.max(c,d)]}return t},F8=L([sr,L0,z0,Nt],kT),W8=L(xu,sr,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(Mn(e.map(p=>p.value))).sort((p,m)=>p-m),i=n[0],a=n[n.length-1];if(i==null||a==null)return 1/0;var s=a-i;if(s===0)return 1/0;for(var u=0;u<n.length-1;u++){var c=n[u],d=n[u+1];if(!(c==null||d==null)){var h=d-c;r=Math.min(r,h)}}return r/s}}),PT=L(W8,Le,sj,Tt,(e,t,r,n,i)=>i,(e,t,r,n,i)=>{if(!je(e))return 0;var a=t==="vertical"?n.height:n.width;if(i==="gap")return e*a/2;if(i==="no-gap"){var s=cn(r,e*a),u=e*a/2;return u-s-(u-s)/a*s}return 0}),q8=(e,t,r)=>{var n=hi(e,t);return n==null||typeof n.padding!="string"?0:PT(e,"xAxis",t,r,n.padding)},H8=(e,t,r)=>{var n=pi(e,t);return n==null||typeof n.padding!="string"?0:PT(e,"yAxis",t,r,n.padding)},K8=L(hi,q8,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var{padding:i}=e;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),V8=L(pi,H8,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var{padding:i}=e;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),G8=L([Tt,K8,Hf,qf,(e,t,r)=>r],(e,t,r,n,i)=>{var{padding:a}=n;return i?[a.left,r.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),Y8=L([Tt,Le,V8,Hf,qf,(e,t,r)=>r],(e,t,r,n,i,a)=>{var{padding:s}=i;return a?[n.height-s.bottom,s.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),_u=(e,t,r,n)=>{var i;switch(t){case"xAxis":return G8(e,r,n);case"yAxis":return Y8(e,r,n);case"zAxis":return(i=R0(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return fj(e);case"radiusAxis":return hj(e,r);default:return}},ET=L([sr,_u],Zf),X8=L([ws,F8],NW),U0=L([sr,ws,X8,ET